diff --git a/.cirrus.yml b/.cirrus.yml
new file mode 100644
index 0000000..498dbb3
--- /dev/null
+++ b/.cirrus.yml
@@ -0,0 +1,157 @@
+# download at https://api.cirrus-ci.com/v1/artifact/github/electronstudio/raylib-python-cffi/pi/binary.zip
+# https://api.cirrus-ci.com/v1/artifact/github/electronstudio/raylib-python-cffi/mac/binary.zip
+
+pi_task:
+ arm_container:
+ matrix:
+ - image: dtcooper/raspberrypi-os:python3.12-bullseye
+ - image: dtcooper/raspberrypi-os:python3.11-bullseye
+ - image: dtcooper/raspberrypi-os:python3.10-bullseye
+ - image: dtcooper/raspberrypi-os:python3.9-bullseye
+ env:
+ matrix:
+ - RAYLIB_PLATFORM: "Desktop"
+ RAYLIB_OPENGL: "2.1"
+ - RAYLIB_PLATFORM: "SDL"
+ RAYLIB_OPENGL: "2.1"
+ - RAYLIB_PLATFORM: "DRM"
+ RAYLIB_OPENGL: "ES 2.0"
+ setup_script:
+ - apt update
+ - apt -y install cmake libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev libwayland-dev libxkbcommon-dev libgbm-dev libdrm-dev
+ build_sdl_script:
+ - wget https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.7.tar.gz
+ - tar xvfz release-2.30.7.tar.gz
+ - mkdir buildsdl
+ - cd buildsdl
+ - cmake ../SDL-release-2.30.7 -DSDL_SHARED=OFF -DSDL_STATIC=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release
+ - cmake --build . --config Release
+ - cmake --install .
+ - cd ..
+ build_raylib_script:
+ - git submodule update --init --recursive
+ - cd raylib-c
+ - mkdir build
+ - cd build
+ - cmake -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ - make -j2
+ - make install
+ build_raylib_again_script:
+ - cd raylib-c
+ - mkdir build2
+ - cd build2
+ - cmake -DPLATFORM=${RAYLIB_PLATFORM} -DOPENGL_VERSION="${RAYLIB_OPENGL}" -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ - make -j2
+ - cp raylib/libraylib.a /usr/local/lib/libraylib.a
+ build_script:
+ - cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/
+ - cp physac/src/physac.h /usr/local/include/
+ - cp raygui/src/raygui.h /usr/local/include/
+ - python -m pip install --break-system-packages --upgrade pip
+ - python -m pip install --break-system-packages cffi
+ - python -m pip install --break-system-packages setuptools
+ - python -m pip install --break-system-packages wheel
+ - python setup.py bdist_wheel --plat-name manylinux2014_aarch64
+ test_script:
+ - python -m pip install --break-system-packages dist/*.whl
+ - cd /
+ - python -c 'import pyray; pyray.init_window(100,100,"test")' >/tmp/output 2>&1 || true
+ - cat /tmp/output
+ - if grep -q "INFO: Initializing raylib" /tmp/output; then
+ - echo "Passed"
+ - exit 0
+ - else
+ - echo "Failed"
+ - exit 1
+ - fi
+ artifacts:
+ path: "dist/*"
+
+mac_task:
+ macos_instance:
+ matrix:
+ - image: ghcr.io/cirruslabs/macos-sonoma-xcode:latest
+ env:
+ MACOSX_DEPLOYMENT_TARGET: "11.0"
+ matrix:
+ - env:
+ PY_VER: "3.9"
+ RAYLIB_PLATFORM: Desktop
+ - env:
+ PY_VER: "3.9"
+ RAYLIB_PLATFORM: SDL
+ - env:
+ PY_VER: "3.10"
+ RAYLIB_PLATFORM: Desktop
+ - env:
+ PY_VER: "3.10"
+ RAYLIB_PLATFORM: SDL
+ - env:
+ PY_VER: "3.11"
+ RAYLIB_PLATFORM: Desktop
+ - env:
+ PY_VER: "3.11"
+ RAYLIB_PLATFORM: SDL
+ - env:
+ PY_VER: "3.12"
+ RAYLIB_PLATFORM: Desktop
+ - env:
+ PY_VER: "3.12"
+ RAYLIB_PLATFORM: SDL
+ - env:
+ PY_VER: "3.13"
+ RAYLIB_PLATFORM: Desktop
+ - env:
+ PY_VER: "3.13"
+ RAYLIB_PLATFORM: SDL
+
+
+ setup_script:
+ - brew update
+ - brew install python@${PY_VER}
+ build_sdl_script:
+ - wget https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.7.tar.gz
+ - tar xvfz release-2.30.7.tar.gz
+ - mkdir buildsdl
+ - cd buildsdl
+ - cmake ../SDL-release-2.30.7 -DSDL_SHARED=OFF -DSDL_STATIC=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release
+ - cmake --build . --config Release
+ - sudo cmake --install .
+ - cd ..
+ build_raylib_script:
+ - git submodule update --init --recursive
+ - cd raylib-c
+ - mkdir build
+ - cd build
+ - cmake -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ - make -j8
+ - sudo make install
+ build_raylib_again_script:
+ - cd raylib-c
+ - mkdir build2
+ - cd build2
+ - cmake -DPLATFORM=${RAYLIB_PLATFORM} -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ - make -j8
+ - sudo cp raylib/libraylib.a /usr/local/lib/libraylib.a
+ build_script:
+ - sudo cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/
+ - sudo cp physac/src/physac.h /usr/local/include/
+ - sudo cp raygui/src/raygui.h /usr/local/include/
+ - /opt/homebrew/bin/python${PY_VER} -m pip install --break-system-packages cffi
+ - /opt/homebrew/bin/python${PY_VER} -m pip install --break-system-packages setuptools
+ - /opt/homebrew/bin/python${PY_VER} -m pip install --break-system-packages wheel
+ - /opt/homebrew/bin/python${PY_VER} setup.py bdist_wheel
+ test_script:
+ - /opt/homebrew/bin/python${PY_VER} -m pip install --break-system-packages dist/*.whl
+ - cd /
+ - /opt/homebrew/bin/python${PY_VER} -c 'import pyray; pyray.init_window(100,100,"test")' >/tmp/output 2>&1 || true
+ - cat /tmp/output
+ - if grep -q "INFO: Initializing raylib" /tmp/output; then
+ - echo "Passed"
+ - exit 0
+ - else
+ - echo "Failed"
+ - exit 1
+ - fi
+ artifacts:
+ path: "dist/*"
\ No newline at end of file
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..2a3c7f9
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,440 @@
+name: Build
+
+# Controls when the workflow will run
+on:
+ # Triggers the workflow on push or pull request events but only for the master branch
+ push:
+ pull_request:
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+
+jobs:
+ build-mac-intel:
+ runs-on: macos-13
+ strategy:
+ matrix:
+ python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.9', 'pypy-3.10', 'pypy-3.11' ]
+ raylib-platform: ['Desktop', 'SDL']
+ env:
+ MACOSX_DEPLOYMENT_TARGET: '10.13'
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v4
+ with:
+ submodules: recursive
+
+ - name: Build SDL
+ run: |
+ wget https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.7.tar.gz
+ tar xvfz release-2.30.7.tar.gz
+ mkdir build
+ cd build
+ cmake ../SDL-release-2.30.7 -DSDL_SHARED=OFF -DSDL_STATIC=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release
+ cmake --build . --config Release
+ sudo cmake --install .
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ # Version range or exact version of a Python version to use, using SemVer's version range syntax.
+ python-version: ${{ matrix.python-version }}
+ # The target architecture (x86, x64) of the Python interpreter.
+ architecture: x64
+
+ # Runs a set of commands using the runners shell
+ - name: Build raylib without SDL because SDL version has incorrect pkg-config
+ run: |
+ cd raylib-c
+ mkdir build
+ cd build
+ cmake -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ make -j2
+ sudo make install
+
+ - name: Build raylib with SDL if selected
+ run: |
+ cd raylib-c
+ mkdir build2
+ cd build2
+ cmake -DPLATFORM=${{ matrix.raylib-platform }} -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ make -j2
+ sudo cp raylib/libraylib.a /usr/local/lib/libraylib.a
+
+ - name: Copy extras
+ run: |
+ sudo cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/
+ sudo cp physac/src/physac.h /usr/local/include/
+ sudo cp raygui/src/raygui.h /usr/local/include/
+
+ - name: Build raylib-python-cffi
+ env:
+ RAYLIB_PLATFORM: ${{ matrix.raylib-platform }}
+ run: |
+ python -m pip install --upgrade pip
+ pip3 install "cffi>=1.17.1"
+ pip3 install wheel
+ pip3 install setuptools
+ python setup.py bdist_wheel --plat-name macosx_10_13_x86_64
+
+ - name: Test
+ run: |
+ pip3 install dist/*.whl
+ cd /
+ python3 -c 'import pyray; pyray.init_window(100,100,"test")' >/tmp/output 2>&1 || true
+ cat /tmp/output
+ if grep -q "INFO: Initializing raylib" /tmp/output; then
+ echo "Passed"
+ exit 0
+ else
+ echo "Failed"
+ exit 1
+ fi
+
+ - name: Upload build Artifact wheel
+ uses: actions/upload-artifact@v4
+ with:
+ name: wheel-mac-${{ matrix.raylib-platform }}-${{ matrix.python-version }}
+ path: dist/*
+
+# build-mac-universal:
+# runs-on: macos-14
+# strategy:
+# matrix:
+# python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.8', 'pypy-3.9', 'pypy-3.10' ]
+# raylib-platform: ['Desktop', 'SDL']
+# env:
+# MACOSX_DEPLOYMENT_TARGET: 11.0
+# steps:
+# # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+# - uses: actions/checkout@v4
+# with:
+# submodules: recursive
+#
+# - name: Build SDL
+# run: |
+# wget https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.7.tar.gz
+# tar xvfz release-2.30.7.tar.gz
+# mkdir build
+# cd build
+# cmake ../SDL-release-2.30.7 -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DSDL_SHARED=OFF -DSDL_STATIC=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release
+# cmake --build . --config Release
+# sudo cmake --install .
+#
+# - name: Setup Python
+# uses: actions/setup-python@v5
+# with:
+# # Version range or exact version of a Python version to use, using SemVer's version range syntax.
+# python-version: ${{ matrix.python-version }}
+# architecture: arm64
+#
+# # Runs a set of commands using the runners shell
+# - name: Build raylib without SDL because SDL version has incorrect pkg-config
+# run: |
+# cd raylib-c
+# mkdir build
+# cd build
+# cmake -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+# make -j2
+# sudo make install
+#
+# - name: Build raylib with SDL if selected
+# run: |
+# cd raylib-c
+# mkdir build2
+# cd build2
+# cmake -DPLATFORM=${{ matrix.raylib-platform }} -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DPLATFORM=SDL -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+# make -j2
+# sudo cp raylib/libraylib.a /usr/local/lib/libraylib.a
+#
+# - name: Copy extras
+# run: |
+# sudo cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/
+# sudo cp physac/src/physac.h /usr/local/include/
+# sudo cp raygui/src/raygui.h /usr/local/include/
+#
+# - name: Build raylib-python-cffi
+# run: |
+# python -m pip install --upgrade pip
+# pip3 install "cffi>=1.17.1"
+# pip3 install wheel
+# pip3 install setuptools
+# RAYLIB_PLATFORM=${{ matrix.raylib-platform }} python setup.py bdist_wheel
+#
+# - name: Upload build Artifact wheel
+# uses: actions/upload-artifact@v3.2.1
+# with:
+# name: wheel
+# path: dist/*
+
+#
+# # Name defaults to universal2 and it technically is, but we override name to arm64. Why don't we make a working universal2 wheel? Because
+# # I'd rather have a separate x86_64 that I can test, and I want it to work on 10_15 but I'm not sure a 'macosx_10_15_universal2' is valid
+# # given that there is no SDK for universal until macosx_11_0
+# - name: Build raylib-python-cffi
+# run: |
+# python -m pip install --upgrade pip
+# pip3 install cffi
+# pip3 install wheel
+# python setup.py bdist_wheel --plat-name macosx_12_0_arm64
+
+
+
+ build-linux:
+ runs-on: ubuntu-22.04
+ strategy:
+ # You can use PyPy versions in python-version.
+ # For example, pypy2 and pypy3
+ matrix:
+ python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.9', 'pypy-3.10', 'pypy-3.11' ]
+ raylib-platform: ['Desktop', 'SDL', 'DRM']
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v4
+ with:
+ submodules: recursive
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ # Version range or exact version of a Python version to use, using SemVer's version range syntax.
+ python-version: ${{ matrix.python-version }}
+ # The target architecture (x86, x64) of the Python interpreter.
+ architecture: x64
+
+ - name: install prereqs
+ run: |
+ sudo apt update
+ sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev libwayland-dev libxkbcommon-dev
+ - name: Build SDL
+ run: |
+ wget https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.7.tar.gz
+ tar xvfz release-2.30.7.tar.gz
+ mkdir build
+ cd build
+ cmake ../SDL-release-2.30.7 -DSDL_SHARED=OFF -DSDL_STATIC=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release
+ cmake --build . --config Release
+ sudo cmake --install .
+
+ # Runs a set of commands using the runners shell
+ - name: Build raylib
+ run: |
+ cd raylib-c
+ mkdir build
+ cd build
+ cmake -DPLATFORM=${{ matrix.raylib-platform }} -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release -DOpenGL_GL_PREFERENCE=GLVND ..
+ make -j2
+ sudo make install
+ - name: Copy extras
+ run: |
+ sudo cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/
+ sudo cp physac/src/physac.h /usr/local/include/
+ sudo cp raygui/src/raygui.h /usr/local/include/
+ - name: Build raylib-python-cffi
+ env:
+ RAYLIB_PLATFORM: ${{ matrix.raylib-platform }}
+ run: |
+ python -m pip install --upgrade pip
+ pip3 install "cffi>=1.17.1"
+ pip3 install wheel
+ pip3 install setuptools
+ python setup.py bdist_wheel --plat-name manylinux2014_x86_64
+ - name: Test
+ run: |
+ pip3 install dist/*.whl
+ cd /
+ python3 -c 'import pyray; pyray.init_window(100,100,"test")' >/tmp/output 2>&1 || true
+ cat /tmp/output
+ if grep -q "INFO: Initializing raylib" /tmp/output; then
+ echo "Passed"
+ exit 0
+ else
+ echo "Failed"
+ exit 1
+ fi
+
+
+ - name: Upload build Artifact wheel
+ uses: actions/upload-artifact@v4
+ with:
+ name: wheel-linux-${{ matrix.raylib-platform }}-${{ matrix.python-version }}
+ path: dist/*
+
+
+
+
+ build-windows:
+ # The type of runner that the job will run on
+ runs-on: windows-2019
+ strategy:
+ # You can use PyPy versions in python-version.
+ # For example, pypy2 and pypy3
+ matrix:
+ python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.9', 'pypy-3.10', 'pypy-3.11' ]
+ raylib-platform: ['Desktop', 'SDL']
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ submodules: recursive
+
+ - name: Download SDL2
+ run: curl -L -o SDL2.zip https://github.com/libsdl-org/SDL/releases/download/release-2.30.8/SDL2-devel-2.30.8-VC.zip
+
+ - name: Create extraction directory
+ run: mkdir ${{ runner.temp }}\SDL2
+
+ - name: Unzip SDL2
+ run: tar -xf SDL2.zip -C ${{ runner.temp }}\SDL2 --strip-components=1
+
+ - name: Set SDL2_DIR environment variable
+ run: echo SDL2_DIR=${{ runner.temp }}\SDL2\cmake >> $env:GITHUB_ENV
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ # Version range or exact version of a Python version to use, using SemVer's version range syntax.
+ python-version: ${{ matrix.python-version }}
+ # The target architecture (x86, x64) of the Python interpreter.
+ architecture: x64
+
+ - name: Add msbuild to PATH
+ uses: microsoft/setup-msbuild@v2
+
+ - name: Build raylib
+ run: |
+ cd raylib-c
+ mkdir build
+ cd build
+ cmake -DPLATFORM=${{ matrix.raylib-platform }} -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ msbuild raylib.sln /target:raylib /property:Configuration=Release
+ copy raylib\Release\raylib.lib ..\..
+ cd ..\..
+ shell: cmd
+
+ - name: Build raylib-python-cffi
+ env:
+ RAYLIB_PLATFORM: ${{ matrix.raylib-platform }}
+ run: |
+ copy ${{ runner.temp }}\SDL2\lib\x64\SDL2.lib .
+ copy ${{ runner.temp }}\SDL2\lib\x64\SDL2.dll raylib\
+ python -m pip install --upgrade pip
+ pip3 install "cffi>=1.17.1"
+ pip3 install wheel
+ pip3 install setuptools
+ del raylib\dynamic\*.so* >nul 2>&1
+ del raylib\dynamic\*.dll >nul 2>&1
+ del raylib\dynamic\*.dylib >nul 2>&1
+ del raylib\dynamic\32bit\* >nul 2>&1
+ python setup.py bdist_wheel
+ shell: cmd
+
+ - name: Test
+ shell: bash
+ run: |
+ pip3 install --no-deps dist/*.whl
+ cd /
+ python3 -c 'import pyray; pyray.init_window(100,100,"test")' >/tmp/output 2>&1 || true
+ cat /tmp/output
+ if grep -q "INFO: Initializing raylib" /tmp/output; then
+ echo "Passed"
+ exit 0
+ else
+ echo "Failed"
+ exit 1
+ fi
+
+ - name: Upload build Artifact wheel
+ uses: actions/upload-artifact@v4
+ with:
+ name: wheel-windows-${{ matrix.raylib-platform }}-${{ matrix.python-version }}
+ path: dist/*
+
+ source-distro:
+ runs-on: ubuntu-latest
+
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v4
+ with:
+ submodules: recursive
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ # Version range or exact version of a Python version to use, using SemVer's version range syntax.
+ python-version: '3.12'
+ # The target architecture (x86, x64) of the Python interpreter.
+ architecture: x64
+
+ - name: Build raylib
+ run: |
+ sudo apt update
+ sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev libwayland-dev libxkbcommon-dev
+ cd raylib-c
+ mkdir build
+ cd build
+ cmake -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ make -j2
+ sudo make install
+ - name: Copy extras
+ run: |
+ sudo cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/
+ sudo cp physac/src/physac.h /usr/local/include/
+ sudo cp raygui/src/raygui.h /usr/local/include/
+
+ - name: Build raylib-python-cffi
+ run: |
+ python -m pip install --upgrade pip
+ pip3 install "cffi>=1.17.1"
+ pip3 install wheel
+ pip3 install setuptools
+ python setup.py sdist
+
+ - name: Upload build Artifact wheel
+ uses: actions/upload-artifact@v4
+ with:
+ name: wheel-source
+ path: dist/*
+
+ dynamic-distro:
+ runs-on: ubuntu-latest
+
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v4
+ with:
+ submodules: recursive
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ # Version range or exact version of a Python version to use, using SemVer's version range syntax.
+ python-version: '3.12'
+ # The target architecture (x86, x64) of the Python interpreter.
+ architecture: x64
+
+ - name: Build raylib-python-cffi-dynamic
+ run: |
+ python -m pip install --upgrade pip
+ pip3 install "cffi>=1.17.1"
+ pip3 install wheel
+ pip3 install setuptools
+ cd dynamic
+ python setup.py sdist
+
+ - name: Upload build Artifact wheel
+ uses: actions/upload-artifact@v4
+ with:
+ name: wheel-dynamic
+ path: dynamic/dist/*
+
+ merge:
+ needs: [build-mac-intel, build-windows, build-linux, source-distro, dynamic-distro]
+ runs-on: ubuntu-latest
+ steps:
+ - name: Merge All Artifacts
+ uses: actions/upload-artifact/merge@v4
+ with:
+ name: wheel
+ pattern: wheel-*
diff --git a/.gitignore b/.gitignore
index f8d6014..7947899 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,8 @@ __pycache__/
# Distribution / packaging
+docs-src/_build
+.idea/
.Python
build/
develop-eggs/
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..f6c3e1d
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,9 @@
+[submodule "raylib-c"]
+ path = raylib-c
+ url = https://git.terah.dev/UnrealXR/raylib.git
+[submodule "raygui"]
+ path = raygui
+ url = https://github.com/raysan5/raygui.git
+[submodule "physac"]
+ path = physac
+ url = https://github.com/victorfisac/Physac.git
diff --git a/BUILDING.rst b/BUILDING.rst
new file mode 100644
index 0000000..a32dd6f
--- /dev/null
+++ b/BUILDING.rst
@@ -0,0 +1,216 @@
+Building from source
+====================
+
+Have Pip build from source
+--------------------------
+
+This is useful if the binaries don’t work on your system, or you want to use a newer version of Raylib.
+
+First make sure Raylib is installed. On Linux/Mac it must include the pkg-config files. Best way to ensure this
+is to compile and install Raylib using CMake: https://github.com/raysan5/raylib/wiki/Working-on-GNU-Linux#build-raylib-using-cmake
+
+Requirements for build: cmake, pkg-config.
+
+::
+
+ cd raylib-5.0
+ mkdir build
+ cd build
+ cmake -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ make
+ sudo make install
+
+
+
+Then ask Pip to build from source:
+
+::
+
+ pip3 install --no-cache-dir --no-binary raylib --upgrade --force-reinstall raylib
+
+Or, Build from source manually
+------------------------------
+
+Useful if the Pip build doesn’t work and you want to debug it, or you want to contribute to the
+project.
+
+.. attention::
+ If the Pip build doesn’t work, please submit a bug. (And if you have
+ fixed it, a PR.)
+
+Manual instructions follow, but are probably outdated, so see instead how we actually build the wheels
+at https://github.com/electronstudio/raylib-python-cffi/blob/master/.github/workflows/build.yml
+
+Windows manual build
+~~~~~~~~~~~~~~~~~~~~
+
+Clone this repo including submodules so you get correct version of
+Raylib.
+
+::
+
+ git clone --recurse-submodules https://github.com/electronstudio/raylib-python-cffi
+
+Open Visual C++ command shell.
+
+Fix the symlink that doesnt work on Windows
+
+::
+
+ cd raylib-python-cffi
+ copy raylib-c\src\raylib.h raylib\raylib.h
+
+Build and install Raylib from the raylib-c directory.
+
+::
+
+ cd raylib-python-cffi/raylib-c
+ mkdir build
+ cd build
+ cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..
+ msbuild raylib.sln /target:raylib /property:Configuration=Release
+ copy raylib\Release\raylib.lib ..\..
+ cd ..\..
+
+
+
+To build a binary wheel distribution:
+
+::
+
+ rmdir /Q /S build
+ pip3 install cffi
+ pip3 install wheel
+ python setup.py bdist_wheel
+
+Then install it:
+
+::
+
+ pip3 install dist\raylib-3.7.0-cp37-cp37m-win_amd64.whl
+
+(Note: your wheel’s filename will probably be different than the one
+here.)
+
+Linux manual build
+~~~~~~~~~~~~~~~~~~~~~~
+
+Clone this repo including submodules so you get correct version of
+Raylib.
+
+::
+
+ git clone --recurse-submodules https://github.com/electronstudio/raylib-python-cffi
+
+Build and install Raylib from the raylib-c directory.
+
+.. note::
+ You can instead use a different version of Raylib you installed from elsewhere, and it should still
+ work!
+
+::
+
+ sudo apt install cmake libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev pkg-config cmake
+ cd raylib-python-cffi/raylib-c
+ mkdir build
+ cd build
+ cmake -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ sudo make install
+
+.. note:: Optional: Build the Raylib shared libs, if you plan to use
+ ``raylib_dynamic`` binding.
+
+ ::
+
+ rm -rf *
+ cmake -DWITH_PIC=on -DBUILD_SHARED_LIBS=on -DCMAKE_BUILD_TYPE=Release ..
+ make
+ sudo make install
+
+::
+
+ cd ../..
+
+
+Build the Python library:
+
+::
+
+ pip3 install cffi
+ rm -rf build raylib/_raylib_cffi.*
+ python3 raylib/build.py
+
+.. note:: (Optional) To update the Linux dynamic libs (names will be different on other platforms):
+
+ ::
+
+ rm dynamic/raylib/*.so*
+ cp -P /usr/local/lib/libraylib.so* dynamic/raylib/
+
+To build a binary wheel distribution:
+
+::
+
+ pip3 install wheel
+ python3 setup.py bdist_wheel
+
+
+Then install it:
+
+::
+
+ pip3 install dist/raylib*.whl
+
+To build a complete set of libs for Python 3.6, 3.7, 3.8 and 3.9:
+
+::
+
+ ./raylib/build_multi.sh
+
+.. warning::
+ pypi wont accept Linux packages unless they are built
+ ``--plat-name manylinux2014_x86_64`` so on linux please run
+ ``./raylib/build_multi_linux.sh`` )
+
+.. TODO::
+ Separate the instructions for preparing the dynamic module
+ from the instructions for building the static module!
+
+
+
+Macos manual build
+~~~~~~~~~~~~~~~~~~~~~~
+
+These instructions have been tested on Macos 10.14.
+
+Clone this repo including submodules so you get correct version of
+Raylib.
+
+::
+
+ git clone --recurse-submodules https://github.com/electronstudio/raylib-python-cffi
+
+Build and install Raylib from the raylib-c directory.
+
+::
+
+ cd raylib-python-cffi/raylib-c/
+ mkdir build
+ cd build
+ cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..
+ make
+ sudo make install
+ cd ../..
+
+
+Build and install module.
+
+::
+
+ pip3 install cffi
+ rm -rf build raylib/_raylib_cffi.*
+ python3 raylib/build.py
+ pip3 install wheel
+ python3 setup.py install
+
+
diff --git a/LICENSE b/LICENSE
index 0a04128..e23ece2 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,165 +1,277 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
+Eclipse Public License - v 2.0
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+1. DEFINITIONS
- This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
+"Contribution" means:
- 0. Additional Definitions.
+ a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
- As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
+ b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ "originates" from a Contributor if it was added to the Program by
+ such Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
- "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
+"Contributor" means any person or entity that Distributes the Program.
- An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
- A "Combined Work" is a work produced by combining or linking an
-Application with the Library. The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
- The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
- The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
- 1. Exception to Section 3 of the GNU GPL.
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
- You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
- 2. Conveying Modified Versions.
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
- If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
- a) under this License, provided that you make a good faith effort to
- ensure that, in the event an Application does not supply the
- function or data, the facility still operates, and performs
- whatever part of its purpose remains meaningful, or
+2. GRANT OF RIGHTS
- b) under the GNU GPL, with none of the additional permissions of
- this License applicable to that copy.
+ a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
- 3. Object Code Incorporating Material from Library Header Files.
+ b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if, at
+ the time the Contribution is added by the Contributor, such addition
+ of the Contribution causes such combination to be covered by the
+ Licensed Patents. The patent license shall not apply to any other
+ combinations which include the Contribution. No hardware per se is
+ licensed hereunder.
- The object code form of an Application may incorporate material from
-a header file that is part of the Library. You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
+ c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the
+ rights and licenses granted hereunder, each Recipient hereby
+ assumes sole responsibility to secure any other intellectual
+ property rights needed, if any. For example, if a third party
+ patent license is required to allow Recipient to Distribute the
+ Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
- a) Give prominent notice with each copy of the object code that the
- Library is used in it and that the Library and its use are
- covered by this License.
+ d) Each Contributor represents that to its knowledge it has
+ sufficient copyright rights in its Contribution, if any, to grant
+ the copyright license set forth in this Agreement.
- b) Accompany the object code with a copy of the GNU GPL and this license
- document.
+ e) Notwithstanding the terms of any Secondary License, no
+ Contributor makes additional grants to any Recipient (other than
+ those set forth in this Agreement) as a result of such Recipient's
+ receipt of the Program under the terms of a Secondary License
+ (if permitted under the terms of Section 3).
- 4. Combined Works.
+3. REQUIREMENTS
- You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
+3.1 If a Contributor Distributes the Program in any form, then:
- a) Give prominent notice with each copy of the Combined Work that
- the Library is used in it and that the Library and its use are
- covered by this License.
+ a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
- b) Accompany the Combined Work with a copy of the GNU GPL and this license
- document.
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including
+ warranties or conditions of title and non-infringement, and
+ implied warranties or conditions of merchantability and fitness
+ for a particular purpose;
- c) For a Combined Work that displays copyright notices during
- execution, include the copyright notice for the Library among
- these notices, as well as a reference directing the user to the
- copies of the GNU GPL and this license document.
+ ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special,
+ incidental and consequential damages, such as lost profits;
- d) Do one of the following:
+ iii) does not attempt to limit or alter the recipients' rights
+ in the Source Code under section 3.2; and
- 0) Convey the Minimal Corresponding Source under the terms of this
- License, and the Corresponding Application Code in a form
- suitable for, and under terms that permit, the user to
- recombine or relink the Application with a modified version of
- the Linked Version to produce a modified Combined Work, in the
- manner specified by section 6 of the GNU GPL for conveying
- Corresponding Source.
+ iv) requires any subsequent distribution of the Program by any
+ party to be under a license that satisfies the requirements
+ of this section 3.
- 1) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (a) uses at run time
- a copy of the Library already present on the user's computer
- system, and (b) will operate properly with a modified version
- of the Library that is interface-compatible with the Linked
- Version.
+3.2 When the Program is Distributed as Source Code:
- e) Provide Installation Information, but only if you would otherwise
- be required to provide such information under section 6 of the
- GNU GPL, and only to the extent that such information is
- necessary to install and execute a modified version of the
- Combined Work produced by recombining or relinking the
- Application with a modified version of the Linked Version. (If
- you use option 4d0, the Installation Information must accompany
- the Minimal Corresponding Source and Corresponding Application
- Code. If you use option 4d1, you must provide the Installation
- Information in the manner specified by section 6 of the GNU GPL
- for conveying Corresponding Source.)
+ a) it must be made available under this Agreement, or if the
+ Program (i) is combined with other material in a separate file or
+ files made available under a Secondary License, and (ii) the initial
+ Contributor attached to the Source Code the notice described in
+ Exhibit A of this Agreement, then the Program may be made available
+ under the terms of such Secondary Licenses, and
- 5. Combined Libraries.
+ b) a copy of this Agreement must be included with each copy of
+ the Program.
- You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
- a) Accompany the combined library with a copy of the same work based
- on the Library, uncombined with any other library facilities,
- conveyed under the terms of this License.
+4. COMMERCIAL DISTRIBUTION
- b) Give prominent notice with the combined library that part of it
- is a work based on the Library, and explaining where to find the
- accompanying uncombined form of the same work.
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
- 6. Revised Versions of the GNU Lesser General Public License.
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
- The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
+5. NO WARRANTY
- Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
- If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following
+Secondary Licenses when the conditions for such availability set forth
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+ Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+
+ If it is not possible or desirable to put the notice in a particular
+ file, then You may include the notice in a location (such as a LICENSE
+ file in a relevant directory) where a recipient would be likely to
+ look for such a notice.
+
+ You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/MANIFEST.in b/MANIFEST.in
index f19d6df..6c6394e 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,9 +1,16 @@
-include raylib/static/*.so
-include raylib/static/*.pyd
-exclude raylib/static/*.a
+include raylib/*.so
+include raylib/*.pyi
+include pyray/*.pyi
+include raylib/*.pyd
+include raylib/*.dll
+exclude raylib/*.a
include raylib/*.h
-exclude raylib/static/*.c
-exclude raylib/static/*.o
-include raylib/dynamic/*.dylib
-include raylib/dynamic/*.dll
-include raylib/dynamic/*.so
\ No newline at end of file
+include raylib/*.h.modified
+exclude raylib/*.c
+exclude raylib/*.o
+include version.py
+exclude tests/*
+include raylib/py.typed
+include pyray/py.typed
+
+
diff --git a/README.md b/README.md
index 82e4ebb..64c695b 100644
--- a/README.md
+++ b/README.md
@@ -1,115 +1,278 @@
-# Python Bindings for Raylib 2.6
+# Python Bindings for Raylib 5.5
+## Libraries: raymath, raygui, rlgl, physac and GLFW
+## Backends: Desktop, SDL, DRM, Web
+## Platforms: Windows, Mac, Linux, Raspberry Pi, Web
-New CFFI API static bindings. Faster, fewer bugs and easier to maintain than ctypes.
+
-### Advert
+Chatroom: [Discord](https://discord.gg/fKDwt85aX6)
+
+HELP WANTED: [writing examples](https://github.com/electronstudio/raylib-python-cffi/issues/155)
+
+Features:
+
+* CFFI API static bindings.
+* Automatically generated to be as close as possible to
+original Raylib.
+* Faster, fewer bugs and easier to maintain than ctypes.
+* Commercial-friendly license.
+* Docstrings and auto-completion.
+* Type checking with Mypy
+
+
+[Full documentation](http://electronstudio.github.io/raylib-python-cffi)
+
+# Quickstart
+
+`pip3 install raylib==5.5.0.2 --break-system-packages`
+```python
+from pyray import *
+init_window(800, 450, "Hello")
+while not window_should_close():
+ begin_drawing()
+ clear_background(WHITE)
+ draw_text("Hello world", 190, 200, 20, VIOLET)
+ end_drawing()
+close_window()
+```
+
+# Installation
+
+If you are on a modern Linux you will probably want to create a venv:
+
+ python3 -m venv venv
+ source venv/bin/activate
+
+Then make sure you have the latest pip installed:
+
+ python3 -m pip install --upgrade pip
+
+Then install
+
+ python3 -m pip install setuptools
+ python3 -m pip install raylib==5.5.0.2
+
+On most platforms it should install a binary wheel. If yours isn't available then pip will attempt to build from
+source, in which case you will need to have Raylib development libs installed, e.g.
+using homebrew, apt, etc.
+
+## Windows
+
+Binaries require x64 Windows 10 or newer. (For x86 or older Windows you will have to build from source.)
+
+Use an [official Windows Python release](https://www.python.org/downloads/windows/) rather than WSL, MSYS, etc.
+
+## MacOS
+
+Binaries require:
+ * arm64 MacOS 14
+ * x64 MacOS 10.13, or newer.
+
+Older MacOS requires building from source but this is usually simple:
+
+ brew install pkg-config
+ brew install raylib
+ python3 -m pip install raylib==5.5.0.2
+
+(I do have binaries for arm64 MacOS 11, 12 and 13 but I have no way of testing they work, so post an issue
+if you want to test them.)
+
+## Linux
+
+Binaries require OS newer than Ubuntu 2020, x64 or arm64. Otherwise build from source.
+(Pip should attempt automatically but will need Raylib itself installed and also pkg-config.)
+
+The arm64 binaries are built on Raspberry Pi arm64 Bullseye with OpenGL 2.0
+so may not work on other boards.
+
+## Raspberry Pi
+
+[Using on Rasperry Pi](RPI.rst)
+
+# Backends
+
+## Dynamic binding version
+
+There is now a separate dynamic version of this binding:
+
+ python3 -m pip uninstall raylib
+ python3 -m pip install raylib_dynamic
+
+It works on some systems where the static version doesn't, [but be sure to read these caveats before using it](https://electronstudio.github.io/raylib-python-cffi/dynamic.html)
+
+You can't have multiple raylib packages installed at once.
+
+## SDL backend
+
+This is not well tested but has better support for controllers:
+
+ python3 -m pip uninstall raylib
+ python3 -m pip install raylib_sdl
+
+You can't have multiple raylib packages installed at once.
+
+## DRM backend
+
+This uses the Linux framebuffer for devices that don't run X11/Wayland:
+
+ python3 -m pip uninstall raylib
+ python3 -m pip install raylib_drm
+
+You can't have multiple raylib packages installed at once.
+
+## Problems?
+
+If it doesn't work, [try to build manually.](BUILDING.rst). If that works then [submit an issue](https://github.com/electronstudio/raylib-python-cffi/issues)
+to let us know what you did.
+
+If you need help you can try asking on [our discord](https://discord.gg/fKDwt85aX6). There is also a large [Raylib discord](https://discord.gg/raylib)
+for issues that are not Python-specific.
+
+If it still doesn't work, [submit an issue](https://github.com/electronstudio/raylib-python-cffi/issues).
+
+
+# How to use
+
+There are *two* modules in the raylib package, `raylib` and `pyray`. (There is no separate package for
+pyray. Do *not* `pip install pyray`). You can use either or both:
+
+### If you are familiar with C coding and the Raylib C library and you want to use an exact copy of the C API
+
+Use [the raylib module](https://electronstudio.github.io/raylib-python-cffi/raylib.html).
+
+### If you prefer a more Pythonistic API
+
+Use [the pyray module](https://electronstudio.github.io/raylib-python-cffi/pyray.html).
+
+# Running in a web browser
+
+[Pygbag](https://pypi.org/project/pygbag/) >=0.8.7 supports running in a web browser. Usually the latest git version
+is recommended.
+
+Make a folder `my_project` with a file `main.py`:
+
+```python
+# /// script
+# dependencies = [
+# "cffi",
+# "raylib"
+# ]
+# ///
+import asyncio
+import platform
+from pyray import *
+
+async def main(): # You MUST have an async main function
+ init_window(500, 500, "Hello")
+ platform.window.window_resize() # You MAY want to add this line
+ while not window_should_close():
+ begin_drawing()
+ clear_background(WHITE)
+ draw_text("Hello world", 190, 200, 20, VIOLET)
+ end_drawing()
+ await asyncio.sleep(0) # You MUST call this in your main loop
+ close_window()
+
+asyncio.run(main())
+```
+
+Then to create the web files and launch a web server:
+
+ python3.12 -m pip install --user --upgrade pygbag
+ python3.12 -m pygbag --PYBUILD 3.12 --ume_block 0 --template noctx.tmpl --git my_project
+
+Point your browser to http://localhost:8000
+
+Some features may not work, so you can disable them like this:
+
+```python
+if platform.system() != "Emscripten": # audio may not work on current version of emscripten
+ init_audio_device()
+```
+
+This is all done by Pygbag rather than by me, so you should probably contact them with any issues.
+Carefully read all their [documentation](https://pygame-web.github.io/).
+
+It does work for most of [these examples](https://electronstudio.github.io/raylib-python-cffi-pygbag-examples/)
+
+# App showcase
+
+[Tempest-raylib](https://github.com/Emtyloc/tempest-raylib)
+
+[KarabinerKeyboard](https://github.com/bilbofroggins/KarabinerKeyboard)
+
+[PyTaiko](https://github.com/Yonokid/PyTaiko)
+
+[DOOM-Clone](https://github.com/StanislavPetrovV/DOOM-Clone)
+
+[Tanki](https://github.com/pkulev/tanki)
+
+[Alloy Bloxel Editor](https://pebaz.itch.io/alloy-bloxel-editor)
+
+[Eidolon](https://github.com/Miou-zora/Eidolon)
+
+Add your app here!
+
+# RLZero
+
+A related library (that is a work in progress!):
+
+[A simplified API for Raylib for use in education and to enable beginners to create 3d games](https://github.com/electronstudio/rlzero)
+
+# Help wanted
+
+ * Converting more examples from C to Python
+ * Testing on more platforms
+
+# License
+
+Eclipse Public License, so you are free to
+statically link and use in non-free / proprietary / commercial projects!
+
+# Performance
+
+If you need more performance, do in this order:
+
+1. Use Pypy rather than standard CPython. It is much, much faster and will make more difference than any other optimisations you might do.
+
+2. Every call to C is costly, so it's slightly faster if you use Python data structures and functions when calculating
+in your update loop
+and then only convert them to C data structures when you have to call the C functions for drawing.
+
+3. The raylib.* functions are potentially *slightly* faster than the pyray.* equivalents, so if you need a tiny bit more performance
+you can switch your inner loop functions to these.
+
+4. There is a version of Python that is faster than Pypy: GraalPy. However it's not fully compatible with all Python
+packages. It doesn't work with CFFI and so doesn't work with this binding. But it *is* compatible with the
+*Java* binding, Jaylib! There is an example of this here: https://github.com/electronstudio/megabunny/tree/master/raylib-python-jaylib
+
+## Bunnymark
+
+
+| Library | Implementation | Bunnies (60 FPS) | Percentage |
+|--------------------------------|-------------------|------------------|------------|
+| Raylib 5.0 | C | 180000 | 100% |
+| Raylib Python CFFI 5.0.0.2 | Python 3.12 | 10500 | 5.8% |
+| Raylib Python CFFI 5.0.0.2 | Pypy 3.10 | 95000 | 53% |
+| Raylib 3.7 | C | 168100 | 100% |
+| Raylib Python CFFI 3.7 | Pypy 3.7 | 33800 | 20% |
+| Raylib Python CFFI 3.7 | Python 3.9 | 7700 | 4.5% |
+| Raylib Python CFFI 3.7 | Python 3.9 Nuitka | 8600 | 5.1% |
+| Raylib Python CFFI 3.7 Dynamic | Python 3.9 | 6300 | 3.7% |
+
+See also https://github.com/electronstudio/megabunny/
+
+# Packaging your app
+
+You can create a standalone binary using the Nuitka compiler. For example, here is how to package Bunnymark:
+
+ pip3 install nuitka
+ cd examples/textures
+ python3 -m nuitka --onefile --linux-onefile-icon resources/wabbit_alpha.png textures_bunnymark.py
+
+# Advert
[RetroWar: 8-bit Party Battle](https://store.steampowered.com/app/664240/RetroWar_8bit_Party_Battle/?git) is out now. Defeat up to 15 of your friends in a tournament of 80s-inspired retro mini games.
-# Install
-
-**Windows 10 (64 bit): Python 3.6 - 3.8**
-
-**MacOS: Python 3.6 - 3.8**
-
-**Linux (Ubuntu 16.04+): Python 3.6 - 3.8**
-
-We distribute a statically linked Raylib library, install from Pypi.
-
- pip3 install raylib
-
-If you're a different version of Python, or a Linux with incompatible libraries
-then you can either *use the dynamic binding only* or else you will have to build from source. Download, compile
-and install Raylib 2.6 then
-
- cd raylib/static
- python3 build_linux.py
-
-# Use
-
-## raylib.static
-
-Goal is make usage as similar to the original C as CFFI will allow. There are a few differences
-you can see in the examples. See test_static.py and examples/*.py for how to use.
-
-```
-from raylib.static import *
-
-InitWindow(800, 450, b"Hello Raylib")
-SetTargetFPS(60)
-
-camera = ffi.new("struct Camera3D *", [[18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0])
-SetCameraMode(camera[0], CAMERA_ORBITAL)
-
-while not WindowShouldClose():
- UpdateCamera(camera)
- BeginDrawing()
- ClearBackground(RAYWHITE)
- BeginMode3D(camera[0])
- DrawGrid(20, 1.0)
- EndMode3D()
- DrawText(b"Hellow World", 190, 200, 20, VIOLET)
- EndDrawing()
-CloseWindow()
-
-```
-
-## raylib.pyray
-
-Wrapper around the static bindings. Makes the names snakecase and converts strings to bytes automatically. See test_pyray.py.
-
-
-```
-from raylib.pyray import PyRay
-from raylib.colors import *
-
-pyray = PyRay()
-
-pyray.init_window(800, 450, "Hello Pyray")
-pyray.set_target_fps(60)
-
-camera = pyray.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0)
-pyray.set_camera_mode(camera, pyray.CAMERA_ORBITAL)
-
-while not pyray.window_should_close():
- pyray.update_camera(pyray.pointer(camera))
- pyray.begin_drawing()
- pyray.clear_background(RAYWHITE)
- pyray.begin_mode_3d(camera)
- pyray.draw_grid(20, 1.0)
- pyray.end_mode_3d()
- pyray.draw_text("Hello world", 190, 200, 20, VIOLET)
- pyray.end_drawing()
-pyray.close_window()
-
-```
-
-## raylib.dynamic
-
-In addition to the API static bindings we have CFFI ABI dynamic bindings in order to avoid the need to compile a C extension module.
-There have been some weird failures with dynamic bindings and ctypes bindings before and often the failures are silent
-so you dont even know. Also the static bindings should be faster. Therefore I recommend the static ones...
-
-BUT the dynamic bindings have the big advantage that you don't need to compile anything to install. You just need a Raylib DLL,
-which we supply for Windows/Mac/Linux.
-
-See test_dynamic.py for how to use.
-
-## richlib
-
-[A simplified API for Raylib for use in education and to enable beginners to create 3d games](https://github.com/electronstudio/richlib)
-
-# Platforms tested
-
- * (MacOS 10.12.6 - Python 3.7)
- * (Ubuntu 18.04 LTS - Python 3.6)
- * Debian 10 - Python 3.7
- * Windows 10 (64 bit) - Python 3.8
-
-# HELP WANTED
-
- * converting more examples from C to python
- * testing and building on more platforms
- * sorting out binary wheel distribution for Mac/Win and compile-from-source distributtion for Linux
- * dealing with conversions to pointers in PyRay automatically
-
+[Coding Games With Pygame Zero & Python](https://github.com/electronstudio/pygame-zero-book) is
+a book for Python beginners.
diff --git a/RPI.rst b/RPI.rst
new file mode 100644
index 0000000..a5c62e3
--- /dev/null
+++ b/RPI.rst
@@ -0,0 +1,97 @@
+Raspberry Pi
+====================
+
+Please use Raspberry Pi OS Bookworm. Bullseye should also work. Older OSes are not tested.
+
+Option 1: Binary wheel
+----------------------
+
+We have published binary wheels compiled for 64-bit Raspberry OS Bullseye in X11 mode.
+
+::
+
+ python -m pip install --break-system-packages raylib
+
+Alternatively there is a DRM wheel called ``raylib_drm`` to use the framebuffer without X11. You can't have both wheels
+installed at once.
+
+If it doesn't work, or you're not on Bullseye, or you're 32 bit, you will need to compile your own raylib. See below.
+For full instructions on this, see https://github.com/raysan5/raylib/wiki/Working-on-Raspberry-Pi . If you need help with this ask Raylib.
+
+Option 2: Compile Raylib from source X11 mode
+---------------------------------------------
+
+This should work for everyone.
+
+::
+
+ sudo apt update
+ sudo apt install python3-pip cmake libegl1-mesa-dev libgbm-dev libgles2-mesa-dev libdrm-dev libglfw3-dev
+ git clone https://github.com/raysan5/raylib.git --branch 5.0 --single-branch
+ cd raylib
+ mkdir build
+ rm -rf build/*
+ cd build
+ cmake -DPLATFORM="Desktop" -DOPENGL_VERSION=2.1 -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ make
+ sudo make install
+ sudo cp -r ../src/external/glfw/include/GLFW /usr/local/include/
+
+Then have pip compile and install the wheel:
+
+::
+
+ python3 -m pip install --break-system-packages setuptools
+ python3 -m pip install --no-cache-dir --no-binary raylib --upgrade --force-reinstall --break-system-packages raylib==5.5.0.0
+
+Option 3: Compile Raylib from source DRM mode
+---------------------------------------------
+
+This seems to work on Raspberry Pi 4. Note you must not be running X11 when you run your programs.
+
+If you have ever installed Raylib or raylib-python-cffi before, remove all traces of it:
+
+::
+
+ sudo apt remove raylib raylib-dev libraylib libraylib-dev
+ sudo rm /usr/local/lib/pkgconfig/raylib.pc
+ sudo rm -rf /usr/local/lib/libraylib.* /usr/lib/libraylib.*
+
+Remove all GLFW:
+
+::
+
+ sudo apt remove libglfw3-dev libglfw3
+ sudo rm -rf /usr/local/include/GLFW
+
+Build a shared lib version of Raylib in DRM mode and install to /usr:
+
+::
+
+ sudo apt update
+ sudo apt install python3-pip cmake libegl1-mesa-dev libgbm-dev libgles2-mesa-dev libdrm-dev
+ git clone https://github.com/raysan5/raylib.git --branch 5.0 --single-branch
+ cd raylib
+ mkdir build
+ rm rf build/*
+ cd build
+ cmake -DPLATFORM="DRM" -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
+ make
+ sudo make install
+
+
+Then have pip compile and install the wheel:
+
+::
+
+ python3 -m pip install --break-system-packages setuptools
+ python3 -m pip install --no-cache-dir --no-binary raylib --upgrade --force-reinstall --break-system-packages raylib==5.5.0.0
+
+
+
+
+.. attention::
+
+ If you intend to use the Broadcom proprietary Open GL ES 2.0 drivers (the ones installed by Raspbian into ``/opt/vc`` and compiled in Raylib
+ with ``PLATFORM_RPI``) be aware they not work with Bullseye and have not been tested with the bindings. They will probably
+ require additional linker arguments to be added to ``build.py``. Suggest you try ``PLATFORM_DRM`` instead.
diff --git a/coords_demo.py b/coords_demo.py
deleted file mode 100644
index c2bba7c..0000000
--- a/coords_demo.py
+++ /dev/null
@@ -1,76 +0,0 @@
-from raylib.richlib import *
-
-
-WIDTH=1200
-HEIGHT=800
-CAMERA=pyray.CAMERA_FIRST_PERSON
-
-
-player = Box((-5, 0, -5), (1, 1, 1), 'green', True)
-
-
-o = Vector([-5,-0,-5])
-
-td = False
-
-
-def init():
- camera.position = (0.0, 4, 7)
- camera.target = (100,100,-100)
- camera.up = (0, 1, 0)
- camera.fovy = 60
- #rl.UpdateCamera(camera)
- pyray.set_camera_mode(camera[0], pyray.CAMERA_FIRST_PERSON)
- #rl.UpdateCamera(camera)
-
-def update():
- if keyboard.right:
- player.pos.x += 0.1
- elif keyboard.left:
- player.pos.x -= 0.1
- elif keyboard.up:
- player.pos.y += 0.1
- elif keyboard.down:
- player.pos.y -= 0.1
- elif keyboard.l:
- player.pos.z += 0.1
- elif keyboard.p:
- player.pos.z-= 0.1
-
- if pyray.is_key_pressed(pyray.KEY_Z):
- global td
- td = not td
-
-
-def draw3d():
- if td:
- #pyray.draw_plane((0, 0, 0), (300,300), DARKRED)
- pyray.draw_grid(10, 1)
- pyray.draw_plane((player.x, 0, player.z), (1,1), GRAY)
- pyray.draw_ray([o,[0,0,1]],BLUE)
- pyray.draw_ray([o,[0,1,0]],GREEN)
- pyray.draw_ray([o,[1,0,0]],RED)
- player.draw()
-
-
-def draw2dbackground():
- clear('white')
- origin = rl.GetWorldToScreen(o, camera[0])
- rl.DrawText(b"0", int(origin.x), int(origin.y), 20, BLACK)
- for i in range (0,11):
- xa = rl.GetWorldToScreen((o.x+i,o.y,o.z), camera[0])
- ya = rl.GetWorldToScreen((o.x,o.y+i,o.z), camera[0])
- za = rl.GetWorldToScreen((o.x,o.y,o.z+i), camera[0])
- pyray.draw_text(str(i), int(xa.x), int(xa.y), 20, RED)
- pyray.draw_text(str(i), int(ya.x), int(ya.y), 20, GREEN)
- if td:
- pyray.draw_text(str(i), int(za.x), int(za.y), 20, BLUE)
-
- pyray.draw_text(f"X: {int(player.x+5)}", 10, 10, 30, RED)
- pyray.draw_text(f"Y: {int(player.y)}", 10, 50, 30, GREEN)
- if td:
- pyray.draw_text(f"Z: {int(player.z+5)}", 10, 110, 30, BLUE)
-
-
-
-run()
diff --git a/create_define_consts.py b/create_define_consts.py
new file mode 100644
index 0000000..6817e4c
--- /dev/null
+++ b/create_define_consts.py
@@ -0,0 +1,105 @@
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+from raylib import rl, ffi
+
+from inspect import ismethod, getmembers, isbuiltin
+import inflection, sys, json, re
+
+two_or = re.compile(r'''\(\s*([^\s]*)\s*\|\s*([^\s]*)\s*\)''')
+three_or = re.compile(r'''\(\s*([^\s]*)\s*\|\s*([^\s]*)\s*\|\s*(^\s*)\s*\)''')
+two_mult = re.compile(r'''\(\s*([^\s]*)\s*\*\s*([^\s]*)\s*\)''')
+two_div = re.compile(r'''\(\s*([^\s]*)\s*/\s*([^\s]*)\s*\)''')
+
+def process(filename):
+ f = open(filename, "r")
+ js = json.load(f)
+ known_define = []
+ known_enum = []
+ for e in js['enums']:
+ if e['name'] and e['values']:
+ for v in e['values']:
+ if v['name']:
+ known_enum.append(str(v['name']).strip())
+ for e in js['defines']:
+ if e['type'] in ('INT', 'FLOAT', 'STRING'):
+ if e['type'] == 'INT':
+ print(e['name'] + ": int = " + str(e['value']).strip())
+ elif e['type'] == 'FLOAT':
+ print(e['name'] + ": float = " + str(e['value']).strip())
+ else:
+ print(e['name'] + ": str = \"" + str(e['value']).strip() + '"')
+ known_define.append(str(e['name']).strip())
+ elif e['type'] == "UNKNOWN":
+ strval = str(e['value']).strip()
+ if strval.startswith("__"):
+ continue
+ if strval in known_enum:
+ print(e['name'] + " = raylib." + strval)
+ elif strval in known_define:
+ print(e['name'] + " = " + strval)
+ else:
+ matches = two_or.match(strval)
+ if not matches:
+ matches = three_or.match(strval)
+ if matches:
+ match_defs = [str(m).strip() for m in matches.groups()]
+ if all(d in known_enum for d in match_defs):
+ print(e['name'] + " = " + " | ".join(("raylib."+m) for m in match_defs))
+ elif all(d in known_define for d in match_defs):
+ print(e['name'] + " = " + " | ".join(match_defs))
+ else:
+ continue
+ known_define.append(str(e['name']).strip())
+ elif e['type'] == "FLOAT_MATH":
+ strval = str(e['value']).strip()
+ matches = two_mult.match(strval)
+ if matches:
+ match_defs = [str(m).strip() for m in matches.groups()]
+ match_parts = []
+ for m in match_defs:
+ if "." in m:
+ match_parts.append(m.rstrip("f"))
+ else:
+ match_parts.append(m)
+ if all(d in known_enum for d in match_parts):
+ print(e['name'] + " = " + " * ".join(("raylib." + m) for m in match_parts))
+ elif all(d in known_define for d in match_parts):
+ print(e['name'] + " = " + " * ".join(match_parts))
+ else:
+ matches = two_div.match(strval)
+ if matches:
+ match_defs = [str(m).strip() for m in matches.groups()]
+ match_parts = []
+ for m in match_defs:
+ if "." in m:
+ match_parts.append(m.rstrip("f"))
+ else:
+ match_parts.append(m)
+ if any(d in known_enum for d in match_parts):
+ print(e['name'] + " = " + " / ".join(("raylib." + m) for m in match_parts))
+ elif any(d in known_define for d in match_parts):
+ print(e['name'] + " = " + " / ".join(match_parts))
+ else:
+ continue
+
+print("import raylib\n")
+
+process("raylib.json")
+process("raymath.json")
+process("rlgl.json")
+process("raygui.json")
+process("physac.json")
+process("glfw3.json")
+
diff --git a/create_enums.py b/create_enums.py
new file mode 100644
index 0000000..d7fbeec
--- /dev/null
+++ b/create_enums.py
@@ -0,0 +1,38 @@
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+from raylib import rl, ffi
+
+from inspect import ismethod, getmembers, isbuiltin
+import inflection, sys, json
+
+def process(filename):
+ f = open(filename, "r")
+ js = json.load(f)
+
+ for e in js['enums']:
+ if e['name'] and e['values']:
+ print ("class "+e['name']+"("+"IntEnum):")
+ print(f' """{e['description']}."""')
+ for value in e['values']:
+ print(" "+value['name']+" = "+str(value['value']))
+ print("")
+
+print("""from enum import IntEnum
+""")
+
+process("raylib.json")
+process("raygui.json")
+process("glfw3.json")
+process("physac.json")
diff --git a/create_stub_pyray.py b/create_stub_pyray.py
new file mode 100644
index 0000000..fb334e7
--- /dev/null
+++ b/create_stub_pyray.py
@@ -0,0 +1,196 @@
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+from pathlib import Path
+from raylib import rl, ffi
+from pyray import _underscore
+from inspect import ismethod, getmembers, isbuiltin
+import inflection, sys, json
+
+known_functions = {}
+known_structs = {}
+for filename in (Path("raylib.json"), Path("raymath.json"), Path("rlgl.json"), Path("raygui.json"), Path("physac.json"),
+ Path("glfw3.json")):
+ f = open(filename, "r")
+ js = json.load(f)
+ for fn in js["functions"]:
+ if fn["name"] not in known_functions:
+ known_functions[fn["name"]] = fn
+ for st in js["structs"]:
+ if st["name"] not in known_structs:
+ known_structs[st["name"]] = st
+ for e in js['enums']:
+ if e['name'] and e['values']:
+ print("class "+e['name']+"(int):")
+ print(f' """{e['description']}."""')
+ for value in e['values']:
+ print(" "+value['name']+" = "+str(value['value']))
+ print("")
+
+
+def ctype_to_python_type(t):
+ if t == '_Bool':
+ return "bool"
+ elif t == 'void':
+ return 'None'
+ elif t == "long":
+ return "int"
+ elif t == "unsigned long long":
+ return "int"
+ elif t == "uint64_t":
+ return "int"
+ elif t == "short":
+ return "int"
+ elif t == "unsigned short":
+ return "int"
+ elif t == "double":
+ return "float"
+ elif "char * *" in t:
+ return "list[str]"
+ elif "char *" in t:
+ return "str"
+ elif t == "char":
+ return "str" # not sure about this one
+ elif t == "unsigned char":
+ return "int"
+ elif "*" in t:
+ return "Any"
+ elif "[" in t:
+ return "list" # TODO FIXME type of items in the list
+ elif t.startswith("struct"):
+ return t.replace("struct ", "")
+ elif t.startswith("unsigned"):
+ return t.replace("unsigned ", "")
+ elif t.startswith("enum"):
+ return t.replace("enum ", "")
+ else:
+ return t
+
+
+print("""from typing import Any
+from warnings import deprecated
+import _cffi_backend # type: ignore
+
+ffi: _cffi_backend.FFI
+PhysicsShapeType = int
+""")
+
+# These words can be used for c arg names, but not in python
+reserved_words = ("in", "list", "tuple", "set", "dict", "from", "range", "min", "max", "any", "all", "len")
+
+for name, attr in getmembers(rl):
+ uname = _underscore(name)
+ if isbuiltin(attr) or str(type(attr)) == "":
+ json_object = known_functions.get(name, None)
+ if json_object is None:
+ # this is _not_ an exported function from raylib, raymath, rlgl raygui or physac
+ # so we don't want it in the pyray API
+ continue
+ sig = ""
+ for i, arg in enumerate(ffi.typeof(attr).args):
+ param_name = arg.cname.replace("struct", "").replace("char *", "str").replace("*",
+ "_pointer").replace(
+ " ", "") + "_" + str(i)
+ if 'params' in json_object:
+ p = json_object['params']
+ param_name = list(p)[i]['name']
+ # don't use a python reserved word:
+ if param_name in reserved_words:
+ param_name = param_name + "_" + str(i)
+ param_type = ctype_to_python_type(arg.cname)
+ if "struct" in arg.cname:
+ param_type += "|list|tuple"
+ sig += f"{param_name}: {param_type},"
+
+ return_type = ffi.typeof(attr).result.cname
+
+ description = attr.__doc__
+
+ if 'description' in json_object:
+ description = json_object['description']
+
+ if 'physics' in uname:
+ print('@deprecated("Raylib no longer recommends the use of Physac library")')
+ print(f'def {uname}({sig}) -> {ctype_to_python_type(return_type)}:')
+ print(f' """{description}."""')
+ print(f' ...')
+
+ elif str(type(attr)) == "":
+ return_type = ffi.typeof(attr).result.cname
+ print(
+ f'def {uname}(*args) -> {ctype_to_python_type(return_type)}:\n """VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI"""\n ...')
+ else:
+ # print("*****", str(type(attr)))
+ t = str(type(attr))[8:-2] # this isolates the type
+ if t != "int":
+ print(f"{name}: {t}")
+
+for struct in ffi.list_types()[0]:
+ print("processing", struct, file=sys.stderr)
+
+ if ffi.typeof(struct).kind == "struct":
+ json_object = known_structs.get(struct, None)
+ if json_object is None:
+ # this is _not_ an exported struct from raylib, raymath, rlgl raygui or physac
+ # so we don't want it in the pyray API
+ continue
+ if ffi.typeof(struct).fields is None:
+ print("weird empty struct, skipping " + struct, file=sys.stderr)
+ continue
+ print(f"class {struct}:")
+ print(f' """{known_structs[struct]['description']}."""')
+ sig = ""
+ for arg in ffi.typeof(struct).fields:
+ ptype = ctype_to_python_type(arg[1].type.cname)
+ if arg[1].type.kind == "struct":
+ ptype += "|list|tuple"
+ sig += f", {arg[0]}: {ptype}|None = None"
+ print(f" def __init__(self{sig}):")
+
+ for arg in ffi.typeof(struct).fields:
+ print(f" self.{arg[0]}:{ctype_to_python_type(arg[1].type.cname)} = {arg[0]} # type: ignore")
+
+ # elif ffi.typeof(struct).kind == "enum":
+ # print(f"{struct}: int")
+ else:
+ print("WARNING: SKIPPING UNKNOWN TYPE", ffi.typeof(struct), file=sys.stderr)
+
+print("""
+LIGHTGRAY : Color
+GRAY : Color
+DARKGRAY : Color
+YELLOW : Color
+GOLD : Color
+ORANGE : Color
+PINK : Color
+RED : Color
+MAROON : Color
+GREEN : Color
+LIME : Color
+DARKGREEN : Color
+SKYBLUE : Color
+BLUE : Color
+DARKBLUE : Color
+PURPLE : Color
+VIOLET : Color
+DARKPURPLE : Color
+BEIGE : Color
+BROWN : Color
+DARKBROWN : Color
+WHITE : Color
+BLACK : Color
+BLANK : Color
+MAGENTA : Color
+RAYWHITE : Color
+""")
diff --git a/create_stub_static.py b/create_stub_static.py
new file mode 100644
index 0000000..0c43c6d
--- /dev/null
+++ b/create_stub_static.py
@@ -0,0 +1,186 @@
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+from pathlib import Path
+from raylib import rl, ffi
+from inspect import ismethod, getmembers, isbuiltin
+import inflection, sys, json
+
+known_functions = {}
+known_structs = {}
+for filename in (Path("raylib.json"), Path("raymath.json"), Path("rlgl.json"), Path("raygui.json"), Path("physac.json"),
+ Path("glfw3.json")):
+ f = open(filename, "r")
+ js = json.load(f)
+ for fn in js["functions"]:
+ if fn["name"] not in known_functions:
+ known_functions[fn["name"]] = fn
+ for st in js["structs"]:
+ if st["name"] not in known_structs:
+ known_structs[st["name"]] = st
+
+
+def ctype_to_python_type(t):
+ if t == '_Bool':
+ return "bool"
+ elif t == 'void':
+ return 'None'
+ elif t == "long":
+ return "int"
+ elif t == "unsigned long long":
+ return "int"
+ elif t == "uint64_t":
+ return "int"
+ elif t == "short":
+ return "int"
+ elif t == "unsigned short":
+ return "int"
+ elif t == "double":
+ return "float"
+ elif "char * *" in t:
+ return "list[bytes]"
+ elif "char *" in t:
+ return "bytes"
+ elif "char" in t:
+ return "bytes" # not sure about this one
+ elif "*" in t:
+ return "Any"
+ elif "[" in t:
+ return "list" # TODO FIXME type of items in the list
+ elif t.startswith("struct"):
+ return t.replace("struct ", "")
+ elif t.startswith("unsigned"):
+ return t.replace("unsigned ", "")
+ elif t.startswith("enum"):
+ return t.replace("enum ", "")
+ else:
+ return t
+
+
+print("""from typing import Any
+from warnings import deprecated
+import _cffi_backend # type: ignore
+
+ffi: _cffi_backend.FFI
+rl: _cffi_backend.Lib
+PhysicsShapeType = int
+
+class struct: ...
+
+""")
+
+# These words can be used for c arg names, but not in python
+reserved_words = ("in", "list", "tuple", "set", "dict", "from", "range", "min", "max", "any", "all", "len")
+
+for name, attr in getmembers(rl):
+ uname = name
+ if isbuiltin(attr) or str(type(attr)) == "":
+ json_object = known_functions.get(name, {})
+ sig = ""
+ for i, arg in enumerate(ffi.typeof(attr).args):
+ if ")(" in arg.cname:
+ # fn signature in arg types
+ param_name = str(arg.cname).split("(", 1)[0] + "_callback_" + str(i)
+ else:
+ param_name = arg.cname.replace("struct", "").replace("char *", "str").replace("*",
+ "_pointer").replace(" ",
+ "") + "_" + str(
+ i)
+ if 'params' in json_object:
+ p = json_object['params']
+ # print("param_name: ", param_name, "i", i, "params: ",p,file=sys.stderr)
+ param_name = list(p)[i]['name']
+ # don't use a python reserved word:
+ if param_name in reserved_words:
+ param_name = param_name + "_" + str(i)
+ param_type = ctype_to_python_type(arg.cname)
+ if "struct" in arg.cname:
+ param_type += "|list|tuple"
+ sig += f"{param_name}: {param_type},"
+
+ return_type = ffi.typeof(attr).result.cname
+ description = attr.__doc__
+
+ if 'description' in json_object:
+ description = json_object['description']
+
+ if 'Physics' in uname:
+ print('@deprecated("Raylib no longer recommends the use of Physac library")')
+ print(f'def {uname}({sig}) -> {ctype_to_python_type(return_type)}:')
+ print(f' """{description}."""')
+ print(f' ...')
+
+
+ elif str(type(attr)) == "":
+ return_type = ffi.typeof(attr).result.cname
+ print(
+ f'def {uname}(*args) -> {ctype_to_python_type(return_type)}:\n """VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI"""\n ...')
+ else:
+ # print("*****", str(type(attr)))
+ print(f"{name}: {str(type(attr))[8:-2]}") # this isolates the type
+
+for struct in ffi.list_types()[0]:
+ print("processing", struct, file=sys.stderr)
+ if ffi.typeof(struct).kind == "struct":
+ # if ffi.typeof(struct).fields is None:
+ # print("weird empty struct, skipping", file=sys.stderr)
+ # continue
+ print(f"class {struct}:")
+ # sig = ""
+ fields = ffi.typeof(struct).fields
+ if fields is not None:
+ #print(ffi.typeof(struct).fields)
+ #print(f" {arg}: {arg}")
+ # print(f" def __init__(self{sig}):")
+ #
+ for arg in ffi.typeof(struct).fields:
+ print(f" {arg[0]}: {ctype_to_python_type(arg[1].type.cname)}")
+ else:
+ print(" ...")
+ # print(f" self.{arg[0]}={arg[0]}")
+
+ elif ffi.typeof(struct).kind == "enum":
+ print(f"{struct} = int")
+ else:
+ print("WARNING: SKIPPING UNKNOWN TYPE", ffi.typeof(struct), file=sys.stderr)
+
+
+print("""
+LIGHTGRAY : Color
+GRAY : Color
+DARKGRAY : Color
+YELLOW : Color
+GOLD : Color
+ORANGE : Color
+PINK : Color
+RED : Color
+MAROON : Color
+GREEN : Color
+LIME : Color
+DARKGREEN : Color
+SKYBLUE : Color
+BLUE : Color
+DARKBLUE : Color
+PURPLE : Color
+VIOLET : Color
+DARKPURPLE : Color
+BEIGE : Color
+BROWN : Color
+DARKBROWN : Color
+WHITE : Color
+BLACK : Color
+BLANK : Color
+MAGENTA : Color
+RAYWHITE : Color
+""")
diff --git a/docs-src/BUILDING.rst b/docs-src/BUILDING.rst
new file mode 120000
index 0000000..0cbe2c2
--- /dev/null
+++ b/docs-src/BUILDING.rst
@@ -0,0 +1 @@
+../BUILDING.rst
\ No newline at end of file
diff --git a/docs-src/Makefile b/docs-src/Makefile
new file mode 100644
index 0000000..d4bb2cb
--- /dev/null
+++ b/docs-src/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = .
+BUILDDIR = _build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs-src/README.md b/docs-src/README.md
new file mode 120000
index 0000000..32d46ee
--- /dev/null
+++ b/docs-src/README.md
@@ -0,0 +1 @@
+../README.md
\ No newline at end of file
diff --git a/docs-src/RPI.rst b/docs-src/RPI.rst
new file mode 120000
index 0000000..60349ff
--- /dev/null
+++ b/docs-src/RPI.rst
@@ -0,0 +1 @@
+../RPI.rst
\ No newline at end of file
diff --git a/docs-src/_config.yml b/docs-src/_config.yml
new file mode 100644
index 0000000..c419263
--- /dev/null
+++ b/docs-src/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-cayman
\ No newline at end of file
diff --git a/docs-src/conf.py b/docs-src/conf.py
new file mode 100644
index 0000000..9cf3c85
--- /dev/null
+++ b/docs-src/conf.py
@@ -0,0 +1,65 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+import os
+import sys
+import sphinx_rtd_theme
+sys.path.insert(0, os.path.abspath('../'))
+
+
+# -- Project information -----------------------------------------------------
+
+project = 'Raylib Python'
+copyright = '2021, Richard Smith'
+author = 'Richard Smith'
+
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.autosummary', 'myst_parser', 'autoapi.extension', "sphinx_rtd_theme", 'sphinx.ext.todo']
+
+autoapi_dirs = ['../raylib', '../pyray']
+
+autoapi_file_patterns = ['*.pyi', '*.py']
+
+autoapi_generate_api_docs = False
+
+
+autosummary_generate = True
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+#
+html_theme = "sphinx_rtd_theme"
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+pygments_style = 'sphinx'
+
+todo_include_todos = True
\ No newline at end of file
diff --git a/docs-src/dynamic.rst b/docs-src/dynamic.rst
new file mode 120000
index 0000000..1ffa1a9
--- /dev/null
+++ b/docs-src/dynamic.rst
@@ -0,0 +1 @@
+../dynamic/README.rst
\ No newline at end of file
diff --git a/docs-src/index.rst b/docs-src/index.rst
new file mode 100644
index 0000000..2177832
--- /dev/null
+++ b/docs-src/index.rst
@@ -0,0 +1,25 @@
+.. RL Zero documentation master file, created by
+ sphinx-quickstart on Mon Jul 12 14:03:57 2021.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Raylib Python
+===================================
+
+.. toctree::
+ :maxdepth: 1
+ :caption: Contents:
+
+ README
+ pyray
+ raylib
+ dynamic
+ BUILDING
+ RPI
+
+
+* :ref:`search`
+
+
+
+
diff --git a/docs-src/make.bat b/docs-src/make.bat
new file mode 100644
index 0000000..922152e
--- /dev/null
+++ b/docs-src/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=.
+set BUILDDIR=_build
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.http://sphinx-doc.org/
+ exit /b 1
+)
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/docs-src/pyray.rst b/docs-src/pyray.rst
new file mode 100644
index 0000000..2a2ac0e
--- /dev/null
+++ b/docs-src/pyray.rst
@@ -0,0 +1,68 @@
+Python API
+==============
+
+This is a wrapper around the C API with some syntactic sugar.
+
+The API is *still the same as Raylib*, so you should still reply on:
+
+* `the C Raylib docs `_
+
+* `the C Raylib examples `_
+
+* `the C Raylib header file `_
+
+
+The *differences* are:
+
+* the function names are in **snake_case**.
+
+* Some string and pointer conversions are handled automatically.
+
+* There are some helper functions to create structures.
+
+Examples
+--------
+
+Example program:
+
+.. code-block::
+
+ import pyray as pr
+
+ pr.init_window(800, 450, "Hello Pyray")
+ pr.set_target_fps(60)
+
+ camera = pr.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0)
+
+ while not pr.window_should_close():
+ pr.update_camera(camera, pr.CAMERA_ORBITAL)
+ pr.begin_drawing()
+ pr.clear_background(pr.RAYWHITE)
+ pr.begin_mode_3d(camera)
+ pr.draw_grid(20, 1.0)
+ pr.end_mode_3d()
+ pr.draw_text("Hello world", 190, 200, 20, pr.VIOLET)
+ pr.end_drawing()
+ pr.close_window()
+
+.. tip:: New in 3.7.0.post9:
+
+ You can also now import the functions with no prefix:
+
+ .. code-block::
+
+ from pyray import *
+
+ init_window(800, 450, "Raylib texture test")
+ ...
+
+
+`See all examples here `_
+
+
+API reference
+-------------
+
+.. autoapimodule:: pyray
+ :members:
+ :undoc-members:
diff --git a/docs-src/raylib.rst b/docs-src/raylib.rst
new file mode 100644
index 0000000..b3119dd
--- /dev/null
+++ b/docs-src/raylib.rst
@@ -0,0 +1,63 @@
+C API
+=============
+
+The goal of the C API is make usage as similar to the original C as CFFI will allow.
+So the `example programs `_
+are very, very similar to the C originals.
+
+Example program:
+
+.. code-block::
+
+ from raylib import *
+
+ InitWindow(800, 450, b"Hello Raylib")
+ SetTargetFPS(60)
+
+ camera = ffi.new("struct Camera3D *", [[18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0])
+
+ while not WindowShouldClose():
+ UpdateCamera(camera, CAMERA_ORBITAL)
+ BeginDrawing()
+ ClearBackground(RAYWHITE)
+ BeginMode3D(camera[0])
+ DrawGrid(20, 1.0)
+ EndMode3D()
+ DrawText(b"Hellow World", 190, 200, 20, VIOLET)
+ EndDrawing()
+ CloseWindow()
+
+If you want to be more portable (i.e. same code will work with dynamic bindings) you can prefix the functions like this:
+
+.. code-block::
+
+ from raylib import ffi, rl, colors
+
+ rl.InitWindow(800, 450, b"Hello Raylib")
+ rl.SetTargetFPS(60)
+
+ ...
+
+
+
+.. note:: Whenever you need to convert stuff between C and Python see https://cffi.readthedocs.io
+
+.. important:: Your **primary reference** should always be
+
+ * `the C Raylib docs `_
+
+ * `the C Raylib examples `_
+
+ * `the C Raylib header file `_
+
+However, here is a list of available functions:
+
+Functions API reference
+-----------------------
+
+.. autoapimodule:: raylib
+ :members:
+ :undoc-members:
+
+
+
diff --git a/docs-src/requirements.txt b/docs-src/requirements.txt
new file mode 100644
index 0000000..9e4694f
--- /dev/null
+++ b/docs-src/requirements.txt
@@ -0,0 +1 @@
+myst_parser
diff --git a/docs/.buildinfo b/docs/.buildinfo
new file mode 100644
index 0000000..48257a1
--- /dev/null
+++ b/docs/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: f2032a6434b52f7c68551d0ad70d555b
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/.nojekyll b/docs/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/docs/BUILDING.html b/docs/BUILDING.html
new file mode 100644
index 0000000..b3a1d99
--- /dev/null
+++ b/docs/BUILDING.html
@@ -0,0 +1,310 @@
+
+
+
+
+
+
+
+
+ Building from source — Raylib Python documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
There’s a hardcoded path (to the raylib header files) in raylib/build.py you will probably need to edit.
+Would be useful if some Windows user could figure out how to auto detect this.
On most platforms it should install a binary wheel. If yours isn’t available then pip will attempt to build from
+source, in which case you will need to have Raylib development libs installed, e.g.
+using homebrew, apt, etc.
Binaries require OS newer than Ubuntu 2020, x64 or arm64. Otherwise build from source.
+(Pip should attempt automatically but will need Raylib itself installed and also pkg-config.)
+
The arm64 binaries are built on Raspberry Pi arm64 Bullseye with OpenGL 2.0
+so may not work on other boards.
There are two modules in the raylib package, raylib and pyray. (There is no separate package for
+pyray. Do notpipinstallpyray). You can use either or both:
+
+
If you are familiar with C coding and the Raylib C library and you want to use an exact copy of the C API
Pygbag >=0.8.7 supports running in a web browser. Usually the latest git version
+is recommended.
+
Make a folder my_project with a file main.py:
+
# /// script
+# dependencies = [
+# "cffi",
+# "raylib"
+# ]
+# ///
+importasyncio
+importplatform
+frompyrayimport*
+
+asyncdefmain():# You MUST have an async main function
+ init_window(500,500,"Hello")
+ platform.window.window_resize()# You MAY want to add this line
+ whilenotwindow_should_close():
+ begin_drawing()
+ clear_background(WHITE)
+ draw_text("Hello world",190,200,20,VIOLET)
+ end_drawing()
+ awaitasyncio.sleep(0)# You MUST call this in your main loop
+ close_window()
+
+asyncio.run(main())
+
+
+
Then to create the web files and launch a web server:
Use Pypy rather than standard CPython. It is much, much faster and will make more difference than any other optimisations you might do.
+
Every call to C is costly, so it’s slightly faster if you use Python data structures and functions when calculating
+in your update loop
+and then only convert them to C data structures when you have to call the C functions for drawing.
+
The raylib.* functions are potentially slightly faster than the pyray.* equivalents, so if you need a tiny bit more performance
+you can switch your inner loop functions to these.
+
There is a version of Python that is faster than Pypy: GraalPy. However it’s not fully compatible with all Python
+packages. It doesn’t work with CFFI and so doesn’t work with this binding. But it is compatible with the
+Java binding, Jaylib! There is an example of this here: https://github.com/electronstudio/megabunny/tree/master/raylib-python-jaylib
We have published binary wheels compiled for 64-bit Raspberry OS Bullseye in X11 mode.
+
python-mpipinstall--break-system-packagesraylib
+
+
+
Alternatively there is a DRM wheel called raylib_drm to use the framebuffer without X11. You can’t have both wheels
+installed at once.
+
If it doesn’t work, or you’re not on Bullseye, or you’re 32 bit, you will need to compile your own raylib. See below.
+For full instructions on this, see https://github.com/raysan5/raylib/wiki/Working-on-Raspberry-Pi . If you need help with this ask Raylib.
If you intend to use the Broadcom proprietary Open GL ES 2.0 drivers (the ones installed by Raspbian into /opt/vc and compiled in Raylib
+with PLATFORM_RPI) be aware they not work with Bullseye and have not been tested with the bindings. They will probably
+require additional linker arguments to be added to build.py. Suggest you try PLATFORM_DRM instead.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/_sources/BUILDING.rst.txt b/docs/_sources/BUILDING.rst.txt
new file mode 100644
index 0000000..b9ccd84
--- /dev/null
+++ b/docs/_sources/BUILDING.rst.txt
@@ -0,0 +1,221 @@
+Building from source
+====================
+
+Have Pip build from source
+--------------------------
+
+This is useful if the binaries don’t work on your system, or you want to use a newer version of Raylib.
+
+First make sure Raylib is installed. On Linux/Mac it must include the pkg-config files. Best way to ensure this
+is to compile and install Raylib using CMake: https://github.com/raysan5/raylib/wiki/Working-on-GNU-Linux#build-raylib-using-cmake
+
+Requirements for build: cmake, pkg-config.
+
+::
+
+ cd raylib-5.0
+ mkdir build
+ cd build
+ cmake -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ make
+ sudo make install
+
+
+
+Then ask Pip to build from source:
+
+::
+
+ pip3 install --no-cache-dir --no-binary raylib --upgrade --force-reinstall raylib
+
+Or, Build from source manually
+------------------------------
+
+Useful if the Pip build doesn’t work and you want to debug it, or you want to contribute to the
+project.
+
+.. attention::
+ If the Pip build doesn’t work, please submit a bug. (And if you have
+ fixed it, a PR.)
+
+Manual instructions follow, but are probably outdated, so see instead how we actually build the wheels
+at https://github.com/electronstudio/raylib-python-cffi/blob/master/.github/workflows/build.yml
+
+Windows manual build
+~~~~~~~~~~~~~~~~~~~~
+
+Clone this repo including submodules so you get correct version of
+Raylib.
+
+::
+
+ git clone --recurse-submodules https://github.com/electronstudio/raylib-python-cffi
+
+Open Visual C++ command shell.
+
+Fix the symlink that doesnt work on Windows
+
+::
+
+ cd raylib-python-cffi
+ copy raylib-c\src\raylib.h raylib\raylib.h
+
+Build and install Raylib from the raylib-c directory.
+
+::
+
+ cd raylib-python-cffi/raylib-c
+ mkdir build
+ cd build
+ cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..
+ msbuild raylib.sln /target:raylib /property:Configuration=Release
+ copy raylib\Release\raylib.lib ..\..
+ cd ..\..
+
+
+
+To build a binary wheel distribution:
+
+::
+
+ rmdir /Q /S build
+ pip3 install cffi
+ pip3 install wheel
+ python setup.py bdist_wheel
+
+.. TODO::
+ There's a hardcoded path (to the raylib header files) in `raylib/build.py` you will probably need to edit.
+ Would be useful if some Windows user could figure out how to auto detect this.
+
+
+Then install it:
+
+::
+
+ pip3 install dist\raylib-3.7.0-cp37-cp37m-win_amd64.whl
+
+(Note: your wheel’s filename will probably be different than the one
+here.)
+
+Linux manual build
+~~~~~~~~~~~~~~~~~~~~~~
+
+Clone this repo including submodules so you get correct version of
+Raylib.
+
+::
+
+ git clone --recurse-submodules https://github.com/electronstudio/raylib-python-cffi
+
+Build and install Raylib from the raylib-c directory.
+
+.. note::
+ You can instead use a different version of Raylib you installed from elsewhere, and it should still
+ work!
+
+::
+
+ sudo apt install cmake libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev pkg-config cmake
+ cd raylib-python-cffi/raylib-c
+ mkdir build
+ cd build
+ cmake -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ sudo make install
+
+.. note:: Optional: Build the Raylib shared libs, if you plan to use
+ ``raylib_dynamic`` binding.
+
+ ::
+
+ rm -rf *
+ cmake -DWITH_PIC=on -DBUILD_SHARED_LIBS=on -DCMAKE_BUILD_TYPE=Release ..
+ make
+ sudo make install
+
+::
+
+ cd ../..
+
+
+Build the Python library:
+
+::
+
+ pip3 install cffi
+ rm -rf build raylib/_raylib_cffi.*
+ python3 raylib/build.py
+
+.. note:: (Optional) To update the Linux dynamic libs (names will be different on other platforms):
+
+ ::
+
+ rm dynamic/raylib/*.so*
+ cp -P /usr/local/lib/libraylib.so* dynamic/raylib/
+
+To build a binary wheel distribution:
+
+::
+
+ pip3 install wheel
+ python3 setup.py bdist_wheel
+
+
+Then install it:
+
+::
+
+ pip3 install dist/raylib*.whl
+
+To build a complete set of libs for Python 3.6, 3.7, 3.8 and 3.9:
+
+::
+
+ ./raylib/build_multi.sh
+
+.. warning::
+ pypi wont accept Linux packages unless they are built
+ ``--plat-name manylinux2014_x86_64`` so on linux please run
+ ``./raylib/build_multi_linux.sh`` )
+
+.. TODO::
+ Separate the instructions for preparing the dynamic module
+ from the instructions for building the static module!
+
+
+
+Macos manual build
+~~~~~~~~~~~~~~~~~~~~~~
+
+These instructions have been tested on Macos 10.14.
+
+Clone this repo including submodules so you get correct version of
+Raylib.
+
+::
+
+ git clone --recurse-submodules https://github.com/electronstudio/raylib-python-cffi
+
+Build and install Raylib from the raylib-c directory.
+
+::
+
+ cd raylib-python-cffi/raylib-c/
+ mkdir build
+ cd build
+ cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..
+ make
+ sudo make install
+ cd ../..
+
+
+Build and install module.
+
+::
+
+ pip3 install cffi
+ rm -rf build raylib/_raylib_cffi.*
+ python3 raylib/build.py
+ pip3 install wheel
+ python3 setup.py install
+
+
diff --git a/docs/_sources/README.md.txt b/docs/_sources/README.md.txt
new file mode 100644
index 0000000..64c695b
--- /dev/null
+++ b/docs/_sources/README.md.txt
@@ -0,0 +1,278 @@
+# Python Bindings for Raylib 5.5
+## Libraries: raymath, raygui, rlgl, physac and GLFW
+## Backends: Desktop, SDL, DRM, Web
+## Platforms: Windows, Mac, Linux, Raspberry Pi, Web
+
+
+
+Chatroom: [Discord](https://discord.gg/fKDwt85aX6)
+
+HELP WANTED: [writing examples](https://github.com/electronstudio/raylib-python-cffi/issues/155)
+
+Features:
+
+* CFFI API static bindings.
+* Automatically generated to be as close as possible to
+original Raylib.
+* Faster, fewer bugs and easier to maintain than ctypes.
+* Commercial-friendly license.
+* Docstrings and auto-completion.
+* Type checking with Mypy
+
+
+[Full documentation](http://electronstudio.github.io/raylib-python-cffi)
+
+# Quickstart
+
+`pip3 install raylib==5.5.0.2 --break-system-packages`
+```python
+from pyray import *
+init_window(800, 450, "Hello")
+while not window_should_close():
+ begin_drawing()
+ clear_background(WHITE)
+ draw_text("Hello world", 190, 200, 20, VIOLET)
+ end_drawing()
+close_window()
+```
+
+# Installation
+
+If you are on a modern Linux you will probably want to create a venv:
+
+ python3 -m venv venv
+ source venv/bin/activate
+
+Then make sure you have the latest pip installed:
+
+ python3 -m pip install --upgrade pip
+
+Then install
+
+ python3 -m pip install setuptools
+ python3 -m pip install raylib==5.5.0.2
+
+On most platforms it should install a binary wheel. If yours isn't available then pip will attempt to build from
+source, in which case you will need to have Raylib development libs installed, e.g.
+using homebrew, apt, etc.
+
+## Windows
+
+Binaries require x64 Windows 10 or newer. (For x86 or older Windows you will have to build from source.)
+
+Use an [official Windows Python release](https://www.python.org/downloads/windows/) rather than WSL, MSYS, etc.
+
+## MacOS
+
+Binaries require:
+ * arm64 MacOS 14
+ * x64 MacOS 10.13, or newer.
+
+Older MacOS requires building from source but this is usually simple:
+
+ brew install pkg-config
+ brew install raylib
+ python3 -m pip install raylib==5.5.0.2
+
+(I do have binaries for arm64 MacOS 11, 12 and 13 but I have no way of testing they work, so post an issue
+if you want to test them.)
+
+## Linux
+
+Binaries require OS newer than Ubuntu 2020, x64 or arm64. Otherwise build from source.
+(Pip should attempt automatically but will need Raylib itself installed and also pkg-config.)
+
+The arm64 binaries are built on Raspberry Pi arm64 Bullseye with OpenGL 2.0
+so may not work on other boards.
+
+## Raspberry Pi
+
+[Using on Rasperry Pi](RPI.rst)
+
+# Backends
+
+## Dynamic binding version
+
+There is now a separate dynamic version of this binding:
+
+ python3 -m pip uninstall raylib
+ python3 -m pip install raylib_dynamic
+
+It works on some systems where the static version doesn't, [but be sure to read these caveats before using it](https://electronstudio.github.io/raylib-python-cffi/dynamic.html)
+
+You can't have multiple raylib packages installed at once.
+
+## SDL backend
+
+This is not well tested but has better support for controllers:
+
+ python3 -m pip uninstall raylib
+ python3 -m pip install raylib_sdl
+
+You can't have multiple raylib packages installed at once.
+
+## DRM backend
+
+This uses the Linux framebuffer for devices that don't run X11/Wayland:
+
+ python3 -m pip uninstall raylib
+ python3 -m pip install raylib_drm
+
+You can't have multiple raylib packages installed at once.
+
+## Problems?
+
+If it doesn't work, [try to build manually.](BUILDING.rst). If that works then [submit an issue](https://github.com/electronstudio/raylib-python-cffi/issues)
+to let us know what you did.
+
+If you need help you can try asking on [our discord](https://discord.gg/fKDwt85aX6). There is also a large [Raylib discord](https://discord.gg/raylib)
+for issues that are not Python-specific.
+
+If it still doesn't work, [submit an issue](https://github.com/electronstudio/raylib-python-cffi/issues).
+
+
+# How to use
+
+There are *two* modules in the raylib package, `raylib` and `pyray`. (There is no separate package for
+pyray. Do *not* `pip install pyray`). You can use either or both:
+
+### If you are familiar with C coding and the Raylib C library and you want to use an exact copy of the C API
+
+Use [the raylib module](https://electronstudio.github.io/raylib-python-cffi/raylib.html).
+
+### If you prefer a more Pythonistic API
+
+Use [the pyray module](https://electronstudio.github.io/raylib-python-cffi/pyray.html).
+
+# Running in a web browser
+
+[Pygbag](https://pypi.org/project/pygbag/) >=0.8.7 supports running in a web browser. Usually the latest git version
+is recommended.
+
+Make a folder `my_project` with a file `main.py`:
+
+```python
+# /// script
+# dependencies = [
+# "cffi",
+# "raylib"
+# ]
+# ///
+import asyncio
+import platform
+from pyray import *
+
+async def main(): # You MUST have an async main function
+ init_window(500, 500, "Hello")
+ platform.window.window_resize() # You MAY want to add this line
+ while not window_should_close():
+ begin_drawing()
+ clear_background(WHITE)
+ draw_text("Hello world", 190, 200, 20, VIOLET)
+ end_drawing()
+ await asyncio.sleep(0) # You MUST call this in your main loop
+ close_window()
+
+asyncio.run(main())
+```
+
+Then to create the web files and launch a web server:
+
+ python3.12 -m pip install --user --upgrade pygbag
+ python3.12 -m pygbag --PYBUILD 3.12 --ume_block 0 --template noctx.tmpl --git my_project
+
+Point your browser to http://localhost:8000
+
+Some features may not work, so you can disable them like this:
+
+```python
+if platform.system() != "Emscripten": # audio may not work on current version of emscripten
+ init_audio_device()
+```
+
+This is all done by Pygbag rather than by me, so you should probably contact them with any issues.
+Carefully read all their [documentation](https://pygame-web.github.io/).
+
+It does work for most of [these examples](https://electronstudio.github.io/raylib-python-cffi-pygbag-examples/)
+
+# App showcase
+
+[Tempest-raylib](https://github.com/Emtyloc/tempest-raylib)
+
+[KarabinerKeyboard](https://github.com/bilbofroggins/KarabinerKeyboard)
+
+[PyTaiko](https://github.com/Yonokid/PyTaiko)
+
+[DOOM-Clone](https://github.com/StanislavPetrovV/DOOM-Clone)
+
+[Tanki](https://github.com/pkulev/tanki)
+
+[Alloy Bloxel Editor](https://pebaz.itch.io/alloy-bloxel-editor)
+
+[Eidolon](https://github.com/Miou-zora/Eidolon)
+
+Add your app here!
+
+# RLZero
+
+A related library (that is a work in progress!):
+
+[A simplified API for Raylib for use in education and to enable beginners to create 3d games](https://github.com/electronstudio/rlzero)
+
+# Help wanted
+
+ * Converting more examples from C to Python
+ * Testing on more platforms
+
+# License
+
+Eclipse Public License, so you are free to
+statically link and use in non-free / proprietary / commercial projects!
+
+# Performance
+
+If you need more performance, do in this order:
+
+1. Use Pypy rather than standard CPython. It is much, much faster and will make more difference than any other optimisations you might do.
+
+2. Every call to C is costly, so it's slightly faster if you use Python data structures and functions when calculating
+in your update loop
+and then only convert them to C data structures when you have to call the C functions for drawing.
+
+3. The raylib.* functions are potentially *slightly* faster than the pyray.* equivalents, so if you need a tiny bit more performance
+you can switch your inner loop functions to these.
+
+4. There is a version of Python that is faster than Pypy: GraalPy. However it's not fully compatible with all Python
+packages. It doesn't work with CFFI and so doesn't work with this binding. But it *is* compatible with the
+*Java* binding, Jaylib! There is an example of this here: https://github.com/electronstudio/megabunny/tree/master/raylib-python-jaylib
+
+## Bunnymark
+
+
+| Library | Implementation | Bunnies (60 FPS) | Percentage |
+|--------------------------------|-------------------|------------------|------------|
+| Raylib 5.0 | C | 180000 | 100% |
+| Raylib Python CFFI 5.0.0.2 | Python 3.12 | 10500 | 5.8% |
+| Raylib Python CFFI 5.0.0.2 | Pypy 3.10 | 95000 | 53% |
+| Raylib 3.7 | C | 168100 | 100% |
+| Raylib Python CFFI 3.7 | Pypy 3.7 | 33800 | 20% |
+| Raylib Python CFFI 3.7 | Python 3.9 | 7700 | 4.5% |
+| Raylib Python CFFI 3.7 | Python 3.9 Nuitka | 8600 | 5.1% |
+| Raylib Python CFFI 3.7 Dynamic | Python 3.9 | 6300 | 3.7% |
+
+See also https://github.com/electronstudio/megabunny/
+
+# Packaging your app
+
+You can create a standalone binary using the Nuitka compiler. For example, here is how to package Bunnymark:
+
+ pip3 install nuitka
+ cd examples/textures
+ python3 -m nuitka --onefile --linux-onefile-icon resources/wabbit_alpha.png textures_bunnymark.py
+
+# Advert
+
+[RetroWar: 8-bit Party Battle](https://store.steampowered.com/app/664240/RetroWar_8bit_Party_Battle/?git) is out now. Defeat up to 15 of your friends in a tournament of 80s-inspired retro mini games.
+
+[Coding Games With Pygame Zero & Python](https://github.com/electronstudio/pygame-zero-book) is
+a book for Python beginners.
diff --git a/docs/_sources/RPI.rst.txt b/docs/_sources/RPI.rst.txt
new file mode 100644
index 0000000..a5c62e3
--- /dev/null
+++ b/docs/_sources/RPI.rst.txt
@@ -0,0 +1,97 @@
+Raspberry Pi
+====================
+
+Please use Raspberry Pi OS Bookworm. Bullseye should also work. Older OSes are not tested.
+
+Option 1: Binary wheel
+----------------------
+
+We have published binary wheels compiled for 64-bit Raspberry OS Bullseye in X11 mode.
+
+::
+
+ python -m pip install --break-system-packages raylib
+
+Alternatively there is a DRM wheel called ``raylib_drm`` to use the framebuffer without X11. You can't have both wheels
+installed at once.
+
+If it doesn't work, or you're not on Bullseye, or you're 32 bit, you will need to compile your own raylib. See below.
+For full instructions on this, see https://github.com/raysan5/raylib/wiki/Working-on-Raspberry-Pi . If you need help with this ask Raylib.
+
+Option 2: Compile Raylib from source X11 mode
+---------------------------------------------
+
+This should work for everyone.
+
+::
+
+ sudo apt update
+ sudo apt install python3-pip cmake libegl1-mesa-dev libgbm-dev libgles2-mesa-dev libdrm-dev libglfw3-dev
+ git clone https://github.com/raysan5/raylib.git --branch 5.0 --single-branch
+ cd raylib
+ mkdir build
+ rm -rf build/*
+ cd build
+ cmake -DPLATFORM="Desktop" -DOPENGL_VERSION=2.1 -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+ make
+ sudo make install
+ sudo cp -r ../src/external/glfw/include/GLFW /usr/local/include/
+
+Then have pip compile and install the wheel:
+
+::
+
+ python3 -m pip install --break-system-packages setuptools
+ python3 -m pip install --no-cache-dir --no-binary raylib --upgrade --force-reinstall --break-system-packages raylib==5.5.0.0
+
+Option 3: Compile Raylib from source DRM mode
+---------------------------------------------
+
+This seems to work on Raspberry Pi 4. Note you must not be running X11 when you run your programs.
+
+If you have ever installed Raylib or raylib-python-cffi before, remove all traces of it:
+
+::
+
+ sudo apt remove raylib raylib-dev libraylib libraylib-dev
+ sudo rm /usr/local/lib/pkgconfig/raylib.pc
+ sudo rm -rf /usr/local/lib/libraylib.* /usr/lib/libraylib.*
+
+Remove all GLFW:
+
+::
+
+ sudo apt remove libglfw3-dev libglfw3
+ sudo rm -rf /usr/local/include/GLFW
+
+Build a shared lib version of Raylib in DRM mode and install to /usr:
+
+::
+
+ sudo apt update
+ sudo apt install python3-pip cmake libegl1-mesa-dev libgbm-dev libgles2-mesa-dev libdrm-dev
+ git clone https://github.com/raysan5/raylib.git --branch 5.0 --single-branch
+ cd raylib
+ mkdir build
+ rm rf build/*
+ cd build
+ cmake -DPLATFORM="DRM" -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
+ make
+ sudo make install
+
+
+Then have pip compile and install the wheel:
+
+::
+
+ python3 -m pip install --break-system-packages setuptools
+ python3 -m pip install --no-cache-dir --no-binary raylib --upgrade --force-reinstall --break-system-packages raylib==5.5.0.0
+
+
+
+
+.. attention::
+
+ If you intend to use the Broadcom proprietary Open GL ES 2.0 drivers (the ones installed by Raspbian into ``/opt/vc`` and compiled in Raylib
+ with ``PLATFORM_RPI``) be aware they not work with Bullseye and have not been tested with the bindings. They will probably
+ require additional linker arguments to be added to ``build.py``. Suggest you try ``PLATFORM_DRM`` instead.
diff --git a/docs/_sources/dynamic.rst.txt b/docs/_sources/dynamic.rst.txt
new file mode 100644
index 0000000..e2877bf
--- /dev/null
+++ b/docs/_sources/dynamic.rst.txt
@@ -0,0 +1,41 @@
+Dynamic Bindings
+================
+
+CFFI ABI dynamic bindings avoid the need to compile a C extension module. They now been moved to a separate module::
+
+ python3 -m pip install raylib_dynamic
+
+.. warning::
+
+ There have been some weird failures with dynamic bindings and ctypes bindings before and often the
+ failures are silent
+ so you don't even know something has gone wrong and you don't get proper stacktraces. Also the static bindings are faster.
+ Therefore I personally recommend the static ones.
+ But the dynamic bindings have the advantage that you don't need to compile anything to install. You just need a Raylib DLL.
+
+The API is exactly the same as the static one documented here. (Therefore you can't have both modules installed at once.) The only difference is you can't do::
+
+ from raylib import *
+
+Instead you have to do::
+
+ from raylib import rl
+
+Then you access the functions with ``rl.`` prefix.
+
+See https://github.com/electronstudio/raylib-python-cffi/blob/master/dynamic/test_dynamic.py for an example.
+
+If you use the ``rl.`` prefix then code will work on both static and dynamic bindings.
+
+.. tip::
+
+ If you access functions via ``import pyray`` then there is no difference at all, but be warned this hasn't been tested much.
+
+.. note::
+
+ Standard Raylib DLLs do not include additional libraries like Raygui, Physac, etc. So these functions won't work.
+
+.. important::
+
+ If your system already has the Raylib library installed, you can set the environment variable ``USE_EXTERNAL_RAYLIB`` and it will
+ always be used instead of the bundled DLLs.
diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt
new file mode 100644
index 0000000..2177832
--- /dev/null
+++ b/docs/_sources/index.rst.txt
@@ -0,0 +1,25 @@
+.. RL Zero documentation master file, created by
+ sphinx-quickstart on Mon Jul 12 14:03:57 2021.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Raylib Python
+===================================
+
+.. toctree::
+ :maxdepth: 1
+ :caption: Contents:
+
+ README
+ pyray
+ raylib
+ dynamic
+ BUILDING
+ RPI
+
+
+* :ref:`search`
+
+
+
+
diff --git a/docs/_sources/pyray.rst.txt b/docs/_sources/pyray.rst.txt
new file mode 100644
index 0000000..2a2ac0e
--- /dev/null
+++ b/docs/_sources/pyray.rst.txt
@@ -0,0 +1,68 @@
+Python API
+==============
+
+This is a wrapper around the C API with some syntactic sugar.
+
+The API is *still the same as Raylib*, so you should still reply on:
+
+* `the C Raylib docs `_
+
+* `the C Raylib examples `_
+
+* `the C Raylib header file `_
+
+
+The *differences* are:
+
+* the function names are in **snake_case**.
+
+* Some string and pointer conversions are handled automatically.
+
+* There are some helper functions to create structures.
+
+Examples
+--------
+
+Example program:
+
+.. code-block::
+
+ import pyray as pr
+
+ pr.init_window(800, 450, "Hello Pyray")
+ pr.set_target_fps(60)
+
+ camera = pr.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0)
+
+ while not pr.window_should_close():
+ pr.update_camera(camera, pr.CAMERA_ORBITAL)
+ pr.begin_drawing()
+ pr.clear_background(pr.RAYWHITE)
+ pr.begin_mode_3d(camera)
+ pr.draw_grid(20, 1.0)
+ pr.end_mode_3d()
+ pr.draw_text("Hello world", 190, 200, 20, pr.VIOLET)
+ pr.end_drawing()
+ pr.close_window()
+
+.. tip:: New in 3.7.0.post9:
+
+ You can also now import the functions with no prefix:
+
+ .. code-block::
+
+ from pyray import *
+
+ init_window(800, 450, "Raylib texture test")
+ ...
+
+
+`See all examples here `_
+
+
+API reference
+-------------
+
+.. autoapimodule:: pyray
+ :members:
+ :undoc-members:
diff --git a/docs/_sources/raylib.rst.txt b/docs/_sources/raylib.rst.txt
new file mode 100644
index 0000000..b3119dd
--- /dev/null
+++ b/docs/_sources/raylib.rst.txt
@@ -0,0 +1,63 @@
+C API
+=============
+
+The goal of the C API is make usage as similar to the original C as CFFI will allow.
+So the `example programs `_
+are very, very similar to the C originals.
+
+Example program:
+
+.. code-block::
+
+ from raylib import *
+
+ InitWindow(800, 450, b"Hello Raylib")
+ SetTargetFPS(60)
+
+ camera = ffi.new("struct Camera3D *", [[18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0])
+
+ while not WindowShouldClose():
+ UpdateCamera(camera, CAMERA_ORBITAL)
+ BeginDrawing()
+ ClearBackground(RAYWHITE)
+ BeginMode3D(camera[0])
+ DrawGrid(20, 1.0)
+ EndMode3D()
+ DrawText(b"Hellow World", 190, 200, 20, VIOLET)
+ EndDrawing()
+ CloseWindow()
+
+If you want to be more portable (i.e. same code will work with dynamic bindings) you can prefix the functions like this:
+
+.. code-block::
+
+ from raylib import ffi, rl, colors
+
+ rl.InitWindow(800, 450, b"Hello Raylib")
+ rl.SetTargetFPS(60)
+
+ ...
+
+
+
+.. note:: Whenever you need to convert stuff between C and Python see https://cffi.readthedocs.io
+
+.. important:: Your **primary reference** should always be
+
+ * `the C Raylib docs `_
+
+ * `the C Raylib examples `_
+
+ * `the C Raylib header file `_
+
+However, here is a list of available functions:
+
+Functions API reference
+-----------------------
+
+.. autoapimodule:: raylib
+ :members:
+ :undoc-members:
+
+
+
diff --git a/docs/_static/_sphinx_javascript_frameworks_compat.js b/docs/_static/_sphinx_javascript_frameworks_compat.js
new file mode 100644
index 0000000..8141580
--- /dev/null
+++ b/docs/_static/_sphinx_javascript_frameworks_compat.js
@@ -0,0 +1,123 @@
+/* Compatability shim for jQuery and underscores.js.
+ *
+ * Copyright Sphinx contributors
+ * Released under the two clause BSD licence
+ */
+
+/**
+ * small helper function to urldecode strings
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
+ */
+jQuery.urldecode = function(x) {
+ if (!x) {
+ return x
+ }
+ return decodeURIComponent(x.replace(/\+/g, ' '));
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+ if (typeof s === 'undefined')
+ s = document.location.search;
+ var parts = s.substr(s.indexOf('?') + 1).split('&');
+ var result = {};
+ for (var i = 0; i < parts.length; i++) {
+ var tmp = parts[i].split('=', 2);
+ var key = jQuery.urldecode(tmp[0]);
+ var value = jQuery.urldecode(tmp[1]);
+ if (key in result)
+ result[key].push(value);
+ else
+ result[key] = [value];
+ }
+ return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+ function highlight(node, addItems) {
+ if (node.nodeType === 3) {
+ var val = node.nodeValue;
+ var pos = val.toLowerCase().indexOf(text);
+ if (pos >= 0 &&
+ !jQuery(node.parentNode).hasClass(className) &&
+ !jQuery(node.parentNode).hasClass("nohighlight")) {
+ var span;
+ var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
+ if (isInSVG) {
+ span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+ } else {
+ span = document.createElement("span");
+ span.className = className;
+ }
+ span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+ node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+ document.createTextNode(val.substr(pos + text.length)),
+ node.nextSibling));
+ node.nodeValue = val.substr(0, pos);
+ if (isInSVG) {
+ var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+ var bbox = node.parentElement.getBBox();
+ rect.x.baseVal.value = bbox.x;
+ rect.y.baseVal.value = bbox.y;
+ rect.width.baseVal.value = bbox.width;
+ rect.height.baseVal.value = bbox.height;
+ rect.setAttribute('class', className);
+ addItems.push({
+ "parent": node.parentNode,
+ "target": rect});
+ }
+ }
+ }
+ else if (!jQuery(node).is("button, select, textarea")) {
+ jQuery.each(node.childNodes, function() {
+ highlight(this, addItems);
+ });
+ }
+ }
+ var addItems = [];
+ var result = this.each(function() {
+ highlight(this, addItems);
+ });
+ for (var i = 0; i < addItems.length; ++i) {
+ jQuery(addItems[i].parent).before(addItems[i].target);
+ }
+ return result;
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+ jQuery.uaMatch = function(ua) {
+ ua = ua.toLowerCase();
+
+ var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+ /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+ /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+ /(msie) ([\w.]+)/.exec(ua) ||
+ ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+ [];
+
+ return {
+ browser: match[ 1 ] || "",
+ version: match[ 2 ] || "0"
+ };
+ };
+ jQuery.browser = {};
+ jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
diff --git a/docs/_static/basic.css b/docs/_static/basic.css
new file mode 100644
index 0000000..4738b2e
--- /dev/null
+++ b/docs/_static/basic.css
@@ -0,0 +1,906 @@
+/*
+ * Sphinx stylesheet -- basic theme.
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+ clear: both;
+}
+
+div.section::after {
+ display: block;
+ content: '';
+ clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+ width: 100%;
+ font-size: 90%;
+}
+
+div.related h3 {
+ display: none;
+}
+
+div.related ul {
+ margin: 0;
+ padding: 0 0 0 10px;
+ list-style: none;
+}
+
+div.related li {
+ display: inline;
+}
+
+div.related li.right {
+ float: right;
+ margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+ padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+ float: left;
+ width: 230px;
+ margin-left: -100%;
+ font-size: 90%;
+ word-wrap: break-word;
+ overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+ list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+ margin-left: 20px;
+ list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+ margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #98dbcc;
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+ overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+ float: left;
+ width: 80%;
+ padding: 0.25em;
+ box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+ float: left;
+ width: 20%;
+ border-left: none;
+ padding: 0.25em;
+ box-sizing: border-box;
+}
+
+
+img {
+ border: 0;
+ max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+ margin-top: 10px;
+}
+
+ul.search li {
+ padding: 5px 0;
+}
+
+ul.search li a {
+ font-weight: bold;
+}
+
+ul.search li p.context {
+ color: #888;
+ margin: 2px 0 0 30px;
+ text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+ font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+ width: 90%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+table.contentstable p.biglink {
+ line-height: 150%;
+}
+
+a.biglink {
+ font-size: 1.3em;
+}
+
+span.linkdescr {
+ font-style: italic;
+ padding-top: 5px;
+ font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+ width: 100%;
+}
+
+table.indextable td {
+ text-align: left;
+ vertical-align: top;
+}
+
+table.indextable ul {
+ margin-top: 0;
+ margin-bottom: 0;
+ list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+ padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+ height: 10px;
+}
+
+table.indextable tr.cap {
+ margin-top: 10px;
+ background-color: #f2f2f2;
+}
+
+img.toggler {
+ margin-right: 3px;
+ margin-top: 3px;
+ cursor: pointer;
+}
+
+div.modindex-jumpbox {
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+ margin: 1em 0 1em 0;
+ padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+ margin: 1em 0 1em 0;
+ padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+ padding: 2px;
+ border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+ min-width: 360px;
+ max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+ -moz-hyphens: auto;
+ -ms-hyphens: auto;
+ -webkit-hyphens: auto;
+ hyphens: auto;
+}
+
+a.headerlink {
+ visibility: hidden;
+}
+
+a:visited {
+ color: #551A8B;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+ visibility: visible;
+}
+
+div.body p.caption {
+ text-align: inherit;
+}
+
+div.body td {
+ text-align: left;
+}
+
+.first {
+ margin-top: 0 !important;
+}
+
+p.rubric {
+ margin-top: 30px;
+ font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+ clear: left;
+ float: left;
+ margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+ clear: right;
+ float: right;
+ margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.align-left {
+ text-align: left;
+}
+
+.align-center {
+ text-align: center;
+}
+
+.align-default {
+ text-align: center;
+}
+
+.align-right {
+ text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+ margin: 0 0 0.5em 1em;
+ border: 1px solid #ddb;
+ padding: 7px;
+ background-color: #ffe;
+ width: 40%;
+ float: right;
+ clear: right;
+ overflow-x: auto;
+}
+
+p.sidebar-title {
+ font-weight: bold;
+}
+
+nav.contents,
+aside.topic,
+div.admonition, div.topic, blockquote {
+ clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+nav.contents,
+aside.topic,
+div.topic {
+ border: 1px solid #ccc;
+ padding: 7px;
+ margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+ font-size: 1.1em;
+ font-weight: bold;
+ margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ padding: 7px;
+}
+
+div.admonition dt {
+ font-weight: bold;
+}
+
+p.admonition-title {
+ margin: 0px 10px 5px 0px;
+ font-weight: bold;
+}
+
+div.body p.centered {
+ text-align: center;
+ margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+nav.contents > :last-child,
+aside.topic > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+ margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+nav.contents::after,
+aside.topic::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+ display: block;
+ content: '';
+ clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ border: 0;
+ border-collapse: collapse;
+}
+
+table.align-center {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+table.align-default {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+table caption span.caption-number {
+ font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+ padding: 1px 8px 1px 5px;
+ border-top: 0;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 1px solid #aaa;
+}
+
+th {
+ text-align: left;
+ padding-right: 5px;
+}
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px;
+}
+
+table.citation td {
+ border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+ margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+ margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+ margin: 0.5em;
+ padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+ padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+ font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+ border: 0 !important;
+}
+
+.field-list ul {
+ margin: 0;
+ padding-left: 1em;
+}
+
+.field-list p {
+ margin: 0;
+}
+
+.field-name {
+ -moz-hyphens: manual;
+ -ms-hyphens: manual;
+ -webkit-hyphens: manual;
+ hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+ margin: 1em 0;
+}
+
+table.hlist td {
+ vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+ font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+ background-color: transparent;
+ font-weight: bold;
+}
+
+.sig-name {
+ font-size: 1.1em;
+}
+
+code.descname {
+ font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+ background-color: transparent;
+}
+
+.optional {
+ font-size: 1.3em;
+}
+
+.sig-paren {
+ font-size: larger;
+}
+
+.sig-param.n {
+ font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+ font-family: unset;
+}
+
+.sig.c .k, .sig.c .kt,
+.sig.cpp .k, .sig.cpp .kt {
+ color: #0033B3;
+}
+
+.sig.c .m,
+.sig.cpp .m {
+ color: #1750EB;
+}
+
+.sig.c .s, .sig.c .sc,
+.sig.cpp .s, .sig.cpp .sc {
+ color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+ list-style: decimal;
+}
+
+ol.loweralpha {
+ list-style: lower-alpha;
+}
+
+ol.upperalpha {
+ list-style: upper-alpha;
+}
+
+ol.lowerroman {
+ list-style: lower-roman;
+}
+
+ol.upperroman {
+ list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+ margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+ margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+ margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+ margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+ margin-bottom: 0;
+}
+
+aside.footnote > span,
+div.citation > span {
+ float: left;
+}
+aside.footnote > span:last-of-type,
+div.citation > span:last-of-type {
+ padding-right: 0.5em;
+}
+aside.footnote > p {
+ margin-left: 2em;
+}
+div.citation > p {
+ margin-left: 4em;
+}
+aside.footnote > p:last-of-type,
+div.citation > p:last-of-type {
+ margin-bottom: 0em;
+}
+aside.footnote > p:last-of-type:after,
+div.citation > p:last-of-type:after {
+ content: "";
+ clear: both;
+}
+
+dl.field-list {
+ display: grid;
+ grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+ font-weight: bold;
+ word-break: break-word;
+ padding-left: 0.5em;
+ padding-right: 5px;
+}
+
+dl.field-list > dd {
+ padding-left: 0.5em;
+ margin-top: 0em;
+ margin-left: 0em;
+ margin-bottom: 0em;
+}
+
+dl {
+ margin-bottom: 15px;
+}
+
+dd > :first-child {
+ margin-top: 0px;
+}
+
+dd ul, dd table {
+ margin-bottom: 10px;
+}
+
+dd {
+ margin-top: 3px;
+ margin-bottom: 10px;
+ margin-left: 30px;
+}
+
+.sig dd {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+.sig dl {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+ margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+ background-color: #fbe54e;
+}
+
+rect.highlighted {
+ fill: #fbe54e;
+}
+
+dl.glossary dt {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+.versionmodified {
+ font-style: italic;
+}
+
+.system-message {
+ background-color: #fda;
+ padding: 5px;
+ border: 3px solid red;
+}
+
+.footnote:target {
+ background-color: #ffa;
+}
+
+.line-block {
+ display: block;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+
+.line-block .line-block {
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+ font-family: sans-serif;
+}
+
+.accelerator {
+ text-decoration: underline;
+}
+
+.classifier {
+ font-style: oblique;
+}
+
+.classifier:before {
+ font-style: normal;
+ margin: 0 0.5em;
+ content: ":";
+ display: inline-block;
+}
+
+abbr, acronym {
+ border-bottom: dotted 1px;
+ cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+ overflow: auto;
+ overflow-y: hidden; /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+ clear: both;
+}
+
+span.pre {
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ -webkit-hyphens: none;
+ hyphens: none;
+ white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+ margin: 1em 0;
+}
+
+td.linenos pre {
+ border: 0;
+ background-color: transparent;
+ color: #aaa;
+}
+
+table.highlighttable {
+ display: block;
+}
+
+table.highlighttable tbody {
+ display: block;
+}
+
+table.highlighttable tr {
+ display: flex;
+}
+
+table.highlighttable td {
+ margin: 0;
+ padding: 0;
+}
+
+table.highlighttable td.linenos {
+ padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+ flex: 1;
+ overflow: hidden;
+}
+
+.highlight .hll {
+ display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+ margin: 0;
+}
+
+div.code-block-caption + div {
+ margin-top: 0;
+}
+
+div.code-block-caption {
+ margin-top: 1em;
+ padding: 2px 5px;
+ font-size: small;
+}
+
+div.code-block-caption code {
+ background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp { /* gp: Generic.Prompt */
+ user-select: none;
+ -webkit-user-select: text; /* Safari fallback only */
+ -webkit-user-select: none; /* Chrome/Safari */
+ -moz-user-select: none; /* Firefox */
+ -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+ padding: 0.1em 0.3em;
+ font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+ margin: 1em 0;
+}
+
+code.xref, a code {
+ background-color: transparent;
+ font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+ background-color: transparent;
+}
+
+.viewcode-link {
+ float: right;
+}
+
+.viewcode-back {
+ float: right;
+ font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+ margin: -1px -10px;
+ padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+ vertical-align: middle;
+}
+
+div.body div.math p {
+ text-align: center;
+}
+
+span.eqno {
+ float: right;
+}
+
+span.eqno a.headerlink {
+ position: absolute;
+ z-index: 1;
+}
+
+div.math:hover a.headerlink {
+ visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+ div.document,
+ div.documentwrapper,
+ div.bodywrapper {
+ margin: 0 !important;
+ width: 100%;
+ }
+
+ div.sphinxsidebar,
+ div.related,
+ div.footer,
+ #top-link {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/docs/_static/css/badge_only.css b/docs/_static/css/badge_only.css
new file mode 100644
index 0000000..88ba55b
--- /dev/null
+++ b/docs/_static/css/badge_only.css
@@ -0,0 +1 @@
+.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}
\ No newline at end of file
diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/_static/css/fonts/Roboto-Slab-Bold.woff
new file mode 100644
index 0000000..6cb6000
Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Bold.woff differ
diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2
new file mode 100644
index 0000000..7059e23
Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 differ
diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/_static/css/fonts/Roboto-Slab-Regular.woff
new file mode 100644
index 0000000..f815f63
Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Regular.woff differ
diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2
new file mode 100644
index 0000000..f2c76e5
Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 differ
diff --git a/docs/_static/css/fonts/fontawesome-webfont.eot b/docs/_static/css/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..e9f60ca
Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.eot differ
diff --git a/docs/_static/css/fonts/fontawesome-webfont.svg b/docs/_static/css/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..855c845
--- /dev/null
+++ b/docs/_static/css/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+
+
+
diff --git a/docs/_static/css/fonts/fontawesome-webfont.ttf b/docs/_static/css/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..35acda2
Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.ttf differ
diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff b/docs/_static/css/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..400014a
Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.woff differ
diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff2 b/docs/_static/css/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000..4d13fc6
Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.woff2 differ
diff --git a/docs/_static/css/fonts/lato-bold-italic.woff b/docs/_static/css/fonts/lato-bold-italic.woff
new file mode 100644
index 0000000..88ad05b
Binary files /dev/null and b/docs/_static/css/fonts/lato-bold-italic.woff differ
diff --git a/docs/_static/css/fonts/lato-bold-italic.woff2 b/docs/_static/css/fonts/lato-bold-italic.woff2
new file mode 100644
index 0000000..c4e3d80
Binary files /dev/null and b/docs/_static/css/fonts/lato-bold-italic.woff2 differ
diff --git a/docs/_static/css/fonts/lato-bold.woff b/docs/_static/css/fonts/lato-bold.woff
new file mode 100644
index 0000000..c6dff51
Binary files /dev/null and b/docs/_static/css/fonts/lato-bold.woff differ
diff --git a/docs/_static/css/fonts/lato-bold.woff2 b/docs/_static/css/fonts/lato-bold.woff2
new file mode 100644
index 0000000..bb19504
Binary files /dev/null and b/docs/_static/css/fonts/lato-bold.woff2 differ
diff --git a/docs/_static/css/fonts/lato-normal-italic.woff b/docs/_static/css/fonts/lato-normal-italic.woff
new file mode 100644
index 0000000..76114bc
Binary files /dev/null and b/docs/_static/css/fonts/lato-normal-italic.woff differ
diff --git a/docs/_static/css/fonts/lato-normal-italic.woff2 b/docs/_static/css/fonts/lato-normal-italic.woff2
new file mode 100644
index 0000000..3404f37
Binary files /dev/null and b/docs/_static/css/fonts/lato-normal-italic.woff2 differ
diff --git a/docs/_static/css/fonts/lato-normal.woff b/docs/_static/css/fonts/lato-normal.woff
new file mode 100644
index 0000000..ae1307f
Binary files /dev/null and b/docs/_static/css/fonts/lato-normal.woff differ
diff --git a/docs/_static/css/fonts/lato-normal.woff2 b/docs/_static/css/fonts/lato-normal.woff2
new file mode 100644
index 0000000..3bf9843
Binary files /dev/null and b/docs/_static/css/fonts/lato-normal.woff2 differ
diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css
new file mode 100644
index 0000000..0f14f10
--- /dev/null
+++ b/docs/_static/css/theme.css
@@ -0,0 +1,4 @@
+html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search .wy-dropdown>aactive,.wy-side-nav-search .wy-dropdown>afocus,.wy-side-nav-search>a:hover,.wy-side-nav-search>aactive,.wy-side-nav-search>afocus{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon,.wy-side-nav-search>a.icon{display:block}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.switch-menus{position:relative;display:block;margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-side-nav-search>div.switch-menus>div.language-switch,.wy-side-nav-search>div.switch-menus>div.version-switch{display:inline-block;padding:.2em}.wy-side-nav-search>div.switch-menus>div.language-switch select,.wy-side-nav-search>div.switch-menus>div.version-switch select{display:inline-block;margin-right:-2rem;padding-right:2rem;max-width:240px;text-align-last:center;background:none;border:none;border-radius:0;box-shadow:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-size:1em;font-weight:400;color:hsla(0,0%,100%,.3);cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none}.wy-side-nav-search>div.switch-menus>div.language-switch select:active,.wy-side-nav-search>div.switch-menus>div.language-switch select:focus,.wy-side-nav-search>div.switch-menus>div.language-switch select:hover,.wy-side-nav-search>div.switch-menus>div.version-switch select:active,.wy-side-nav-search>div.switch-menus>div.version-switch select:focus,.wy-side-nav-search>div.switch-menus>div.version-switch select:hover{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.wy-side-nav-search>div.switch-menus>div.language-switch select option,.wy-side-nav-search>div.switch-menus>div.version-switch select option{color:#000}.wy-side-nav-search>div.switch-menus>div.language-switch:has(>select):after,.wy-side-nav-search>div.switch-menus>div.version-switch:has(>select):after{display:inline-block;width:1.5em;height:100%;padding:.1em;content:"\f0d7";font-size:1em;line-height:1.2em;font-family:FontAwesome;text-align:center;pointer-events:none;box-sizing:border-box}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js
new file mode 100644
index 0000000..0398ebb
--- /dev/null
+++ b/docs/_static/doctools.js
@@ -0,0 +1,149 @@
+/*
+ * Base JavaScript utilities for all Sphinx HTML documentation.
+ */
+"use strict";
+
+const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
+ "TEXTAREA",
+ "INPUT",
+ "SELECT",
+ "BUTTON",
+]);
+
+const _ready = (callback) => {
+ if (document.readyState !== "loading") {
+ callback();
+ } else {
+ document.addEventListener("DOMContentLoaded", callback);
+ }
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const Documentation = {
+ init: () => {
+ Documentation.initDomainIndexTable();
+ Documentation.initOnKeyListeners();
+ },
+
+ /**
+ * i18n support
+ */
+ TRANSLATIONS: {},
+ PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
+ LOCALE: "unknown",
+
+ // gettext and ngettext don't access this so that the functions
+ // can safely bound to a different name (_ = Documentation.gettext)
+ gettext: (string) => {
+ const translated = Documentation.TRANSLATIONS[string];
+ switch (typeof translated) {
+ case "undefined":
+ return string; // no translation
+ case "string":
+ return translated; // translation exists
+ default:
+ return translated[0]; // (singular, plural) translation tuple exists
+ }
+ },
+
+ ngettext: (singular, plural, n) => {
+ const translated = Documentation.TRANSLATIONS[singular];
+ if (typeof translated !== "undefined")
+ return translated[Documentation.PLURAL_EXPR(n)];
+ return n === 1 ? singular : plural;
+ },
+
+ addTranslations: (catalog) => {
+ Object.assign(Documentation.TRANSLATIONS, catalog.messages);
+ Documentation.PLURAL_EXPR = new Function(
+ "n",
+ `return (${catalog.plural_expr})`
+ );
+ Documentation.LOCALE = catalog.locale;
+ },
+
+ /**
+ * helper function to focus on search bar
+ */
+ focusSearchBar: () => {
+ document.querySelectorAll("input[name=q]")[0]?.focus();
+ },
+
+ /**
+ * Initialise the domain index toggle buttons
+ */
+ initDomainIndexTable: () => {
+ const toggler = (el) => {
+ const idNumber = el.id.substr(7);
+ const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
+ if (el.src.substr(-9) === "minus.png") {
+ el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
+ toggledRows.forEach((el) => (el.style.display = "none"));
+ } else {
+ el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
+ toggledRows.forEach((el) => (el.style.display = ""));
+ }
+ };
+
+ const togglerElements = document.querySelectorAll("img.toggler");
+ togglerElements.forEach((el) =>
+ el.addEventListener("click", (event) => toggler(event.currentTarget))
+ );
+ togglerElements.forEach((el) => (el.style.display = ""));
+ if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
+ },
+
+ initOnKeyListeners: () => {
+ // only install a listener if it is really needed
+ if (
+ !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+ !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+ )
+ return;
+
+ document.addEventListener("keydown", (event) => {
+ // bail for input elements
+ if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+ // bail with special keys
+ if (event.altKey || event.ctrlKey || event.metaKey) return;
+
+ if (!event.shiftKey) {
+ switch (event.key) {
+ case "ArrowLeft":
+ if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+ const prevLink = document.querySelector('link[rel="prev"]');
+ if (prevLink && prevLink.href) {
+ window.location.href = prevLink.href;
+ event.preventDefault();
+ }
+ break;
+ case "ArrowRight":
+ if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+ const nextLink = document.querySelector('link[rel="next"]');
+ if (nextLink && nextLink.href) {
+ window.location.href = nextLink.href;
+ event.preventDefault();
+ }
+ break;
+ }
+ }
+
+ // some keyboard layouts may need Shift to get /
+ switch (event.key) {
+ case "/":
+ if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
+ Documentation.focusSearchBar();
+ event.preventDefault();
+ }
+ });
+ },
+};
+
+// quick alias for translations
+const _ = Documentation.gettext;
+
+_ready(Documentation.init);
diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js
new file mode 100644
index 0000000..7e4c114
--- /dev/null
+++ b/docs/_static/documentation_options.js
@@ -0,0 +1,13 @@
+const DOCUMENTATION_OPTIONS = {
+ VERSION: '',
+ LANGUAGE: 'en',
+ COLLAPSE_INDEX: false,
+ BUILDER: 'html',
+ FILE_SUFFIX: '.html',
+ LINK_SUFFIX: '.html',
+ HAS_SOURCE: true,
+ SOURCELINK_SUFFIX: '.txt',
+ NAVIGATION_WITH_KEYS: false,
+ SHOW_SEARCH_SUMMARY: true,
+ ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/docs/_static/file.png b/docs/_static/file.png
new file mode 100644
index 0000000..a858a41
Binary files /dev/null and b/docs/_static/file.png differ
diff --git a/docs/_static/fonts/Lato/lato-bold.eot b/docs/_static/fonts/Lato/lato-bold.eot
new file mode 100644
index 0000000..3361183
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bold.eot differ
diff --git a/docs/_static/fonts/Lato/lato-bold.ttf b/docs/_static/fonts/Lato/lato-bold.ttf
new file mode 100644
index 0000000..29f691d
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bold.ttf differ
diff --git a/docs/_static/fonts/Lato/lato-bold.woff b/docs/_static/fonts/Lato/lato-bold.woff
new file mode 100644
index 0000000..c6dff51
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bold.woff differ
diff --git a/docs/_static/fonts/Lato/lato-bold.woff2 b/docs/_static/fonts/Lato/lato-bold.woff2
new file mode 100644
index 0000000..bb19504
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bold.woff2 differ
diff --git a/docs/_static/fonts/Lato/lato-bolditalic.eot b/docs/_static/fonts/Lato/lato-bolditalic.eot
new file mode 100644
index 0000000..3d41549
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bolditalic.eot differ
diff --git a/docs/_static/fonts/Lato/lato-bolditalic.ttf b/docs/_static/fonts/Lato/lato-bolditalic.ttf
new file mode 100644
index 0000000..f402040
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bolditalic.ttf differ
diff --git a/docs/_static/fonts/Lato/lato-bolditalic.woff b/docs/_static/fonts/Lato/lato-bolditalic.woff
new file mode 100644
index 0000000..88ad05b
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bolditalic.woff differ
diff --git a/docs/_static/fonts/Lato/lato-bolditalic.woff2 b/docs/_static/fonts/Lato/lato-bolditalic.woff2
new file mode 100644
index 0000000..c4e3d80
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bolditalic.woff2 differ
diff --git a/docs/_static/fonts/Lato/lato-italic.eot b/docs/_static/fonts/Lato/lato-italic.eot
new file mode 100644
index 0000000..3f82642
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-italic.eot differ
diff --git a/docs/_static/fonts/Lato/lato-italic.ttf b/docs/_static/fonts/Lato/lato-italic.ttf
new file mode 100644
index 0000000..b4bfc9b
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-italic.ttf differ
diff --git a/docs/_static/fonts/Lato/lato-italic.woff b/docs/_static/fonts/Lato/lato-italic.woff
new file mode 100644
index 0000000..76114bc
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-italic.woff differ
diff --git a/docs/_static/fonts/Lato/lato-italic.woff2 b/docs/_static/fonts/Lato/lato-italic.woff2
new file mode 100644
index 0000000..3404f37
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-italic.woff2 differ
diff --git a/docs/_static/fonts/Lato/lato-regular.eot b/docs/_static/fonts/Lato/lato-regular.eot
new file mode 100644
index 0000000..11e3f2a
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-regular.eot differ
diff --git a/docs/_static/fonts/Lato/lato-regular.ttf b/docs/_static/fonts/Lato/lato-regular.ttf
new file mode 100644
index 0000000..74decd9
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-regular.ttf differ
diff --git a/docs/_static/fonts/Lato/lato-regular.woff b/docs/_static/fonts/Lato/lato-regular.woff
new file mode 100644
index 0000000..ae1307f
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-regular.woff differ
diff --git a/docs/_static/fonts/Lato/lato-regular.woff2 b/docs/_static/fonts/Lato/lato-regular.woff2
new file mode 100644
index 0000000..3bf9843
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-regular.woff2 differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot
new file mode 100644
index 0000000..79dc8ef
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf
new file mode 100644
index 0000000..df5d1df
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff
new file mode 100644
index 0000000..6cb6000
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2
new file mode 100644
index 0000000..7059e23
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot
new file mode 100644
index 0000000..2f7ca78
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf
new file mode 100644
index 0000000..eb52a79
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff
new file mode 100644
index 0000000..f815f63
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2
new file mode 100644
index 0000000..f2c76e5
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ
diff --git a/docs/_static/graphviz.css b/docs/_static/graphviz.css
new file mode 100644
index 0000000..30f3837
--- /dev/null
+++ b/docs/_static/graphviz.css
@@ -0,0 +1,12 @@
+/*
+ * Sphinx stylesheet -- graphviz extension.
+ */
+
+img.graphviz {
+ border: 0;
+ max-width: 100%;
+}
+
+object.graphviz {
+ max-width: 100%;
+}
diff --git a/docs/_static/jquery.js b/docs/_static/jquery.js
new file mode 100644
index 0000000..c4c6022
--- /dev/null
+++ b/docs/_static/jquery.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"
CFFI ABI dynamic bindings avoid the need to compile a C extension module. They now been moved to a separate module:
+
python3-mpipinstallraylib_dynamic
+
+
+
+
Warning
+
There have been some weird failures with dynamic bindings and ctypes bindings before and often the
+failures are silent
+so you don’t even know something has gone wrong and you don’t get proper stacktraces. Also the static bindings are faster.
+Therefore I personally recommend the static ones.
+But the dynamic bindings have the advantage that you don’t need to compile anything to install. You just need a Raylib DLL.
+
+
The API is exactly the same as the static one documented here. (Therefore you can’t have both modules installed at once.) The only difference is you can’t do:
If you use the rl. prefix then code will work on both static and dynamic bindings.
+
+
Tip
+
If you access functions via importpyray then there is no difference at all, but be warned this hasn’t been tested much.
+
+
+
Note
+
Standard Raylib DLLs do not include additional libraries like Raygui, Physac, etc. So these functions won’t work.
+
+
+
Important
+
If your system already has the Raylib library installed, you can set the environment variable USE_EXTERNAL_RAYLIB and it will
+always be used instead of the bundled DLLs.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/genindex.html b/docs/genindex.html
new file mode 100644
index 0000000..0d52290
--- /dev/null
+++ b/docs/genindex.html
@@ -0,0 +1,11317 @@
+
+
+
+
+
+
+
+ Index — Raylib Python documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index
+
+
+
+
+
+
+
+
+
+
Index
+
+
+ A
+ | B
+ | C
+ | D
+ | E
+ | F
+ | G
+ | H
+ | I
+ | K
+ | L
+ | M
+ | N
+ | O
+ | P
+ | Q
+ | R
+ | S
+ | T
+ | U
+ | V
+ | W
+ | X
+ | Y
+ | Z
+
+
Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set, font size is provided in pixels height.
The goal of the C API is make usage as similar to the original C as CFFI will allow.
+So the example programs
+are very, very similar to the C originals.
Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set, font size is provided in pixels height.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/searchindex.js b/docs/searchindex.js
new file mode 100644
index 0000000..7039ee4
--- /dev/null
+++ b/docs/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({"alltitles":{"API reference":[[5,"module-pyray"]],"Advert":[[1,"advert"]],"App showcase":[[1,"app-showcase"]],"Backends":[[1,"backends"]],"Backends: Desktop, SDL, DRM, Web":[[1,"backends-desktop-sdl-drm-web"]],"Building from source":[[0,null]],"Bunnymark":[[1,"bunnymark"]],"C API":[[6,null]],"Contents:":[[4,null]],"DRM backend":[[1,"drm-backend"]],"Dynamic Bindings":[[3,null]],"Dynamic binding version":[[1,"dynamic-binding-version"]],"Examples":[[5,"examples"]],"Functions API reference":[[6,"module-raylib"]],"Have Pip build from source":[[0,"have-pip-build-from-source"]],"Help wanted":[[1,"help-wanted"]],"How to use":[[1,"how-to-use"]],"If you are familiar with C coding and the Raylib C library and you want to use an exact copy of the C API":[[1,"if-you-are-familiar-with-c-coding-and-the-raylib-c-library-and-you-want-to-use-an-exact-copy-of-the-c-api"]],"If you prefer a more Pythonistic API":[[1,"if-you-prefer-a-more-pythonistic-api"]],"Installation":[[1,"installation"]],"Libraries: raymath, raygui, rlgl, physac and GLFW":[[1,"libraries-raymath-raygui-rlgl-physac-and-glfw"]],"License":[[1,"license"]],"Linux":[[1,"linux"]],"Linux manual build":[[0,"linux-manual-build"]],"MacOS":[[1,"macos"]],"Macos manual build":[[0,"macos-manual-build"]],"Option 1: Binary wheel":[[2,"option-1-binary-wheel"]],"Option 2: Compile Raylib from source X11 mode":[[2,"option-2-compile-raylib-from-source-x11-mode"]],"Option 3: Compile Raylib from source DRM mode":[[2,"option-3-compile-raylib-from-source-drm-mode"]],"Or, Build from source manually":[[0,"or-build-from-source-manually"]],"Packaging your app":[[1,"packaging-your-app"]],"Performance":[[1,"performance"]],"Platforms: Windows, Mac, Linux, Raspberry Pi, Web":[[1,"platforms-windows-mac-linux-raspberry-pi-web"]],"Problems?":[[1,"problems"]],"Python API":[[5,null]],"Python Bindings for Raylib 5.5":[[1,null]],"Quickstart":[[1,"quickstart"]],"RLZero":[[1,"rlzero"]],"Raspberry Pi":[[1,"raspberry-pi"],[2,null]],"Raylib Python":[[4,null]],"Running in a web browser":[[1,"running-in-a-web-browser"]],"SDL backend":[[1,"sdl-backend"]],"Todo":[[0,"id1"],[0,"id2"]],"Windows":[[1,"windows"]],"Windows manual build":[[0,"windows-manual-build"]]},"docnames":["BUILDING","README","RPI","dynamic","index","pyray","raylib"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.todo":2},"filenames":["BUILDING.rst","README.md","RPI.rst","dynamic.rst","index.rst","pyray.rst","raylib.rst"],"indexentries":{"a (pyray.color attribute)":[[5,"pyray.Color.a",false]],"a (raylib.color attribute)":[[6,"raylib.Color.a",false]],"advancex (pyray.glyphinfo attribute)":[[5,"pyray.GlyphInfo.advanceX",false]],"advancex (raylib.glyphinfo attribute)":[[6,"raylib.GlyphInfo.advanceX",false]],"allocate (raylib.glfwallocator attribute)":[[6,"raylib.GLFWallocator.allocate",false]],"angularvelocity (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.angularVelocity",false]],"angularvelocity (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.angularVelocity",false]],"animnormals (pyray.mesh attribute)":[[5,"pyray.Mesh.animNormals",false]],"animnormals (raylib.mesh attribute)":[[6,"raylib.Mesh.animNormals",false]],"animvertices (pyray.mesh attribute)":[[5,"pyray.Mesh.animVertices",false]],"animvertices (raylib.mesh attribute)":[[6,"raylib.Mesh.animVertices",false]],"arrow_padding (in module raylib)":[[6,"raylib.ARROW_PADDING",false]],"arrow_padding (pyray.guidropdownboxproperty attribute)":[[5,"pyray.GuiDropdownBoxProperty.ARROW_PADDING",false]],"arrows_size (in module raylib)":[[6,"raylib.ARROWS_SIZE",false]],"arrows_size (pyray.guiscrollbarproperty attribute)":[[5,"pyray.GuiScrollBarProperty.ARROWS_SIZE",false]],"arrows_visible (in module raylib)":[[6,"raylib.ARROWS_VISIBLE",false]],"arrows_visible (pyray.guiscrollbarproperty attribute)":[[5,"pyray.GuiScrollBarProperty.ARROWS_VISIBLE",false]],"attach_audio_mixed_processor() (in module pyray)":[[5,"pyray.attach_audio_mixed_processor",false]],"attach_audio_stream_processor() (in module pyray)":[[5,"pyray.attach_audio_stream_processor",false]],"attachaudiomixedprocessor() (in module raylib)":[[6,"raylib.AttachAudioMixedProcessor",false]],"attachaudiostreamprocessor() (in module raylib)":[[6,"raylib.AttachAudioStreamProcessor",false]],"audiostream (class in pyray)":[[5,"pyray.AudioStream",false]],"audiostream (class in raylib)":[[6,"raylib.AudioStream",false]],"automationevent (class in pyray)":[[5,"pyray.AutomationEvent",false]],"automationevent (class in raylib)":[[6,"raylib.AutomationEvent",false]],"automationeventlist (class in pyray)":[[5,"pyray.AutomationEventList",false]],"automationeventlist (class in raylib)":[[6,"raylib.AutomationEventList",false]],"axes (raylib.glfwgamepadstate attribute)":[[6,"raylib.GLFWgamepadstate.axes",false]],"b (pyray.color attribute)":[[5,"pyray.Color.b",false]],"b (raylib.color attribute)":[[6,"raylib.Color.b",false]],"background_color (in module raylib)":[[6,"raylib.BACKGROUND_COLOR",false]],"background_color (pyray.guidefaultproperty attribute)":[[5,"pyray.GuiDefaultProperty.BACKGROUND_COLOR",false]],"base_color_disabled (in module raylib)":[[6,"raylib.BASE_COLOR_DISABLED",false]],"base_color_disabled (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.BASE_COLOR_DISABLED",false]],"base_color_focused (in module raylib)":[[6,"raylib.BASE_COLOR_FOCUSED",false]],"base_color_focused (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.BASE_COLOR_FOCUSED",false]],"base_color_normal (in module raylib)":[[6,"raylib.BASE_COLOR_NORMAL",false]],"base_color_normal (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.BASE_COLOR_NORMAL",false]],"base_color_pressed (in module raylib)":[[6,"raylib.BASE_COLOR_PRESSED",false]],"base_color_pressed (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.BASE_COLOR_PRESSED",false]],"basesize (pyray.font attribute)":[[5,"pyray.Font.baseSize",false]],"basesize (raylib.font attribute)":[[6,"raylib.Font.baseSize",false]],"begin_blend_mode() (in module pyray)":[[5,"pyray.begin_blend_mode",false]],"begin_drawing() (in module pyray)":[[5,"pyray.begin_drawing",false]],"begin_mode_2d() (in module pyray)":[[5,"pyray.begin_mode_2d",false]],"begin_mode_3d() (in module pyray)":[[5,"pyray.begin_mode_3d",false]],"begin_scissor_mode() (in module pyray)":[[5,"pyray.begin_scissor_mode",false]],"begin_shader_mode() (in module pyray)":[[5,"pyray.begin_shader_mode",false]],"begin_texture_mode() (in module pyray)":[[5,"pyray.begin_texture_mode",false]],"begin_vr_stereo_mode() (in module pyray)":[[5,"pyray.begin_vr_stereo_mode",false]],"beginblendmode() (in module raylib)":[[6,"raylib.BeginBlendMode",false]],"begindrawing() (in module raylib)":[[6,"raylib.BeginDrawing",false]],"beginmode2d() (in module raylib)":[[6,"raylib.BeginMode2D",false]],"beginmode3d() (in module raylib)":[[6,"raylib.BeginMode3D",false]],"beginscissormode() (in module raylib)":[[6,"raylib.BeginScissorMode",false]],"beginshadermode() (in module raylib)":[[6,"raylib.BeginShaderMode",false]],"begintexturemode() (in module raylib)":[[6,"raylib.BeginTextureMode",false]],"beginvrstereomode() (in module raylib)":[[6,"raylib.BeginVrStereoMode",false]],"beige (in module pyray)":[[5,"pyray.BEIGE",false]],"beige (in module raylib)":[[6,"raylib.BEIGE",false]],"bindpose (pyray.model attribute)":[[5,"pyray.Model.bindPose",false]],"bindpose (raylib.model attribute)":[[6,"raylib.Model.bindPose",false]],"black (in module pyray)":[[5,"pyray.BLACK",false]],"black (in module raylib)":[[6,"raylib.BLACK",false]],"blank (in module pyray)":[[5,"pyray.BLANK",false]],"blank (in module raylib)":[[6,"raylib.BLANK",false]],"blend_add_colors (in module raylib)":[[6,"raylib.BLEND_ADD_COLORS",false]],"blend_add_colors (pyray.blendmode attribute)":[[5,"pyray.BlendMode.BLEND_ADD_COLORS",false]],"blend_additive (in module raylib)":[[6,"raylib.BLEND_ADDITIVE",false]],"blend_additive (pyray.blendmode attribute)":[[5,"pyray.BlendMode.BLEND_ADDITIVE",false]],"blend_alpha (in module raylib)":[[6,"raylib.BLEND_ALPHA",false]],"blend_alpha (pyray.blendmode attribute)":[[5,"pyray.BlendMode.BLEND_ALPHA",false]],"blend_alpha_premultiply (in module raylib)":[[6,"raylib.BLEND_ALPHA_PREMULTIPLY",false]],"blend_alpha_premultiply (pyray.blendmode attribute)":[[5,"pyray.BlendMode.BLEND_ALPHA_PREMULTIPLY",false]],"blend_custom (in module raylib)":[[6,"raylib.BLEND_CUSTOM",false]],"blend_custom (pyray.blendmode attribute)":[[5,"pyray.BlendMode.BLEND_CUSTOM",false]],"blend_custom_separate (in module raylib)":[[6,"raylib.BLEND_CUSTOM_SEPARATE",false]],"blend_custom_separate (pyray.blendmode attribute)":[[5,"pyray.BlendMode.BLEND_CUSTOM_SEPARATE",false]],"blend_multiplied (in module raylib)":[[6,"raylib.BLEND_MULTIPLIED",false]],"blend_multiplied (pyray.blendmode attribute)":[[5,"pyray.BlendMode.BLEND_MULTIPLIED",false]],"blend_subtract_colors (in module raylib)":[[6,"raylib.BLEND_SUBTRACT_COLORS",false]],"blend_subtract_colors (pyray.blendmode attribute)":[[5,"pyray.BlendMode.BLEND_SUBTRACT_COLORS",false]],"blendmode (class in pyray)":[[5,"pyray.BlendMode",false]],"blendmode (in module raylib)":[[6,"raylib.BlendMode",false]],"blue (in module pyray)":[[5,"pyray.BLUE",false]],"blue (in module raylib)":[[6,"raylib.BLUE",false]],"blue (raylib.glfwgammaramp attribute)":[[6,"raylib.GLFWgammaramp.blue",false]],"bluebits (raylib.glfwvidmode attribute)":[[6,"raylib.GLFWvidmode.blueBits",false]],"body (pyray.physicsshape attribute)":[[5,"pyray.PhysicsShape.body",false]],"body (raylib.physicsshape attribute)":[[6,"raylib.PhysicsShape.body",false]],"bodya (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.bodyA",false]],"bodya (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.bodyA",false]],"bodyb (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.bodyB",false]],"bodyb (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.bodyB",false]],"bonecount (pyray.mesh attribute)":[[5,"pyray.Mesh.boneCount",false]],"bonecount (pyray.model attribute)":[[5,"pyray.Model.boneCount",false]],"bonecount (pyray.modelanimation attribute)":[[5,"pyray.ModelAnimation.boneCount",false]],"bonecount (raylib.mesh attribute)":[[6,"raylib.Mesh.boneCount",false]],"bonecount (raylib.model attribute)":[[6,"raylib.Model.boneCount",false]],"bonecount (raylib.modelanimation attribute)":[[6,"raylib.ModelAnimation.boneCount",false]],"boneids (pyray.mesh attribute)":[[5,"pyray.Mesh.boneIds",false]],"boneids (raylib.mesh attribute)":[[6,"raylib.Mesh.boneIds",false]],"boneinfo (class in pyray)":[[5,"pyray.BoneInfo",false]],"boneinfo (class in raylib)":[[6,"raylib.BoneInfo",false]],"bonematrices (pyray.mesh attribute)":[[5,"pyray.Mesh.boneMatrices",false]],"bonematrices (raylib.mesh attribute)":[[6,"raylib.Mesh.boneMatrices",false]],"bones (pyray.model attribute)":[[5,"pyray.Model.bones",false]],"bones (pyray.modelanimation attribute)":[[5,"pyray.ModelAnimation.bones",false]],"bones (raylib.model attribute)":[[6,"raylib.Model.bones",false]],"bones (raylib.modelanimation attribute)":[[6,"raylib.ModelAnimation.bones",false]],"boneweights (pyray.mesh attribute)":[[5,"pyray.Mesh.boneWeights",false]],"boneweights (raylib.mesh attribute)":[[6,"raylib.Mesh.boneWeights",false]],"border_color_disabled (in module raylib)":[[6,"raylib.BORDER_COLOR_DISABLED",false]],"border_color_disabled (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.BORDER_COLOR_DISABLED",false]],"border_color_focused (in module raylib)":[[6,"raylib.BORDER_COLOR_FOCUSED",false]],"border_color_focused (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.BORDER_COLOR_FOCUSED",false]],"border_color_normal (in module raylib)":[[6,"raylib.BORDER_COLOR_NORMAL",false]],"border_color_normal (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.BORDER_COLOR_NORMAL",false]],"border_color_pressed (in module raylib)":[[6,"raylib.BORDER_COLOR_PRESSED",false]],"border_color_pressed (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.BORDER_COLOR_PRESSED",false]],"border_width (in module raylib)":[[6,"raylib.BORDER_WIDTH",false]],"border_width (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.BORDER_WIDTH",false]],"bottom (pyray.npatchinfo attribute)":[[5,"pyray.NPatchInfo.bottom",false]],"bottom (raylib.npatchinfo attribute)":[[6,"raylib.NPatchInfo.bottom",false]],"boundingbox (class in pyray)":[[5,"pyray.BoundingBox",false]],"boundingbox (class in raylib)":[[6,"raylib.BoundingBox",false]],"brown (in module pyray)":[[5,"pyray.BROWN",false]],"brown (in module raylib)":[[6,"raylib.BROWN",false]],"buffer (pyray.audiostream attribute)":[[5,"pyray.AudioStream.buffer",false]],"buffer (raylib.audiostream attribute)":[[6,"raylib.AudioStream.buffer",false]],"buffercount (pyray.rlrenderbatch attribute)":[[5,"pyray.rlRenderBatch.bufferCount",false]],"buffercount (raylib.rlrenderbatch attribute)":[[6,"raylib.rlRenderBatch.bufferCount",false]],"button (in module raylib)":[[6,"raylib.BUTTON",false]],"button (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.BUTTON",false]],"buttons (raylib.glfwgamepadstate attribute)":[[6,"raylib.GLFWgamepadstate.buttons",false]],"camera (class in raylib)":[[6,"raylib.Camera",false]],"camera2d (class in pyray)":[[5,"pyray.Camera2D",false]],"camera2d (class in raylib)":[[6,"raylib.Camera2D",false]],"camera3d (class in pyray)":[[5,"pyray.Camera3D",false]],"camera3d (class in raylib)":[[6,"raylib.Camera3D",false]],"camera_custom (in module raylib)":[[6,"raylib.CAMERA_CUSTOM",false]],"camera_custom (pyray.cameramode attribute)":[[5,"pyray.CameraMode.CAMERA_CUSTOM",false]],"camera_first_person (in module raylib)":[[6,"raylib.CAMERA_FIRST_PERSON",false]],"camera_first_person (pyray.cameramode attribute)":[[5,"pyray.CameraMode.CAMERA_FIRST_PERSON",false]],"camera_free (in module raylib)":[[6,"raylib.CAMERA_FREE",false]],"camera_free (pyray.cameramode attribute)":[[5,"pyray.CameraMode.CAMERA_FREE",false]],"camera_orbital (in module raylib)":[[6,"raylib.CAMERA_ORBITAL",false]],"camera_orbital (pyray.cameramode attribute)":[[5,"pyray.CameraMode.CAMERA_ORBITAL",false]],"camera_orthographic (in module raylib)":[[6,"raylib.CAMERA_ORTHOGRAPHIC",false]],"camera_orthographic (pyray.cameraprojection attribute)":[[5,"pyray.CameraProjection.CAMERA_ORTHOGRAPHIC",false]],"camera_perspective (in module raylib)":[[6,"raylib.CAMERA_PERSPECTIVE",false]],"camera_perspective (pyray.cameraprojection attribute)":[[5,"pyray.CameraProjection.CAMERA_PERSPECTIVE",false]],"camera_third_person (in module raylib)":[[6,"raylib.CAMERA_THIRD_PERSON",false]],"camera_third_person (pyray.cameramode attribute)":[[5,"pyray.CameraMode.CAMERA_THIRD_PERSON",false]],"cameramode (class in pyray)":[[5,"pyray.CameraMode",false]],"cameramode (in module raylib)":[[6,"raylib.CameraMode",false]],"cameraprojection (class in pyray)":[[5,"pyray.CameraProjection",false]],"cameraprojection (in module raylib)":[[6,"raylib.CameraProjection",false]],"capacity (pyray.automationeventlist attribute)":[[5,"pyray.AutomationEventList.capacity",false]],"capacity (pyray.filepathlist attribute)":[[5,"pyray.FilePathList.capacity",false]],"capacity (raylib.automationeventlist attribute)":[[6,"raylib.AutomationEventList.capacity",false]],"capacity (raylib.filepathlist attribute)":[[6,"raylib.FilePathList.capacity",false]],"change_directory() (in module pyray)":[[5,"pyray.change_directory",false]],"changedirectory() (in module raylib)":[[6,"raylib.ChangeDirectory",false]],"channels (pyray.audiostream attribute)":[[5,"pyray.AudioStream.channels",false]],"channels (pyray.wave attribute)":[[5,"pyray.Wave.channels",false]],"channels (raylib.audiostream attribute)":[[6,"raylib.AudioStream.channels",false]],"channels (raylib.wave attribute)":[[6,"raylib.Wave.channels",false]],"check_collision_box_sphere() (in module pyray)":[[5,"pyray.check_collision_box_sphere",false]],"check_collision_boxes() (in module pyray)":[[5,"pyray.check_collision_boxes",false]],"check_collision_circle_line() (in module pyray)":[[5,"pyray.check_collision_circle_line",false]],"check_collision_circle_rec() (in module pyray)":[[5,"pyray.check_collision_circle_rec",false]],"check_collision_circles() (in module pyray)":[[5,"pyray.check_collision_circles",false]],"check_collision_lines() (in module pyray)":[[5,"pyray.check_collision_lines",false]],"check_collision_point_circle() (in module pyray)":[[5,"pyray.check_collision_point_circle",false]],"check_collision_point_line() (in module pyray)":[[5,"pyray.check_collision_point_line",false]],"check_collision_point_poly() (in module pyray)":[[5,"pyray.check_collision_point_poly",false]],"check_collision_point_rec() (in module pyray)":[[5,"pyray.check_collision_point_rec",false]],"check_collision_point_triangle() (in module pyray)":[[5,"pyray.check_collision_point_triangle",false]],"check_collision_recs() (in module pyray)":[[5,"pyray.check_collision_recs",false]],"check_collision_spheres() (in module pyray)":[[5,"pyray.check_collision_spheres",false]],"check_padding (in module raylib)":[[6,"raylib.CHECK_PADDING",false]],"check_padding (pyray.guicheckboxproperty attribute)":[[5,"pyray.GuiCheckBoxProperty.CHECK_PADDING",false]],"checkbox (in module raylib)":[[6,"raylib.CHECKBOX",false]],"checkbox (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.CHECKBOX",false]],"checkcollisionboxes() (in module raylib)":[[6,"raylib.CheckCollisionBoxes",false]],"checkcollisionboxsphere() (in module raylib)":[[6,"raylib.CheckCollisionBoxSphere",false]],"checkcollisioncircleline() (in module raylib)":[[6,"raylib.CheckCollisionCircleLine",false]],"checkcollisioncirclerec() (in module raylib)":[[6,"raylib.CheckCollisionCircleRec",false]],"checkcollisioncircles() (in module raylib)":[[6,"raylib.CheckCollisionCircles",false]],"checkcollisionlines() (in module raylib)":[[6,"raylib.CheckCollisionLines",false]],"checkcollisionpointcircle() (in module raylib)":[[6,"raylib.CheckCollisionPointCircle",false]],"checkcollisionpointline() (in module raylib)":[[6,"raylib.CheckCollisionPointLine",false]],"checkcollisionpointpoly() (in module raylib)":[[6,"raylib.CheckCollisionPointPoly",false]],"checkcollisionpointrec() (in module raylib)":[[6,"raylib.CheckCollisionPointRec",false]],"checkcollisionpointtriangle() (in module raylib)":[[6,"raylib.CheckCollisionPointTriangle",false]],"checkcollisionrecs() (in module raylib)":[[6,"raylib.CheckCollisionRecs",false]],"checkcollisionspheres() (in module raylib)":[[6,"raylib.CheckCollisionSpheres",false]],"chromaabcorrection (pyray.vrdeviceinfo attribute)":[[5,"pyray.VrDeviceInfo.chromaAbCorrection",false]],"chromaabcorrection (raylib.vrdeviceinfo attribute)":[[6,"raylib.VrDeviceInfo.chromaAbCorrection",false]],"clamp() (in module pyray)":[[5,"pyray.clamp",false]],"clamp() (in module raylib)":[[6,"raylib.Clamp",false]],"clear_background() (in module pyray)":[[5,"pyray.clear_background",false]],"clear_window_state() (in module pyray)":[[5,"pyray.clear_window_state",false]],"clearbackground() (in module raylib)":[[6,"raylib.ClearBackground",false]],"clearwindowstate() (in module raylib)":[[6,"raylib.ClearWindowState",false]],"close_audio_device() (in module pyray)":[[5,"pyray.close_audio_device",false]],"close_physics() (in module pyray)":[[5,"pyray.close_physics",false]],"close_window() (in module pyray)":[[5,"pyray.close_window",false]],"closeaudiodevice() (in module raylib)":[[6,"raylib.CloseAudioDevice",false]],"closephysics() (in module raylib)":[[6,"raylib.ClosePhysics",false]],"closewindow() (in module raylib)":[[6,"raylib.CloseWindow",false]],"codepoint_to_utf8() (in module pyray)":[[5,"pyray.codepoint_to_utf8",false]],"codepointtoutf8() (in module raylib)":[[6,"raylib.CodepointToUTF8",false]],"color (class in pyray)":[[5,"pyray.Color",false]],"color (class in raylib)":[[6,"raylib.Color",false]],"color (pyray.materialmap attribute)":[[5,"pyray.MaterialMap.color",false]],"color (raylib.materialmap attribute)":[[6,"raylib.MaterialMap.color",false]],"color_alpha() (in module pyray)":[[5,"pyray.color_alpha",false]],"color_alpha_blend() (in module pyray)":[[5,"pyray.color_alpha_blend",false]],"color_brightness() (in module pyray)":[[5,"pyray.color_brightness",false]],"color_contrast() (in module pyray)":[[5,"pyray.color_contrast",false]],"color_from_hsv() (in module pyray)":[[5,"pyray.color_from_hsv",false]],"color_from_normalized() (in module pyray)":[[5,"pyray.color_from_normalized",false]],"color_is_equal() (in module pyray)":[[5,"pyray.color_is_equal",false]],"color_lerp() (in module pyray)":[[5,"pyray.color_lerp",false]],"color_normalize() (in module pyray)":[[5,"pyray.color_normalize",false]],"color_selector_size (in module raylib)":[[6,"raylib.COLOR_SELECTOR_SIZE",false]],"color_selector_size (pyray.guicolorpickerproperty attribute)":[[5,"pyray.GuiColorPickerProperty.COLOR_SELECTOR_SIZE",false]],"color_tint() (in module pyray)":[[5,"pyray.color_tint",false]],"color_to_hsv() (in module pyray)":[[5,"pyray.color_to_hsv",false]],"color_to_int() (in module pyray)":[[5,"pyray.color_to_int",false]],"coloralpha() (in module raylib)":[[6,"raylib.ColorAlpha",false]],"coloralphablend() (in module raylib)":[[6,"raylib.ColorAlphaBlend",false]],"colorbrightness() (in module raylib)":[[6,"raylib.ColorBrightness",false]],"colorcontrast() (in module raylib)":[[6,"raylib.ColorContrast",false]],"colorfromhsv() (in module raylib)":[[6,"raylib.ColorFromHSV",false]],"colorfromnormalized() (in module raylib)":[[6,"raylib.ColorFromNormalized",false]],"colorisequal() (in module raylib)":[[6,"raylib.ColorIsEqual",false]],"colorlerp() (in module raylib)":[[6,"raylib.ColorLerp",false]],"colornormalize() (in module raylib)":[[6,"raylib.ColorNormalize",false]],"colorpicker (in module raylib)":[[6,"raylib.COLORPICKER",false]],"colorpicker (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.COLORPICKER",false]],"colors (pyray.mesh attribute)":[[5,"pyray.Mesh.colors",false]],"colors (pyray.rlvertexbuffer attribute)":[[5,"pyray.rlVertexBuffer.colors",false]],"colors (raylib.mesh attribute)":[[6,"raylib.Mesh.colors",false]],"colors (raylib.rlvertexbuffer attribute)":[[6,"raylib.rlVertexBuffer.colors",false]],"colortint() (in module raylib)":[[6,"raylib.ColorTint",false]],"colortohsv() (in module raylib)":[[6,"raylib.ColorToHSV",false]],"colortoint() (in module raylib)":[[6,"raylib.ColorToInt",false]],"combo_button_spacing (in module raylib)":[[6,"raylib.COMBO_BUTTON_SPACING",false]],"combo_button_spacing (pyray.guicomboboxproperty attribute)":[[5,"pyray.GuiComboBoxProperty.COMBO_BUTTON_SPACING",false]],"combo_button_width (in module raylib)":[[6,"raylib.COMBO_BUTTON_WIDTH",false]],"combo_button_width (pyray.guicomboboxproperty attribute)":[[5,"pyray.GuiComboBoxProperty.COMBO_BUTTON_WIDTH",false]],"combobox (in module raylib)":[[6,"raylib.COMBOBOX",false]],"combobox (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.COMBOBOX",false]],"compress_data() (in module pyray)":[[5,"pyray.compress_data",false]],"compressdata() (in module raylib)":[[6,"raylib.CompressData",false]],"compute_crc32() (in module pyray)":[[5,"pyray.compute_crc32",false]],"compute_md5() (in module pyray)":[[5,"pyray.compute_md5",false]],"compute_sha1() (in module pyray)":[[5,"pyray.compute_sha1",false]],"computecrc32() (in module raylib)":[[6,"raylib.ComputeCRC32",false]],"computemd5() (in module raylib)":[[6,"raylib.ComputeMD5",false]],"computesha1() (in module raylib)":[[6,"raylib.ComputeSHA1",false]],"configflags (class in pyray)":[[5,"pyray.ConfigFlags",false]],"configflags (in module raylib)":[[6,"raylib.ConfigFlags",false]],"contacts (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.contacts",false]],"contacts (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.contacts",false]],"contactscount (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.contactsCount",false]],"contactscount (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.contactsCount",false]],"controlid (pyray.guistyleprop attribute)":[[5,"pyray.GuiStyleProp.controlId",false]],"controlid (raylib.guistyleprop attribute)":[[6,"raylib.GuiStyleProp.controlId",false]],"count (pyray.automationeventlist attribute)":[[5,"pyray.AutomationEventList.count",false]],"count (pyray.filepathlist attribute)":[[5,"pyray.FilePathList.count",false]],"count (raylib.automationeventlist attribute)":[[6,"raylib.AutomationEventList.count",false]],"count (raylib.filepathlist attribute)":[[6,"raylib.FilePathList.count",false]],"create_physics_body_circle() (in module pyray)":[[5,"pyray.create_physics_body_circle",false]],"create_physics_body_polygon() (in module pyray)":[[5,"pyray.create_physics_body_polygon",false]],"create_physics_body_rectangle() (in module pyray)":[[5,"pyray.create_physics_body_rectangle",false]],"createphysicsbodycircle() (in module raylib)":[[6,"raylib.CreatePhysicsBodyCircle",false]],"createphysicsbodypolygon() (in module raylib)":[[6,"raylib.CreatePhysicsBodyPolygon",false]],"createphysicsbodyrectangle() (in module raylib)":[[6,"raylib.CreatePhysicsBodyRectangle",false]],"ctxdata (pyray.music attribute)":[[5,"pyray.Music.ctxData",false]],"ctxdata (raylib.music attribute)":[[6,"raylib.Music.ctxData",false]],"ctxtype (pyray.music attribute)":[[5,"pyray.Music.ctxType",false]],"ctxtype (raylib.music attribute)":[[6,"raylib.Music.ctxType",false]],"cubemap_layout_auto_detect (in module raylib)":[[6,"raylib.CUBEMAP_LAYOUT_AUTO_DETECT",false]],"cubemap_layout_auto_detect (pyray.cubemaplayout attribute)":[[5,"pyray.CubemapLayout.CUBEMAP_LAYOUT_AUTO_DETECT",false]],"cubemap_layout_cross_four_by_three (in module raylib)":[[6,"raylib.CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE",false]],"cubemap_layout_cross_four_by_three (pyray.cubemaplayout attribute)":[[5,"pyray.CubemapLayout.CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE",false]],"cubemap_layout_cross_three_by_four (in module raylib)":[[6,"raylib.CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR",false]],"cubemap_layout_cross_three_by_four (pyray.cubemaplayout attribute)":[[5,"pyray.CubemapLayout.CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR",false]],"cubemap_layout_line_horizontal (in module raylib)":[[6,"raylib.CUBEMAP_LAYOUT_LINE_HORIZONTAL",false]],"cubemap_layout_line_horizontal (pyray.cubemaplayout attribute)":[[5,"pyray.CubemapLayout.CUBEMAP_LAYOUT_LINE_HORIZONTAL",false]],"cubemap_layout_line_vertical (in module raylib)":[[6,"raylib.CUBEMAP_LAYOUT_LINE_VERTICAL",false]],"cubemap_layout_line_vertical (pyray.cubemaplayout attribute)":[[5,"pyray.CubemapLayout.CUBEMAP_LAYOUT_LINE_VERTICAL",false]],"cubemaplayout (class in pyray)":[[5,"pyray.CubemapLayout",false]],"cubemaplayout (in module raylib)":[[6,"raylib.CubemapLayout",false]],"currentbuffer (pyray.rlrenderbatch attribute)":[[5,"pyray.rlRenderBatch.currentBuffer",false]],"currentbuffer (raylib.rlrenderbatch attribute)":[[6,"raylib.rlRenderBatch.currentBuffer",false]],"currentdepth (pyray.rlrenderbatch attribute)":[[5,"pyray.rlRenderBatch.currentDepth",false]],"currentdepth (raylib.rlrenderbatch attribute)":[[6,"raylib.rlRenderBatch.currentDepth",false]],"darkblue (in module pyray)":[[5,"pyray.DARKBLUE",false]],"darkblue (in module raylib)":[[6,"raylib.DARKBLUE",false]],"darkbrown (in module pyray)":[[5,"pyray.DARKBROWN",false]],"darkbrown (in module raylib)":[[6,"raylib.DARKBROWN",false]],"darkgray (in module pyray)":[[5,"pyray.DARKGRAY",false]],"darkgray (in module raylib)":[[6,"raylib.DARKGRAY",false]],"darkgreen (in module pyray)":[[5,"pyray.DARKGREEN",false]],"darkgreen (in module raylib)":[[6,"raylib.DARKGREEN",false]],"darkpurple (in module pyray)":[[5,"pyray.DARKPURPLE",false]],"darkpurple (in module raylib)":[[6,"raylib.DARKPURPLE",false]],"data (pyray.image attribute)":[[5,"pyray.Image.data",false]],"data (pyray.wave attribute)":[[5,"pyray.Wave.data",false]],"data (raylib.image attribute)":[[6,"raylib.Image.data",false]],"data (raylib.wave attribute)":[[6,"raylib.Wave.data",false]],"deallocate (raylib.glfwallocator attribute)":[[6,"raylib.GLFWallocator.deallocate",false]],"decode_data_base64() (in module pyray)":[[5,"pyray.decode_data_base64",false]],"decodedatabase64() (in module raylib)":[[6,"raylib.DecodeDataBase64",false]],"decompress_data() (in module pyray)":[[5,"pyray.decompress_data",false]],"decompressdata() (in module raylib)":[[6,"raylib.DecompressData",false]],"default (in module raylib)":[[6,"raylib.DEFAULT",false]],"default (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.DEFAULT",false]],"depth (pyray.rendertexture attribute)":[[5,"pyray.RenderTexture.depth",false]],"depth (raylib.rendertexture attribute)":[[6,"raylib.RenderTexture.depth",false]],"depth (raylib.rendertexture2d attribute)":[[6,"raylib.RenderTexture2D.depth",false]],"destroy_physics_body() (in module pyray)":[[5,"pyray.destroy_physics_body",false]],"destroyphysicsbody() (in module raylib)":[[6,"raylib.DestroyPhysicsBody",false]],"detach_audio_mixed_processor() (in module pyray)":[[5,"pyray.detach_audio_mixed_processor",false]],"detach_audio_stream_processor() (in module pyray)":[[5,"pyray.detach_audio_stream_processor",false]],"detachaudiomixedprocessor() (in module raylib)":[[6,"raylib.DetachAudioMixedProcessor",false]],"detachaudiostreamprocessor() (in module raylib)":[[6,"raylib.DetachAudioStreamProcessor",false]],"direction (pyray.ray attribute)":[[5,"pyray.Ray.direction",false]],"direction (raylib.ray attribute)":[[6,"raylib.Ray.direction",false]],"directory_exists() (in module pyray)":[[5,"pyray.directory_exists",false]],"directoryexists() (in module raylib)":[[6,"raylib.DirectoryExists",false]],"disable_cursor() (in module pyray)":[[5,"pyray.disable_cursor",false]],"disable_event_waiting() (in module pyray)":[[5,"pyray.disable_event_waiting",false]],"disablecursor() (in module raylib)":[[6,"raylib.DisableCursor",false]],"disableeventwaiting() (in module raylib)":[[6,"raylib.DisableEventWaiting",false]],"distance (pyray.raycollision attribute)":[[5,"pyray.RayCollision.distance",false]],"distance (raylib.raycollision attribute)":[[6,"raylib.RayCollision.distance",false]],"draw_billboard() (in module pyray)":[[5,"pyray.draw_billboard",false]],"draw_billboard_pro() (in module pyray)":[[5,"pyray.draw_billboard_pro",false]],"draw_billboard_rec() (in module pyray)":[[5,"pyray.draw_billboard_rec",false]],"draw_bounding_box() (in module pyray)":[[5,"pyray.draw_bounding_box",false]],"draw_capsule() (in module pyray)":[[5,"pyray.draw_capsule",false]],"draw_capsule_wires() (in module pyray)":[[5,"pyray.draw_capsule_wires",false]],"draw_circle() (in module pyray)":[[5,"pyray.draw_circle",false]],"draw_circle_3d() (in module pyray)":[[5,"pyray.draw_circle_3d",false]],"draw_circle_gradient() (in module pyray)":[[5,"pyray.draw_circle_gradient",false]],"draw_circle_lines() (in module pyray)":[[5,"pyray.draw_circle_lines",false]],"draw_circle_lines_v() (in module pyray)":[[5,"pyray.draw_circle_lines_v",false]],"draw_circle_sector() (in module pyray)":[[5,"pyray.draw_circle_sector",false]],"draw_circle_sector_lines() (in module pyray)":[[5,"pyray.draw_circle_sector_lines",false]],"draw_circle_v() (in module pyray)":[[5,"pyray.draw_circle_v",false]],"draw_cube() (in module pyray)":[[5,"pyray.draw_cube",false]],"draw_cube_v() (in module pyray)":[[5,"pyray.draw_cube_v",false]],"draw_cube_wires() (in module pyray)":[[5,"pyray.draw_cube_wires",false]],"draw_cube_wires_v() (in module pyray)":[[5,"pyray.draw_cube_wires_v",false]],"draw_cylinder() (in module pyray)":[[5,"pyray.draw_cylinder",false]],"draw_cylinder_ex() (in module pyray)":[[5,"pyray.draw_cylinder_ex",false]],"draw_cylinder_wires() (in module pyray)":[[5,"pyray.draw_cylinder_wires",false]],"draw_cylinder_wires_ex() (in module pyray)":[[5,"pyray.draw_cylinder_wires_ex",false]],"draw_ellipse() (in module pyray)":[[5,"pyray.draw_ellipse",false]],"draw_ellipse_lines() (in module pyray)":[[5,"pyray.draw_ellipse_lines",false]],"draw_fps() (in module pyray)":[[5,"pyray.draw_fps",false]],"draw_grid() (in module pyray)":[[5,"pyray.draw_grid",false]],"draw_line() (in module pyray)":[[5,"pyray.draw_line",false]],"draw_line_3d() (in module pyray)":[[5,"pyray.draw_line_3d",false]],"draw_line_bezier() (in module pyray)":[[5,"pyray.draw_line_bezier",false]],"draw_line_ex() (in module pyray)":[[5,"pyray.draw_line_ex",false]],"draw_line_strip() (in module pyray)":[[5,"pyray.draw_line_strip",false]],"draw_line_v() (in module pyray)":[[5,"pyray.draw_line_v",false]],"draw_mesh() (in module pyray)":[[5,"pyray.draw_mesh",false]],"draw_mesh_instanced() (in module pyray)":[[5,"pyray.draw_mesh_instanced",false]],"draw_model() (in module pyray)":[[5,"pyray.draw_model",false]],"draw_model_ex() (in module pyray)":[[5,"pyray.draw_model_ex",false]],"draw_model_points() (in module pyray)":[[5,"pyray.draw_model_points",false]],"draw_model_points_ex() (in module pyray)":[[5,"pyray.draw_model_points_ex",false]],"draw_model_wires() (in module pyray)":[[5,"pyray.draw_model_wires",false]],"draw_model_wires_ex() (in module pyray)":[[5,"pyray.draw_model_wires_ex",false]],"draw_pixel() (in module pyray)":[[5,"pyray.draw_pixel",false]],"draw_pixel_v() (in module pyray)":[[5,"pyray.draw_pixel_v",false]],"draw_plane() (in module pyray)":[[5,"pyray.draw_plane",false]],"draw_point_3d() (in module pyray)":[[5,"pyray.draw_point_3d",false]],"draw_poly() (in module pyray)":[[5,"pyray.draw_poly",false]],"draw_poly_lines() (in module pyray)":[[5,"pyray.draw_poly_lines",false]],"draw_poly_lines_ex() (in module pyray)":[[5,"pyray.draw_poly_lines_ex",false]],"draw_ray() (in module pyray)":[[5,"pyray.draw_ray",false]],"draw_rectangle() (in module pyray)":[[5,"pyray.draw_rectangle",false]],"draw_rectangle_gradient_ex() (in module pyray)":[[5,"pyray.draw_rectangle_gradient_ex",false]],"draw_rectangle_gradient_h() (in module pyray)":[[5,"pyray.draw_rectangle_gradient_h",false]],"draw_rectangle_gradient_v() (in module pyray)":[[5,"pyray.draw_rectangle_gradient_v",false]],"draw_rectangle_lines() (in module pyray)":[[5,"pyray.draw_rectangle_lines",false]],"draw_rectangle_lines_ex() (in module pyray)":[[5,"pyray.draw_rectangle_lines_ex",false]],"draw_rectangle_pro() (in module pyray)":[[5,"pyray.draw_rectangle_pro",false]],"draw_rectangle_rec() (in module pyray)":[[5,"pyray.draw_rectangle_rec",false]],"draw_rectangle_rounded() (in module pyray)":[[5,"pyray.draw_rectangle_rounded",false]],"draw_rectangle_rounded_lines() (in module pyray)":[[5,"pyray.draw_rectangle_rounded_lines",false]],"draw_rectangle_rounded_lines_ex() (in module pyray)":[[5,"pyray.draw_rectangle_rounded_lines_ex",false]],"draw_rectangle_v() (in module pyray)":[[5,"pyray.draw_rectangle_v",false]],"draw_ring() (in module pyray)":[[5,"pyray.draw_ring",false]],"draw_ring_lines() (in module pyray)":[[5,"pyray.draw_ring_lines",false]],"draw_sphere() (in module pyray)":[[5,"pyray.draw_sphere",false]],"draw_sphere_ex() (in module pyray)":[[5,"pyray.draw_sphere_ex",false]],"draw_sphere_wires() (in module pyray)":[[5,"pyray.draw_sphere_wires",false]],"draw_spline_basis() (in module pyray)":[[5,"pyray.draw_spline_basis",false]],"draw_spline_bezier_cubic() (in module pyray)":[[5,"pyray.draw_spline_bezier_cubic",false]],"draw_spline_bezier_quadratic() (in module pyray)":[[5,"pyray.draw_spline_bezier_quadratic",false]],"draw_spline_catmull_rom() (in module pyray)":[[5,"pyray.draw_spline_catmull_rom",false]],"draw_spline_linear() (in module pyray)":[[5,"pyray.draw_spline_linear",false]],"draw_spline_segment_basis() (in module pyray)":[[5,"pyray.draw_spline_segment_basis",false]],"draw_spline_segment_bezier_cubic() (in module pyray)":[[5,"pyray.draw_spline_segment_bezier_cubic",false]],"draw_spline_segment_bezier_quadratic() (in module pyray)":[[5,"pyray.draw_spline_segment_bezier_quadratic",false]],"draw_spline_segment_catmull_rom() (in module pyray)":[[5,"pyray.draw_spline_segment_catmull_rom",false]],"draw_spline_segment_linear() (in module pyray)":[[5,"pyray.draw_spline_segment_linear",false]],"draw_text() (in module pyray)":[[5,"pyray.draw_text",false]],"draw_text_codepoint() (in module pyray)":[[5,"pyray.draw_text_codepoint",false]],"draw_text_codepoints() (in module pyray)":[[5,"pyray.draw_text_codepoints",false]],"draw_text_ex() (in module pyray)":[[5,"pyray.draw_text_ex",false]],"draw_text_pro() (in module pyray)":[[5,"pyray.draw_text_pro",false]],"draw_texture() (in module pyray)":[[5,"pyray.draw_texture",false]],"draw_texture_ex() (in module pyray)":[[5,"pyray.draw_texture_ex",false]],"draw_texture_n_patch() (in module pyray)":[[5,"pyray.draw_texture_n_patch",false]],"draw_texture_pro() (in module pyray)":[[5,"pyray.draw_texture_pro",false]],"draw_texture_rec() (in module pyray)":[[5,"pyray.draw_texture_rec",false]],"draw_texture_v() (in module pyray)":[[5,"pyray.draw_texture_v",false]],"draw_triangle() (in module pyray)":[[5,"pyray.draw_triangle",false]],"draw_triangle_3d() (in module pyray)":[[5,"pyray.draw_triangle_3d",false]],"draw_triangle_fan() (in module pyray)":[[5,"pyray.draw_triangle_fan",false]],"draw_triangle_lines() (in module pyray)":[[5,"pyray.draw_triangle_lines",false]],"draw_triangle_strip() (in module pyray)":[[5,"pyray.draw_triangle_strip",false]],"draw_triangle_strip_3d() (in module pyray)":[[5,"pyray.draw_triangle_strip_3d",false]],"drawbillboard() (in module raylib)":[[6,"raylib.DrawBillboard",false]],"drawbillboardpro() (in module raylib)":[[6,"raylib.DrawBillboardPro",false]],"drawbillboardrec() (in module raylib)":[[6,"raylib.DrawBillboardRec",false]],"drawboundingbox() (in module raylib)":[[6,"raylib.DrawBoundingBox",false]],"drawcapsule() (in module raylib)":[[6,"raylib.DrawCapsule",false]],"drawcapsulewires() (in module raylib)":[[6,"raylib.DrawCapsuleWires",false]],"drawcircle() (in module raylib)":[[6,"raylib.DrawCircle",false]],"drawcircle3d() (in module raylib)":[[6,"raylib.DrawCircle3D",false]],"drawcirclegradient() (in module raylib)":[[6,"raylib.DrawCircleGradient",false]],"drawcirclelines() (in module raylib)":[[6,"raylib.DrawCircleLines",false]],"drawcirclelinesv() (in module raylib)":[[6,"raylib.DrawCircleLinesV",false]],"drawcirclesector() (in module raylib)":[[6,"raylib.DrawCircleSector",false]],"drawcirclesectorlines() (in module raylib)":[[6,"raylib.DrawCircleSectorLines",false]],"drawcirclev() (in module raylib)":[[6,"raylib.DrawCircleV",false]],"drawcounter (pyray.rlrenderbatch attribute)":[[5,"pyray.rlRenderBatch.drawCounter",false]],"drawcounter (raylib.rlrenderbatch attribute)":[[6,"raylib.rlRenderBatch.drawCounter",false]],"drawcube() (in module raylib)":[[6,"raylib.DrawCube",false]],"drawcubev() (in module raylib)":[[6,"raylib.DrawCubeV",false]],"drawcubewires() (in module raylib)":[[6,"raylib.DrawCubeWires",false]],"drawcubewiresv() (in module raylib)":[[6,"raylib.DrawCubeWiresV",false]],"drawcylinder() (in module raylib)":[[6,"raylib.DrawCylinder",false]],"drawcylinderex() (in module raylib)":[[6,"raylib.DrawCylinderEx",false]],"drawcylinderwires() (in module raylib)":[[6,"raylib.DrawCylinderWires",false]],"drawcylinderwiresex() (in module raylib)":[[6,"raylib.DrawCylinderWiresEx",false]],"drawellipse() (in module raylib)":[[6,"raylib.DrawEllipse",false]],"drawellipselines() (in module raylib)":[[6,"raylib.DrawEllipseLines",false]],"drawfps() (in module raylib)":[[6,"raylib.DrawFPS",false]],"drawgrid() (in module raylib)":[[6,"raylib.DrawGrid",false]],"drawline() (in module raylib)":[[6,"raylib.DrawLine",false]],"drawline3d() (in module raylib)":[[6,"raylib.DrawLine3D",false]],"drawlinebezier() (in module raylib)":[[6,"raylib.DrawLineBezier",false]],"drawlineex() (in module raylib)":[[6,"raylib.DrawLineEx",false]],"drawlinestrip() (in module raylib)":[[6,"raylib.DrawLineStrip",false]],"drawlinev() (in module raylib)":[[6,"raylib.DrawLineV",false]],"drawmesh() (in module raylib)":[[6,"raylib.DrawMesh",false]],"drawmeshinstanced() (in module raylib)":[[6,"raylib.DrawMeshInstanced",false]],"drawmodel() (in module raylib)":[[6,"raylib.DrawModel",false]],"drawmodelex() (in module raylib)":[[6,"raylib.DrawModelEx",false]],"drawmodelpoints() (in module raylib)":[[6,"raylib.DrawModelPoints",false]],"drawmodelpointsex() (in module raylib)":[[6,"raylib.DrawModelPointsEx",false]],"drawmodelwires() (in module raylib)":[[6,"raylib.DrawModelWires",false]],"drawmodelwiresex() (in module raylib)":[[6,"raylib.DrawModelWiresEx",false]],"drawpixel() (in module raylib)":[[6,"raylib.DrawPixel",false]],"drawpixelv() (in module raylib)":[[6,"raylib.DrawPixelV",false]],"drawplane() (in module raylib)":[[6,"raylib.DrawPlane",false]],"drawpoint3d() (in module raylib)":[[6,"raylib.DrawPoint3D",false]],"drawpoly() (in module raylib)":[[6,"raylib.DrawPoly",false]],"drawpolylines() (in module raylib)":[[6,"raylib.DrawPolyLines",false]],"drawpolylinesex() (in module raylib)":[[6,"raylib.DrawPolyLinesEx",false]],"drawray() (in module raylib)":[[6,"raylib.DrawRay",false]],"drawrectangle() (in module raylib)":[[6,"raylib.DrawRectangle",false]],"drawrectanglegradientex() (in module raylib)":[[6,"raylib.DrawRectangleGradientEx",false]],"drawrectanglegradienth() (in module raylib)":[[6,"raylib.DrawRectangleGradientH",false]],"drawrectanglegradientv() (in module raylib)":[[6,"raylib.DrawRectangleGradientV",false]],"drawrectanglelines() (in module raylib)":[[6,"raylib.DrawRectangleLines",false]],"drawrectanglelinesex() (in module raylib)":[[6,"raylib.DrawRectangleLinesEx",false]],"drawrectanglepro() (in module raylib)":[[6,"raylib.DrawRectanglePro",false]],"drawrectanglerec() (in module raylib)":[[6,"raylib.DrawRectangleRec",false]],"drawrectanglerounded() (in module raylib)":[[6,"raylib.DrawRectangleRounded",false]],"drawrectangleroundedlines() (in module raylib)":[[6,"raylib.DrawRectangleRoundedLines",false]],"drawrectangleroundedlinesex() (in module raylib)":[[6,"raylib.DrawRectangleRoundedLinesEx",false]],"drawrectanglev() (in module raylib)":[[6,"raylib.DrawRectangleV",false]],"drawring() (in module raylib)":[[6,"raylib.DrawRing",false]],"drawringlines() (in module raylib)":[[6,"raylib.DrawRingLines",false]],"draws (pyray.rlrenderbatch attribute)":[[5,"pyray.rlRenderBatch.draws",false]],"draws (raylib.rlrenderbatch attribute)":[[6,"raylib.rlRenderBatch.draws",false]],"drawsphere() (in module raylib)":[[6,"raylib.DrawSphere",false]],"drawsphereex() (in module raylib)":[[6,"raylib.DrawSphereEx",false]],"drawspherewires() (in module raylib)":[[6,"raylib.DrawSphereWires",false]],"drawsplinebasis() (in module raylib)":[[6,"raylib.DrawSplineBasis",false]],"drawsplinebeziercubic() (in module raylib)":[[6,"raylib.DrawSplineBezierCubic",false]],"drawsplinebezierquadratic() (in module raylib)":[[6,"raylib.DrawSplineBezierQuadratic",false]],"drawsplinecatmullrom() (in module raylib)":[[6,"raylib.DrawSplineCatmullRom",false]],"drawsplinelinear() (in module raylib)":[[6,"raylib.DrawSplineLinear",false]],"drawsplinesegmentbasis() (in module raylib)":[[6,"raylib.DrawSplineSegmentBasis",false]],"drawsplinesegmentbeziercubic() (in module raylib)":[[6,"raylib.DrawSplineSegmentBezierCubic",false]],"drawsplinesegmentbezierquadratic() (in module raylib)":[[6,"raylib.DrawSplineSegmentBezierQuadratic",false]],"drawsplinesegmentcatmullrom() (in module raylib)":[[6,"raylib.DrawSplineSegmentCatmullRom",false]],"drawsplinesegmentlinear() (in module raylib)":[[6,"raylib.DrawSplineSegmentLinear",false]],"drawtext() (in module raylib)":[[6,"raylib.DrawText",false]],"drawtextcodepoint() (in module raylib)":[[6,"raylib.DrawTextCodepoint",false]],"drawtextcodepoints() (in module raylib)":[[6,"raylib.DrawTextCodepoints",false]],"drawtextex() (in module raylib)":[[6,"raylib.DrawTextEx",false]],"drawtextpro() (in module raylib)":[[6,"raylib.DrawTextPro",false]],"drawtexture() (in module raylib)":[[6,"raylib.DrawTexture",false]],"drawtextureex() (in module raylib)":[[6,"raylib.DrawTextureEx",false]],"drawtexturenpatch() (in module raylib)":[[6,"raylib.DrawTextureNPatch",false]],"drawtexturepro() (in module raylib)":[[6,"raylib.DrawTexturePro",false]],"drawtexturerec() (in module raylib)":[[6,"raylib.DrawTextureRec",false]],"drawtexturev() (in module raylib)":[[6,"raylib.DrawTextureV",false]],"drawtriangle() (in module raylib)":[[6,"raylib.DrawTriangle",false]],"drawtriangle3d() (in module raylib)":[[6,"raylib.DrawTriangle3D",false]],"drawtrianglefan() (in module raylib)":[[6,"raylib.DrawTriangleFan",false]],"drawtrianglelines() (in module raylib)":[[6,"raylib.DrawTriangleLines",false]],"drawtrianglestrip() (in module raylib)":[[6,"raylib.DrawTriangleStrip",false]],"drawtrianglestrip3d() (in module raylib)":[[6,"raylib.DrawTriangleStrip3D",false]],"dropdown_arrow_hidden (in module raylib)":[[6,"raylib.DROPDOWN_ARROW_HIDDEN",false]],"dropdown_arrow_hidden (pyray.guidropdownboxproperty attribute)":[[5,"pyray.GuiDropdownBoxProperty.DROPDOWN_ARROW_HIDDEN",false]],"dropdown_items_spacing (in module raylib)":[[6,"raylib.DROPDOWN_ITEMS_SPACING",false]],"dropdown_items_spacing (pyray.guidropdownboxproperty attribute)":[[5,"pyray.GuiDropdownBoxProperty.DROPDOWN_ITEMS_SPACING",false]],"dropdown_roll_up (in module raylib)":[[6,"raylib.DROPDOWN_ROLL_UP",false]],"dropdown_roll_up (pyray.guidropdownboxproperty attribute)":[[5,"pyray.GuiDropdownBoxProperty.DROPDOWN_ROLL_UP",false]],"dropdownbox (in module raylib)":[[6,"raylib.DROPDOWNBOX",false]],"dropdownbox (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.DROPDOWNBOX",false]],"dynamicfriction (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.dynamicFriction",false]],"dynamicfriction (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.dynamicFriction",false]],"dynamicfriction (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.dynamicFriction",false]],"dynamicfriction (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.dynamicFriction",false]],"elementcount (pyray.rlvertexbuffer attribute)":[[5,"pyray.rlVertexBuffer.elementCount",false]],"elementcount (raylib.rlvertexbuffer attribute)":[[6,"raylib.rlVertexBuffer.elementCount",false]],"enable_cursor() (in module pyray)":[[5,"pyray.enable_cursor",false]],"enable_event_waiting() (in module pyray)":[[5,"pyray.enable_event_waiting",false]],"enablecursor() (in module raylib)":[[6,"raylib.EnableCursor",false]],"enabled (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.enabled",false]],"enabled (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.enabled",false]],"enableeventwaiting() (in module raylib)":[[6,"raylib.EnableEventWaiting",false]],"encode_data_base64() (in module pyray)":[[5,"pyray.encode_data_base64",false]],"encodedatabase64() (in module raylib)":[[6,"raylib.EncodeDataBase64",false]],"end_blend_mode() (in module pyray)":[[5,"pyray.end_blend_mode",false]],"end_drawing() (in module pyray)":[[5,"pyray.end_drawing",false]],"end_mode_2d() (in module pyray)":[[5,"pyray.end_mode_2d",false]],"end_mode_3d() (in module pyray)":[[5,"pyray.end_mode_3d",false]],"end_scissor_mode() (in module pyray)":[[5,"pyray.end_scissor_mode",false]],"end_shader_mode() (in module pyray)":[[5,"pyray.end_shader_mode",false]],"end_texture_mode() (in module pyray)":[[5,"pyray.end_texture_mode",false]],"end_vr_stereo_mode() (in module pyray)":[[5,"pyray.end_vr_stereo_mode",false]],"endblendmode() (in module raylib)":[[6,"raylib.EndBlendMode",false]],"enddrawing() (in module raylib)":[[6,"raylib.EndDrawing",false]],"endmode2d() (in module raylib)":[[6,"raylib.EndMode2D",false]],"endmode3d() (in module raylib)":[[6,"raylib.EndMode3D",false]],"endscissormode() (in module raylib)":[[6,"raylib.EndScissorMode",false]],"endshadermode() (in module raylib)":[[6,"raylib.EndShaderMode",false]],"endtexturemode() (in module raylib)":[[6,"raylib.EndTextureMode",false]],"endvrstereomode() (in module raylib)":[[6,"raylib.EndVrStereoMode",false]],"events (pyray.automationeventlist attribute)":[[5,"pyray.AutomationEventList.events",false]],"events (raylib.automationeventlist attribute)":[[6,"raylib.AutomationEventList.events",false]],"export_automation_event_list() (in module pyray)":[[5,"pyray.export_automation_event_list",false]],"export_data_as_code() (in module pyray)":[[5,"pyray.export_data_as_code",false]],"export_font_as_code() (in module pyray)":[[5,"pyray.export_font_as_code",false]],"export_image() (in module pyray)":[[5,"pyray.export_image",false]],"export_image_as_code() (in module pyray)":[[5,"pyray.export_image_as_code",false]],"export_image_to_memory() (in module pyray)":[[5,"pyray.export_image_to_memory",false]],"export_mesh() (in module pyray)":[[5,"pyray.export_mesh",false]],"export_mesh_as_code() (in module pyray)":[[5,"pyray.export_mesh_as_code",false]],"export_wave() (in module pyray)":[[5,"pyray.export_wave",false]],"export_wave_as_code() (in module pyray)":[[5,"pyray.export_wave_as_code",false]],"exportautomationeventlist() (in module raylib)":[[6,"raylib.ExportAutomationEventList",false]],"exportdataascode() (in module raylib)":[[6,"raylib.ExportDataAsCode",false]],"exportfontascode() (in module raylib)":[[6,"raylib.ExportFontAsCode",false]],"exportimage() (in module raylib)":[[6,"raylib.ExportImage",false]],"exportimageascode() (in module raylib)":[[6,"raylib.ExportImageAsCode",false]],"exportimagetomemory() (in module raylib)":[[6,"raylib.ExportImageToMemory",false]],"exportmesh() (in module raylib)":[[6,"raylib.ExportMesh",false]],"exportmeshascode() (in module raylib)":[[6,"raylib.ExportMeshAsCode",false]],"exportwave() (in module raylib)":[[6,"raylib.ExportWave",false]],"exportwaveascode() (in module raylib)":[[6,"raylib.ExportWaveAsCode",false]],"eyetoscreendistance (pyray.vrdeviceinfo attribute)":[[5,"pyray.VrDeviceInfo.eyeToScreenDistance",false]],"eyetoscreendistance (raylib.vrdeviceinfo attribute)":[[6,"raylib.VrDeviceInfo.eyeToScreenDistance",false]],"fade() (in module pyray)":[[5,"pyray.fade",false]],"fade() (in module raylib)":[[6,"raylib.Fade",false]],"ffi (in module pyray)":[[5,"pyray.ffi",false]],"ffi (in module raylib)":[[6,"raylib.ffi",false]],"file_exists() (in module pyray)":[[5,"pyray.file_exists",false]],"fileexists() (in module raylib)":[[6,"raylib.FileExists",false]],"filepathlist (class in pyray)":[[5,"pyray.FilePathList",false]],"filepathlist (class in raylib)":[[6,"raylib.FilePathList",false]],"flag_borderless_windowed_mode (in module raylib)":[[6,"raylib.FLAG_BORDERLESS_WINDOWED_MODE",false]],"flag_borderless_windowed_mode (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_BORDERLESS_WINDOWED_MODE",false]],"flag_fullscreen_mode (in module raylib)":[[6,"raylib.FLAG_FULLSCREEN_MODE",false]],"flag_fullscreen_mode (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_FULLSCREEN_MODE",false]],"flag_interlaced_hint (in module raylib)":[[6,"raylib.FLAG_INTERLACED_HINT",false]],"flag_interlaced_hint (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_INTERLACED_HINT",false]],"flag_msaa_4x_hint (in module raylib)":[[6,"raylib.FLAG_MSAA_4X_HINT",false]],"flag_msaa_4x_hint (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_MSAA_4X_HINT",false]],"flag_vsync_hint (in module raylib)":[[6,"raylib.FLAG_VSYNC_HINT",false]],"flag_vsync_hint (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_VSYNC_HINT",false]],"flag_window_always_run (in module raylib)":[[6,"raylib.FLAG_WINDOW_ALWAYS_RUN",false]],"flag_window_always_run (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_ALWAYS_RUN",false]],"flag_window_hidden (in module raylib)":[[6,"raylib.FLAG_WINDOW_HIDDEN",false]],"flag_window_hidden (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_HIDDEN",false]],"flag_window_highdpi (in module raylib)":[[6,"raylib.FLAG_WINDOW_HIGHDPI",false]],"flag_window_highdpi (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_HIGHDPI",false]],"flag_window_maximized (in module raylib)":[[6,"raylib.FLAG_WINDOW_MAXIMIZED",false]],"flag_window_maximized (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_MAXIMIZED",false]],"flag_window_minimized (in module raylib)":[[6,"raylib.FLAG_WINDOW_MINIMIZED",false]],"flag_window_minimized (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_MINIMIZED",false]],"flag_window_mouse_passthrough (in module raylib)":[[6,"raylib.FLAG_WINDOW_MOUSE_PASSTHROUGH",false]],"flag_window_mouse_passthrough (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_MOUSE_PASSTHROUGH",false]],"flag_window_resizable (in module raylib)":[[6,"raylib.FLAG_WINDOW_RESIZABLE",false]],"flag_window_resizable (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_RESIZABLE",false]],"flag_window_topmost (in module raylib)":[[6,"raylib.FLAG_WINDOW_TOPMOST",false]],"flag_window_topmost (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_TOPMOST",false]],"flag_window_transparent (in module raylib)":[[6,"raylib.FLAG_WINDOW_TRANSPARENT",false]],"flag_window_transparent (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_TRANSPARENT",false]],"flag_window_undecorated (in module raylib)":[[6,"raylib.FLAG_WINDOW_UNDECORATED",false]],"flag_window_undecorated (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_UNDECORATED",false]],"flag_window_unfocused (in module raylib)":[[6,"raylib.FLAG_WINDOW_UNFOCUSED",false]],"flag_window_unfocused (pyray.configflags attribute)":[[5,"pyray.ConfigFlags.FLAG_WINDOW_UNFOCUSED",false]],"float16 (class in pyray)":[[5,"pyray.float16",false]],"float16 (class in raylib)":[[6,"raylib.float16",false]],"float3 (class in pyray)":[[5,"pyray.float3",false]],"float3 (class in raylib)":[[6,"raylib.float3",false]],"float_equals() (in module pyray)":[[5,"pyray.float_equals",false]],"floatequals() (in module raylib)":[[6,"raylib.FloatEquals",false]],"font (class in pyray)":[[5,"pyray.Font",false]],"font (class in raylib)":[[6,"raylib.Font",false]],"font_bitmap (in module raylib)":[[6,"raylib.FONT_BITMAP",false]],"font_bitmap (pyray.fonttype attribute)":[[5,"pyray.FontType.FONT_BITMAP",false]],"font_default (in module raylib)":[[6,"raylib.FONT_DEFAULT",false]],"font_default (pyray.fonttype attribute)":[[5,"pyray.FontType.FONT_DEFAULT",false]],"font_sdf (in module raylib)":[[6,"raylib.FONT_SDF",false]],"font_sdf (pyray.fonttype attribute)":[[5,"pyray.FontType.FONT_SDF",false]],"fonttype (class in pyray)":[[5,"pyray.FontType",false]],"fonttype (in module raylib)":[[6,"raylib.FontType",false]],"force (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.force",false]],"force (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.force",false]],"format (pyray.image attribute)":[[5,"pyray.Image.format",false]],"format (pyray.texture attribute)":[[5,"pyray.Texture.format",false]],"format (pyray.texture2d attribute)":[[5,"pyray.Texture2D.format",false]],"format (raylib.image attribute)":[[6,"raylib.Image.format",false]],"format (raylib.texture attribute)":[[6,"raylib.Texture.format",false]],"format (raylib.texture2d attribute)":[[6,"raylib.Texture2D.format",false]],"format (raylib.texturecubemap attribute)":[[6,"raylib.TextureCubemap.format",false]],"fovy (pyray.camera3d attribute)":[[5,"pyray.Camera3D.fovy",false]],"fovy (raylib.camera attribute)":[[6,"raylib.Camera.fovy",false]],"fovy (raylib.camera3d attribute)":[[6,"raylib.Camera3D.fovy",false]],"frame (pyray.automationevent attribute)":[[5,"pyray.AutomationEvent.frame",false]],"frame (raylib.automationevent attribute)":[[6,"raylib.AutomationEvent.frame",false]],"framecount (pyray.modelanimation attribute)":[[5,"pyray.ModelAnimation.frameCount",false]],"framecount (pyray.music attribute)":[[5,"pyray.Music.frameCount",false]],"framecount (pyray.sound attribute)":[[5,"pyray.Sound.frameCount",false]],"framecount (pyray.wave attribute)":[[5,"pyray.Wave.frameCount",false]],"framecount (raylib.modelanimation attribute)":[[6,"raylib.ModelAnimation.frameCount",false]],"framecount (raylib.music attribute)":[[6,"raylib.Music.frameCount",false]],"framecount (raylib.sound attribute)":[[6,"raylib.Sound.frameCount",false]],"framecount (raylib.wave attribute)":[[6,"raylib.Wave.frameCount",false]],"frameposes (pyray.modelanimation attribute)":[[5,"pyray.ModelAnimation.framePoses",false]],"frameposes (raylib.modelanimation attribute)":[[6,"raylib.ModelAnimation.framePoses",false]],"freezeorient (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.freezeOrient",false]],"freezeorient (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.freezeOrient",false]],"g (pyray.color attribute)":[[5,"pyray.Color.g",false]],"g (raylib.color attribute)":[[6,"raylib.Color.g",false]],"gamepad_axis_left_trigger (in module raylib)":[[6,"raylib.GAMEPAD_AXIS_LEFT_TRIGGER",false]],"gamepad_axis_left_trigger (pyray.gamepadaxis attribute)":[[5,"pyray.GamepadAxis.GAMEPAD_AXIS_LEFT_TRIGGER",false]],"gamepad_axis_left_x (in module raylib)":[[6,"raylib.GAMEPAD_AXIS_LEFT_X",false]],"gamepad_axis_left_x (pyray.gamepadaxis attribute)":[[5,"pyray.GamepadAxis.GAMEPAD_AXIS_LEFT_X",false]],"gamepad_axis_left_y (in module raylib)":[[6,"raylib.GAMEPAD_AXIS_LEFT_Y",false]],"gamepad_axis_left_y (pyray.gamepadaxis attribute)":[[5,"pyray.GamepadAxis.GAMEPAD_AXIS_LEFT_Y",false]],"gamepad_axis_right_trigger (in module raylib)":[[6,"raylib.GAMEPAD_AXIS_RIGHT_TRIGGER",false]],"gamepad_axis_right_trigger (pyray.gamepadaxis attribute)":[[5,"pyray.GamepadAxis.GAMEPAD_AXIS_RIGHT_TRIGGER",false]],"gamepad_axis_right_x (in module raylib)":[[6,"raylib.GAMEPAD_AXIS_RIGHT_X",false]],"gamepad_axis_right_x (pyray.gamepadaxis attribute)":[[5,"pyray.GamepadAxis.GAMEPAD_AXIS_RIGHT_X",false]],"gamepad_axis_right_y (in module raylib)":[[6,"raylib.GAMEPAD_AXIS_RIGHT_Y",false]],"gamepad_axis_right_y (pyray.gamepadaxis attribute)":[[5,"pyray.GamepadAxis.GAMEPAD_AXIS_RIGHT_Y",false]],"gamepad_button_left_face_down (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_LEFT_FACE_DOWN",false]],"gamepad_button_left_face_down (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_LEFT_FACE_DOWN",false]],"gamepad_button_left_face_left (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_LEFT_FACE_LEFT",false]],"gamepad_button_left_face_left (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_LEFT_FACE_LEFT",false]],"gamepad_button_left_face_right (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_LEFT_FACE_RIGHT",false]],"gamepad_button_left_face_right (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_LEFT_FACE_RIGHT",false]],"gamepad_button_left_face_up (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_LEFT_FACE_UP",false]],"gamepad_button_left_face_up (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_LEFT_FACE_UP",false]],"gamepad_button_left_thumb (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_LEFT_THUMB",false]],"gamepad_button_left_thumb (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_LEFT_THUMB",false]],"gamepad_button_left_trigger_1 (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_LEFT_TRIGGER_1",false]],"gamepad_button_left_trigger_1 (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_LEFT_TRIGGER_1",false]],"gamepad_button_left_trigger_2 (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_LEFT_TRIGGER_2",false]],"gamepad_button_left_trigger_2 (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_LEFT_TRIGGER_2",false]],"gamepad_button_middle (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_MIDDLE",false]],"gamepad_button_middle (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_MIDDLE",false]],"gamepad_button_middle_left (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_MIDDLE_LEFT",false]],"gamepad_button_middle_left (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_MIDDLE_LEFT",false]],"gamepad_button_middle_right (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_MIDDLE_RIGHT",false]],"gamepad_button_middle_right (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_MIDDLE_RIGHT",false]],"gamepad_button_right_face_down (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_RIGHT_FACE_DOWN",false]],"gamepad_button_right_face_down (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_RIGHT_FACE_DOWN",false]],"gamepad_button_right_face_left (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_RIGHT_FACE_LEFT",false]],"gamepad_button_right_face_left (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_RIGHT_FACE_LEFT",false]],"gamepad_button_right_face_right (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT",false]],"gamepad_button_right_face_right (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT",false]],"gamepad_button_right_face_up (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_RIGHT_FACE_UP",false]],"gamepad_button_right_face_up (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_RIGHT_FACE_UP",false]],"gamepad_button_right_thumb (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_RIGHT_THUMB",false]],"gamepad_button_right_thumb (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_RIGHT_THUMB",false]],"gamepad_button_right_trigger_1 (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_RIGHT_TRIGGER_1",false]],"gamepad_button_right_trigger_1 (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_RIGHT_TRIGGER_1",false]],"gamepad_button_right_trigger_2 (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_RIGHT_TRIGGER_2",false]],"gamepad_button_right_trigger_2 (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_RIGHT_TRIGGER_2",false]],"gamepad_button_unknown (in module raylib)":[[6,"raylib.GAMEPAD_BUTTON_UNKNOWN",false]],"gamepad_button_unknown (pyray.gamepadbutton attribute)":[[5,"pyray.GamepadButton.GAMEPAD_BUTTON_UNKNOWN",false]],"gamepadaxis (class in pyray)":[[5,"pyray.GamepadAxis",false]],"gamepadaxis (in module raylib)":[[6,"raylib.GamepadAxis",false]],"gamepadbutton (class in pyray)":[[5,"pyray.GamepadButton",false]],"gamepadbutton (in module raylib)":[[6,"raylib.GamepadButton",false]],"gen_image_cellular() (in module pyray)":[[5,"pyray.gen_image_cellular",false]],"gen_image_checked() (in module pyray)":[[5,"pyray.gen_image_checked",false]],"gen_image_color() (in module pyray)":[[5,"pyray.gen_image_color",false]],"gen_image_font_atlas() (in module pyray)":[[5,"pyray.gen_image_font_atlas",false]],"gen_image_gradient_linear() (in module pyray)":[[5,"pyray.gen_image_gradient_linear",false]],"gen_image_gradient_radial() (in module pyray)":[[5,"pyray.gen_image_gradient_radial",false]],"gen_image_gradient_square() (in module pyray)":[[5,"pyray.gen_image_gradient_square",false]],"gen_image_perlin_noise() (in module pyray)":[[5,"pyray.gen_image_perlin_noise",false]],"gen_image_text() (in module pyray)":[[5,"pyray.gen_image_text",false]],"gen_image_white_noise() (in module pyray)":[[5,"pyray.gen_image_white_noise",false]],"gen_mesh_cone() (in module pyray)":[[5,"pyray.gen_mesh_cone",false]],"gen_mesh_cube() (in module pyray)":[[5,"pyray.gen_mesh_cube",false]],"gen_mesh_cubicmap() (in module pyray)":[[5,"pyray.gen_mesh_cubicmap",false]],"gen_mesh_cylinder() (in module pyray)":[[5,"pyray.gen_mesh_cylinder",false]],"gen_mesh_heightmap() (in module pyray)":[[5,"pyray.gen_mesh_heightmap",false]],"gen_mesh_hemi_sphere() (in module pyray)":[[5,"pyray.gen_mesh_hemi_sphere",false]],"gen_mesh_knot() (in module pyray)":[[5,"pyray.gen_mesh_knot",false]],"gen_mesh_plane() (in module pyray)":[[5,"pyray.gen_mesh_plane",false]],"gen_mesh_poly() (in module pyray)":[[5,"pyray.gen_mesh_poly",false]],"gen_mesh_sphere() (in module pyray)":[[5,"pyray.gen_mesh_sphere",false]],"gen_mesh_tangents() (in module pyray)":[[5,"pyray.gen_mesh_tangents",false]],"gen_mesh_torus() (in module pyray)":[[5,"pyray.gen_mesh_torus",false]],"gen_texture_mipmaps() (in module pyray)":[[5,"pyray.gen_texture_mipmaps",false]],"genimagecellular() (in module raylib)":[[6,"raylib.GenImageCellular",false]],"genimagechecked() (in module raylib)":[[6,"raylib.GenImageChecked",false]],"genimagecolor() (in module raylib)":[[6,"raylib.GenImageColor",false]],"genimagefontatlas() (in module raylib)":[[6,"raylib.GenImageFontAtlas",false]],"genimagegradientlinear() (in module raylib)":[[6,"raylib.GenImageGradientLinear",false]],"genimagegradientradial() (in module raylib)":[[6,"raylib.GenImageGradientRadial",false]],"genimagegradientsquare() (in module raylib)":[[6,"raylib.GenImageGradientSquare",false]],"genimageperlinnoise() (in module raylib)":[[6,"raylib.GenImagePerlinNoise",false]],"genimagetext() (in module raylib)":[[6,"raylib.GenImageText",false]],"genimagewhitenoise() (in module raylib)":[[6,"raylib.GenImageWhiteNoise",false]],"genmeshcone() (in module raylib)":[[6,"raylib.GenMeshCone",false]],"genmeshcube() (in module raylib)":[[6,"raylib.GenMeshCube",false]],"genmeshcubicmap() (in module raylib)":[[6,"raylib.GenMeshCubicmap",false]],"genmeshcylinder() (in module raylib)":[[6,"raylib.GenMeshCylinder",false]],"genmeshheightmap() (in module raylib)":[[6,"raylib.GenMeshHeightmap",false]],"genmeshhemisphere() (in module raylib)":[[6,"raylib.GenMeshHemiSphere",false]],"genmeshknot() (in module raylib)":[[6,"raylib.GenMeshKnot",false]],"genmeshplane() (in module raylib)":[[6,"raylib.GenMeshPlane",false]],"genmeshpoly() (in module raylib)":[[6,"raylib.GenMeshPoly",false]],"genmeshsphere() (in module raylib)":[[6,"raylib.GenMeshSphere",false]],"genmeshtangents() (in module raylib)":[[6,"raylib.GenMeshTangents",false]],"genmeshtorus() (in module raylib)":[[6,"raylib.GenMeshTorus",false]],"gentexturemipmaps() (in module raylib)":[[6,"raylib.GenTextureMipmaps",false]],"gesture (class in pyray)":[[5,"pyray.Gesture",false]],"gesture (in module raylib)":[[6,"raylib.Gesture",false]],"gesture_doubletap (in module raylib)":[[6,"raylib.GESTURE_DOUBLETAP",false]],"gesture_doubletap (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_DOUBLETAP",false]],"gesture_drag (in module raylib)":[[6,"raylib.GESTURE_DRAG",false]],"gesture_drag (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_DRAG",false]],"gesture_hold (in module raylib)":[[6,"raylib.GESTURE_HOLD",false]],"gesture_hold (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_HOLD",false]],"gesture_none (in module raylib)":[[6,"raylib.GESTURE_NONE",false]],"gesture_none (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_NONE",false]],"gesture_pinch_in (in module raylib)":[[6,"raylib.GESTURE_PINCH_IN",false]],"gesture_pinch_in (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_PINCH_IN",false]],"gesture_pinch_out (in module raylib)":[[6,"raylib.GESTURE_PINCH_OUT",false]],"gesture_pinch_out (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_PINCH_OUT",false]],"gesture_swipe_down (in module raylib)":[[6,"raylib.GESTURE_SWIPE_DOWN",false]],"gesture_swipe_down (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_SWIPE_DOWN",false]],"gesture_swipe_left (in module raylib)":[[6,"raylib.GESTURE_SWIPE_LEFT",false]],"gesture_swipe_left (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_SWIPE_LEFT",false]],"gesture_swipe_right (in module raylib)":[[6,"raylib.GESTURE_SWIPE_RIGHT",false]],"gesture_swipe_right (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_SWIPE_RIGHT",false]],"gesture_swipe_up (in module raylib)":[[6,"raylib.GESTURE_SWIPE_UP",false]],"gesture_swipe_up (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_SWIPE_UP",false]],"gesture_tap (in module raylib)":[[6,"raylib.GESTURE_TAP",false]],"gesture_tap (pyray.gesture attribute)":[[5,"pyray.Gesture.GESTURE_TAP",false]],"get_application_directory() (in module pyray)":[[5,"pyray.get_application_directory",false]],"get_camera_matrix() (in module pyray)":[[5,"pyray.get_camera_matrix",false]],"get_camera_matrix_2d() (in module pyray)":[[5,"pyray.get_camera_matrix_2d",false]],"get_char_pressed() (in module pyray)":[[5,"pyray.get_char_pressed",false]],"get_clipboard_image() (in module pyray)":[[5,"pyray.get_clipboard_image",false]],"get_clipboard_text() (in module pyray)":[[5,"pyray.get_clipboard_text",false]],"get_codepoint() (in module pyray)":[[5,"pyray.get_codepoint",false]],"get_codepoint_count() (in module pyray)":[[5,"pyray.get_codepoint_count",false]],"get_codepoint_next() (in module pyray)":[[5,"pyray.get_codepoint_next",false]],"get_codepoint_previous() (in module pyray)":[[5,"pyray.get_codepoint_previous",false]],"get_collision_rec() (in module pyray)":[[5,"pyray.get_collision_rec",false]],"get_color() (in module pyray)":[[5,"pyray.get_color",false]],"get_current_monitor() (in module pyray)":[[5,"pyray.get_current_monitor",false]],"get_directory_path() (in module pyray)":[[5,"pyray.get_directory_path",false]],"get_file_extension() (in module pyray)":[[5,"pyray.get_file_extension",false]],"get_file_length() (in module pyray)":[[5,"pyray.get_file_length",false]],"get_file_mod_time() (in module pyray)":[[5,"pyray.get_file_mod_time",false]],"get_file_name() (in module pyray)":[[5,"pyray.get_file_name",false]],"get_file_name_without_ext() (in module pyray)":[[5,"pyray.get_file_name_without_ext",false]],"get_font_default() (in module pyray)":[[5,"pyray.get_font_default",false]],"get_fps() (in module pyray)":[[5,"pyray.get_fps",false]],"get_frame_time() (in module pyray)":[[5,"pyray.get_frame_time",false]],"get_gamepad_axis_count() (in module pyray)":[[5,"pyray.get_gamepad_axis_count",false]],"get_gamepad_axis_movement() (in module pyray)":[[5,"pyray.get_gamepad_axis_movement",false]],"get_gamepad_button_pressed() (in module pyray)":[[5,"pyray.get_gamepad_button_pressed",false]],"get_gamepad_name() (in module pyray)":[[5,"pyray.get_gamepad_name",false]],"get_gesture_detected() (in module pyray)":[[5,"pyray.get_gesture_detected",false]],"get_gesture_drag_angle() (in module pyray)":[[5,"pyray.get_gesture_drag_angle",false]],"get_gesture_drag_vector() (in module pyray)":[[5,"pyray.get_gesture_drag_vector",false]],"get_gesture_hold_duration() (in module pyray)":[[5,"pyray.get_gesture_hold_duration",false]],"get_gesture_pinch_angle() (in module pyray)":[[5,"pyray.get_gesture_pinch_angle",false]],"get_gesture_pinch_vector() (in module pyray)":[[5,"pyray.get_gesture_pinch_vector",false]],"get_glyph_atlas_rec() (in module pyray)":[[5,"pyray.get_glyph_atlas_rec",false]],"get_glyph_index() (in module pyray)":[[5,"pyray.get_glyph_index",false]],"get_glyph_info() (in module pyray)":[[5,"pyray.get_glyph_info",false]],"get_image_alpha_border() (in module pyray)":[[5,"pyray.get_image_alpha_border",false]],"get_image_color() (in module pyray)":[[5,"pyray.get_image_color",false]],"get_key_pressed() (in module pyray)":[[5,"pyray.get_key_pressed",false]],"get_master_volume() (in module pyray)":[[5,"pyray.get_master_volume",false]],"get_mesh_bounding_box() (in module pyray)":[[5,"pyray.get_mesh_bounding_box",false]],"get_model_bounding_box() (in module pyray)":[[5,"pyray.get_model_bounding_box",false]],"get_monitor_count() (in module pyray)":[[5,"pyray.get_monitor_count",false]],"get_monitor_height() (in module pyray)":[[5,"pyray.get_monitor_height",false]],"get_monitor_name() (in module pyray)":[[5,"pyray.get_monitor_name",false]],"get_monitor_physical_height() (in module pyray)":[[5,"pyray.get_monitor_physical_height",false]],"get_monitor_physical_width() (in module pyray)":[[5,"pyray.get_monitor_physical_width",false]],"get_monitor_position() (in module pyray)":[[5,"pyray.get_monitor_position",false]],"get_monitor_refresh_rate() (in module pyray)":[[5,"pyray.get_monitor_refresh_rate",false]],"get_monitor_width() (in module pyray)":[[5,"pyray.get_monitor_width",false]],"get_mouse_delta() (in module pyray)":[[5,"pyray.get_mouse_delta",false]],"get_mouse_position() (in module pyray)":[[5,"pyray.get_mouse_position",false]],"get_mouse_wheel_move() (in module pyray)":[[5,"pyray.get_mouse_wheel_move",false]],"get_mouse_wheel_move_v() (in module pyray)":[[5,"pyray.get_mouse_wheel_move_v",false]],"get_mouse_x() (in module pyray)":[[5,"pyray.get_mouse_x",false]],"get_mouse_y() (in module pyray)":[[5,"pyray.get_mouse_y",false]],"get_music_time_length() (in module pyray)":[[5,"pyray.get_music_time_length",false]],"get_music_time_played() (in module pyray)":[[5,"pyray.get_music_time_played",false]],"get_physics_bodies_count() (in module pyray)":[[5,"pyray.get_physics_bodies_count",false]],"get_physics_body() (in module pyray)":[[5,"pyray.get_physics_body",false]],"get_physics_shape_type() (in module pyray)":[[5,"pyray.get_physics_shape_type",false]],"get_physics_shape_vertex() (in module pyray)":[[5,"pyray.get_physics_shape_vertex",false]],"get_physics_shape_vertices_count() (in module pyray)":[[5,"pyray.get_physics_shape_vertices_count",false]],"get_pixel_color() (in module pyray)":[[5,"pyray.get_pixel_color",false]],"get_pixel_data_size() (in module pyray)":[[5,"pyray.get_pixel_data_size",false]],"get_prev_directory_path() (in module pyray)":[[5,"pyray.get_prev_directory_path",false]],"get_random_value() (in module pyray)":[[5,"pyray.get_random_value",false]],"get_ray_collision_box() (in module pyray)":[[5,"pyray.get_ray_collision_box",false]],"get_ray_collision_mesh() (in module pyray)":[[5,"pyray.get_ray_collision_mesh",false]],"get_ray_collision_quad() (in module pyray)":[[5,"pyray.get_ray_collision_quad",false]],"get_ray_collision_sphere() (in module pyray)":[[5,"pyray.get_ray_collision_sphere",false]],"get_ray_collision_triangle() (in module pyray)":[[5,"pyray.get_ray_collision_triangle",false]],"get_render_height() (in module pyray)":[[5,"pyray.get_render_height",false]],"get_render_width() (in module pyray)":[[5,"pyray.get_render_width",false]],"get_screen_height() (in module pyray)":[[5,"pyray.get_screen_height",false]],"get_screen_to_world_2d() (in module pyray)":[[5,"pyray.get_screen_to_world_2d",false]],"get_screen_to_world_ray() (in module pyray)":[[5,"pyray.get_screen_to_world_ray",false]],"get_screen_to_world_ray_ex() (in module pyray)":[[5,"pyray.get_screen_to_world_ray_ex",false]],"get_screen_width() (in module pyray)":[[5,"pyray.get_screen_width",false]],"get_shader_location() (in module pyray)":[[5,"pyray.get_shader_location",false]],"get_shader_location_attrib() (in module pyray)":[[5,"pyray.get_shader_location_attrib",false]],"get_shapes_texture() (in module pyray)":[[5,"pyray.get_shapes_texture",false]],"get_shapes_texture_rectangle() (in module pyray)":[[5,"pyray.get_shapes_texture_rectangle",false]],"get_spline_point_basis() (in module pyray)":[[5,"pyray.get_spline_point_basis",false]],"get_spline_point_bezier_cubic() (in module pyray)":[[5,"pyray.get_spline_point_bezier_cubic",false]],"get_spline_point_bezier_quad() (in module pyray)":[[5,"pyray.get_spline_point_bezier_quad",false]],"get_spline_point_catmull_rom() (in module pyray)":[[5,"pyray.get_spline_point_catmull_rom",false]],"get_spline_point_linear() (in module pyray)":[[5,"pyray.get_spline_point_linear",false]],"get_time() (in module pyray)":[[5,"pyray.get_time",false]],"get_touch_point_count() (in module pyray)":[[5,"pyray.get_touch_point_count",false]],"get_touch_point_id() (in module pyray)":[[5,"pyray.get_touch_point_id",false]],"get_touch_position() (in module pyray)":[[5,"pyray.get_touch_position",false]],"get_touch_x() (in module pyray)":[[5,"pyray.get_touch_x",false]],"get_touch_y() (in module pyray)":[[5,"pyray.get_touch_y",false]],"get_window_handle() (in module pyray)":[[5,"pyray.get_window_handle",false]],"get_window_position() (in module pyray)":[[5,"pyray.get_window_position",false]],"get_window_scale_dpi() (in module pyray)":[[5,"pyray.get_window_scale_dpi",false]],"get_working_directory() (in module pyray)":[[5,"pyray.get_working_directory",false]],"get_world_to_screen() (in module pyray)":[[5,"pyray.get_world_to_screen",false]],"get_world_to_screen_2d() (in module pyray)":[[5,"pyray.get_world_to_screen_2d",false]],"get_world_to_screen_ex() (in module pyray)":[[5,"pyray.get_world_to_screen_ex",false]],"getapplicationdirectory() (in module raylib)":[[6,"raylib.GetApplicationDirectory",false]],"getcameramatrix() (in module raylib)":[[6,"raylib.GetCameraMatrix",false]],"getcameramatrix2d() (in module raylib)":[[6,"raylib.GetCameraMatrix2D",false]],"getcharpressed() (in module raylib)":[[6,"raylib.GetCharPressed",false]],"getclipboardimage() (in module raylib)":[[6,"raylib.GetClipboardImage",false]],"getclipboardtext() (in module raylib)":[[6,"raylib.GetClipboardText",false]],"getcodepoint() (in module raylib)":[[6,"raylib.GetCodepoint",false]],"getcodepointcount() (in module raylib)":[[6,"raylib.GetCodepointCount",false]],"getcodepointnext() (in module raylib)":[[6,"raylib.GetCodepointNext",false]],"getcodepointprevious() (in module raylib)":[[6,"raylib.GetCodepointPrevious",false]],"getcollisionrec() (in module raylib)":[[6,"raylib.GetCollisionRec",false]],"getcolor() (in module raylib)":[[6,"raylib.GetColor",false]],"getcurrentmonitor() (in module raylib)":[[6,"raylib.GetCurrentMonitor",false]],"getdirectorypath() (in module raylib)":[[6,"raylib.GetDirectoryPath",false]],"getfileextension() (in module raylib)":[[6,"raylib.GetFileExtension",false]],"getfilelength() (in module raylib)":[[6,"raylib.GetFileLength",false]],"getfilemodtime() (in module raylib)":[[6,"raylib.GetFileModTime",false]],"getfilename() (in module raylib)":[[6,"raylib.GetFileName",false]],"getfilenamewithoutext() (in module raylib)":[[6,"raylib.GetFileNameWithoutExt",false]],"getfontdefault() (in module raylib)":[[6,"raylib.GetFontDefault",false]],"getfps() (in module raylib)":[[6,"raylib.GetFPS",false]],"getframetime() (in module raylib)":[[6,"raylib.GetFrameTime",false]],"getgamepadaxiscount() (in module raylib)":[[6,"raylib.GetGamepadAxisCount",false]],"getgamepadaxismovement() (in module raylib)":[[6,"raylib.GetGamepadAxisMovement",false]],"getgamepadbuttonpressed() (in module raylib)":[[6,"raylib.GetGamepadButtonPressed",false]],"getgamepadname() (in module raylib)":[[6,"raylib.GetGamepadName",false]],"getgesturedetected() (in module raylib)":[[6,"raylib.GetGestureDetected",false]],"getgesturedragangle() (in module raylib)":[[6,"raylib.GetGestureDragAngle",false]],"getgesturedragvector() (in module raylib)":[[6,"raylib.GetGestureDragVector",false]],"getgestureholdduration() (in module raylib)":[[6,"raylib.GetGestureHoldDuration",false]],"getgesturepinchangle() (in module raylib)":[[6,"raylib.GetGesturePinchAngle",false]],"getgesturepinchvector() (in module raylib)":[[6,"raylib.GetGesturePinchVector",false]],"getglyphatlasrec() (in module raylib)":[[6,"raylib.GetGlyphAtlasRec",false]],"getglyphindex() (in module raylib)":[[6,"raylib.GetGlyphIndex",false]],"getglyphinfo() (in module raylib)":[[6,"raylib.GetGlyphInfo",false]],"getimagealphaborder() (in module raylib)":[[6,"raylib.GetImageAlphaBorder",false]],"getimagecolor() (in module raylib)":[[6,"raylib.GetImageColor",false]],"getkeypressed() (in module raylib)":[[6,"raylib.GetKeyPressed",false]],"getmastervolume() (in module raylib)":[[6,"raylib.GetMasterVolume",false]],"getmeshboundingbox() (in module raylib)":[[6,"raylib.GetMeshBoundingBox",false]],"getmodelboundingbox() (in module raylib)":[[6,"raylib.GetModelBoundingBox",false]],"getmonitorcount() (in module raylib)":[[6,"raylib.GetMonitorCount",false]],"getmonitorheight() (in module raylib)":[[6,"raylib.GetMonitorHeight",false]],"getmonitorname() (in module raylib)":[[6,"raylib.GetMonitorName",false]],"getmonitorphysicalheight() (in module raylib)":[[6,"raylib.GetMonitorPhysicalHeight",false]],"getmonitorphysicalwidth() (in module raylib)":[[6,"raylib.GetMonitorPhysicalWidth",false]],"getmonitorposition() (in module raylib)":[[6,"raylib.GetMonitorPosition",false]],"getmonitorrefreshrate() (in module raylib)":[[6,"raylib.GetMonitorRefreshRate",false]],"getmonitorwidth() (in module raylib)":[[6,"raylib.GetMonitorWidth",false]],"getmousedelta() (in module raylib)":[[6,"raylib.GetMouseDelta",false]],"getmouseposition() (in module raylib)":[[6,"raylib.GetMousePosition",false]],"getmousewheelmove() (in module raylib)":[[6,"raylib.GetMouseWheelMove",false]],"getmousewheelmovev() (in module raylib)":[[6,"raylib.GetMouseWheelMoveV",false]],"getmousex() (in module raylib)":[[6,"raylib.GetMouseX",false]],"getmousey() (in module raylib)":[[6,"raylib.GetMouseY",false]],"getmusictimelength() (in module raylib)":[[6,"raylib.GetMusicTimeLength",false]],"getmusictimeplayed() (in module raylib)":[[6,"raylib.GetMusicTimePlayed",false]],"getphysicsbodiescount() (in module raylib)":[[6,"raylib.GetPhysicsBodiesCount",false]],"getphysicsbody() (in module raylib)":[[6,"raylib.GetPhysicsBody",false]],"getphysicsshapetype() (in module raylib)":[[6,"raylib.GetPhysicsShapeType",false]],"getphysicsshapevertex() (in module raylib)":[[6,"raylib.GetPhysicsShapeVertex",false]],"getphysicsshapeverticescount() (in module raylib)":[[6,"raylib.GetPhysicsShapeVerticesCount",false]],"getpixelcolor() (in module raylib)":[[6,"raylib.GetPixelColor",false]],"getpixeldatasize() (in module raylib)":[[6,"raylib.GetPixelDataSize",false]],"getprevdirectorypath() (in module raylib)":[[6,"raylib.GetPrevDirectoryPath",false]],"getrandomvalue() (in module raylib)":[[6,"raylib.GetRandomValue",false]],"getraycollisionbox() (in module raylib)":[[6,"raylib.GetRayCollisionBox",false]],"getraycollisionmesh() (in module raylib)":[[6,"raylib.GetRayCollisionMesh",false]],"getraycollisionquad() (in module raylib)":[[6,"raylib.GetRayCollisionQuad",false]],"getraycollisionsphere() (in module raylib)":[[6,"raylib.GetRayCollisionSphere",false]],"getraycollisiontriangle() (in module raylib)":[[6,"raylib.GetRayCollisionTriangle",false]],"getrenderheight() (in module raylib)":[[6,"raylib.GetRenderHeight",false]],"getrenderwidth() (in module raylib)":[[6,"raylib.GetRenderWidth",false]],"getscreenheight() (in module raylib)":[[6,"raylib.GetScreenHeight",false]],"getscreentoworld2d() (in module raylib)":[[6,"raylib.GetScreenToWorld2D",false]],"getscreentoworldray() (in module raylib)":[[6,"raylib.GetScreenToWorldRay",false]],"getscreentoworldrayex() (in module raylib)":[[6,"raylib.GetScreenToWorldRayEx",false]],"getscreenwidth() (in module raylib)":[[6,"raylib.GetScreenWidth",false]],"getshaderlocation() (in module raylib)":[[6,"raylib.GetShaderLocation",false]],"getshaderlocationattrib() (in module raylib)":[[6,"raylib.GetShaderLocationAttrib",false]],"getshapestexture() (in module raylib)":[[6,"raylib.GetShapesTexture",false]],"getshapestexturerectangle() (in module raylib)":[[6,"raylib.GetShapesTextureRectangle",false]],"getsplinepointbasis() (in module raylib)":[[6,"raylib.GetSplinePointBasis",false]],"getsplinepointbeziercubic() (in module raylib)":[[6,"raylib.GetSplinePointBezierCubic",false]],"getsplinepointbezierquad() (in module raylib)":[[6,"raylib.GetSplinePointBezierQuad",false]],"getsplinepointcatmullrom() (in module raylib)":[[6,"raylib.GetSplinePointCatmullRom",false]],"getsplinepointlinear() (in module raylib)":[[6,"raylib.GetSplinePointLinear",false]],"gettime() (in module raylib)":[[6,"raylib.GetTime",false]],"gettouchpointcount() (in module raylib)":[[6,"raylib.GetTouchPointCount",false]],"gettouchpointid() (in module raylib)":[[6,"raylib.GetTouchPointId",false]],"gettouchposition() (in module raylib)":[[6,"raylib.GetTouchPosition",false]],"gettouchx() (in module raylib)":[[6,"raylib.GetTouchX",false]],"gettouchy() (in module raylib)":[[6,"raylib.GetTouchY",false]],"getwindowhandle() (in module raylib)":[[6,"raylib.GetWindowHandle",false]],"getwindowposition() (in module raylib)":[[6,"raylib.GetWindowPosition",false]],"getwindowscaledpi() (in module raylib)":[[6,"raylib.GetWindowScaleDPI",false]],"getworkingdirectory() (in module raylib)":[[6,"raylib.GetWorkingDirectory",false]],"getworldtoscreen() (in module raylib)":[[6,"raylib.GetWorldToScreen",false]],"getworldtoscreen2d() (in module raylib)":[[6,"raylib.GetWorldToScreen2D",false]],"getworldtoscreenex() (in module raylib)":[[6,"raylib.GetWorldToScreenEx",false]],"glfw_create_cursor() (in module pyray)":[[5,"pyray.glfw_create_cursor",false]],"glfw_create_standard_cursor() (in module pyray)":[[5,"pyray.glfw_create_standard_cursor",false]],"glfw_create_window() (in module pyray)":[[5,"pyray.glfw_create_window",false]],"glfw_default_window_hints() (in module pyray)":[[5,"pyray.glfw_default_window_hints",false]],"glfw_destroy_cursor() (in module pyray)":[[5,"pyray.glfw_destroy_cursor",false]],"glfw_destroy_window() (in module pyray)":[[5,"pyray.glfw_destroy_window",false]],"glfw_extension_supported() (in module pyray)":[[5,"pyray.glfw_extension_supported",false]],"glfw_focus_window() (in module pyray)":[[5,"pyray.glfw_focus_window",false]],"glfw_get_clipboard_string() (in module pyray)":[[5,"pyray.glfw_get_clipboard_string",false]],"glfw_get_current_context() (in module pyray)":[[5,"pyray.glfw_get_current_context",false]],"glfw_get_cursor_pos() (in module pyray)":[[5,"pyray.glfw_get_cursor_pos",false]],"glfw_get_error() (in module pyray)":[[5,"pyray.glfw_get_error",false]],"glfw_get_framebuffer_size() (in module pyray)":[[5,"pyray.glfw_get_framebuffer_size",false]],"glfw_get_gamepad_name() (in module pyray)":[[5,"pyray.glfw_get_gamepad_name",false]],"glfw_get_gamepad_state() (in module pyray)":[[5,"pyray.glfw_get_gamepad_state",false]],"glfw_get_gamma_ramp() (in module pyray)":[[5,"pyray.glfw_get_gamma_ramp",false]],"glfw_get_input_mode() (in module pyray)":[[5,"pyray.glfw_get_input_mode",false]],"glfw_get_joystick_axes() (in module pyray)":[[5,"pyray.glfw_get_joystick_axes",false]],"glfw_get_joystick_buttons() (in module pyray)":[[5,"pyray.glfw_get_joystick_buttons",false]],"glfw_get_joystick_guid() (in module pyray)":[[5,"pyray.glfw_get_joystick_guid",false]],"glfw_get_joystick_hats() (in module pyray)":[[5,"pyray.glfw_get_joystick_hats",false]],"glfw_get_joystick_name() (in module pyray)":[[5,"pyray.glfw_get_joystick_name",false]],"glfw_get_joystick_user_pointer() (in module pyray)":[[5,"pyray.glfw_get_joystick_user_pointer",false]],"glfw_get_key() (in module pyray)":[[5,"pyray.glfw_get_key",false]],"glfw_get_key_name() (in module pyray)":[[5,"pyray.glfw_get_key_name",false]],"glfw_get_key_scancode() (in module pyray)":[[5,"pyray.glfw_get_key_scancode",false]],"glfw_get_monitor_content_scale() (in module pyray)":[[5,"pyray.glfw_get_monitor_content_scale",false]],"glfw_get_monitor_name() (in module pyray)":[[5,"pyray.glfw_get_monitor_name",false]],"glfw_get_monitor_physical_size() (in module pyray)":[[5,"pyray.glfw_get_monitor_physical_size",false]],"glfw_get_monitor_pos() (in module pyray)":[[5,"pyray.glfw_get_monitor_pos",false]],"glfw_get_monitor_user_pointer() (in module pyray)":[[5,"pyray.glfw_get_monitor_user_pointer",false]],"glfw_get_monitor_workarea() (in module pyray)":[[5,"pyray.glfw_get_monitor_workarea",false]],"glfw_get_monitors() (in module pyray)":[[5,"pyray.glfw_get_monitors",false]],"glfw_get_mouse_button() (in module pyray)":[[5,"pyray.glfw_get_mouse_button",false]],"glfw_get_platform() (in module pyray)":[[5,"pyray.glfw_get_platform",false]],"glfw_get_primary_monitor() (in module pyray)":[[5,"pyray.glfw_get_primary_monitor",false]],"glfw_get_proc_address() (in module pyray)":[[5,"pyray.glfw_get_proc_address",false]],"glfw_get_required_instance_extensions() (in module pyray)":[[5,"pyray.glfw_get_required_instance_extensions",false]],"glfw_get_time() (in module pyray)":[[5,"pyray.glfw_get_time",false]],"glfw_get_timer_frequency() (in module pyray)":[[5,"pyray.glfw_get_timer_frequency",false]],"glfw_get_timer_value() (in module pyray)":[[5,"pyray.glfw_get_timer_value",false]],"glfw_get_version() (in module pyray)":[[5,"pyray.glfw_get_version",false]],"glfw_get_version_string() (in module pyray)":[[5,"pyray.glfw_get_version_string",false]],"glfw_get_video_mode() (in module pyray)":[[5,"pyray.glfw_get_video_mode",false]],"glfw_get_video_modes() (in module pyray)":[[5,"pyray.glfw_get_video_modes",false]],"glfw_get_window_attrib() (in module pyray)":[[5,"pyray.glfw_get_window_attrib",false]],"glfw_get_window_content_scale() (in module pyray)":[[5,"pyray.glfw_get_window_content_scale",false]],"glfw_get_window_frame_size() (in module pyray)":[[5,"pyray.glfw_get_window_frame_size",false]],"glfw_get_window_monitor() (in module pyray)":[[5,"pyray.glfw_get_window_monitor",false]],"glfw_get_window_opacity() (in module pyray)":[[5,"pyray.glfw_get_window_opacity",false]],"glfw_get_window_pos() (in module pyray)":[[5,"pyray.glfw_get_window_pos",false]],"glfw_get_window_size() (in module pyray)":[[5,"pyray.glfw_get_window_size",false]],"glfw_get_window_title() (in module pyray)":[[5,"pyray.glfw_get_window_title",false]],"glfw_get_window_user_pointer() (in module pyray)":[[5,"pyray.glfw_get_window_user_pointer",false]],"glfw_hide_window() (in module pyray)":[[5,"pyray.glfw_hide_window",false]],"glfw_iconify_window() (in module pyray)":[[5,"pyray.glfw_iconify_window",false]],"glfw_init() (in module pyray)":[[5,"pyray.glfw_init",false]],"glfw_init_allocator() (in module pyray)":[[5,"pyray.glfw_init_allocator",false]],"glfw_init_hint() (in module pyray)":[[5,"pyray.glfw_init_hint",false]],"glfw_joystick_is_gamepad() (in module pyray)":[[5,"pyray.glfw_joystick_is_gamepad",false]],"glfw_joystick_present() (in module pyray)":[[5,"pyray.glfw_joystick_present",false]],"glfw_make_context_current() (in module pyray)":[[5,"pyray.glfw_make_context_current",false]],"glfw_maximize_window() (in module pyray)":[[5,"pyray.glfw_maximize_window",false]],"glfw_platform_supported() (in module pyray)":[[5,"pyray.glfw_platform_supported",false]],"glfw_poll_events() (in module pyray)":[[5,"pyray.glfw_poll_events",false]],"glfw_post_empty_event() (in module pyray)":[[5,"pyray.glfw_post_empty_event",false]],"glfw_raw_mouse_motion_supported() (in module pyray)":[[5,"pyray.glfw_raw_mouse_motion_supported",false]],"glfw_request_window_attention() (in module pyray)":[[5,"pyray.glfw_request_window_attention",false]],"glfw_restore_window() (in module pyray)":[[5,"pyray.glfw_restore_window",false]],"glfw_set_char_callback() (in module pyray)":[[5,"pyray.glfw_set_char_callback",false]],"glfw_set_char_mods_callback() (in module pyray)":[[5,"pyray.glfw_set_char_mods_callback",false]],"glfw_set_clipboard_string() (in module pyray)":[[5,"pyray.glfw_set_clipboard_string",false]],"glfw_set_cursor() (in module pyray)":[[5,"pyray.glfw_set_cursor",false]],"glfw_set_cursor_enter_callback() (in module pyray)":[[5,"pyray.glfw_set_cursor_enter_callback",false]],"glfw_set_cursor_pos() (in module pyray)":[[5,"pyray.glfw_set_cursor_pos",false]],"glfw_set_cursor_pos_callback() (in module pyray)":[[5,"pyray.glfw_set_cursor_pos_callback",false]],"glfw_set_drop_callback() (in module pyray)":[[5,"pyray.glfw_set_drop_callback",false]],"glfw_set_error_callback() (in module pyray)":[[5,"pyray.glfw_set_error_callback",false]],"glfw_set_framebuffer_size_callback() (in module pyray)":[[5,"pyray.glfw_set_framebuffer_size_callback",false]],"glfw_set_gamma() (in module pyray)":[[5,"pyray.glfw_set_gamma",false]],"glfw_set_gamma_ramp() (in module pyray)":[[5,"pyray.glfw_set_gamma_ramp",false]],"glfw_set_input_mode() (in module pyray)":[[5,"pyray.glfw_set_input_mode",false]],"glfw_set_joystick_callback() (in module pyray)":[[5,"pyray.glfw_set_joystick_callback",false]],"glfw_set_joystick_user_pointer() (in module pyray)":[[5,"pyray.glfw_set_joystick_user_pointer",false]],"glfw_set_key_callback() (in module pyray)":[[5,"pyray.glfw_set_key_callback",false]],"glfw_set_monitor_callback() (in module pyray)":[[5,"pyray.glfw_set_monitor_callback",false]],"glfw_set_monitor_user_pointer() (in module pyray)":[[5,"pyray.glfw_set_monitor_user_pointer",false]],"glfw_set_mouse_button_callback() (in module pyray)":[[5,"pyray.glfw_set_mouse_button_callback",false]],"glfw_set_scroll_callback() (in module pyray)":[[5,"pyray.glfw_set_scroll_callback",false]],"glfw_set_time() (in module pyray)":[[5,"pyray.glfw_set_time",false]],"glfw_set_window_aspect_ratio() (in module pyray)":[[5,"pyray.glfw_set_window_aspect_ratio",false]],"glfw_set_window_attrib() (in module pyray)":[[5,"pyray.glfw_set_window_attrib",false]],"glfw_set_window_close_callback() (in module pyray)":[[5,"pyray.glfw_set_window_close_callback",false]],"glfw_set_window_content_scale_callback() (in module pyray)":[[5,"pyray.glfw_set_window_content_scale_callback",false]],"glfw_set_window_focus_callback() (in module pyray)":[[5,"pyray.glfw_set_window_focus_callback",false]],"glfw_set_window_icon() (in module pyray)":[[5,"pyray.glfw_set_window_icon",false]],"glfw_set_window_iconify_callback() (in module pyray)":[[5,"pyray.glfw_set_window_iconify_callback",false]],"glfw_set_window_maximize_callback() (in module pyray)":[[5,"pyray.glfw_set_window_maximize_callback",false]],"glfw_set_window_monitor() (in module pyray)":[[5,"pyray.glfw_set_window_monitor",false]],"glfw_set_window_opacity() (in module pyray)":[[5,"pyray.glfw_set_window_opacity",false]],"glfw_set_window_pos() (in module pyray)":[[5,"pyray.glfw_set_window_pos",false]],"glfw_set_window_pos_callback() (in module pyray)":[[5,"pyray.glfw_set_window_pos_callback",false]],"glfw_set_window_refresh_callback() (in module pyray)":[[5,"pyray.glfw_set_window_refresh_callback",false]],"glfw_set_window_should_close() (in module pyray)":[[5,"pyray.glfw_set_window_should_close",false]],"glfw_set_window_size() (in module pyray)":[[5,"pyray.glfw_set_window_size",false]],"glfw_set_window_size_callback() (in module pyray)":[[5,"pyray.glfw_set_window_size_callback",false]],"glfw_set_window_size_limits() (in module pyray)":[[5,"pyray.glfw_set_window_size_limits",false]],"glfw_set_window_title() (in module pyray)":[[5,"pyray.glfw_set_window_title",false]],"glfw_set_window_user_pointer() (in module pyray)":[[5,"pyray.glfw_set_window_user_pointer",false]],"glfw_show_window() (in module pyray)":[[5,"pyray.glfw_show_window",false]],"glfw_swap_buffers() (in module pyray)":[[5,"pyray.glfw_swap_buffers",false]],"glfw_swap_interval() (in module pyray)":[[5,"pyray.glfw_swap_interval",false]],"glfw_terminate() (in module pyray)":[[5,"pyray.glfw_terminate",false]],"glfw_update_gamepad_mappings() (in module pyray)":[[5,"pyray.glfw_update_gamepad_mappings",false]],"glfw_vulkan_supported() (in module pyray)":[[5,"pyray.glfw_vulkan_supported",false]],"glfw_wait_events() (in module pyray)":[[5,"pyray.glfw_wait_events",false]],"glfw_wait_events_timeout() (in module pyray)":[[5,"pyray.glfw_wait_events_timeout",false]],"glfw_window_hint() (in module pyray)":[[5,"pyray.glfw_window_hint",false]],"glfw_window_hint_string() (in module pyray)":[[5,"pyray.glfw_window_hint_string",false]],"glfw_window_should_close() (in module pyray)":[[5,"pyray.glfw_window_should_close",false]],"glfwallocator (class in raylib)":[[6,"raylib.GLFWallocator",false]],"glfwcreatecursor() (in module raylib)":[[6,"raylib.glfwCreateCursor",false]],"glfwcreatestandardcursor() (in module raylib)":[[6,"raylib.glfwCreateStandardCursor",false]],"glfwcreatewindow() (in module raylib)":[[6,"raylib.glfwCreateWindow",false]],"glfwcursor (class in raylib)":[[6,"raylib.GLFWcursor",false]],"glfwdefaultwindowhints() (in module raylib)":[[6,"raylib.glfwDefaultWindowHints",false]],"glfwdestroycursor() (in module raylib)":[[6,"raylib.glfwDestroyCursor",false]],"glfwdestroywindow() (in module raylib)":[[6,"raylib.glfwDestroyWindow",false]],"glfwextensionsupported() (in module raylib)":[[6,"raylib.glfwExtensionSupported",false]],"glfwfocuswindow() (in module raylib)":[[6,"raylib.glfwFocusWindow",false]],"glfwgamepadstate (class in raylib)":[[6,"raylib.GLFWgamepadstate",false]],"glfwgammaramp (class in raylib)":[[6,"raylib.GLFWgammaramp",false]],"glfwgetclipboardstring() (in module raylib)":[[6,"raylib.glfwGetClipboardString",false]],"glfwgetcurrentcontext() (in module raylib)":[[6,"raylib.glfwGetCurrentContext",false]],"glfwgetcursorpos() (in module raylib)":[[6,"raylib.glfwGetCursorPos",false]],"glfwgeterror() (in module raylib)":[[6,"raylib.glfwGetError",false]],"glfwgetframebuffersize() (in module raylib)":[[6,"raylib.glfwGetFramebufferSize",false]],"glfwgetgamepadname() (in module raylib)":[[6,"raylib.glfwGetGamepadName",false]],"glfwgetgamepadstate() (in module raylib)":[[6,"raylib.glfwGetGamepadState",false]],"glfwgetgammaramp() (in module raylib)":[[6,"raylib.glfwGetGammaRamp",false]],"glfwgetinputmode() (in module raylib)":[[6,"raylib.glfwGetInputMode",false]],"glfwgetjoystickaxes() (in module raylib)":[[6,"raylib.glfwGetJoystickAxes",false]],"glfwgetjoystickbuttons() (in module raylib)":[[6,"raylib.glfwGetJoystickButtons",false]],"glfwgetjoystickguid() (in module raylib)":[[6,"raylib.glfwGetJoystickGUID",false]],"glfwgetjoystickhats() (in module raylib)":[[6,"raylib.glfwGetJoystickHats",false]],"glfwgetjoystickname() (in module raylib)":[[6,"raylib.glfwGetJoystickName",false]],"glfwgetjoystickuserpointer() (in module raylib)":[[6,"raylib.glfwGetJoystickUserPointer",false]],"glfwgetkey() (in module raylib)":[[6,"raylib.glfwGetKey",false]],"glfwgetkeyname() (in module raylib)":[[6,"raylib.glfwGetKeyName",false]],"glfwgetkeyscancode() (in module raylib)":[[6,"raylib.glfwGetKeyScancode",false]],"glfwgetmonitorcontentscale() (in module raylib)":[[6,"raylib.glfwGetMonitorContentScale",false]],"glfwgetmonitorname() (in module raylib)":[[6,"raylib.glfwGetMonitorName",false]],"glfwgetmonitorphysicalsize() (in module raylib)":[[6,"raylib.glfwGetMonitorPhysicalSize",false]],"glfwgetmonitorpos() (in module raylib)":[[6,"raylib.glfwGetMonitorPos",false]],"glfwgetmonitors() (in module raylib)":[[6,"raylib.glfwGetMonitors",false]],"glfwgetmonitoruserpointer() (in module raylib)":[[6,"raylib.glfwGetMonitorUserPointer",false]],"glfwgetmonitorworkarea() (in module raylib)":[[6,"raylib.glfwGetMonitorWorkarea",false]],"glfwgetmousebutton() (in module raylib)":[[6,"raylib.glfwGetMouseButton",false]],"glfwgetplatform() (in module raylib)":[[6,"raylib.glfwGetPlatform",false]],"glfwgetprimarymonitor() (in module raylib)":[[6,"raylib.glfwGetPrimaryMonitor",false]],"glfwgetprocaddress() (in module raylib)":[[6,"raylib.glfwGetProcAddress",false]],"glfwgetrequiredinstanceextensions() (in module raylib)":[[6,"raylib.glfwGetRequiredInstanceExtensions",false]],"glfwgettime() (in module raylib)":[[6,"raylib.glfwGetTime",false]],"glfwgettimerfrequency() (in module raylib)":[[6,"raylib.glfwGetTimerFrequency",false]],"glfwgettimervalue() (in module raylib)":[[6,"raylib.glfwGetTimerValue",false]],"glfwgetversion() (in module raylib)":[[6,"raylib.glfwGetVersion",false]],"glfwgetversionstring() (in module raylib)":[[6,"raylib.glfwGetVersionString",false]],"glfwgetvideomode() (in module raylib)":[[6,"raylib.glfwGetVideoMode",false]],"glfwgetvideomodes() (in module raylib)":[[6,"raylib.glfwGetVideoModes",false]],"glfwgetwindowattrib() (in module raylib)":[[6,"raylib.glfwGetWindowAttrib",false]],"glfwgetwindowcontentscale() (in module raylib)":[[6,"raylib.glfwGetWindowContentScale",false]],"glfwgetwindowframesize() (in module raylib)":[[6,"raylib.glfwGetWindowFrameSize",false]],"glfwgetwindowmonitor() (in module raylib)":[[6,"raylib.glfwGetWindowMonitor",false]],"glfwgetwindowopacity() (in module raylib)":[[6,"raylib.glfwGetWindowOpacity",false]],"glfwgetwindowpos() (in module raylib)":[[6,"raylib.glfwGetWindowPos",false]],"glfwgetwindowsize() (in module raylib)":[[6,"raylib.glfwGetWindowSize",false]],"glfwgetwindowtitle() (in module raylib)":[[6,"raylib.glfwGetWindowTitle",false]],"glfwgetwindowuserpointer() (in module raylib)":[[6,"raylib.glfwGetWindowUserPointer",false]],"glfwhidewindow() (in module raylib)":[[6,"raylib.glfwHideWindow",false]],"glfwiconifywindow() (in module raylib)":[[6,"raylib.glfwIconifyWindow",false]],"glfwimage (class in raylib)":[[6,"raylib.GLFWimage",false]],"glfwinit() (in module raylib)":[[6,"raylib.glfwInit",false]],"glfwinitallocator() (in module raylib)":[[6,"raylib.glfwInitAllocator",false]],"glfwinithint() (in module raylib)":[[6,"raylib.glfwInitHint",false]],"glfwjoystickisgamepad() (in module raylib)":[[6,"raylib.glfwJoystickIsGamepad",false]],"glfwjoystickpresent() (in module raylib)":[[6,"raylib.glfwJoystickPresent",false]],"glfwmakecontextcurrent() (in module raylib)":[[6,"raylib.glfwMakeContextCurrent",false]],"glfwmaximizewindow() (in module raylib)":[[6,"raylib.glfwMaximizeWindow",false]],"glfwmonitor (class in raylib)":[[6,"raylib.GLFWmonitor",false]],"glfwplatformsupported() (in module raylib)":[[6,"raylib.glfwPlatformSupported",false]],"glfwpollevents() (in module raylib)":[[6,"raylib.glfwPollEvents",false]],"glfwpostemptyevent() (in module raylib)":[[6,"raylib.glfwPostEmptyEvent",false]],"glfwrawmousemotionsupported() (in module raylib)":[[6,"raylib.glfwRawMouseMotionSupported",false]],"glfwrequestwindowattention() (in module raylib)":[[6,"raylib.glfwRequestWindowAttention",false]],"glfwrestorewindow() (in module raylib)":[[6,"raylib.glfwRestoreWindow",false]],"glfwsetcharcallback() (in module raylib)":[[6,"raylib.glfwSetCharCallback",false]],"glfwsetcharmodscallback() (in module raylib)":[[6,"raylib.glfwSetCharModsCallback",false]],"glfwsetclipboardstring() (in module raylib)":[[6,"raylib.glfwSetClipboardString",false]],"glfwsetcursor() (in module raylib)":[[6,"raylib.glfwSetCursor",false]],"glfwsetcursorentercallback() (in module raylib)":[[6,"raylib.glfwSetCursorEnterCallback",false]],"glfwsetcursorpos() (in module raylib)":[[6,"raylib.glfwSetCursorPos",false]],"glfwsetcursorposcallback() (in module raylib)":[[6,"raylib.glfwSetCursorPosCallback",false]],"glfwsetdropcallback() (in module raylib)":[[6,"raylib.glfwSetDropCallback",false]],"glfwseterrorcallback() (in module raylib)":[[6,"raylib.glfwSetErrorCallback",false]],"glfwsetframebuffersizecallback() (in module raylib)":[[6,"raylib.glfwSetFramebufferSizeCallback",false]],"glfwsetgamma() (in module raylib)":[[6,"raylib.glfwSetGamma",false]],"glfwsetgammaramp() (in module raylib)":[[6,"raylib.glfwSetGammaRamp",false]],"glfwsetinputmode() (in module raylib)":[[6,"raylib.glfwSetInputMode",false]],"glfwsetjoystickcallback() (in module raylib)":[[6,"raylib.glfwSetJoystickCallback",false]],"glfwsetjoystickuserpointer() (in module raylib)":[[6,"raylib.glfwSetJoystickUserPointer",false]],"glfwsetkeycallback() (in module raylib)":[[6,"raylib.glfwSetKeyCallback",false]],"glfwsetmonitorcallback() (in module raylib)":[[6,"raylib.glfwSetMonitorCallback",false]],"glfwsetmonitoruserpointer() (in module raylib)":[[6,"raylib.glfwSetMonitorUserPointer",false]],"glfwsetmousebuttoncallback() (in module raylib)":[[6,"raylib.glfwSetMouseButtonCallback",false]],"glfwsetscrollcallback() (in module raylib)":[[6,"raylib.glfwSetScrollCallback",false]],"glfwsettime() (in module raylib)":[[6,"raylib.glfwSetTime",false]],"glfwsetwindowaspectratio() (in module raylib)":[[6,"raylib.glfwSetWindowAspectRatio",false]],"glfwsetwindowattrib() (in module raylib)":[[6,"raylib.glfwSetWindowAttrib",false]],"glfwsetwindowclosecallback() (in module raylib)":[[6,"raylib.glfwSetWindowCloseCallback",false]],"glfwsetwindowcontentscalecallback() (in module raylib)":[[6,"raylib.glfwSetWindowContentScaleCallback",false]],"glfwsetwindowfocuscallback() (in module raylib)":[[6,"raylib.glfwSetWindowFocusCallback",false]],"glfwsetwindowicon() (in module raylib)":[[6,"raylib.glfwSetWindowIcon",false]],"glfwsetwindowiconifycallback() (in module raylib)":[[6,"raylib.glfwSetWindowIconifyCallback",false]],"glfwsetwindowmaximizecallback() (in module raylib)":[[6,"raylib.glfwSetWindowMaximizeCallback",false]],"glfwsetwindowmonitor() (in module raylib)":[[6,"raylib.glfwSetWindowMonitor",false]],"glfwsetwindowopacity() (in module raylib)":[[6,"raylib.glfwSetWindowOpacity",false]],"glfwsetwindowpos() (in module raylib)":[[6,"raylib.glfwSetWindowPos",false]],"glfwsetwindowposcallback() (in module raylib)":[[6,"raylib.glfwSetWindowPosCallback",false]],"glfwsetwindowrefreshcallback() (in module raylib)":[[6,"raylib.glfwSetWindowRefreshCallback",false]],"glfwsetwindowshouldclose() (in module raylib)":[[6,"raylib.glfwSetWindowShouldClose",false]],"glfwsetwindowsize() (in module raylib)":[[6,"raylib.glfwSetWindowSize",false]],"glfwsetwindowsizecallback() (in module raylib)":[[6,"raylib.glfwSetWindowSizeCallback",false]],"glfwsetwindowsizelimits() (in module raylib)":[[6,"raylib.glfwSetWindowSizeLimits",false]],"glfwsetwindowtitle() (in module raylib)":[[6,"raylib.glfwSetWindowTitle",false]],"glfwsetwindowuserpointer() (in module raylib)":[[6,"raylib.glfwSetWindowUserPointer",false]],"glfwshowwindow() (in module raylib)":[[6,"raylib.glfwShowWindow",false]],"glfwswapbuffers() (in module raylib)":[[6,"raylib.glfwSwapBuffers",false]],"glfwswapinterval() (in module raylib)":[[6,"raylib.glfwSwapInterval",false]],"glfwterminate() (in module raylib)":[[6,"raylib.glfwTerminate",false]],"glfwupdategamepadmappings() (in module raylib)":[[6,"raylib.glfwUpdateGamepadMappings",false]],"glfwvidmode (class in raylib)":[[6,"raylib.GLFWvidmode",false]],"glfwvulkansupported() (in module raylib)":[[6,"raylib.glfwVulkanSupported",false]],"glfwwaitevents() (in module raylib)":[[6,"raylib.glfwWaitEvents",false]],"glfwwaiteventstimeout() (in module raylib)":[[6,"raylib.glfwWaitEventsTimeout",false]],"glfwwindow (class in raylib)":[[6,"raylib.GLFWwindow",false]],"glfwwindowhint() (in module raylib)":[[6,"raylib.glfwWindowHint",false]],"glfwwindowhintstring() (in module raylib)":[[6,"raylib.glfwWindowHintString",false]],"glfwwindowshouldclose() (in module raylib)":[[6,"raylib.glfwWindowShouldClose",false]],"glyphcount (pyray.font attribute)":[[5,"pyray.Font.glyphCount",false]],"glyphcount (raylib.font attribute)":[[6,"raylib.Font.glyphCount",false]],"glyphinfo (class in pyray)":[[5,"pyray.GlyphInfo",false]],"glyphinfo (class in raylib)":[[6,"raylib.GlyphInfo",false]],"glyphpadding (pyray.font attribute)":[[5,"pyray.Font.glyphPadding",false]],"glyphpadding (raylib.font attribute)":[[6,"raylib.Font.glyphPadding",false]],"glyphs (pyray.font attribute)":[[5,"pyray.Font.glyphs",false]],"glyphs (raylib.font attribute)":[[6,"raylib.Font.glyphs",false]],"gold (in module pyray)":[[5,"pyray.GOLD",false]],"gold (in module raylib)":[[6,"raylib.GOLD",false]],"gray (in module pyray)":[[5,"pyray.GRAY",false]],"gray (in module raylib)":[[6,"raylib.GRAY",false]],"green (in module pyray)":[[5,"pyray.GREEN",false]],"green (in module raylib)":[[6,"raylib.GREEN",false]],"green (raylib.glfwgammaramp attribute)":[[6,"raylib.GLFWgammaramp.green",false]],"greenbits (raylib.glfwvidmode attribute)":[[6,"raylib.GLFWvidmode.greenBits",false]],"group_padding (in module raylib)":[[6,"raylib.GROUP_PADDING",false]],"group_padding (pyray.guitoggleproperty attribute)":[[5,"pyray.GuiToggleProperty.GROUP_PADDING",false]],"gui_button() (in module pyray)":[[5,"pyray.gui_button",false]],"gui_check_box() (in module pyray)":[[5,"pyray.gui_check_box",false]],"gui_color_bar_alpha() (in module pyray)":[[5,"pyray.gui_color_bar_alpha",false]],"gui_color_bar_hue() (in module pyray)":[[5,"pyray.gui_color_bar_hue",false]],"gui_color_panel() (in module pyray)":[[5,"pyray.gui_color_panel",false]],"gui_color_panel_hsv() (in module pyray)":[[5,"pyray.gui_color_panel_hsv",false]],"gui_color_picker() (in module pyray)":[[5,"pyray.gui_color_picker",false]],"gui_color_picker_hsv() (in module pyray)":[[5,"pyray.gui_color_picker_hsv",false]],"gui_combo_box() (in module pyray)":[[5,"pyray.gui_combo_box",false]],"gui_disable() (in module pyray)":[[5,"pyray.gui_disable",false]],"gui_disable_tooltip() (in module pyray)":[[5,"pyray.gui_disable_tooltip",false]],"gui_draw_icon() (in module pyray)":[[5,"pyray.gui_draw_icon",false]],"gui_dropdown_box() (in module pyray)":[[5,"pyray.gui_dropdown_box",false]],"gui_dummy_rec() (in module pyray)":[[5,"pyray.gui_dummy_rec",false]],"gui_enable() (in module pyray)":[[5,"pyray.gui_enable",false]],"gui_enable_tooltip() (in module pyray)":[[5,"pyray.gui_enable_tooltip",false]],"gui_get_font() (in module pyray)":[[5,"pyray.gui_get_font",false]],"gui_get_icons() (in module pyray)":[[5,"pyray.gui_get_icons",false]],"gui_get_state() (in module pyray)":[[5,"pyray.gui_get_state",false]],"gui_get_style() (in module pyray)":[[5,"pyray.gui_get_style",false]],"gui_grid() (in module pyray)":[[5,"pyray.gui_grid",false]],"gui_group_box() (in module pyray)":[[5,"pyray.gui_group_box",false]],"gui_icon_text() (in module pyray)":[[5,"pyray.gui_icon_text",false]],"gui_is_locked() (in module pyray)":[[5,"pyray.gui_is_locked",false]],"gui_label() (in module pyray)":[[5,"pyray.gui_label",false]],"gui_label_button() (in module pyray)":[[5,"pyray.gui_label_button",false]],"gui_line() (in module pyray)":[[5,"pyray.gui_line",false]],"gui_list_view() (in module pyray)":[[5,"pyray.gui_list_view",false]],"gui_list_view_ex() (in module pyray)":[[5,"pyray.gui_list_view_ex",false]],"gui_load_icons() (in module pyray)":[[5,"pyray.gui_load_icons",false]],"gui_load_style() (in module pyray)":[[5,"pyray.gui_load_style",false]],"gui_load_style_default() (in module pyray)":[[5,"pyray.gui_load_style_default",false]],"gui_lock() (in module pyray)":[[5,"pyray.gui_lock",false]],"gui_message_box() (in module pyray)":[[5,"pyray.gui_message_box",false]],"gui_panel() (in module pyray)":[[5,"pyray.gui_panel",false]],"gui_progress_bar() (in module pyray)":[[5,"pyray.gui_progress_bar",false]],"gui_scroll_panel() (in module pyray)":[[5,"pyray.gui_scroll_panel",false]],"gui_set_alpha() (in module pyray)":[[5,"pyray.gui_set_alpha",false]],"gui_set_font() (in module pyray)":[[5,"pyray.gui_set_font",false]],"gui_set_icon_scale() (in module pyray)":[[5,"pyray.gui_set_icon_scale",false]],"gui_set_state() (in module pyray)":[[5,"pyray.gui_set_state",false]],"gui_set_style() (in module pyray)":[[5,"pyray.gui_set_style",false]],"gui_set_tooltip() (in module pyray)":[[5,"pyray.gui_set_tooltip",false]],"gui_slider() (in module pyray)":[[5,"pyray.gui_slider",false]],"gui_slider_bar() (in module pyray)":[[5,"pyray.gui_slider_bar",false]],"gui_spinner() (in module pyray)":[[5,"pyray.gui_spinner",false]],"gui_status_bar() (in module pyray)":[[5,"pyray.gui_status_bar",false]],"gui_tab_bar() (in module pyray)":[[5,"pyray.gui_tab_bar",false]],"gui_text_box() (in module pyray)":[[5,"pyray.gui_text_box",false]],"gui_text_input_box() (in module pyray)":[[5,"pyray.gui_text_input_box",false]],"gui_toggle() (in module pyray)":[[5,"pyray.gui_toggle",false]],"gui_toggle_group() (in module pyray)":[[5,"pyray.gui_toggle_group",false]],"gui_toggle_slider() (in module pyray)":[[5,"pyray.gui_toggle_slider",false]],"gui_unlock() (in module pyray)":[[5,"pyray.gui_unlock",false]],"gui_value_box() (in module pyray)":[[5,"pyray.gui_value_box",false]],"gui_value_box_float() (in module pyray)":[[5,"pyray.gui_value_box_float",false]],"gui_window_box() (in module pyray)":[[5,"pyray.gui_window_box",false]],"guibutton() (in module raylib)":[[6,"raylib.GuiButton",false]],"guicheckbox() (in module raylib)":[[6,"raylib.GuiCheckBox",false]],"guicheckboxproperty (class in pyray)":[[5,"pyray.GuiCheckBoxProperty",false]],"guicheckboxproperty (in module raylib)":[[6,"raylib.GuiCheckBoxProperty",false]],"guicolorbaralpha() (in module raylib)":[[6,"raylib.GuiColorBarAlpha",false]],"guicolorbarhue() (in module raylib)":[[6,"raylib.GuiColorBarHue",false]],"guicolorpanel() (in module raylib)":[[6,"raylib.GuiColorPanel",false]],"guicolorpanelhsv() (in module raylib)":[[6,"raylib.GuiColorPanelHSV",false]],"guicolorpicker() (in module raylib)":[[6,"raylib.GuiColorPicker",false]],"guicolorpickerhsv() (in module raylib)":[[6,"raylib.GuiColorPickerHSV",false]],"guicolorpickerproperty (class in pyray)":[[5,"pyray.GuiColorPickerProperty",false]],"guicolorpickerproperty (in module raylib)":[[6,"raylib.GuiColorPickerProperty",false]],"guicombobox() (in module raylib)":[[6,"raylib.GuiComboBox",false]],"guicomboboxproperty (class in pyray)":[[5,"pyray.GuiComboBoxProperty",false]],"guicomboboxproperty (in module raylib)":[[6,"raylib.GuiComboBoxProperty",false]],"guicontrol (class in pyray)":[[5,"pyray.GuiControl",false]],"guicontrol (in module raylib)":[[6,"raylib.GuiControl",false]],"guicontrolproperty (class in pyray)":[[5,"pyray.GuiControlProperty",false]],"guicontrolproperty (in module raylib)":[[6,"raylib.GuiControlProperty",false]],"guidefaultproperty (class in pyray)":[[5,"pyray.GuiDefaultProperty",false]],"guidefaultproperty (in module raylib)":[[6,"raylib.GuiDefaultProperty",false]],"guidisable() (in module raylib)":[[6,"raylib.GuiDisable",false]],"guidisabletooltip() (in module raylib)":[[6,"raylib.GuiDisableTooltip",false]],"guidrawicon() (in module raylib)":[[6,"raylib.GuiDrawIcon",false]],"guidropdownbox() (in module raylib)":[[6,"raylib.GuiDropdownBox",false]],"guidropdownboxproperty (class in pyray)":[[5,"pyray.GuiDropdownBoxProperty",false]],"guidropdownboxproperty (in module raylib)":[[6,"raylib.GuiDropdownBoxProperty",false]],"guidummyrec() (in module raylib)":[[6,"raylib.GuiDummyRec",false]],"guienable() (in module raylib)":[[6,"raylib.GuiEnable",false]],"guienabletooltip() (in module raylib)":[[6,"raylib.GuiEnableTooltip",false]],"guigetfont() (in module raylib)":[[6,"raylib.GuiGetFont",false]],"guigeticons() (in module raylib)":[[6,"raylib.GuiGetIcons",false]],"guigetstate() (in module raylib)":[[6,"raylib.GuiGetState",false]],"guigetstyle() (in module raylib)":[[6,"raylib.GuiGetStyle",false]],"guigrid() (in module raylib)":[[6,"raylib.GuiGrid",false]],"guigroupbox() (in module raylib)":[[6,"raylib.GuiGroupBox",false]],"guiiconname (class in pyray)":[[5,"pyray.GuiIconName",false]],"guiiconname (in module raylib)":[[6,"raylib.GuiIconName",false]],"guiicontext() (in module raylib)":[[6,"raylib.GuiIconText",false]],"guiislocked() (in module raylib)":[[6,"raylib.GuiIsLocked",false]],"guilabel() (in module raylib)":[[6,"raylib.GuiLabel",false]],"guilabelbutton() (in module raylib)":[[6,"raylib.GuiLabelButton",false]],"guiline() (in module raylib)":[[6,"raylib.GuiLine",false]],"guilistview() (in module raylib)":[[6,"raylib.GuiListView",false]],"guilistviewex() (in module raylib)":[[6,"raylib.GuiListViewEx",false]],"guilistviewproperty (class in pyray)":[[5,"pyray.GuiListViewProperty",false]],"guilistviewproperty (in module raylib)":[[6,"raylib.GuiListViewProperty",false]],"guiloadicons() (in module raylib)":[[6,"raylib.GuiLoadIcons",false]],"guiloadstyle() (in module raylib)":[[6,"raylib.GuiLoadStyle",false]],"guiloadstyledefault() (in module raylib)":[[6,"raylib.GuiLoadStyleDefault",false]],"guilock() (in module raylib)":[[6,"raylib.GuiLock",false]],"guimessagebox() (in module raylib)":[[6,"raylib.GuiMessageBox",false]],"guipanel() (in module raylib)":[[6,"raylib.GuiPanel",false]],"guiprogressbar() (in module raylib)":[[6,"raylib.GuiProgressBar",false]],"guiprogressbarproperty (class in pyray)":[[5,"pyray.GuiProgressBarProperty",false]],"guiprogressbarproperty (in module raylib)":[[6,"raylib.GuiProgressBarProperty",false]],"guiscrollbarproperty (class in pyray)":[[5,"pyray.GuiScrollBarProperty",false]],"guiscrollbarproperty (in module raylib)":[[6,"raylib.GuiScrollBarProperty",false]],"guiscrollpanel() (in module raylib)":[[6,"raylib.GuiScrollPanel",false]],"guisetalpha() (in module raylib)":[[6,"raylib.GuiSetAlpha",false]],"guisetfont() (in module raylib)":[[6,"raylib.GuiSetFont",false]],"guiseticonscale() (in module raylib)":[[6,"raylib.GuiSetIconScale",false]],"guisetstate() (in module raylib)":[[6,"raylib.GuiSetState",false]],"guisetstyle() (in module raylib)":[[6,"raylib.GuiSetStyle",false]],"guisettooltip() (in module raylib)":[[6,"raylib.GuiSetTooltip",false]],"guislider() (in module raylib)":[[6,"raylib.GuiSlider",false]],"guisliderbar() (in module raylib)":[[6,"raylib.GuiSliderBar",false]],"guisliderproperty (class in pyray)":[[5,"pyray.GuiSliderProperty",false]],"guisliderproperty (in module raylib)":[[6,"raylib.GuiSliderProperty",false]],"guispinner() (in module raylib)":[[6,"raylib.GuiSpinner",false]],"guispinnerproperty (class in pyray)":[[5,"pyray.GuiSpinnerProperty",false]],"guispinnerproperty (in module raylib)":[[6,"raylib.GuiSpinnerProperty",false]],"guistate (class in pyray)":[[5,"pyray.GuiState",false]],"guistate (in module raylib)":[[6,"raylib.GuiState",false]],"guistatusbar() (in module raylib)":[[6,"raylib.GuiStatusBar",false]],"guistyleprop (class in pyray)":[[5,"pyray.GuiStyleProp",false]],"guistyleprop (class in raylib)":[[6,"raylib.GuiStyleProp",false]],"guitabbar() (in module raylib)":[[6,"raylib.GuiTabBar",false]],"guitextalignment (class in pyray)":[[5,"pyray.GuiTextAlignment",false]],"guitextalignment (in module raylib)":[[6,"raylib.GuiTextAlignment",false]],"guitextalignmentvertical (class in pyray)":[[5,"pyray.GuiTextAlignmentVertical",false]],"guitextalignmentvertical (in module raylib)":[[6,"raylib.GuiTextAlignmentVertical",false]],"guitextbox() (in module raylib)":[[6,"raylib.GuiTextBox",false]],"guitextboxproperty (class in pyray)":[[5,"pyray.GuiTextBoxProperty",false]],"guitextboxproperty (in module raylib)":[[6,"raylib.GuiTextBoxProperty",false]],"guitextinputbox() (in module raylib)":[[6,"raylib.GuiTextInputBox",false]],"guitextwrapmode (class in pyray)":[[5,"pyray.GuiTextWrapMode",false]],"guitextwrapmode (in module raylib)":[[6,"raylib.GuiTextWrapMode",false]],"guitoggle() (in module raylib)":[[6,"raylib.GuiToggle",false]],"guitogglegroup() (in module raylib)":[[6,"raylib.GuiToggleGroup",false]],"guitoggleproperty (class in pyray)":[[5,"pyray.GuiToggleProperty",false]],"guitoggleproperty (in module raylib)":[[6,"raylib.GuiToggleProperty",false]],"guitoggleslider() (in module raylib)":[[6,"raylib.GuiToggleSlider",false]],"guiunlock() (in module raylib)":[[6,"raylib.GuiUnlock",false]],"guivaluebox() (in module raylib)":[[6,"raylib.GuiValueBox",false]],"guivalueboxfloat() (in module raylib)":[[6,"raylib.GuiValueBoxFloat",false]],"guiwindowbox() (in module raylib)":[[6,"raylib.GuiWindowBox",false]],"height (pyray.image attribute)":[[5,"pyray.Image.height",false]],"height (pyray.rectangle attribute)":[[5,"pyray.Rectangle.height",false]],"height (pyray.texture attribute)":[[5,"pyray.Texture.height",false]],"height (pyray.texture2d attribute)":[[5,"pyray.Texture2D.height",false]],"height (raylib.glfwimage attribute)":[[6,"raylib.GLFWimage.height",false]],"height (raylib.glfwvidmode attribute)":[[6,"raylib.GLFWvidmode.height",false]],"height (raylib.image attribute)":[[6,"raylib.Image.height",false]],"height (raylib.rectangle attribute)":[[6,"raylib.Rectangle.height",false]],"height (raylib.texture attribute)":[[6,"raylib.Texture.height",false]],"height (raylib.texture2d attribute)":[[6,"raylib.Texture2D.height",false]],"height (raylib.texturecubemap attribute)":[[6,"raylib.TextureCubemap.height",false]],"hide_cursor() (in module pyray)":[[5,"pyray.hide_cursor",false]],"hidecursor() (in module raylib)":[[6,"raylib.HideCursor",false]],"hit (pyray.raycollision attribute)":[[5,"pyray.RayCollision.hit",false]],"hit (raylib.raycollision attribute)":[[6,"raylib.RayCollision.hit",false]],"hresolution (pyray.vrdeviceinfo attribute)":[[5,"pyray.VrDeviceInfo.hResolution",false]],"hresolution (raylib.vrdeviceinfo attribute)":[[6,"raylib.VrDeviceInfo.hResolution",false]],"hscreensize (pyray.vrdeviceinfo attribute)":[[5,"pyray.VrDeviceInfo.hScreenSize",false]],"hscreensize (raylib.vrdeviceinfo attribute)":[[6,"raylib.VrDeviceInfo.hScreenSize",false]],"huebar_padding (in module raylib)":[[6,"raylib.HUEBAR_PADDING",false]],"huebar_padding (pyray.guicolorpickerproperty attribute)":[[5,"pyray.GuiColorPickerProperty.HUEBAR_PADDING",false]],"huebar_selector_height (in module raylib)":[[6,"raylib.HUEBAR_SELECTOR_HEIGHT",false]],"huebar_selector_height (pyray.guicolorpickerproperty attribute)":[[5,"pyray.GuiColorPickerProperty.HUEBAR_SELECTOR_HEIGHT",false]],"huebar_selector_overflow (in module raylib)":[[6,"raylib.HUEBAR_SELECTOR_OVERFLOW",false]],"huebar_selector_overflow (pyray.guicolorpickerproperty attribute)":[[5,"pyray.GuiColorPickerProperty.HUEBAR_SELECTOR_OVERFLOW",false]],"huebar_width (in module raylib)":[[6,"raylib.HUEBAR_WIDTH",false]],"huebar_width (pyray.guicolorpickerproperty attribute)":[[5,"pyray.GuiColorPickerProperty.HUEBAR_WIDTH",false]],"icon_1up (in module raylib)":[[6,"raylib.ICON_1UP",false]],"icon_1up (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_1UP",false]],"icon_229 (in module raylib)":[[6,"raylib.ICON_229",false]],"icon_229 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_229",false]],"icon_230 (in module raylib)":[[6,"raylib.ICON_230",false]],"icon_230 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_230",false]],"icon_231 (in module raylib)":[[6,"raylib.ICON_231",false]],"icon_231 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_231",false]],"icon_232 (in module raylib)":[[6,"raylib.ICON_232",false]],"icon_232 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_232",false]],"icon_233 (in module raylib)":[[6,"raylib.ICON_233",false]],"icon_233 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_233",false]],"icon_234 (in module raylib)":[[6,"raylib.ICON_234",false]],"icon_234 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_234",false]],"icon_235 (in module raylib)":[[6,"raylib.ICON_235",false]],"icon_235 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_235",false]],"icon_236 (in module raylib)":[[6,"raylib.ICON_236",false]],"icon_236 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_236",false]],"icon_237 (in module raylib)":[[6,"raylib.ICON_237",false]],"icon_237 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_237",false]],"icon_238 (in module raylib)":[[6,"raylib.ICON_238",false]],"icon_238 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_238",false]],"icon_239 (in module raylib)":[[6,"raylib.ICON_239",false]],"icon_239 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_239",false]],"icon_240 (in module raylib)":[[6,"raylib.ICON_240",false]],"icon_240 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_240",false]],"icon_241 (in module raylib)":[[6,"raylib.ICON_241",false]],"icon_241 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_241",false]],"icon_242 (in module raylib)":[[6,"raylib.ICON_242",false]],"icon_242 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_242",false]],"icon_243 (in module raylib)":[[6,"raylib.ICON_243",false]],"icon_243 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_243",false]],"icon_244 (in module raylib)":[[6,"raylib.ICON_244",false]],"icon_244 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_244",false]],"icon_245 (in module raylib)":[[6,"raylib.ICON_245",false]],"icon_245 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_245",false]],"icon_246 (in module raylib)":[[6,"raylib.ICON_246",false]],"icon_246 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_246",false]],"icon_247 (in module raylib)":[[6,"raylib.ICON_247",false]],"icon_247 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_247",false]],"icon_248 (in module raylib)":[[6,"raylib.ICON_248",false]],"icon_248 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_248",false]],"icon_249 (in module raylib)":[[6,"raylib.ICON_249",false]],"icon_249 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_249",false]],"icon_250 (in module raylib)":[[6,"raylib.ICON_250",false]],"icon_250 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_250",false]],"icon_251 (in module raylib)":[[6,"raylib.ICON_251",false]],"icon_251 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_251",false]],"icon_252 (in module raylib)":[[6,"raylib.ICON_252",false]],"icon_252 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_252",false]],"icon_253 (in module raylib)":[[6,"raylib.ICON_253",false]],"icon_253 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_253",false]],"icon_254 (in module raylib)":[[6,"raylib.ICON_254",false]],"icon_254 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_254",false]],"icon_255 (in module raylib)":[[6,"raylib.ICON_255",false]],"icon_255 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_255",false]],"icon_alarm (in module raylib)":[[6,"raylib.ICON_ALARM",false]],"icon_alarm (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ALARM",false]],"icon_alpha_clear (in module raylib)":[[6,"raylib.ICON_ALPHA_CLEAR",false]],"icon_alpha_clear (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ALPHA_CLEAR",false]],"icon_alpha_multiply (in module raylib)":[[6,"raylib.ICON_ALPHA_MULTIPLY",false]],"icon_alpha_multiply (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ALPHA_MULTIPLY",false]],"icon_arrow_down (in module raylib)":[[6,"raylib.ICON_ARROW_DOWN",false]],"icon_arrow_down (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ARROW_DOWN",false]],"icon_arrow_down_fill (in module raylib)":[[6,"raylib.ICON_ARROW_DOWN_FILL",false]],"icon_arrow_down_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ARROW_DOWN_FILL",false]],"icon_arrow_left (in module raylib)":[[6,"raylib.ICON_ARROW_LEFT",false]],"icon_arrow_left (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ARROW_LEFT",false]],"icon_arrow_left_fill (in module raylib)":[[6,"raylib.ICON_ARROW_LEFT_FILL",false]],"icon_arrow_left_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ARROW_LEFT_FILL",false]],"icon_arrow_right (in module raylib)":[[6,"raylib.ICON_ARROW_RIGHT",false]],"icon_arrow_right (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ARROW_RIGHT",false]],"icon_arrow_right_fill (in module raylib)":[[6,"raylib.ICON_ARROW_RIGHT_FILL",false]],"icon_arrow_right_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ARROW_RIGHT_FILL",false]],"icon_arrow_up (in module raylib)":[[6,"raylib.ICON_ARROW_UP",false]],"icon_arrow_up (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ARROW_UP",false]],"icon_arrow_up_fill (in module raylib)":[[6,"raylib.ICON_ARROW_UP_FILL",false]],"icon_arrow_up_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ARROW_UP_FILL",false]],"icon_audio (in module raylib)":[[6,"raylib.ICON_AUDIO",false]],"icon_audio (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_AUDIO",false]],"icon_bin (in module raylib)":[[6,"raylib.ICON_BIN",false]],"icon_bin (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BIN",false]],"icon_box (in module raylib)":[[6,"raylib.ICON_BOX",false]],"icon_box (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX",false]],"icon_box_bottom (in module raylib)":[[6,"raylib.ICON_BOX_BOTTOM",false]],"icon_box_bottom (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_BOTTOM",false]],"icon_box_bottom_left (in module raylib)":[[6,"raylib.ICON_BOX_BOTTOM_LEFT",false]],"icon_box_bottom_left (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_BOTTOM_LEFT",false]],"icon_box_bottom_right (in module raylib)":[[6,"raylib.ICON_BOX_BOTTOM_RIGHT",false]],"icon_box_bottom_right (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_BOTTOM_RIGHT",false]],"icon_box_center (in module raylib)":[[6,"raylib.ICON_BOX_CENTER",false]],"icon_box_center (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_CENTER",false]],"icon_box_circle_mask (in module raylib)":[[6,"raylib.ICON_BOX_CIRCLE_MASK",false]],"icon_box_circle_mask (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_CIRCLE_MASK",false]],"icon_box_concentric (in module raylib)":[[6,"raylib.ICON_BOX_CONCENTRIC",false]],"icon_box_concentric (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_CONCENTRIC",false]],"icon_box_corners_big (in module raylib)":[[6,"raylib.ICON_BOX_CORNERS_BIG",false]],"icon_box_corners_big (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_CORNERS_BIG",false]],"icon_box_corners_small (in module raylib)":[[6,"raylib.ICON_BOX_CORNERS_SMALL",false]],"icon_box_corners_small (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_CORNERS_SMALL",false]],"icon_box_dots_big (in module raylib)":[[6,"raylib.ICON_BOX_DOTS_BIG",false]],"icon_box_dots_big (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_DOTS_BIG",false]],"icon_box_dots_small (in module raylib)":[[6,"raylib.ICON_BOX_DOTS_SMALL",false]],"icon_box_dots_small (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_DOTS_SMALL",false]],"icon_box_grid (in module raylib)":[[6,"raylib.ICON_BOX_GRID",false]],"icon_box_grid (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_GRID",false]],"icon_box_grid_big (in module raylib)":[[6,"raylib.ICON_BOX_GRID_BIG",false]],"icon_box_grid_big (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_GRID_BIG",false]],"icon_box_left (in module raylib)":[[6,"raylib.ICON_BOX_LEFT",false]],"icon_box_left (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_LEFT",false]],"icon_box_multisize (in module raylib)":[[6,"raylib.ICON_BOX_MULTISIZE",false]],"icon_box_multisize (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_MULTISIZE",false]],"icon_box_right (in module raylib)":[[6,"raylib.ICON_BOX_RIGHT",false]],"icon_box_right (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_RIGHT",false]],"icon_box_top (in module raylib)":[[6,"raylib.ICON_BOX_TOP",false]],"icon_box_top (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_TOP",false]],"icon_box_top_left (in module raylib)":[[6,"raylib.ICON_BOX_TOP_LEFT",false]],"icon_box_top_left (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_TOP_LEFT",false]],"icon_box_top_right (in module raylib)":[[6,"raylib.ICON_BOX_TOP_RIGHT",false]],"icon_box_top_right (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BOX_TOP_RIGHT",false]],"icon_breakpoint_off (in module raylib)":[[6,"raylib.ICON_BREAKPOINT_OFF",false]],"icon_breakpoint_off (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BREAKPOINT_OFF",false]],"icon_breakpoint_on (in module raylib)":[[6,"raylib.ICON_BREAKPOINT_ON",false]],"icon_breakpoint_on (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BREAKPOINT_ON",false]],"icon_brush_classic (in module raylib)":[[6,"raylib.ICON_BRUSH_CLASSIC",false]],"icon_brush_classic (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BRUSH_CLASSIC",false]],"icon_brush_painter (in module raylib)":[[6,"raylib.ICON_BRUSH_PAINTER",false]],"icon_brush_painter (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BRUSH_PAINTER",false]],"icon_burger_menu (in module raylib)":[[6,"raylib.ICON_BURGER_MENU",false]],"icon_burger_menu (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_BURGER_MENU",false]],"icon_camera (in module raylib)":[[6,"raylib.ICON_CAMERA",false]],"icon_camera (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CAMERA",false]],"icon_case_sensitive (in module raylib)":[[6,"raylib.ICON_CASE_SENSITIVE",false]],"icon_case_sensitive (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CASE_SENSITIVE",false]],"icon_clock (in module raylib)":[[6,"raylib.ICON_CLOCK",false]],"icon_clock (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CLOCK",false]],"icon_coin (in module raylib)":[[6,"raylib.ICON_COIN",false]],"icon_coin (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_COIN",false]],"icon_color_bucket (in module raylib)":[[6,"raylib.ICON_COLOR_BUCKET",false]],"icon_color_bucket (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_COLOR_BUCKET",false]],"icon_color_picker (in module raylib)":[[6,"raylib.ICON_COLOR_PICKER",false]],"icon_color_picker (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_COLOR_PICKER",false]],"icon_corner (in module raylib)":[[6,"raylib.ICON_CORNER",false]],"icon_corner (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CORNER",false]],"icon_cpu (in module raylib)":[[6,"raylib.ICON_CPU",false]],"icon_cpu (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CPU",false]],"icon_crack (in module raylib)":[[6,"raylib.ICON_CRACK",false]],"icon_crack (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CRACK",false]],"icon_crack_points (in module raylib)":[[6,"raylib.ICON_CRACK_POINTS",false]],"icon_crack_points (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CRACK_POINTS",false]],"icon_crop (in module raylib)":[[6,"raylib.ICON_CROP",false]],"icon_crop (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CROP",false]],"icon_crop_alpha (in module raylib)":[[6,"raylib.ICON_CROP_ALPHA",false]],"icon_crop_alpha (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CROP_ALPHA",false]],"icon_cross (in module raylib)":[[6,"raylib.ICON_CROSS",false]],"icon_cross (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CROSS",false]],"icon_cross_small (in module raylib)":[[6,"raylib.ICON_CROSS_SMALL",false]],"icon_cross_small (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CROSS_SMALL",false]],"icon_crossline (in module raylib)":[[6,"raylib.ICON_CROSSLINE",false]],"icon_crossline (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CROSSLINE",false]],"icon_cube (in module raylib)":[[6,"raylib.ICON_CUBE",false]],"icon_cube (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CUBE",false]],"icon_cube_face_back (in module raylib)":[[6,"raylib.ICON_CUBE_FACE_BACK",false]],"icon_cube_face_back (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CUBE_FACE_BACK",false]],"icon_cube_face_bottom (in module raylib)":[[6,"raylib.ICON_CUBE_FACE_BOTTOM",false]],"icon_cube_face_bottom (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CUBE_FACE_BOTTOM",false]],"icon_cube_face_front (in module raylib)":[[6,"raylib.ICON_CUBE_FACE_FRONT",false]],"icon_cube_face_front (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CUBE_FACE_FRONT",false]],"icon_cube_face_left (in module raylib)":[[6,"raylib.ICON_CUBE_FACE_LEFT",false]],"icon_cube_face_left (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CUBE_FACE_LEFT",false]],"icon_cube_face_right (in module raylib)":[[6,"raylib.ICON_CUBE_FACE_RIGHT",false]],"icon_cube_face_right (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CUBE_FACE_RIGHT",false]],"icon_cube_face_top (in module raylib)":[[6,"raylib.ICON_CUBE_FACE_TOP",false]],"icon_cube_face_top (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CUBE_FACE_TOP",false]],"icon_cursor_classic (in module raylib)":[[6,"raylib.ICON_CURSOR_CLASSIC",false]],"icon_cursor_classic (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_CLASSIC",false]],"icon_cursor_hand (in module raylib)":[[6,"raylib.ICON_CURSOR_HAND",false]],"icon_cursor_hand (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_HAND",false]],"icon_cursor_move (in module raylib)":[[6,"raylib.ICON_CURSOR_MOVE",false]],"icon_cursor_move (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_MOVE",false]],"icon_cursor_move_fill (in module raylib)":[[6,"raylib.ICON_CURSOR_MOVE_FILL",false]],"icon_cursor_move_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_MOVE_FILL",false]],"icon_cursor_pointer (in module raylib)":[[6,"raylib.ICON_CURSOR_POINTER",false]],"icon_cursor_pointer (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_POINTER",false]],"icon_cursor_scale (in module raylib)":[[6,"raylib.ICON_CURSOR_SCALE",false]],"icon_cursor_scale (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_SCALE",false]],"icon_cursor_scale_fill (in module raylib)":[[6,"raylib.ICON_CURSOR_SCALE_FILL",false]],"icon_cursor_scale_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_SCALE_FILL",false]],"icon_cursor_scale_left (in module raylib)":[[6,"raylib.ICON_CURSOR_SCALE_LEFT",false]],"icon_cursor_scale_left (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_SCALE_LEFT",false]],"icon_cursor_scale_left_fill (in module raylib)":[[6,"raylib.ICON_CURSOR_SCALE_LEFT_FILL",false]],"icon_cursor_scale_left_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_SCALE_LEFT_FILL",false]],"icon_cursor_scale_right (in module raylib)":[[6,"raylib.ICON_CURSOR_SCALE_RIGHT",false]],"icon_cursor_scale_right (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_SCALE_RIGHT",false]],"icon_cursor_scale_right_fill (in module raylib)":[[6,"raylib.ICON_CURSOR_SCALE_RIGHT_FILL",false]],"icon_cursor_scale_right_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_CURSOR_SCALE_RIGHT_FILL",false]],"icon_demon (in module raylib)":[[6,"raylib.ICON_DEMON",false]],"icon_demon (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_DEMON",false]],"icon_dithering (in module raylib)":[[6,"raylib.ICON_DITHERING",false]],"icon_dithering (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_DITHERING",false]],"icon_door (in module raylib)":[[6,"raylib.ICON_DOOR",false]],"icon_door (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_DOOR",false]],"icon_emptybox (in module raylib)":[[6,"raylib.ICON_EMPTYBOX",false]],"icon_emptybox (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_EMPTYBOX",false]],"icon_emptybox_small (in module raylib)":[[6,"raylib.ICON_EMPTYBOX_SMALL",false]],"icon_emptybox_small (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_EMPTYBOX_SMALL",false]],"icon_exit (in module raylib)":[[6,"raylib.ICON_EXIT",false]],"icon_exit (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_EXIT",false]],"icon_explosion (in module raylib)":[[6,"raylib.ICON_EXPLOSION",false]],"icon_explosion (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_EXPLOSION",false]],"icon_eye_off (in module raylib)":[[6,"raylib.ICON_EYE_OFF",false]],"icon_eye_off (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_EYE_OFF",false]],"icon_eye_on (in module raylib)":[[6,"raylib.ICON_EYE_ON",false]],"icon_eye_on (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_EYE_ON",false]],"icon_file (in module raylib)":[[6,"raylib.ICON_FILE",false]],"icon_file (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE",false]],"icon_file_add (in module raylib)":[[6,"raylib.ICON_FILE_ADD",false]],"icon_file_add (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_ADD",false]],"icon_file_copy (in module raylib)":[[6,"raylib.ICON_FILE_COPY",false]],"icon_file_copy (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_COPY",false]],"icon_file_cut (in module raylib)":[[6,"raylib.ICON_FILE_CUT",false]],"icon_file_cut (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_CUT",false]],"icon_file_delete (in module raylib)":[[6,"raylib.ICON_FILE_DELETE",false]],"icon_file_delete (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_DELETE",false]],"icon_file_export (in module raylib)":[[6,"raylib.ICON_FILE_EXPORT",false]],"icon_file_export (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_EXPORT",false]],"icon_file_new (in module raylib)":[[6,"raylib.ICON_FILE_NEW",false]],"icon_file_new (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_NEW",false]],"icon_file_open (in module raylib)":[[6,"raylib.ICON_FILE_OPEN",false]],"icon_file_open (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_OPEN",false]],"icon_file_paste (in module raylib)":[[6,"raylib.ICON_FILE_PASTE",false]],"icon_file_paste (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_PASTE",false]],"icon_file_save (in module raylib)":[[6,"raylib.ICON_FILE_SAVE",false]],"icon_file_save (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_SAVE",false]],"icon_file_save_classic (in module raylib)":[[6,"raylib.ICON_FILE_SAVE_CLASSIC",false]],"icon_file_save_classic (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILE_SAVE_CLASSIC",false]],"icon_filetype_alpha (in module raylib)":[[6,"raylib.ICON_FILETYPE_ALPHA",false]],"icon_filetype_alpha (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILETYPE_ALPHA",false]],"icon_filetype_audio (in module raylib)":[[6,"raylib.ICON_FILETYPE_AUDIO",false]],"icon_filetype_audio (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILETYPE_AUDIO",false]],"icon_filetype_binary (in module raylib)":[[6,"raylib.ICON_FILETYPE_BINARY",false]],"icon_filetype_binary (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILETYPE_BINARY",false]],"icon_filetype_home (in module raylib)":[[6,"raylib.ICON_FILETYPE_HOME",false]],"icon_filetype_home (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILETYPE_HOME",false]],"icon_filetype_image (in module raylib)":[[6,"raylib.ICON_FILETYPE_IMAGE",false]],"icon_filetype_image (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILETYPE_IMAGE",false]],"icon_filetype_info (in module raylib)":[[6,"raylib.ICON_FILETYPE_INFO",false]],"icon_filetype_info (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILETYPE_INFO",false]],"icon_filetype_play (in module raylib)":[[6,"raylib.ICON_FILETYPE_PLAY",false]],"icon_filetype_play (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILETYPE_PLAY",false]],"icon_filetype_text (in module raylib)":[[6,"raylib.ICON_FILETYPE_TEXT",false]],"icon_filetype_text (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILETYPE_TEXT",false]],"icon_filetype_video (in module raylib)":[[6,"raylib.ICON_FILETYPE_VIDEO",false]],"icon_filetype_video (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILETYPE_VIDEO",false]],"icon_filter (in module raylib)":[[6,"raylib.ICON_FILTER",false]],"icon_filter (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILTER",false]],"icon_filter_bilinear (in module raylib)":[[6,"raylib.ICON_FILTER_BILINEAR",false]],"icon_filter_bilinear (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILTER_BILINEAR",false]],"icon_filter_point (in module raylib)":[[6,"raylib.ICON_FILTER_POINT",false]],"icon_filter_point (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILTER_POINT",false]],"icon_filter_top (in module raylib)":[[6,"raylib.ICON_FILTER_TOP",false]],"icon_filter_top (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FILTER_TOP",false]],"icon_folder (in module raylib)":[[6,"raylib.ICON_FOLDER",false]],"icon_folder (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FOLDER",false]],"icon_folder_add (in module raylib)":[[6,"raylib.ICON_FOLDER_ADD",false]],"icon_folder_add (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FOLDER_ADD",false]],"icon_folder_file_open (in module raylib)":[[6,"raylib.ICON_FOLDER_FILE_OPEN",false]],"icon_folder_file_open (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FOLDER_FILE_OPEN",false]],"icon_folder_open (in module raylib)":[[6,"raylib.ICON_FOLDER_OPEN",false]],"icon_folder_open (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FOLDER_OPEN",false]],"icon_folder_save (in module raylib)":[[6,"raylib.ICON_FOLDER_SAVE",false]],"icon_folder_save (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FOLDER_SAVE",false]],"icon_four_boxes (in module raylib)":[[6,"raylib.ICON_FOUR_BOXES",false]],"icon_four_boxes (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FOUR_BOXES",false]],"icon_fx (in module raylib)":[[6,"raylib.ICON_FX",false]],"icon_fx (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_FX",false]],"icon_gear (in module raylib)":[[6,"raylib.ICON_GEAR",false]],"icon_gear (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_GEAR",false]],"icon_gear_big (in module raylib)":[[6,"raylib.ICON_GEAR_BIG",false]],"icon_gear_big (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_GEAR_BIG",false]],"icon_gear_ex (in module raylib)":[[6,"raylib.ICON_GEAR_EX",false]],"icon_gear_ex (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_GEAR_EX",false]],"icon_grid (in module raylib)":[[6,"raylib.ICON_GRID",false]],"icon_grid (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_GRID",false]],"icon_grid_fill (in module raylib)":[[6,"raylib.ICON_GRID_FILL",false]],"icon_grid_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_GRID_FILL",false]],"icon_hand_pointer (in module raylib)":[[6,"raylib.ICON_HAND_POINTER",false]],"icon_hand_pointer (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_HAND_POINTER",false]],"icon_heart (in module raylib)":[[6,"raylib.ICON_HEART",false]],"icon_heart (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_HEART",false]],"icon_help (in module raylib)":[[6,"raylib.ICON_HELP",false]],"icon_help (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_HELP",false]],"icon_help_box (in module raylib)":[[6,"raylib.ICON_HELP_BOX",false]],"icon_help_box (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_HELP_BOX",false]],"icon_hex (in module raylib)":[[6,"raylib.ICON_HEX",false]],"icon_hex (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_HEX",false]],"icon_hidpi (in module raylib)":[[6,"raylib.ICON_HIDPI",false]],"icon_hidpi (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_HIDPI",false]],"icon_hot (in module raylib)":[[6,"raylib.ICON_HOT",false]],"icon_hot (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_HOT",false]],"icon_house (in module raylib)":[[6,"raylib.ICON_HOUSE",false]],"icon_house (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_HOUSE",false]],"icon_info (in module raylib)":[[6,"raylib.ICON_INFO",false]],"icon_info (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_INFO",false]],"icon_info_box (in module raylib)":[[6,"raylib.ICON_INFO_BOX",false]],"icon_info_box (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_INFO_BOX",false]],"icon_key (in module raylib)":[[6,"raylib.ICON_KEY",false]],"icon_key (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_KEY",false]],"icon_laser (in module raylib)":[[6,"raylib.ICON_LASER",false]],"icon_laser (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LASER",false]],"icon_layers (in module raylib)":[[6,"raylib.ICON_LAYERS",false]],"icon_layers (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LAYERS",false]],"icon_layers2 (in module raylib)":[[6,"raylib.ICON_LAYERS2",false]],"icon_layers2 (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LAYERS2",false]],"icon_layers_iso (in module raylib)":[[6,"raylib.ICON_LAYERS_ISO",false]],"icon_layers_iso (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LAYERS_ISO",false]],"icon_layers_visible (in module raylib)":[[6,"raylib.ICON_LAYERS_VISIBLE",false]],"icon_layers_visible (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LAYERS_VISIBLE",false]],"icon_lens (in module raylib)":[[6,"raylib.ICON_LENS",false]],"icon_lens (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LENS",false]],"icon_lens_big (in module raylib)":[[6,"raylib.ICON_LENS_BIG",false]],"icon_lens_big (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LENS_BIG",false]],"icon_life_bars (in module raylib)":[[6,"raylib.ICON_LIFE_BARS",false]],"icon_life_bars (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LIFE_BARS",false]],"icon_link (in module raylib)":[[6,"raylib.ICON_LINK",false]],"icon_link (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LINK",false]],"icon_link_boxes (in module raylib)":[[6,"raylib.ICON_LINK_BOXES",false]],"icon_link_boxes (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LINK_BOXES",false]],"icon_link_broke (in module raylib)":[[6,"raylib.ICON_LINK_BROKE",false]],"icon_link_broke (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LINK_BROKE",false]],"icon_link_multi (in module raylib)":[[6,"raylib.ICON_LINK_MULTI",false]],"icon_link_multi (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LINK_MULTI",false]],"icon_link_net (in module raylib)":[[6,"raylib.ICON_LINK_NET",false]],"icon_link_net (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LINK_NET",false]],"icon_lock_close (in module raylib)":[[6,"raylib.ICON_LOCK_CLOSE",false]],"icon_lock_close (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LOCK_CLOSE",false]],"icon_lock_open (in module raylib)":[[6,"raylib.ICON_LOCK_OPEN",false]],"icon_lock_open (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_LOCK_OPEN",false]],"icon_magnet (in module raylib)":[[6,"raylib.ICON_MAGNET",false]],"icon_magnet (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MAGNET",false]],"icon_mailbox (in module raylib)":[[6,"raylib.ICON_MAILBOX",false]],"icon_mailbox (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MAILBOX",false]],"icon_maps (in module raylib)":[[6,"raylib.ICON_MAPS",false]],"icon_maps (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MAPS",false]],"icon_mipmaps (in module raylib)":[[6,"raylib.ICON_MIPMAPS",false]],"icon_mipmaps (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MIPMAPS",false]],"icon_mlayers (in module raylib)":[[6,"raylib.ICON_MLAYERS",false]],"icon_mlayers (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MLAYERS",false]],"icon_mode_2d (in module raylib)":[[6,"raylib.ICON_MODE_2D",false]],"icon_mode_2d (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MODE_2D",false]],"icon_mode_3d (in module raylib)":[[6,"raylib.ICON_MODE_3D",false]],"icon_mode_3d (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MODE_3D",false]],"icon_monitor (in module raylib)":[[6,"raylib.ICON_MONITOR",false]],"icon_monitor (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MONITOR",false]],"icon_mutate (in module raylib)":[[6,"raylib.ICON_MUTATE",false]],"icon_mutate (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MUTATE",false]],"icon_mutate_fill (in module raylib)":[[6,"raylib.ICON_MUTATE_FILL",false]],"icon_mutate_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_MUTATE_FILL",false]],"icon_none (in module raylib)":[[6,"raylib.ICON_NONE",false]],"icon_none (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_NONE",false]],"icon_notebook (in module raylib)":[[6,"raylib.ICON_NOTEBOOK",false]],"icon_notebook (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_NOTEBOOK",false]],"icon_ok_tick (in module raylib)":[[6,"raylib.ICON_OK_TICK",false]],"icon_ok_tick (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_OK_TICK",false]],"icon_pencil (in module raylib)":[[6,"raylib.ICON_PENCIL",false]],"icon_pencil (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PENCIL",false]],"icon_pencil_big (in module raylib)":[[6,"raylib.ICON_PENCIL_BIG",false]],"icon_pencil_big (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PENCIL_BIG",false]],"icon_photo_camera (in module raylib)":[[6,"raylib.ICON_PHOTO_CAMERA",false]],"icon_photo_camera (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PHOTO_CAMERA",false]],"icon_photo_camera_flash (in module raylib)":[[6,"raylib.ICON_PHOTO_CAMERA_FLASH",false]],"icon_photo_camera_flash (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PHOTO_CAMERA_FLASH",false]],"icon_player (in module raylib)":[[6,"raylib.ICON_PLAYER",false]],"icon_player (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PLAYER",false]],"icon_player_jump (in module raylib)":[[6,"raylib.ICON_PLAYER_JUMP",false]],"icon_player_jump (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PLAYER_JUMP",false]],"icon_player_next (in module raylib)":[[6,"raylib.ICON_PLAYER_NEXT",false]],"icon_player_next (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PLAYER_NEXT",false]],"icon_player_pause (in module raylib)":[[6,"raylib.ICON_PLAYER_PAUSE",false]],"icon_player_pause (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PLAYER_PAUSE",false]],"icon_player_play (in module raylib)":[[6,"raylib.ICON_PLAYER_PLAY",false]],"icon_player_play (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PLAYER_PLAY",false]],"icon_player_play_back (in module raylib)":[[6,"raylib.ICON_PLAYER_PLAY_BACK",false]],"icon_player_play_back (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PLAYER_PLAY_BACK",false]],"icon_player_previous (in module raylib)":[[6,"raylib.ICON_PLAYER_PREVIOUS",false]],"icon_player_previous (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PLAYER_PREVIOUS",false]],"icon_player_record (in module raylib)":[[6,"raylib.ICON_PLAYER_RECORD",false]],"icon_player_record (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PLAYER_RECORD",false]],"icon_player_stop (in module raylib)":[[6,"raylib.ICON_PLAYER_STOP",false]],"icon_player_stop (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PLAYER_STOP",false]],"icon_pot (in module raylib)":[[6,"raylib.ICON_POT",false]],"icon_pot (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_POT",false]],"icon_printer (in module raylib)":[[6,"raylib.ICON_PRINTER",false]],"icon_printer (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PRINTER",false]],"icon_priority (in module raylib)":[[6,"raylib.ICON_PRIORITY",false]],"icon_priority (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_PRIORITY",false]],"icon_redo (in module raylib)":[[6,"raylib.ICON_REDO",false]],"icon_redo (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_REDO",false]],"icon_redo_fill (in module raylib)":[[6,"raylib.ICON_REDO_FILL",false]],"icon_redo_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_REDO_FILL",false]],"icon_reg_exp (in module raylib)":[[6,"raylib.ICON_REG_EXP",false]],"icon_reg_exp (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_REG_EXP",false]],"icon_repeat (in module raylib)":[[6,"raylib.ICON_REPEAT",false]],"icon_repeat (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_REPEAT",false]],"icon_repeat_fill (in module raylib)":[[6,"raylib.ICON_REPEAT_FILL",false]],"icon_repeat_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_REPEAT_FILL",false]],"icon_reredo (in module raylib)":[[6,"raylib.ICON_REREDO",false]],"icon_reredo (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_REREDO",false]],"icon_reredo_fill (in module raylib)":[[6,"raylib.ICON_REREDO_FILL",false]],"icon_reredo_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_REREDO_FILL",false]],"icon_resize (in module raylib)":[[6,"raylib.ICON_RESIZE",false]],"icon_resize (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_RESIZE",false]],"icon_restart (in module raylib)":[[6,"raylib.ICON_RESTART",false]],"icon_restart (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_RESTART",false]],"icon_rom (in module raylib)":[[6,"raylib.ICON_ROM",false]],"icon_rom (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ROM",false]],"icon_rotate (in module raylib)":[[6,"raylib.ICON_ROTATE",false]],"icon_rotate (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ROTATE",false]],"icon_rotate_fill (in module raylib)":[[6,"raylib.ICON_ROTATE_FILL",false]],"icon_rotate_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ROTATE_FILL",false]],"icon_rubber (in module raylib)":[[6,"raylib.ICON_RUBBER",false]],"icon_rubber (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_RUBBER",false]],"icon_sand_timer (in module raylib)":[[6,"raylib.ICON_SAND_TIMER",false]],"icon_sand_timer (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SAND_TIMER",false]],"icon_scale (in module raylib)":[[6,"raylib.ICON_SCALE",false]],"icon_scale (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SCALE",false]],"icon_shield (in module raylib)":[[6,"raylib.ICON_SHIELD",false]],"icon_shield (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SHIELD",false]],"icon_shuffle (in module raylib)":[[6,"raylib.ICON_SHUFFLE",false]],"icon_shuffle (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SHUFFLE",false]],"icon_shuffle_fill (in module raylib)":[[6,"raylib.ICON_SHUFFLE_FILL",false]],"icon_shuffle_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SHUFFLE_FILL",false]],"icon_special (in module raylib)":[[6,"raylib.ICON_SPECIAL",false]],"icon_special (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SPECIAL",false]],"icon_square_toggle (in module raylib)":[[6,"raylib.ICON_SQUARE_TOGGLE",false]],"icon_square_toggle (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SQUARE_TOGGLE",false]],"icon_star (in module raylib)":[[6,"raylib.ICON_STAR",false]],"icon_star (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_STAR",false]],"icon_step_into (in module raylib)":[[6,"raylib.ICON_STEP_INTO",false]],"icon_step_into (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_STEP_INTO",false]],"icon_step_out (in module raylib)":[[6,"raylib.ICON_STEP_OUT",false]],"icon_step_out (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_STEP_OUT",false]],"icon_step_over (in module raylib)":[[6,"raylib.ICON_STEP_OVER",false]],"icon_step_over (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_STEP_OVER",false]],"icon_suitcase (in module raylib)":[[6,"raylib.ICON_SUITCASE",false]],"icon_suitcase (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SUITCASE",false]],"icon_suitcase_zip (in module raylib)":[[6,"raylib.ICON_SUITCASE_ZIP",false]],"icon_suitcase_zip (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SUITCASE_ZIP",false]],"icon_symmetry (in module raylib)":[[6,"raylib.ICON_SYMMETRY",false]],"icon_symmetry (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SYMMETRY",false]],"icon_symmetry_horizontal (in module raylib)":[[6,"raylib.ICON_SYMMETRY_HORIZONTAL",false]],"icon_symmetry_horizontal (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SYMMETRY_HORIZONTAL",false]],"icon_symmetry_vertical (in module raylib)":[[6,"raylib.ICON_SYMMETRY_VERTICAL",false]],"icon_symmetry_vertical (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_SYMMETRY_VERTICAL",false]],"icon_target (in module raylib)":[[6,"raylib.ICON_TARGET",false]],"icon_target (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TARGET",false]],"icon_target_big (in module raylib)":[[6,"raylib.ICON_TARGET_BIG",false]],"icon_target_big (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TARGET_BIG",false]],"icon_target_big_fill (in module raylib)":[[6,"raylib.ICON_TARGET_BIG_FILL",false]],"icon_target_big_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TARGET_BIG_FILL",false]],"icon_target_move (in module raylib)":[[6,"raylib.ICON_TARGET_MOVE",false]],"icon_target_move (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TARGET_MOVE",false]],"icon_target_move_fill (in module raylib)":[[6,"raylib.ICON_TARGET_MOVE_FILL",false]],"icon_target_move_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TARGET_MOVE_FILL",false]],"icon_target_point (in module raylib)":[[6,"raylib.ICON_TARGET_POINT",false]],"icon_target_point (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TARGET_POINT",false]],"icon_target_small (in module raylib)":[[6,"raylib.ICON_TARGET_SMALL",false]],"icon_target_small (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TARGET_SMALL",false]],"icon_target_small_fill (in module raylib)":[[6,"raylib.ICON_TARGET_SMALL_FILL",false]],"icon_target_small_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TARGET_SMALL_FILL",false]],"icon_text_a (in module raylib)":[[6,"raylib.ICON_TEXT_A",false]],"icon_text_a (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TEXT_A",false]],"icon_text_notes (in module raylib)":[[6,"raylib.ICON_TEXT_NOTES",false]],"icon_text_notes (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TEXT_NOTES",false]],"icon_text_popup (in module raylib)":[[6,"raylib.ICON_TEXT_POPUP",false]],"icon_text_popup (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TEXT_POPUP",false]],"icon_text_t (in module raylib)":[[6,"raylib.ICON_TEXT_T",false]],"icon_text_t (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TEXT_T",false]],"icon_tools (in module raylib)":[[6,"raylib.ICON_TOOLS",false]],"icon_tools (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_TOOLS",false]],"icon_undo (in module raylib)":[[6,"raylib.ICON_UNDO",false]],"icon_undo (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_UNDO",false]],"icon_undo_fill (in module raylib)":[[6,"raylib.ICON_UNDO_FILL",false]],"icon_undo_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_UNDO_FILL",false]],"icon_vertical_bars (in module raylib)":[[6,"raylib.ICON_VERTICAL_BARS",false]],"icon_vertical_bars (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_VERTICAL_BARS",false]],"icon_vertical_bars_fill (in module raylib)":[[6,"raylib.ICON_VERTICAL_BARS_FILL",false]],"icon_vertical_bars_fill (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_VERTICAL_BARS_FILL",false]],"icon_warning (in module raylib)":[[6,"raylib.ICON_WARNING",false]],"icon_warning (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_WARNING",false]],"icon_water_drop (in module raylib)":[[6,"raylib.ICON_WATER_DROP",false]],"icon_water_drop (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_WATER_DROP",false]],"icon_wave (in module raylib)":[[6,"raylib.ICON_WAVE",false]],"icon_wave (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_WAVE",false]],"icon_wave_sinus (in module raylib)":[[6,"raylib.ICON_WAVE_SINUS",false]],"icon_wave_sinus (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_WAVE_SINUS",false]],"icon_wave_square (in module raylib)":[[6,"raylib.ICON_WAVE_SQUARE",false]],"icon_wave_square (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_WAVE_SQUARE",false]],"icon_wave_triangular (in module raylib)":[[6,"raylib.ICON_WAVE_TRIANGULAR",false]],"icon_wave_triangular (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_WAVE_TRIANGULAR",false]],"icon_window (in module raylib)":[[6,"raylib.ICON_WINDOW",false]],"icon_window (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_WINDOW",false]],"icon_zoom_all (in module raylib)":[[6,"raylib.ICON_ZOOM_ALL",false]],"icon_zoom_all (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ZOOM_ALL",false]],"icon_zoom_big (in module raylib)":[[6,"raylib.ICON_ZOOM_BIG",false]],"icon_zoom_big (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ZOOM_BIG",false]],"icon_zoom_center (in module raylib)":[[6,"raylib.ICON_ZOOM_CENTER",false]],"icon_zoom_center (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ZOOM_CENTER",false]],"icon_zoom_medium (in module raylib)":[[6,"raylib.ICON_ZOOM_MEDIUM",false]],"icon_zoom_medium (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ZOOM_MEDIUM",false]],"icon_zoom_small (in module raylib)":[[6,"raylib.ICON_ZOOM_SMALL",false]],"icon_zoom_small (pyray.guiiconname attribute)":[[5,"pyray.GuiIconName.ICON_ZOOM_SMALL",false]],"id (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.id",false]],"id (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.id",false]],"id (pyray.rendertexture attribute)":[[5,"pyray.RenderTexture.id",false]],"id (pyray.shader attribute)":[[5,"pyray.Shader.id",false]],"id (pyray.texture attribute)":[[5,"pyray.Texture.id",false]],"id (pyray.texture2d attribute)":[[5,"pyray.Texture2D.id",false]],"id (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.id",false]],"id (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.id",false]],"id (raylib.rendertexture attribute)":[[6,"raylib.RenderTexture.id",false]],"id (raylib.rendertexture2d attribute)":[[6,"raylib.RenderTexture2D.id",false]],"id (raylib.shader attribute)":[[6,"raylib.Shader.id",false]],"id (raylib.texture attribute)":[[6,"raylib.Texture.id",false]],"id (raylib.texture2d attribute)":[[6,"raylib.Texture2D.id",false]],"id (raylib.texturecubemap attribute)":[[6,"raylib.TextureCubemap.id",false]],"image (class in pyray)":[[5,"pyray.Image",false]],"image (class in raylib)":[[6,"raylib.Image",false]],"image (pyray.glyphinfo attribute)":[[5,"pyray.GlyphInfo.image",false]],"image (raylib.glyphinfo attribute)":[[6,"raylib.GlyphInfo.image",false]],"image_alpha_clear() (in module pyray)":[[5,"pyray.image_alpha_clear",false]],"image_alpha_crop() (in module pyray)":[[5,"pyray.image_alpha_crop",false]],"image_alpha_mask() (in module pyray)":[[5,"pyray.image_alpha_mask",false]],"image_alpha_premultiply() (in module pyray)":[[5,"pyray.image_alpha_premultiply",false]],"image_blur_gaussian() (in module pyray)":[[5,"pyray.image_blur_gaussian",false]],"image_clear_background() (in module pyray)":[[5,"pyray.image_clear_background",false]],"image_color_brightness() (in module pyray)":[[5,"pyray.image_color_brightness",false]],"image_color_contrast() (in module pyray)":[[5,"pyray.image_color_contrast",false]],"image_color_grayscale() (in module pyray)":[[5,"pyray.image_color_grayscale",false]],"image_color_invert() (in module pyray)":[[5,"pyray.image_color_invert",false]],"image_color_replace() (in module pyray)":[[5,"pyray.image_color_replace",false]],"image_color_tint() (in module pyray)":[[5,"pyray.image_color_tint",false]],"image_copy() (in module pyray)":[[5,"pyray.image_copy",false]],"image_crop() (in module pyray)":[[5,"pyray.image_crop",false]],"image_dither() (in module pyray)":[[5,"pyray.image_dither",false]],"image_draw() (in module pyray)":[[5,"pyray.image_draw",false]],"image_draw_circle() (in module pyray)":[[5,"pyray.image_draw_circle",false]],"image_draw_circle_lines() (in module pyray)":[[5,"pyray.image_draw_circle_lines",false]],"image_draw_circle_lines_v() (in module pyray)":[[5,"pyray.image_draw_circle_lines_v",false]],"image_draw_circle_v() (in module pyray)":[[5,"pyray.image_draw_circle_v",false]],"image_draw_line() (in module pyray)":[[5,"pyray.image_draw_line",false]],"image_draw_line_ex() (in module pyray)":[[5,"pyray.image_draw_line_ex",false]],"image_draw_line_v() (in module pyray)":[[5,"pyray.image_draw_line_v",false]],"image_draw_pixel() (in module pyray)":[[5,"pyray.image_draw_pixel",false]],"image_draw_pixel_v() (in module pyray)":[[5,"pyray.image_draw_pixel_v",false]],"image_draw_rectangle() (in module pyray)":[[5,"pyray.image_draw_rectangle",false]],"image_draw_rectangle_lines() (in module pyray)":[[5,"pyray.image_draw_rectangle_lines",false]],"image_draw_rectangle_rec() (in module pyray)":[[5,"pyray.image_draw_rectangle_rec",false]],"image_draw_rectangle_v() (in module pyray)":[[5,"pyray.image_draw_rectangle_v",false]],"image_draw_text() (in module pyray)":[[5,"pyray.image_draw_text",false]],"image_draw_text_ex() (in module pyray)":[[5,"pyray.image_draw_text_ex",false]],"image_draw_triangle() (in module pyray)":[[5,"pyray.image_draw_triangle",false]],"image_draw_triangle_ex() (in module pyray)":[[5,"pyray.image_draw_triangle_ex",false]],"image_draw_triangle_fan() (in module pyray)":[[5,"pyray.image_draw_triangle_fan",false]],"image_draw_triangle_lines() (in module pyray)":[[5,"pyray.image_draw_triangle_lines",false]],"image_draw_triangle_strip() (in module pyray)":[[5,"pyray.image_draw_triangle_strip",false]],"image_flip_horizontal() (in module pyray)":[[5,"pyray.image_flip_horizontal",false]],"image_flip_vertical() (in module pyray)":[[5,"pyray.image_flip_vertical",false]],"image_format() (in module pyray)":[[5,"pyray.image_format",false]],"image_from_channel() (in module pyray)":[[5,"pyray.image_from_channel",false]],"image_from_image() (in module pyray)":[[5,"pyray.image_from_image",false]],"image_kernel_convolution() (in module pyray)":[[5,"pyray.image_kernel_convolution",false]],"image_mipmaps() (in module pyray)":[[5,"pyray.image_mipmaps",false]],"image_resize() (in module pyray)":[[5,"pyray.image_resize",false]],"image_resize_canvas() (in module pyray)":[[5,"pyray.image_resize_canvas",false]],"image_resize_nn() (in module pyray)":[[5,"pyray.image_resize_nn",false]],"image_rotate() (in module pyray)":[[5,"pyray.image_rotate",false]],"image_rotate_ccw() (in module pyray)":[[5,"pyray.image_rotate_ccw",false]],"image_rotate_cw() (in module pyray)":[[5,"pyray.image_rotate_cw",false]],"image_text() (in module pyray)":[[5,"pyray.image_text",false]],"image_text_ex() (in module pyray)":[[5,"pyray.image_text_ex",false]],"image_to_pot() (in module pyray)":[[5,"pyray.image_to_pot",false]],"imagealphaclear() (in module raylib)":[[6,"raylib.ImageAlphaClear",false]],"imagealphacrop() (in module raylib)":[[6,"raylib.ImageAlphaCrop",false]],"imagealphamask() (in module raylib)":[[6,"raylib.ImageAlphaMask",false]],"imagealphapremultiply() (in module raylib)":[[6,"raylib.ImageAlphaPremultiply",false]],"imageblurgaussian() (in module raylib)":[[6,"raylib.ImageBlurGaussian",false]],"imageclearbackground() (in module raylib)":[[6,"raylib.ImageClearBackground",false]],"imagecolorbrightness() (in module raylib)":[[6,"raylib.ImageColorBrightness",false]],"imagecolorcontrast() (in module raylib)":[[6,"raylib.ImageColorContrast",false]],"imagecolorgrayscale() (in module raylib)":[[6,"raylib.ImageColorGrayscale",false]],"imagecolorinvert() (in module raylib)":[[6,"raylib.ImageColorInvert",false]],"imagecolorreplace() (in module raylib)":[[6,"raylib.ImageColorReplace",false]],"imagecolortint() (in module raylib)":[[6,"raylib.ImageColorTint",false]],"imagecopy() (in module raylib)":[[6,"raylib.ImageCopy",false]],"imagecrop() (in module raylib)":[[6,"raylib.ImageCrop",false]],"imagedither() (in module raylib)":[[6,"raylib.ImageDither",false]],"imagedraw() (in module raylib)":[[6,"raylib.ImageDraw",false]],"imagedrawcircle() (in module raylib)":[[6,"raylib.ImageDrawCircle",false]],"imagedrawcirclelines() (in module raylib)":[[6,"raylib.ImageDrawCircleLines",false]],"imagedrawcirclelinesv() (in module raylib)":[[6,"raylib.ImageDrawCircleLinesV",false]],"imagedrawcirclev() (in module raylib)":[[6,"raylib.ImageDrawCircleV",false]],"imagedrawline() (in module raylib)":[[6,"raylib.ImageDrawLine",false]],"imagedrawlineex() (in module raylib)":[[6,"raylib.ImageDrawLineEx",false]],"imagedrawlinev() (in module raylib)":[[6,"raylib.ImageDrawLineV",false]],"imagedrawpixel() (in module raylib)":[[6,"raylib.ImageDrawPixel",false]],"imagedrawpixelv() (in module raylib)":[[6,"raylib.ImageDrawPixelV",false]],"imagedrawrectangle() (in module raylib)":[[6,"raylib.ImageDrawRectangle",false]],"imagedrawrectanglelines() (in module raylib)":[[6,"raylib.ImageDrawRectangleLines",false]],"imagedrawrectanglerec() (in module raylib)":[[6,"raylib.ImageDrawRectangleRec",false]],"imagedrawrectanglev() (in module raylib)":[[6,"raylib.ImageDrawRectangleV",false]],"imagedrawtext() (in module raylib)":[[6,"raylib.ImageDrawText",false]],"imagedrawtextex() (in module raylib)":[[6,"raylib.ImageDrawTextEx",false]],"imagedrawtriangle() (in module raylib)":[[6,"raylib.ImageDrawTriangle",false]],"imagedrawtriangleex() (in module raylib)":[[6,"raylib.ImageDrawTriangleEx",false]],"imagedrawtrianglefan() (in module raylib)":[[6,"raylib.ImageDrawTriangleFan",false]],"imagedrawtrianglelines() (in module raylib)":[[6,"raylib.ImageDrawTriangleLines",false]],"imagedrawtrianglestrip() (in module raylib)":[[6,"raylib.ImageDrawTriangleStrip",false]],"imagefliphorizontal() (in module raylib)":[[6,"raylib.ImageFlipHorizontal",false]],"imageflipvertical() (in module raylib)":[[6,"raylib.ImageFlipVertical",false]],"imageformat() (in module raylib)":[[6,"raylib.ImageFormat",false]],"imagefromchannel() (in module raylib)":[[6,"raylib.ImageFromChannel",false]],"imagefromimage() (in module raylib)":[[6,"raylib.ImageFromImage",false]],"imagekernelconvolution() (in module raylib)":[[6,"raylib.ImageKernelConvolution",false]],"imagemipmaps() (in module raylib)":[[6,"raylib.ImageMipmaps",false]],"imageresize() (in module raylib)":[[6,"raylib.ImageResize",false]],"imageresizecanvas() (in module raylib)":[[6,"raylib.ImageResizeCanvas",false]],"imageresizenn() (in module raylib)":[[6,"raylib.ImageResizeNN",false]],"imagerotate() (in module raylib)":[[6,"raylib.ImageRotate",false]],"imagerotateccw() (in module raylib)":[[6,"raylib.ImageRotateCCW",false]],"imagerotatecw() (in module raylib)":[[6,"raylib.ImageRotateCW",false]],"imagetext() (in module raylib)":[[6,"raylib.ImageText",false]],"imagetextex() (in module raylib)":[[6,"raylib.ImageTextEx",false]],"imagetopot() (in module raylib)":[[6,"raylib.ImageToPOT",false]],"indices (pyray.mesh attribute)":[[5,"pyray.Mesh.indices",false]],"indices (pyray.rlvertexbuffer attribute)":[[5,"pyray.rlVertexBuffer.indices",false]],"indices (raylib.mesh attribute)":[[6,"raylib.Mesh.indices",false]],"indices (raylib.rlvertexbuffer attribute)":[[6,"raylib.rlVertexBuffer.indices",false]],"inertia (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.inertia",false]],"inertia (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.inertia",false]],"init_audio_device() (in module pyray)":[[5,"pyray.init_audio_device",false]],"init_physics() (in module pyray)":[[5,"pyray.init_physics",false]],"init_window() (in module pyray)":[[5,"pyray.init_window",false]],"initaudiodevice() (in module raylib)":[[6,"raylib.InitAudioDevice",false]],"initphysics() (in module raylib)":[[6,"raylib.InitPhysics",false]],"initwindow() (in module raylib)":[[6,"raylib.InitWindow",false]],"interpupillarydistance (pyray.vrdeviceinfo attribute)":[[5,"pyray.VrDeviceInfo.interpupillaryDistance",false]],"interpupillarydistance (raylib.vrdeviceinfo attribute)":[[6,"raylib.VrDeviceInfo.interpupillaryDistance",false]],"inverseinertia (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.inverseInertia",false]],"inverseinertia (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.inverseInertia",false]],"inversemass (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.inverseMass",false]],"inversemass (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.inverseMass",false]],"is_audio_device_ready() (in module pyray)":[[5,"pyray.is_audio_device_ready",false]],"is_audio_stream_playing() (in module pyray)":[[5,"pyray.is_audio_stream_playing",false]],"is_audio_stream_processed() (in module pyray)":[[5,"pyray.is_audio_stream_processed",false]],"is_audio_stream_valid() (in module pyray)":[[5,"pyray.is_audio_stream_valid",false]],"is_cursor_hidden() (in module pyray)":[[5,"pyray.is_cursor_hidden",false]],"is_cursor_on_screen() (in module pyray)":[[5,"pyray.is_cursor_on_screen",false]],"is_file_dropped() (in module pyray)":[[5,"pyray.is_file_dropped",false]],"is_file_extension() (in module pyray)":[[5,"pyray.is_file_extension",false]],"is_file_name_valid() (in module pyray)":[[5,"pyray.is_file_name_valid",false]],"is_font_valid() (in module pyray)":[[5,"pyray.is_font_valid",false]],"is_gamepad_available() (in module pyray)":[[5,"pyray.is_gamepad_available",false]],"is_gamepad_button_down() (in module pyray)":[[5,"pyray.is_gamepad_button_down",false]],"is_gamepad_button_pressed() (in module pyray)":[[5,"pyray.is_gamepad_button_pressed",false]],"is_gamepad_button_released() (in module pyray)":[[5,"pyray.is_gamepad_button_released",false]],"is_gamepad_button_up() (in module pyray)":[[5,"pyray.is_gamepad_button_up",false]],"is_gesture_detected() (in module pyray)":[[5,"pyray.is_gesture_detected",false]],"is_image_valid() (in module pyray)":[[5,"pyray.is_image_valid",false]],"is_key_down() (in module pyray)":[[5,"pyray.is_key_down",false]],"is_key_pressed() (in module pyray)":[[5,"pyray.is_key_pressed",false]],"is_key_pressed_repeat() (in module pyray)":[[5,"pyray.is_key_pressed_repeat",false]],"is_key_released() (in module pyray)":[[5,"pyray.is_key_released",false]],"is_key_up() (in module pyray)":[[5,"pyray.is_key_up",false]],"is_material_valid() (in module pyray)":[[5,"pyray.is_material_valid",false]],"is_model_animation_valid() (in module pyray)":[[5,"pyray.is_model_animation_valid",false]],"is_model_valid() (in module pyray)":[[5,"pyray.is_model_valid",false]],"is_mouse_button_down() (in module pyray)":[[5,"pyray.is_mouse_button_down",false]],"is_mouse_button_pressed() (in module pyray)":[[5,"pyray.is_mouse_button_pressed",false]],"is_mouse_button_released() (in module pyray)":[[5,"pyray.is_mouse_button_released",false]],"is_mouse_button_up() (in module pyray)":[[5,"pyray.is_mouse_button_up",false]],"is_music_stream_playing() (in module pyray)":[[5,"pyray.is_music_stream_playing",false]],"is_music_valid() (in module pyray)":[[5,"pyray.is_music_valid",false]],"is_path_file() (in module pyray)":[[5,"pyray.is_path_file",false]],"is_render_texture_valid() (in module pyray)":[[5,"pyray.is_render_texture_valid",false]],"is_shader_valid() (in module pyray)":[[5,"pyray.is_shader_valid",false]],"is_sound_playing() (in module pyray)":[[5,"pyray.is_sound_playing",false]],"is_sound_valid() (in module pyray)":[[5,"pyray.is_sound_valid",false]],"is_texture_valid() (in module pyray)":[[5,"pyray.is_texture_valid",false]],"is_wave_valid() (in module pyray)":[[5,"pyray.is_wave_valid",false]],"is_window_focused() (in module pyray)":[[5,"pyray.is_window_focused",false]],"is_window_fullscreen() (in module pyray)":[[5,"pyray.is_window_fullscreen",false]],"is_window_hidden() (in module pyray)":[[5,"pyray.is_window_hidden",false]],"is_window_maximized() (in module pyray)":[[5,"pyray.is_window_maximized",false]],"is_window_minimized() (in module pyray)":[[5,"pyray.is_window_minimized",false]],"is_window_ready() (in module pyray)":[[5,"pyray.is_window_ready",false]],"is_window_resized() (in module pyray)":[[5,"pyray.is_window_resized",false]],"is_window_state() (in module pyray)":[[5,"pyray.is_window_state",false]],"isaudiodeviceready() (in module raylib)":[[6,"raylib.IsAudioDeviceReady",false]],"isaudiostreamplaying() (in module raylib)":[[6,"raylib.IsAudioStreamPlaying",false]],"isaudiostreamprocessed() (in module raylib)":[[6,"raylib.IsAudioStreamProcessed",false]],"isaudiostreamvalid() (in module raylib)":[[6,"raylib.IsAudioStreamValid",false]],"iscursorhidden() (in module raylib)":[[6,"raylib.IsCursorHidden",false]],"iscursoronscreen() (in module raylib)":[[6,"raylib.IsCursorOnScreen",false]],"isfiledropped() (in module raylib)":[[6,"raylib.IsFileDropped",false]],"isfileextension() (in module raylib)":[[6,"raylib.IsFileExtension",false]],"isfilenamevalid() (in module raylib)":[[6,"raylib.IsFileNameValid",false]],"isfontvalid() (in module raylib)":[[6,"raylib.IsFontValid",false]],"isgamepadavailable() (in module raylib)":[[6,"raylib.IsGamepadAvailable",false]],"isgamepadbuttondown() (in module raylib)":[[6,"raylib.IsGamepadButtonDown",false]],"isgamepadbuttonpressed() (in module raylib)":[[6,"raylib.IsGamepadButtonPressed",false]],"isgamepadbuttonreleased() (in module raylib)":[[6,"raylib.IsGamepadButtonReleased",false]],"isgamepadbuttonup() (in module raylib)":[[6,"raylib.IsGamepadButtonUp",false]],"isgesturedetected() (in module raylib)":[[6,"raylib.IsGestureDetected",false]],"isgrounded (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.isGrounded",false]],"isgrounded (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.isGrounded",false]],"isimagevalid() (in module raylib)":[[6,"raylib.IsImageValid",false]],"iskeydown() (in module raylib)":[[6,"raylib.IsKeyDown",false]],"iskeypressed() (in module raylib)":[[6,"raylib.IsKeyPressed",false]],"iskeypressedrepeat() (in module raylib)":[[6,"raylib.IsKeyPressedRepeat",false]],"iskeyreleased() (in module raylib)":[[6,"raylib.IsKeyReleased",false]],"iskeyup() (in module raylib)":[[6,"raylib.IsKeyUp",false]],"ismaterialvalid() (in module raylib)":[[6,"raylib.IsMaterialValid",false]],"ismodelanimationvalid() (in module raylib)":[[6,"raylib.IsModelAnimationValid",false]],"ismodelvalid() (in module raylib)":[[6,"raylib.IsModelValid",false]],"ismousebuttondown() (in module raylib)":[[6,"raylib.IsMouseButtonDown",false]],"ismousebuttonpressed() (in module raylib)":[[6,"raylib.IsMouseButtonPressed",false]],"ismousebuttonreleased() (in module raylib)":[[6,"raylib.IsMouseButtonReleased",false]],"ismousebuttonup() (in module raylib)":[[6,"raylib.IsMouseButtonUp",false]],"ismusicstreamplaying() (in module raylib)":[[6,"raylib.IsMusicStreamPlaying",false]],"ismusicvalid() (in module raylib)":[[6,"raylib.IsMusicValid",false]],"ispathfile() (in module raylib)":[[6,"raylib.IsPathFile",false]],"isrendertexturevalid() (in module raylib)":[[6,"raylib.IsRenderTextureValid",false]],"isshadervalid() (in module raylib)":[[6,"raylib.IsShaderValid",false]],"issoundplaying() (in module raylib)":[[6,"raylib.IsSoundPlaying",false]],"issoundvalid() (in module raylib)":[[6,"raylib.IsSoundValid",false]],"istexturevalid() (in module raylib)":[[6,"raylib.IsTextureValid",false]],"iswavevalid() (in module raylib)":[[6,"raylib.IsWaveValid",false]],"iswindowfocused() (in module raylib)":[[6,"raylib.IsWindowFocused",false]],"iswindowfullscreen() (in module raylib)":[[6,"raylib.IsWindowFullscreen",false]],"iswindowhidden() (in module raylib)":[[6,"raylib.IsWindowHidden",false]],"iswindowmaximized() (in module raylib)":[[6,"raylib.IsWindowMaximized",false]],"iswindowminimized() (in module raylib)":[[6,"raylib.IsWindowMinimized",false]],"iswindowready() (in module raylib)":[[6,"raylib.IsWindowReady",false]],"iswindowresized() (in module raylib)":[[6,"raylib.IsWindowResized",false]],"iswindowstate() (in module raylib)":[[6,"raylib.IsWindowState",false]],"key_a (in module raylib)":[[6,"raylib.KEY_A",false]],"key_a (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_A",false]],"key_apostrophe (in module raylib)":[[6,"raylib.KEY_APOSTROPHE",false]],"key_apostrophe (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_APOSTROPHE",false]],"key_b (in module raylib)":[[6,"raylib.KEY_B",false]],"key_b (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_B",false]],"key_back (in module raylib)":[[6,"raylib.KEY_BACK",false]],"key_back (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_BACK",false]],"key_backslash (in module raylib)":[[6,"raylib.KEY_BACKSLASH",false]],"key_backslash (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_BACKSLASH",false]],"key_backspace (in module raylib)":[[6,"raylib.KEY_BACKSPACE",false]],"key_backspace (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_BACKSPACE",false]],"key_c (in module raylib)":[[6,"raylib.KEY_C",false]],"key_c (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_C",false]],"key_caps_lock (in module raylib)":[[6,"raylib.KEY_CAPS_LOCK",false]],"key_caps_lock (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_CAPS_LOCK",false]],"key_comma (in module raylib)":[[6,"raylib.KEY_COMMA",false]],"key_comma (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_COMMA",false]],"key_d (in module raylib)":[[6,"raylib.KEY_D",false]],"key_d (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_D",false]],"key_delete (in module raylib)":[[6,"raylib.KEY_DELETE",false]],"key_delete (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_DELETE",false]],"key_down (in module raylib)":[[6,"raylib.KEY_DOWN",false]],"key_down (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_DOWN",false]],"key_e (in module raylib)":[[6,"raylib.KEY_E",false]],"key_e (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_E",false]],"key_eight (in module raylib)":[[6,"raylib.KEY_EIGHT",false]],"key_eight (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_EIGHT",false]],"key_end (in module raylib)":[[6,"raylib.KEY_END",false]],"key_end (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_END",false]],"key_enter (in module raylib)":[[6,"raylib.KEY_ENTER",false]],"key_enter (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_ENTER",false]],"key_equal (in module raylib)":[[6,"raylib.KEY_EQUAL",false]],"key_equal (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_EQUAL",false]],"key_escape (in module raylib)":[[6,"raylib.KEY_ESCAPE",false]],"key_escape (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_ESCAPE",false]],"key_f (in module raylib)":[[6,"raylib.KEY_F",false]],"key_f (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F",false]],"key_f1 (in module raylib)":[[6,"raylib.KEY_F1",false]],"key_f1 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F1",false]],"key_f10 (in module raylib)":[[6,"raylib.KEY_F10",false]],"key_f10 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F10",false]],"key_f11 (in module raylib)":[[6,"raylib.KEY_F11",false]],"key_f11 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F11",false]],"key_f12 (in module raylib)":[[6,"raylib.KEY_F12",false]],"key_f12 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F12",false]],"key_f2 (in module raylib)":[[6,"raylib.KEY_F2",false]],"key_f2 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F2",false]],"key_f3 (in module raylib)":[[6,"raylib.KEY_F3",false]],"key_f3 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F3",false]],"key_f4 (in module raylib)":[[6,"raylib.KEY_F4",false]],"key_f4 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F4",false]],"key_f5 (in module raylib)":[[6,"raylib.KEY_F5",false]],"key_f5 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F5",false]],"key_f6 (in module raylib)":[[6,"raylib.KEY_F6",false]],"key_f6 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F6",false]],"key_f7 (in module raylib)":[[6,"raylib.KEY_F7",false]],"key_f7 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F7",false]],"key_f8 (in module raylib)":[[6,"raylib.KEY_F8",false]],"key_f8 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F8",false]],"key_f9 (in module raylib)":[[6,"raylib.KEY_F9",false]],"key_f9 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_F9",false]],"key_five (in module raylib)":[[6,"raylib.KEY_FIVE",false]],"key_five (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_FIVE",false]],"key_four (in module raylib)":[[6,"raylib.KEY_FOUR",false]],"key_four (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_FOUR",false]],"key_g (in module raylib)":[[6,"raylib.KEY_G",false]],"key_g (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_G",false]],"key_grave (in module raylib)":[[6,"raylib.KEY_GRAVE",false]],"key_grave (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_GRAVE",false]],"key_h (in module raylib)":[[6,"raylib.KEY_H",false]],"key_h (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_H",false]],"key_home (in module raylib)":[[6,"raylib.KEY_HOME",false]],"key_home (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_HOME",false]],"key_i (in module raylib)":[[6,"raylib.KEY_I",false]],"key_i (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_I",false]],"key_insert (in module raylib)":[[6,"raylib.KEY_INSERT",false]],"key_insert (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_INSERT",false]],"key_j (in module raylib)":[[6,"raylib.KEY_J",false]],"key_j (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_J",false]],"key_k (in module raylib)":[[6,"raylib.KEY_K",false]],"key_k (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_K",false]],"key_kb_menu (in module raylib)":[[6,"raylib.KEY_KB_MENU",false]],"key_kb_menu (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KB_MENU",false]],"key_kp_0 (in module raylib)":[[6,"raylib.KEY_KP_0",false]],"key_kp_0 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_0",false]],"key_kp_1 (in module raylib)":[[6,"raylib.KEY_KP_1",false]],"key_kp_1 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_1",false]],"key_kp_2 (in module raylib)":[[6,"raylib.KEY_KP_2",false]],"key_kp_2 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_2",false]],"key_kp_3 (in module raylib)":[[6,"raylib.KEY_KP_3",false]],"key_kp_3 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_3",false]],"key_kp_4 (in module raylib)":[[6,"raylib.KEY_KP_4",false]],"key_kp_4 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_4",false]],"key_kp_5 (in module raylib)":[[6,"raylib.KEY_KP_5",false]],"key_kp_5 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_5",false]],"key_kp_6 (in module raylib)":[[6,"raylib.KEY_KP_6",false]],"key_kp_6 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_6",false]],"key_kp_7 (in module raylib)":[[6,"raylib.KEY_KP_7",false]],"key_kp_7 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_7",false]],"key_kp_8 (in module raylib)":[[6,"raylib.KEY_KP_8",false]],"key_kp_8 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_8",false]],"key_kp_9 (in module raylib)":[[6,"raylib.KEY_KP_9",false]],"key_kp_9 (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_9",false]],"key_kp_add (in module raylib)":[[6,"raylib.KEY_KP_ADD",false]],"key_kp_add (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_ADD",false]],"key_kp_decimal (in module raylib)":[[6,"raylib.KEY_KP_DECIMAL",false]],"key_kp_decimal (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_DECIMAL",false]],"key_kp_divide (in module raylib)":[[6,"raylib.KEY_KP_DIVIDE",false]],"key_kp_divide (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_DIVIDE",false]],"key_kp_enter (in module raylib)":[[6,"raylib.KEY_KP_ENTER",false]],"key_kp_enter (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_ENTER",false]],"key_kp_equal (in module raylib)":[[6,"raylib.KEY_KP_EQUAL",false]],"key_kp_equal (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_EQUAL",false]],"key_kp_multiply (in module raylib)":[[6,"raylib.KEY_KP_MULTIPLY",false]],"key_kp_multiply (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_MULTIPLY",false]],"key_kp_subtract (in module raylib)":[[6,"raylib.KEY_KP_SUBTRACT",false]],"key_kp_subtract (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_KP_SUBTRACT",false]],"key_l (in module raylib)":[[6,"raylib.KEY_L",false]],"key_l (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_L",false]],"key_left (in module raylib)":[[6,"raylib.KEY_LEFT",false]],"key_left (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_LEFT",false]],"key_left_alt (in module raylib)":[[6,"raylib.KEY_LEFT_ALT",false]],"key_left_alt (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_LEFT_ALT",false]],"key_left_bracket (in module raylib)":[[6,"raylib.KEY_LEFT_BRACKET",false]],"key_left_bracket (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_LEFT_BRACKET",false]],"key_left_control (in module raylib)":[[6,"raylib.KEY_LEFT_CONTROL",false]],"key_left_control (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_LEFT_CONTROL",false]],"key_left_shift (in module raylib)":[[6,"raylib.KEY_LEFT_SHIFT",false]],"key_left_shift (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_LEFT_SHIFT",false]],"key_left_super (in module raylib)":[[6,"raylib.KEY_LEFT_SUPER",false]],"key_left_super (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_LEFT_SUPER",false]],"key_m (in module raylib)":[[6,"raylib.KEY_M",false]],"key_m (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_M",false]],"key_menu (in module raylib)":[[6,"raylib.KEY_MENU",false]],"key_menu (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_MENU",false]],"key_minus (in module raylib)":[[6,"raylib.KEY_MINUS",false]],"key_minus (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_MINUS",false]],"key_n (in module raylib)":[[6,"raylib.KEY_N",false]],"key_n (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_N",false]],"key_nine (in module raylib)":[[6,"raylib.KEY_NINE",false]],"key_nine (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_NINE",false]],"key_null (in module raylib)":[[6,"raylib.KEY_NULL",false]],"key_null (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_NULL",false]],"key_num_lock (in module raylib)":[[6,"raylib.KEY_NUM_LOCK",false]],"key_num_lock (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_NUM_LOCK",false]],"key_o (in module raylib)":[[6,"raylib.KEY_O",false]],"key_o (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_O",false]],"key_one (in module raylib)":[[6,"raylib.KEY_ONE",false]],"key_one (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_ONE",false]],"key_p (in module raylib)":[[6,"raylib.KEY_P",false]],"key_p (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_P",false]],"key_page_down (in module raylib)":[[6,"raylib.KEY_PAGE_DOWN",false]],"key_page_down (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_PAGE_DOWN",false]],"key_page_up (in module raylib)":[[6,"raylib.KEY_PAGE_UP",false]],"key_page_up (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_PAGE_UP",false]],"key_pause (in module raylib)":[[6,"raylib.KEY_PAUSE",false]],"key_pause (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_PAUSE",false]],"key_period (in module raylib)":[[6,"raylib.KEY_PERIOD",false]],"key_period (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_PERIOD",false]],"key_print_screen (in module raylib)":[[6,"raylib.KEY_PRINT_SCREEN",false]],"key_print_screen (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_PRINT_SCREEN",false]],"key_q (in module raylib)":[[6,"raylib.KEY_Q",false]],"key_q (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_Q",false]],"key_r (in module raylib)":[[6,"raylib.KEY_R",false]],"key_r (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_R",false]],"key_right (in module raylib)":[[6,"raylib.KEY_RIGHT",false]],"key_right (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_RIGHT",false]],"key_right_alt (in module raylib)":[[6,"raylib.KEY_RIGHT_ALT",false]],"key_right_alt (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_RIGHT_ALT",false]],"key_right_bracket (in module raylib)":[[6,"raylib.KEY_RIGHT_BRACKET",false]],"key_right_bracket (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_RIGHT_BRACKET",false]],"key_right_control (in module raylib)":[[6,"raylib.KEY_RIGHT_CONTROL",false]],"key_right_control (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_RIGHT_CONTROL",false]],"key_right_shift (in module raylib)":[[6,"raylib.KEY_RIGHT_SHIFT",false]],"key_right_shift (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_RIGHT_SHIFT",false]],"key_right_super (in module raylib)":[[6,"raylib.KEY_RIGHT_SUPER",false]],"key_right_super (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_RIGHT_SUPER",false]],"key_s (in module raylib)":[[6,"raylib.KEY_S",false]],"key_s (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_S",false]],"key_scroll_lock (in module raylib)":[[6,"raylib.KEY_SCROLL_LOCK",false]],"key_scroll_lock (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_SCROLL_LOCK",false]],"key_semicolon (in module raylib)":[[6,"raylib.KEY_SEMICOLON",false]],"key_semicolon (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_SEMICOLON",false]],"key_seven (in module raylib)":[[6,"raylib.KEY_SEVEN",false]],"key_seven (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_SEVEN",false]],"key_six (in module raylib)":[[6,"raylib.KEY_SIX",false]],"key_six (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_SIX",false]],"key_slash (in module raylib)":[[6,"raylib.KEY_SLASH",false]],"key_slash (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_SLASH",false]],"key_space (in module raylib)":[[6,"raylib.KEY_SPACE",false]],"key_space (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_SPACE",false]],"key_t (in module raylib)":[[6,"raylib.KEY_T",false]],"key_t (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_T",false]],"key_tab (in module raylib)":[[6,"raylib.KEY_TAB",false]],"key_tab (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_TAB",false]],"key_three (in module raylib)":[[6,"raylib.KEY_THREE",false]],"key_three (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_THREE",false]],"key_two (in module raylib)":[[6,"raylib.KEY_TWO",false]],"key_two (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_TWO",false]],"key_u (in module raylib)":[[6,"raylib.KEY_U",false]],"key_u (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_U",false]],"key_up (in module raylib)":[[6,"raylib.KEY_UP",false]],"key_up (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_UP",false]],"key_v (in module raylib)":[[6,"raylib.KEY_V",false]],"key_v (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_V",false]],"key_volume_down (in module raylib)":[[6,"raylib.KEY_VOLUME_DOWN",false]],"key_volume_down (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_VOLUME_DOWN",false]],"key_volume_up (in module raylib)":[[6,"raylib.KEY_VOLUME_UP",false]],"key_volume_up (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_VOLUME_UP",false]],"key_w (in module raylib)":[[6,"raylib.KEY_W",false]],"key_w (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_W",false]],"key_x (in module raylib)":[[6,"raylib.KEY_X",false]],"key_x (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_X",false]],"key_y (in module raylib)":[[6,"raylib.KEY_Y",false]],"key_y (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_Y",false]],"key_z (in module raylib)":[[6,"raylib.KEY_Z",false]],"key_z (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_Z",false]],"key_zero (in module raylib)":[[6,"raylib.KEY_ZERO",false]],"key_zero (pyray.keyboardkey attribute)":[[5,"pyray.KeyboardKey.KEY_ZERO",false]],"keyboardkey (class in pyray)":[[5,"pyray.KeyboardKey",false]],"keyboardkey (in module raylib)":[[6,"raylib.KeyboardKey",false]],"label (in module raylib)":[[6,"raylib.LABEL",false]],"label (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.LABEL",false]],"layout (pyray.npatchinfo attribute)":[[5,"pyray.NPatchInfo.layout",false]],"layout (raylib.npatchinfo attribute)":[[6,"raylib.NPatchInfo.layout",false]],"left (pyray.npatchinfo attribute)":[[5,"pyray.NPatchInfo.left",false]],"left (raylib.npatchinfo attribute)":[[6,"raylib.NPatchInfo.left",false]],"leftlenscenter (pyray.vrstereoconfig attribute)":[[5,"pyray.VrStereoConfig.leftLensCenter",false]],"leftlenscenter (raylib.vrstereoconfig attribute)":[[6,"raylib.VrStereoConfig.leftLensCenter",false]],"leftscreencenter (pyray.vrstereoconfig attribute)":[[5,"pyray.VrStereoConfig.leftScreenCenter",false]],"leftscreencenter (raylib.vrstereoconfig attribute)":[[6,"raylib.VrStereoConfig.leftScreenCenter",false]],"lensdistortionvalues (pyray.vrdeviceinfo attribute)":[[5,"pyray.VrDeviceInfo.lensDistortionValues",false]],"lensdistortionvalues (raylib.vrdeviceinfo attribute)":[[6,"raylib.VrDeviceInfo.lensDistortionValues",false]],"lensseparationdistance (pyray.vrdeviceinfo attribute)":[[5,"pyray.VrDeviceInfo.lensSeparationDistance",false]],"lensseparationdistance (raylib.vrdeviceinfo attribute)":[[6,"raylib.VrDeviceInfo.lensSeparationDistance",false]],"lerp() (in module pyray)":[[5,"pyray.lerp",false]],"lerp() (in module raylib)":[[6,"raylib.Lerp",false]],"lightgray (in module pyray)":[[5,"pyray.LIGHTGRAY",false]],"lightgray (in module raylib)":[[6,"raylib.LIGHTGRAY",false]],"lime (in module pyray)":[[5,"pyray.LIME",false]],"lime (in module raylib)":[[6,"raylib.LIME",false]],"line_color (in module raylib)":[[6,"raylib.LINE_COLOR",false]],"line_color (pyray.guidefaultproperty attribute)":[[5,"pyray.GuiDefaultProperty.LINE_COLOR",false]],"list_items_border_width (in module raylib)":[[6,"raylib.LIST_ITEMS_BORDER_WIDTH",false]],"list_items_border_width (pyray.guilistviewproperty attribute)":[[5,"pyray.GuiListViewProperty.LIST_ITEMS_BORDER_WIDTH",false]],"list_items_height (in module raylib)":[[6,"raylib.LIST_ITEMS_HEIGHT",false]],"list_items_height (pyray.guilistviewproperty attribute)":[[5,"pyray.GuiListViewProperty.LIST_ITEMS_HEIGHT",false]],"list_items_spacing (in module raylib)":[[6,"raylib.LIST_ITEMS_SPACING",false]],"list_items_spacing (pyray.guilistviewproperty attribute)":[[5,"pyray.GuiListViewProperty.LIST_ITEMS_SPACING",false]],"listview (in module raylib)":[[6,"raylib.LISTVIEW",false]],"listview (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.LISTVIEW",false]],"load_audio_stream() (in module pyray)":[[5,"pyray.load_audio_stream",false]],"load_automation_event_list() (in module pyray)":[[5,"pyray.load_automation_event_list",false]],"load_codepoints() (in module pyray)":[[5,"pyray.load_codepoints",false]],"load_directory_files() (in module pyray)":[[5,"pyray.load_directory_files",false]],"load_directory_files_ex() (in module pyray)":[[5,"pyray.load_directory_files_ex",false]],"load_dropped_files() (in module pyray)":[[5,"pyray.load_dropped_files",false]],"load_file_data() (in module pyray)":[[5,"pyray.load_file_data",false]],"load_file_text() (in module pyray)":[[5,"pyray.load_file_text",false]],"load_font() (in module pyray)":[[5,"pyray.load_font",false]],"load_font_data() (in module pyray)":[[5,"pyray.load_font_data",false]],"load_font_ex() (in module pyray)":[[5,"pyray.load_font_ex",false]],"load_font_from_image() (in module pyray)":[[5,"pyray.load_font_from_image",false]],"load_font_from_memory() (in module pyray)":[[5,"pyray.load_font_from_memory",false]],"load_image() (in module pyray)":[[5,"pyray.load_image",false]],"load_image_anim() (in module pyray)":[[5,"pyray.load_image_anim",false]],"load_image_anim_from_memory() (in module pyray)":[[5,"pyray.load_image_anim_from_memory",false]],"load_image_colors() (in module pyray)":[[5,"pyray.load_image_colors",false]],"load_image_from_memory() (in module pyray)":[[5,"pyray.load_image_from_memory",false]],"load_image_from_screen() (in module pyray)":[[5,"pyray.load_image_from_screen",false]],"load_image_from_texture() (in module pyray)":[[5,"pyray.load_image_from_texture",false]],"load_image_palette() (in module pyray)":[[5,"pyray.load_image_palette",false]],"load_image_raw() (in module pyray)":[[5,"pyray.load_image_raw",false]],"load_material_default() (in module pyray)":[[5,"pyray.load_material_default",false]],"load_materials() (in module pyray)":[[5,"pyray.load_materials",false]],"load_model() (in module pyray)":[[5,"pyray.load_model",false]],"load_model_animations() (in module pyray)":[[5,"pyray.load_model_animations",false]],"load_model_from_mesh() (in module pyray)":[[5,"pyray.load_model_from_mesh",false]],"load_music_stream() (in module pyray)":[[5,"pyray.load_music_stream",false]],"load_music_stream_from_memory() (in module pyray)":[[5,"pyray.load_music_stream_from_memory",false]],"load_random_sequence() (in module pyray)":[[5,"pyray.load_random_sequence",false]],"load_render_texture() (in module pyray)":[[5,"pyray.load_render_texture",false]],"load_shader() (in module pyray)":[[5,"pyray.load_shader",false]],"load_shader_from_memory() (in module pyray)":[[5,"pyray.load_shader_from_memory",false]],"load_sound() (in module pyray)":[[5,"pyray.load_sound",false]],"load_sound_alias() (in module pyray)":[[5,"pyray.load_sound_alias",false]],"load_sound_from_wave() (in module pyray)":[[5,"pyray.load_sound_from_wave",false]],"load_texture() (in module pyray)":[[5,"pyray.load_texture",false]],"load_texture_cubemap() (in module pyray)":[[5,"pyray.load_texture_cubemap",false]],"load_texture_from_image() (in module pyray)":[[5,"pyray.load_texture_from_image",false]],"load_utf8() (in module pyray)":[[5,"pyray.load_utf8",false]],"load_vr_stereo_config() (in module pyray)":[[5,"pyray.load_vr_stereo_config",false]],"load_wave() (in module pyray)":[[5,"pyray.load_wave",false]],"load_wave_from_memory() (in module pyray)":[[5,"pyray.load_wave_from_memory",false]],"load_wave_samples() (in module pyray)":[[5,"pyray.load_wave_samples",false]],"loadaudiostream() (in module raylib)":[[6,"raylib.LoadAudioStream",false]],"loadautomationeventlist() (in module raylib)":[[6,"raylib.LoadAutomationEventList",false]],"loadcodepoints() (in module raylib)":[[6,"raylib.LoadCodepoints",false]],"loaddirectoryfiles() (in module raylib)":[[6,"raylib.LoadDirectoryFiles",false]],"loaddirectoryfilesex() (in module raylib)":[[6,"raylib.LoadDirectoryFilesEx",false]],"loaddroppedfiles() (in module raylib)":[[6,"raylib.LoadDroppedFiles",false]],"loadfiledata() (in module raylib)":[[6,"raylib.LoadFileData",false]],"loadfiletext() (in module raylib)":[[6,"raylib.LoadFileText",false]],"loadfont() (in module raylib)":[[6,"raylib.LoadFont",false]],"loadfontdata() (in module raylib)":[[6,"raylib.LoadFontData",false]],"loadfontex() (in module raylib)":[[6,"raylib.LoadFontEx",false]],"loadfontfromimage() (in module raylib)":[[6,"raylib.LoadFontFromImage",false]],"loadfontfrommemory() (in module raylib)":[[6,"raylib.LoadFontFromMemory",false]],"loadimage() (in module raylib)":[[6,"raylib.LoadImage",false]],"loadimageanim() (in module raylib)":[[6,"raylib.LoadImageAnim",false]],"loadimageanimfrommemory() (in module raylib)":[[6,"raylib.LoadImageAnimFromMemory",false]],"loadimagecolors() (in module raylib)":[[6,"raylib.LoadImageColors",false]],"loadimagefrommemory() (in module raylib)":[[6,"raylib.LoadImageFromMemory",false]],"loadimagefromscreen() (in module raylib)":[[6,"raylib.LoadImageFromScreen",false]],"loadimagefromtexture() (in module raylib)":[[6,"raylib.LoadImageFromTexture",false]],"loadimagepalette() (in module raylib)":[[6,"raylib.LoadImagePalette",false]],"loadimageraw() (in module raylib)":[[6,"raylib.LoadImageRaw",false]],"loadmaterialdefault() (in module raylib)":[[6,"raylib.LoadMaterialDefault",false]],"loadmaterials() (in module raylib)":[[6,"raylib.LoadMaterials",false]],"loadmodel() (in module raylib)":[[6,"raylib.LoadModel",false]],"loadmodelanimations() (in module raylib)":[[6,"raylib.LoadModelAnimations",false]],"loadmodelfrommesh() (in module raylib)":[[6,"raylib.LoadModelFromMesh",false]],"loadmusicstream() (in module raylib)":[[6,"raylib.LoadMusicStream",false]],"loadmusicstreamfrommemory() (in module raylib)":[[6,"raylib.LoadMusicStreamFromMemory",false]],"loadrandomsequence() (in module raylib)":[[6,"raylib.LoadRandomSequence",false]],"loadrendertexture() (in module raylib)":[[6,"raylib.LoadRenderTexture",false]],"loadshader() (in module raylib)":[[6,"raylib.LoadShader",false]],"loadshaderfrommemory() (in module raylib)":[[6,"raylib.LoadShaderFromMemory",false]],"loadsound() (in module raylib)":[[6,"raylib.LoadSound",false]],"loadsoundalias() (in module raylib)":[[6,"raylib.LoadSoundAlias",false]],"loadsoundfromwave() (in module raylib)":[[6,"raylib.LoadSoundFromWave",false]],"loadtexture() (in module raylib)":[[6,"raylib.LoadTexture",false]],"loadtexturecubemap() (in module raylib)":[[6,"raylib.LoadTextureCubemap",false]],"loadtexturefromimage() (in module raylib)":[[6,"raylib.LoadTextureFromImage",false]],"loadutf8() (in module raylib)":[[6,"raylib.LoadUTF8",false]],"loadvrstereoconfig() (in module raylib)":[[6,"raylib.LoadVrStereoConfig",false]],"loadwave() (in module raylib)":[[6,"raylib.LoadWave",false]],"loadwavefrommemory() (in module raylib)":[[6,"raylib.LoadWaveFromMemory",false]],"loadwavesamples() (in module raylib)":[[6,"raylib.LoadWaveSamples",false]],"locs (pyray.shader attribute)":[[5,"pyray.Shader.locs",false]],"locs (raylib.shader attribute)":[[6,"raylib.Shader.locs",false]],"log_all (in module raylib)":[[6,"raylib.LOG_ALL",false]],"log_all (pyray.traceloglevel attribute)":[[5,"pyray.TraceLogLevel.LOG_ALL",false]],"log_debug (in module raylib)":[[6,"raylib.LOG_DEBUG",false]],"log_debug (pyray.traceloglevel attribute)":[[5,"pyray.TraceLogLevel.LOG_DEBUG",false]],"log_error (in module raylib)":[[6,"raylib.LOG_ERROR",false]],"log_error (pyray.traceloglevel attribute)":[[5,"pyray.TraceLogLevel.LOG_ERROR",false]],"log_fatal (in module raylib)":[[6,"raylib.LOG_FATAL",false]],"log_fatal (pyray.traceloglevel attribute)":[[5,"pyray.TraceLogLevel.LOG_FATAL",false]],"log_info (in module raylib)":[[6,"raylib.LOG_INFO",false]],"log_info (pyray.traceloglevel attribute)":[[5,"pyray.TraceLogLevel.LOG_INFO",false]],"log_none (in module raylib)":[[6,"raylib.LOG_NONE",false]],"log_none (pyray.traceloglevel attribute)":[[5,"pyray.TraceLogLevel.LOG_NONE",false]],"log_trace (in module raylib)":[[6,"raylib.LOG_TRACE",false]],"log_trace (pyray.traceloglevel attribute)":[[5,"pyray.TraceLogLevel.LOG_TRACE",false]],"log_warning (in module raylib)":[[6,"raylib.LOG_WARNING",false]],"log_warning (pyray.traceloglevel attribute)":[[5,"pyray.TraceLogLevel.LOG_WARNING",false]],"looping (pyray.music attribute)":[[5,"pyray.Music.looping",false]],"looping (raylib.music attribute)":[[6,"raylib.Music.looping",false]],"m0 (pyray.matrix attribute)":[[5,"pyray.Matrix.m0",false]],"m0 (raylib.matrix attribute)":[[6,"raylib.Matrix.m0",false]],"m00 (pyray.matrix2x2 attribute)":[[5,"pyray.Matrix2x2.m00",false]],"m00 (raylib.matrix2x2 attribute)":[[6,"raylib.Matrix2x2.m00",false]],"m01 (pyray.matrix2x2 attribute)":[[5,"pyray.Matrix2x2.m01",false]],"m01 (raylib.matrix2x2 attribute)":[[6,"raylib.Matrix2x2.m01",false]],"m1 (pyray.matrix attribute)":[[5,"pyray.Matrix.m1",false]],"m1 (raylib.matrix attribute)":[[6,"raylib.Matrix.m1",false]],"m10 (pyray.matrix attribute)":[[5,"pyray.Matrix.m10",false]],"m10 (pyray.matrix2x2 attribute)":[[5,"pyray.Matrix2x2.m10",false]],"m10 (raylib.matrix attribute)":[[6,"raylib.Matrix.m10",false]],"m10 (raylib.matrix2x2 attribute)":[[6,"raylib.Matrix2x2.m10",false]],"m11 (pyray.matrix attribute)":[[5,"pyray.Matrix.m11",false]],"m11 (pyray.matrix2x2 attribute)":[[5,"pyray.Matrix2x2.m11",false]],"m11 (raylib.matrix attribute)":[[6,"raylib.Matrix.m11",false]],"m11 (raylib.matrix2x2 attribute)":[[6,"raylib.Matrix2x2.m11",false]],"m12 (pyray.matrix attribute)":[[5,"pyray.Matrix.m12",false]],"m12 (raylib.matrix attribute)":[[6,"raylib.Matrix.m12",false]],"m13 (pyray.matrix attribute)":[[5,"pyray.Matrix.m13",false]],"m13 (raylib.matrix attribute)":[[6,"raylib.Matrix.m13",false]],"m14 (pyray.matrix attribute)":[[5,"pyray.Matrix.m14",false]],"m14 (raylib.matrix attribute)":[[6,"raylib.Matrix.m14",false]],"m15 (pyray.matrix attribute)":[[5,"pyray.Matrix.m15",false]],"m15 (raylib.matrix attribute)":[[6,"raylib.Matrix.m15",false]],"m2 (pyray.matrix attribute)":[[5,"pyray.Matrix.m2",false]],"m2 (raylib.matrix attribute)":[[6,"raylib.Matrix.m2",false]],"m3 (pyray.matrix attribute)":[[5,"pyray.Matrix.m3",false]],"m3 (raylib.matrix attribute)":[[6,"raylib.Matrix.m3",false]],"m4 (pyray.matrix attribute)":[[5,"pyray.Matrix.m4",false]],"m4 (raylib.matrix attribute)":[[6,"raylib.Matrix.m4",false]],"m5 (pyray.matrix attribute)":[[5,"pyray.Matrix.m5",false]],"m5 (raylib.matrix attribute)":[[6,"raylib.Matrix.m5",false]],"m6 (pyray.matrix attribute)":[[5,"pyray.Matrix.m6",false]],"m6 (raylib.matrix attribute)":[[6,"raylib.Matrix.m6",false]],"m7 (pyray.matrix attribute)":[[5,"pyray.Matrix.m7",false]],"m7 (raylib.matrix attribute)":[[6,"raylib.Matrix.m7",false]],"m8 (pyray.matrix attribute)":[[5,"pyray.Matrix.m8",false]],"m8 (raylib.matrix attribute)":[[6,"raylib.Matrix.m8",false]],"m9 (pyray.matrix attribute)":[[5,"pyray.Matrix.m9",false]],"m9 (raylib.matrix attribute)":[[6,"raylib.Matrix.m9",false]],"magenta (in module pyray)":[[5,"pyray.MAGENTA",false]],"magenta (in module raylib)":[[6,"raylib.MAGENTA",false]],"make_directory() (in module pyray)":[[5,"pyray.make_directory",false]],"makedirectory() (in module raylib)":[[6,"raylib.MakeDirectory",false]],"maps (pyray.material attribute)":[[5,"pyray.Material.maps",false]],"maps (raylib.material attribute)":[[6,"raylib.Material.maps",false]],"maroon (in module pyray)":[[5,"pyray.MAROON",false]],"maroon (in module raylib)":[[6,"raylib.MAROON",false]],"mass (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.mass",false]],"mass (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.mass",false]],"material (class in pyray)":[[5,"pyray.Material",false]],"material (class in raylib)":[[6,"raylib.Material",false]],"material_map_albedo (in module raylib)":[[6,"raylib.MATERIAL_MAP_ALBEDO",false]],"material_map_albedo (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_ALBEDO",false]],"material_map_brdf (in module raylib)":[[6,"raylib.MATERIAL_MAP_BRDF",false]],"material_map_brdf (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_BRDF",false]],"material_map_cubemap (in module raylib)":[[6,"raylib.MATERIAL_MAP_CUBEMAP",false]],"material_map_cubemap (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_CUBEMAP",false]],"material_map_emission (in module raylib)":[[6,"raylib.MATERIAL_MAP_EMISSION",false]],"material_map_emission (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_EMISSION",false]],"material_map_height (in module raylib)":[[6,"raylib.MATERIAL_MAP_HEIGHT",false]],"material_map_height (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_HEIGHT",false]],"material_map_irradiance (in module raylib)":[[6,"raylib.MATERIAL_MAP_IRRADIANCE",false]],"material_map_irradiance (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_IRRADIANCE",false]],"material_map_metalness (in module raylib)":[[6,"raylib.MATERIAL_MAP_METALNESS",false]],"material_map_metalness (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_METALNESS",false]],"material_map_normal (in module raylib)":[[6,"raylib.MATERIAL_MAP_NORMAL",false]],"material_map_normal (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_NORMAL",false]],"material_map_occlusion (in module raylib)":[[6,"raylib.MATERIAL_MAP_OCCLUSION",false]],"material_map_occlusion (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_OCCLUSION",false]],"material_map_prefilter (in module raylib)":[[6,"raylib.MATERIAL_MAP_PREFILTER",false]],"material_map_prefilter (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_PREFILTER",false]],"material_map_roughness (in module raylib)":[[6,"raylib.MATERIAL_MAP_ROUGHNESS",false]],"material_map_roughness (pyray.materialmapindex attribute)":[[5,"pyray.MaterialMapIndex.MATERIAL_MAP_ROUGHNESS",false]],"materialcount (pyray.model attribute)":[[5,"pyray.Model.materialCount",false]],"materialcount (raylib.model attribute)":[[6,"raylib.Model.materialCount",false]],"materialmap (class in pyray)":[[5,"pyray.MaterialMap",false]],"materialmap (class in raylib)":[[6,"raylib.MaterialMap",false]],"materialmapindex (class in pyray)":[[5,"pyray.MaterialMapIndex",false]],"materialmapindex (in module raylib)":[[6,"raylib.MaterialMapIndex",false]],"materials (pyray.model attribute)":[[5,"pyray.Model.materials",false]],"materials (raylib.model attribute)":[[6,"raylib.Model.materials",false]],"matrix (class in pyray)":[[5,"pyray.Matrix",false]],"matrix (class in raylib)":[[6,"raylib.Matrix",false]],"matrix2x2 (class in pyray)":[[5,"pyray.Matrix2x2",false]],"matrix2x2 (class in raylib)":[[6,"raylib.Matrix2x2",false]],"matrix_add() (in module pyray)":[[5,"pyray.matrix_add",false]],"matrix_decompose() (in module pyray)":[[5,"pyray.matrix_decompose",false]],"matrix_determinant() (in module pyray)":[[5,"pyray.matrix_determinant",false]],"matrix_frustum() (in module pyray)":[[5,"pyray.matrix_frustum",false]],"matrix_identity() (in module pyray)":[[5,"pyray.matrix_identity",false]],"matrix_invert() (in module pyray)":[[5,"pyray.matrix_invert",false]],"matrix_look_at() (in module pyray)":[[5,"pyray.matrix_look_at",false]],"matrix_multiply() (in module pyray)":[[5,"pyray.matrix_multiply",false]],"matrix_ortho() (in module pyray)":[[5,"pyray.matrix_ortho",false]],"matrix_perspective() (in module pyray)":[[5,"pyray.matrix_perspective",false]],"matrix_rotate() (in module pyray)":[[5,"pyray.matrix_rotate",false]],"matrix_rotate_x() (in module pyray)":[[5,"pyray.matrix_rotate_x",false]],"matrix_rotate_xyz() (in module pyray)":[[5,"pyray.matrix_rotate_xyz",false]],"matrix_rotate_y() (in module pyray)":[[5,"pyray.matrix_rotate_y",false]],"matrix_rotate_z() (in module pyray)":[[5,"pyray.matrix_rotate_z",false]],"matrix_rotate_zyx() (in module pyray)":[[5,"pyray.matrix_rotate_zyx",false]],"matrix_scale() (in module pyray)":[[5,"pyray.matrix_scale",false]],"matrix_subtract() (in module pyray)":[[5,"pyray.matrix_subtract",false]],"matrix_to_float_v() (in module pyray)":[[5,"pyray.matrix_to_float_v",false]],"matrix_trace() (in module pyray)":[[5,"pyray.matrix_trace",false]],"matrix_translate() (in module pyray)":[[5,"pyray.matrix_translate",false]],"matrix_transpose() (in module pyray)":[[5,"pyray.matrix_transpose",false]],"matrixadd() (in module raylib)":[[6,"raylib.MatrixAdd",false]],"matrixdecompose() (in module raylib)":[[6,"raylib.MatrixDecompose",false]],"matrixdeterminant() (in module raylib)":[[6,"raylib.MatrixDeterminant",false]],"matrixfrustum() (in module raylib)":[[6,"raylib.MatrixFrustum",false]],"matrixidentity() (in module raylib)":[[6,"raylib.MatrixIdentity",false]],"matrixinvert() (in module raylib)":[[6,"raylib.MatrixInvert",false]],"matrixlookat() (in module raylib)":[[6,"raylib.MatrixLookAt",false]],"matrixmultiply() (in module raylib)":[[6,"raylib.MatrixMultiply",false]],"matrixortho() (in module raylib)":[[6,"raylib.MatrixOrtho",false]],"matrixperspective() (in module raylib)":[[6,"raylib.MatrixPerspective",false]],"matrixrotate() (in module raylib)":[[6,"raylib.MatrixRotate",false]],"matrixrotatex() (in module raylib)":[[6,"raylib.MatrixRotateX",false]],"matrixrotatexyz() (in module raylib)":[[6,"raylib.MatrixRotateXYZ",false]],"matrixrotatey() (in module raylib)":[[6,"raylib.MatrixRotateY",false]],"matrixrotatez() (in module raylib)":[[6,"raylib.MatrixRotateZ",false]],"matrixrotatezyx() (in module raylib)":[[6,"raylib.MatrixRotateZYX",false]],"matrixscale() (in module raylib)":[[6,"raylib.MatrixScale",false]],"matrixsubtract() (in module raylib)":[[6,"raylib.MatrixSubtract",false]],"matrixtofloatv() (in module raylib)":[[6,"raylib.MatrixToFloatV",false]],"matrixtrace() (in module raylib)":[[6,"raylib.MatrixTrace",false]],"matrixtranslate() (in module raylib)":[[6,"raylib.MatrixTranslate",false]],"matrixtranspose() (in module raylib)":[[6,"raylib.MatrixTranspose",false]],"max (pyray.boundingbox attribute)":[[5,"pyray.BoundingBox.max",false]],"max (raylib.boundingbox attribute)":[[6,"raylib.BoundingBox.max",false]],"maximize_window() (in module pyray)":[[5,"pyray.maximize_window",false]],"maximizewindow() (in module raylib)":[[6,"raylib.MaximizeWindow",false]],"measure_text() (in module pyray)":[[5,"pyray.measure_text",false]],"measure_text_ex() (in module pyray)":[[5,"pyray.measure_text_ex",false]],"measuretext() (in module raylib)":[[6,"raylib.MeasureText",false]],"measuretextex() (in module raylib)":[[6,"raylib.MeasureTextEx",false]],"mem_alloc() (in module pyray)":[[5,"pyray.mem_alloc",false]],"mem_free() (in module pyray)":[[5,"pyray.mem_free",false]],"mem_realloc() (in module pyray)":[[5,"pyray.mem_realloc",false]],"memalloc() (in module raylib)":[[6,"raylib.MemAlloc",false]],"memfree() (in module raylib)":[[6,"raylib.MemFree",false]],"memrealloc() (in module raylib)":[[6,"raylib.MemRealloc",false]],"mesh (class in pyray)":[[5,"pyray.Mesh",false]],"mesh (class in raylib)":[[6,"raylib.Mesh",false]],"meshcount (pyray.model attribute)":[[5,"pyray.Model.meshCount",false]],"meshcount (raylib.model attribute)":[[6,"raylib.Model.meshCount",false]],"meshes (pyray.model attribute)":[[5,"pyray.Model.meshes",false]],"meshes (raylib.model attribute)":[[6,"raylib.Model.meshes",false]],"meshmaterial (pyray.model attribute)":[[5,"pyray.Model.meshMaterial",false]],"meshmaterial (raylib.model attribute)":[[6,"raylib.Model.meshMaterial",false]],"min (pyray.boundingbox attribute)":[[5,"pyray.BoundingBox.min",false]],"min (raylib.boundingbox attribute)":[[6,"raylib.BoundingBox.min",false]],"minimize_window() (in module pyray)":[[5,"pyray.minimize_window",false]],"minimizewindow() (in module raylib)":[[6,"raylib.MinimizeWindow",false]],"mipmaps (pyray.image attribute)":[[5,"pyray.Image.mipmaps",false]],"mipmaps (pyray.texture attribute)":[[5,"pyray.Texture.mipmaps",false]],"mipmaps (pyray.texture2d attribute)":[[5,"pyray.Texture2D.mipmaps",false]],"mipmaps (raylib.image attribute)":[[6,"raylib.Image.mipmaps",false]],"mipmaps (raylib.texture attribute)":[[6,"raylib.Texture.mipmaps",false]],"mipmaps (raylib.texture2d attribute)":[[6,"raylib.Texture2D.mipmaps",false]],"mipmaps (raylib.texturecubemap attribute)":[[6,"raylib.TextureCubemap.mipmaps",false]],"mode (pyray.rldrawcall attribute)":[[5,"pyray.rlDrawCall.mode",false]],"mode (raylib.rldrawcall attribute)":[[6,"raylib.rlDrawCall.mode",false]],"model (class in pyray)":[[5,"pyray.Model",false]],"model (class in raylib)":[[6,"raylib.Model",false]],"modelanimation (class in pyray)":[[5,"pyray.ModelAnimation",false]],"modelanimation (class in raylib)":[[6,"raylib.ModelAnimation",false]],"module":[[5,"module-pyray",false],[6,"module-raylib",false]],"mouse_button_back (in module raylib)":[[6,"raylib.MOUSE_BUTTON_BACK",false]],"mouse_button_back (pyray.mousebutton attribute)":[[5,"pyray.MouseButton.MOUSE_BUTTON_BACK",false]],"mouse_button_extra (in module raylib)":[[6,"raylib.MOUSE_BUTTON_EXTRA",false]],"mouse_button_extra (pyray.mousebutton attribute)":[[5,"pyray.MouseButton.MOUSE_BUTTON_EXTRA",false]],"mouse_button_forward (in module raylib)":[[6,"raylib.MOUSE_BUTTON_FORWARD",false]],"mouse_button_forward (pyray.mousebutton attribute)":[[5,"pyray.MouseButton.MOUSE_BUTTON_FORWARD",false]],"mouse_button_left (in module raylib)":[[6,"raylib.MOUSE_BUTTON_LEFT",false]],"mouse_button_left (pyray.mousebutton attribute)":[[5,"pyray.MouseButton.MOUSE_BUTTON_LEFT",false]],"mouse_button_middle (in module raylib)":[[6,"raylib.MOUSE_BUTTON_MIDDLE",false]],"mouse_button_middle (pyray.mousebutton attribute)":[[5,"pyray.MouseButton.MOUSE_BUTTON_MIDDLE",false]],"mouse_button_right (in module raylib)":[[6,"raylib.MOUSE_BUTTON_RIGHT",false]],"mouse_button_right (pyray.mousebutton attribute)":[[5,"pyray.MouseButton.MOUSE_BUTTON_RIGHT",false]],"mouse_button_side (in module raylib)":[[6,"raylib.MOUSE_BUTTON_SIDE",false]],"mouse_button_side (pyray.mousebutton attribute)":[[5,"pyray.MouseButton.MOUSE_BUTTON_SIDE",false]],"mouse_cursor_arrow (in module raylib)":[[6,"raylib.MOUSE_CURSOR_ARROW",false]],"mouse_cursor_arrow (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_ARROW",false]],"mouse_cursor_crosshair (in module raylib)":[[6,"raylib.MOUSE_CURSOR_CROSSHAIR",false]],"mouse_cursor_crosshair (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_CROSSHAIR",false]],"mouse_cursor_default (in module raylib)":[[6,"raylib.MOUSE_CURSOR_DEFAULT",false]],"mouse_cursor_default (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_DEFAULT",false]],"mouse_cursor_ibeam (in module raylib)":[[6,"raylib.MOUSE_CURSOR_IBEAM",false]],"mouse_cursor_ibeam (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_IBEAM",false]],"mouse_cursor_not_allowed (in module raylib)":[[6,"raylib.MOUSE_CURSOR_NOT_ALLOWED",false]],"mouse_cursor_not_allowed (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_NOT_ALLOWED",false]],"mouse_cursor_pointing_hand (in module raylib)":[[6,"raylib.MOUSE_CURSOR_POINTING_HAND",false]],"mouse_cursor_pointing_hand (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_POINTING_HAND",false]],"mouse_cursor_resize_all (in module raylib)":[[6,"raylib.MOUSE_CURSOR_RESIZE_ALL",false]],"mouse_cursor_resize_all (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_RESIZE_ALL",false]],"mouse_cursor_resize_ew (in module raylib)":[[6,"raylib.MOUSE_CURSOR_RESIZE_EW",false]],"mouse_cursor_resize_ew (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_RESIZE_EW",false]],"mouse_cursor_resize_nesw (in module raylib)":[[6,"raylib.MOUSE_CURSOR_RESIZE_NESW",false]],"mouse_cursor_resize_nesw (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_RESIZE_NESW",false]],"mouse_cursor_resize_ns (in module raylib)":[[6,"raylib.MOUSE_CURSOR_RESIZE_NS",false]],"mouse_cursor_resize_ns (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_RESIZE_NS",false]],"mouse_cursor_resize_nwse (in module raylib)":[[6,"raylib.MOUSE_CURSOR_RESIZE_NWSE",false]],"mouse_cursor_resize_nwse (pyray.mousecursor attribute)":[[5,"pyray.MouseCursor.MOUSE_CURSOR_RESIZE_NWSE",false]],"mousebutton (class in pyray)":[[5,"pyray.MouseButton",false]],"mousebutton (in module raylib)":[[6,"raylib.MouseButton",false]],"mousecursor (class in pyray)":[[5,"pyray.MouseCursor",false]],"mousecursor (in module raylib)":[[6,"raylib.MouseCursor",false]],"music (class in pyray)":[[5,"pyray.Music",false]],"music (class in raylib)":[[6,"raylib.Music",false]],"name (pyray.boneinfo attribute)":[[5,"pyray.BoneInfo.name",false]],"name (pyray.modelanimation attribute)":[[5,"pyray.ModelAnimation.name",false]],"name (raylib.boneinfo attribute)":[[6,"raylib.BoneInfo.name",false]],"name (raylib.modelanimation attribute)":[[6,"raylib.ModelAnimation.name",false]],"normal (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.normal",false]],"normal (pyray.raycollision attribute)":[[5,"pyray.RayCollision.normal",false]],"normal (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.normal",false]],"normal (raylib.raycollision attribute)":[[6,"raylib.RayCollision.normal",false]],"normalize() (in module pyray)":[[5,"pyray.normalize",false]],"normalize() (in module raylib)":[[6,"raylib.Normalize",false]],"normals (pyray.mesh attribute)":[[5,"pyray.Mesh.normals",false]],"normals (pyray.physicsvertexdata attribute)":[[5,"pyray.PhysicsVertexData.normals",false]],"normals (pyray.rlvertexbuffer attribute)":[[5,"pyray.rlVertexBuffer.normals",false]],"normals (raylib.mesh attribute)":[[6,"raylib.Mesh.normals",false]],"normals (raylib.physicsvertexdata attribute)":[[6,"raylib.PhysicsVertexData.normals",false]],"normals (raylib.rlvertexbuffer attribute)":[[6,"raylib.rlVertexBuffer.normals",false]],"npatch_nine_patch (in module raylib)":[[6,"raylib.NPATCH_NINE_PATCH",false]],"npatch_nine_patch (pyray.npatchlayout attribute)":[[5,"pyray.NPatchLayout.NPATCH_NINE_PATCH",false]],"npatch_three_patch_horizontal (in module raylib)":[[6,"raylib.NPATCH_THREE_PATCH_HORIZONTAL",false]],"npatch_three_patch_horizontal (pyray.npatchlayout attribute)":[[5,"pyray.NPatchLayout.NPATCH_THREE_PATCH_HORIZONTAL",false]],"npatch_three_patch_vertical (in module raylib)":[[6,"raylib.NPATCH_THREE_PATCH_VERTICAL",false]],"npatch_three_patch_vertical (pyray.npatchlayout attribute)":[[5,"pyray.NPatchLayout.NPATCH_THREE_PATCH_VERTICAL",false]],"npatchinfo (class in pyray)":[[5,"pyray.NPatchInfo",false]],"npatchinfo (class in raylib)":[[6,"raylib.NPatchInfo",false]],"npatchlayout (class in pyray)":[[5,"pyray.NPatchLayout",false]],"npatchlayout (in module raylib)":[[6,"raylib.NPatchLayout",false]],"offset (pyray.camera2d attribute)":[[5,"pyray.Camera2D.offset",false]],"offset (raylib.camera2d attribute)":[[6,"raylib.Camera2D.offset",false]],"offsetx (pyray.glyphinfo attribute)":[[5,"pyray.GlyphInfo.offsetX",false]],"offsetx (raylib.glyphinfo attribute)":[[6,"raylib.GlyphInfo.offsetX",false]],"offsety (pyray.glyphinfo attribute)":[[5,"pyray.GlyphInfo.offsetY",false]],"offsety (raylib.glyphinfo attribute)":[[6,"raylib.GlyphInfo.offsetY",false]],"open_url() (in module pyray)":[[5,"pyray.open_url",false]],"openurl() (in module raylib)":[[6,"raylib.OpenURL",false]],"orange (in module pyray)":[[5,"pyray.ORANGE",false]],"orange (in module raylib)":[[6,"raylib.ORANGE",false]],"orient (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.orient",false]],"orient (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.orient",false]],"params (pyray.automationevent attribute)":[[5,"pyray.AutomationEvent.params",false]],"params (pyray.material attribute)":[[5,"pyray.Material.params",false]],"params (raylib.automationevent attribute)":[[6,"raylib.AutomationEvent.params",false]],"params (raylib.material attribute)":[[6,"raylib.Material.params",false]],"parent (pyray.boneinfo attribute)":[[5,"pyray.BoneInfo.parent",false]],"parent (raylib.boneinfo attribute)":[[6,"raylib.BoneInfo.parent",false]],"paths (pyray.filepathlist attribute)":[[5,"pyray.FilePathList.paths",false]],"paths (raylib.filepathlist attribute)":[[6,"raylib.FilePathList.paths",false]],"pause_audio_stream() (in module pyray)":[[5,"pyray.pause_audio_stream",false]],"pause_music_stream() (in module pyray)":[[5,"pyray.pause_music_stream",false]],"pause_sound() (in module pyray)":[[5,"pyray.pause_sound",false]],"pauseaudiostream() (in module raylib)":[[6,"raylib.PauseAudioStream",false]],"pausemusicstream() (in module raylib)":[[6,"raylib.PauseMusicStream",false]],"pausesound() (in module raylib)":[[6,"raylib.PauseSound",false]],"penetration (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.penetration",false]],"penetration (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.penetration",false]],"physics_add_force() (in module pyray)":[[5,"pyray.physics_add_force",false]],"physics_add_torque() (in module pyray)":[[5,"pyray.physics_add_torque",false]],"physics_circle (in module raylib)":[[6,"raylib.PHYSICS_CIRCLE",false]],"physics_polygon (in module raylib)":[[6,"raylib.PHYSICS_POLYGON",false]],"physics_shatter() (in module pyray)":[[5,"pyray.physics_shatter",false]],"physicsaddforce() (in module raylib)":[[6,"raylib.PhysicsAddForce",false]],"physicsaddtorque() (in module raylib)":[[6,"raylib.PhysicsAddTorque",false]],"physicsbodydata (class in pyray)":[[5,"pyray.PhysicsBodyData",false]],"physicsbodydata (class in raylib)":[[6,"raylib.PhysicsBodyData",false]],"physicsmanifolddata (class in pyray)":[[5,"pyray.PhysicsManifoldData",false]],"physicsmanifolddata (class in raylib)":[[6,"raylib.PhysicsManifoldData",false]],"physicsshape (class in pyray)":[[5,"pyray.PhysicsShape",false]],"physicsshape (class in raylib)":[[6,"raylib.PhysicsShape",false]],"physicsshapetype (in module raylib)":[[6,"raylib.PhysicsShapeType",false]],"physicsshatter() (in module raylib)":[[6,"raylib.PhysicsShatter",false]],"physicsvertexdata (class in pyray)":[[5,"pyray.PhysicsVertexData",false]],"physicsvertexdata (class in raylib)":[[6,"raylib.PhysicsVertexData",false]],"pink (in module pyray)":[[5,"pyray.PINK",false]],"pink (in module raylib)":[[6,"raylib.PINK",false]],"pixelformat (class in pyray)":[[5,"pyray.PixelFormat",false]],"pixelformat (in module raylib)":[[6,"raylib.PixelFormat",false]],"pixelformat_compressed_astc_4x4_rgba (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA",false]],"pixelformat_compressed_astc_4x4_rgba (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA",false]],"pixelformat_compressed_astc_8x8_rgba (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA",false]],"pixelformat_compressed_astc_8x8_rgba (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA",false]],"pixelformat_compressed_dxt1_rgb (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_DXT1_RGB",false]],"pixelformat_compressed_dxt1_rgb (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_DXT1_RGB",false]],"pixelformat_compressed_dxt1_rgba (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_DXT1_RGBA",false]],"pixelformat_compressed_dxt1_rgba (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_DXT1_RGBA",false]],"pixelformat_compressed_dxt3_rgba (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_DXT3_RGBA",false]],"pixelformat_compressed_dxt3_rgba (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_DXT3_RGBA",false]],"pixelformat_compressed_dxt5_rgba (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_DXT5_RGBA",false]],"pixelformat_compressed_dxt5_rgba (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_DXT5_RGBA",false]],"pixelformat_compressed_etc1_rgb (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_ETC1_RGB",false]],"pixelformat_compressed_etc1_rgb (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_ETC1_RGB",false]],"pixelformat_compressed_etc2_eac_rgba (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA",false]],"pixelformat_compressed_etc2_eac_rgba (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA",false]],"pixelformat_compressed_etc2_rgb (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_ETC2_RGB",false]],"pixelformat_compressed_etc2_rgb (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_ETC2_RGB",false]],"pixelformat_compressed_pvrt_rgb (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_PVRT_RGB",false]],"pixelformat_compressed_pvrt_rgb (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_PVRT_RGB",false]],"pixelformat_compressed_pvrt_rgba (in module raylib)":[[6,"raylib.PIXELFORMAT_COMPRESSED_PVRT_RGBA",false]],"pixelformat_compressed_pvrt_rgba (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_COMPRESSED_PVRT_RGBA",false]],"pixelformat_uncompressed_gray_alpha (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA",false]],"pixelformat_uncompressed_gray_alpha (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA",false]],"pixelformat_uncompressed_grayscale (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_GRAYSCALE",false]],"pixelformat_uncompressed_grayscale (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_GRAYSCALE",false]],"pixelformat_uncompressed_r16 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R16",false]],"pixelformat_uncompressed_r16 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R16",false]],"pixelformat_uncompressed_r16g16b16 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R16G16B16",false]],"pixelformat_uncompressed_r16g16b16 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R16G16B16",false]],"pixelformat_uncompressed_r16g16b16a16 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R16G16B16A16",false]],"pixelformat_uncompressed_r16g16b16a16 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R16G16B16A16",false]],"pixelformat_uncompressed_r32 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R32",false]],"pixelformat_uncompressed_r32 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R32",false]],"pixelformat_uncompressed_r32g32b32 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R32G32B32",false]],"pixelformat_uncompressed_r32g32b32 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R32G32B32",false]],"pixelformat_uncompressed_r32g32b32a32 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R32G32B32A32",false]],"pixelformat_uncompressed_r32g32b32a32 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R32G32B32A32",false]],"pixelformat_uncompressed_r4g4b4a4 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R4G4B4A4",false]],"pixelformat_uncompressed_r4g4b4a4 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R4G4B4A4",false]],"pixelformat_uncompressed_r5g5b5a1 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R5G5B5A1",false]],"pixelformat_uncompressed_r5g5b5a1 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R5G5B5A1",false]],"pixelformat_uncompressed_r5g6b5 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R5G6B5",false]],"pixelformat_uncompressed_r5g6b5 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R5G6B5",false]],"pixelformat_uncompressed_r8g8b8 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R8G8B8",false]],"pixelformat_uncompressed_r8g8b8 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R8G8B8",false]],"pixelformat_uncompressed_r8g8b8a8 (in module raylib)":[[6,"raylib.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8",false]],"pixelformat_uncompressed_r8g8b8a8 (pyray.pixelformat attribute)":[[5,"pyray.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8",false]],"pixels (raylib.glfwimage attribute)":[[6,"raylib.GLFWimage.pixels",false]],"play_audio_stream() (in module pyray)":[[5,"pyray.play_audio_stream",false]],"play_automation_event() (in module pyray)":[[5,"pyray.play_automation_event",false]],"play_music_stream() (in module pyray)":[[5,"pyray.play_music_stream",false]],"play_sound() (in module pyray)":[[5,"pyray.play_sound",false]],"playaudiostream() (in module raylib)":[[6,"raylib.PlayAudioStream",false]],"playautomationevent() (in module raylib)":[[6,"raylib.PlayAutomationEvent",false]],"playmusicstream() (in module raylib)":[[6,"raylib.PlayMusicStream",false]],"playsound() (in module raylib)":[[6,"raylib.PlaySound",false]],"point (pyray.raycollision attribute)":[[5,"pyray.RayCollision.point",false]],"point (raylib.raycollision attribute)":[[6,"raylib.RayCollision.point",false]],"poll_input_events() (in module pyray)":[[5,"pyray.poll_input_events",false]],"pollinputevents() (in module raylib)":[[6,"raylib.PollInputEvents",false]],"position (pyray.camera3d attribute)":[[5,"pyray.Camera3D.position",false]],"position (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.position",false]],"position (pyray.ray attribute)":[[5,"pyray.Ray.position",false]],"position (raylib.camera attribute)":[[6,"raylib.Camera.position",false]],"position (raylib.camera3d attribute)":[[6,"raylib.Camera3D.position",false]],"position (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.position",false]],"position (raylib.ray attribute)":[[6,"raylib.Ray.position",false]],"positions (pyray.physicsvertexdata attribute)":[[5,"pyray.PhysicsVertexData.positions",false]],"positions (raylib.physicsvertexdata attribute)":[[6,"raylib.PhysicsVertexData.positions",false]],"processor (pyray.audiostream attribute)":[[5,"pyray.AudioStream.processor",false]],"processor (raylib.audiostream attribute)":[[6,"raylib.AudioStream.processor",false]],"progress_padding (in module raylib)":[[6,"raylib.PROGRESS_PADDING",false]],"progress_padding (pyray.guiprogressbarproperty attribute)":[[5,"pyray.GuiProgressBarProperty.PROGRESS_PADDING",false]],"progressbar (in module raylib)":[[6,"raylib.PROGRESSBAR",false]],"progressbar (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.PROGRESSBAR",false]],"projection (pyray.camera3d attribute)":[[5,"pyray.Camera3D.projection",false]],"projection (pyray.vrstereoconfig attribute)":[[5,"pyray.VrStereoConfig.projection",false]],"projection (raylib.camera attribute)":[[6,"raylib.Camera.projection",false]],"projection (raylib.camera3d attribute)":[[6,"raylib.Camera3D.projection",false]],"projection (raylib.vrstereoconfig attribute)":[[6,"raylib.VrStereoConfig.projection",false]],"propertyid (pyray.guistyleprop attribute)":[[5,"pyray.GuiStyleProp.propertyId",false]],"propertyid (raylib.guistyleprop attribute)":[[6,"raylib.GuiStyleProp.propertyId",false]],"propertyvalue (pyray.guistyleprop attribute)":[[5,"pyray.GuiStyleProp.propertyValue",false]],"propertyvalue (raylib.guistyleprop attribute)":[[6,"raylib.GuiStyleProp.propertyValue",false]],"purple (in module pyray)":[[5,"pyray.PURPLE",false]],"purple (in module raylib)":[[6,"raylib.PURPLE",false]],"pyray":[[5,"module-pyray",false]],"quaternion (class in raylib)":[[6,"raylib.Quaternion",false]],"quaternion_add() (in module pyray)":[[5,"pyray.quaternion_add",false]],"quaternion_add_value() (in module pyray)":[[5,"pyray.quaternion_add_value",false]],"quaternion_cubic_hermite_spline() (in module pyray)":[[5,"pyray.quaternion_cubic_hermite_spline",false]],"quaternion_divide() (in module pyray)":[[5,"pyray.quaternion_divide",false]],"quaternion_equals() (in module pyray)":[[5,"pyray.quaternion_equals",false]],"quaternion_from_axis_angle() (in module pyray)":[[5,"pyray.quaternion_from_axis_angle",false]],"quaternion_from_euler() (in module pyray)":[[5,"pyray.quaternion_from_euler",false]],"quaternion_from_matrix() (in module pyray)":[[5,"pyray.quaternion_from_matrix",false]],"quaternion_from_vector3_to_vector3() (in module pyray)":[[5,"pyray.quaternion_from_vector3_to_vector3",false]],"quaternion_identity() (in module pyray)":[[5,"pyray.quaternion_identity",false]],"quaternion_invert() (in module pyray)":[[5,"pyray.quaternion_invert",false]],"quaternion_length() (in module pyray)":[[5,"pyray.quaternion_length",false]],"quaternion_lerp() (in module pyray)":[[5,"pyray.quaternion_lerp",false]],"quaternion_multiply() (in module pyray)":[[5,"pyray.quaternion_multiply",false]],"quaternion_nlerp() (in module pyray)":[[5,"pyray.quaternion_nlerp",false]],"quaternion_normalize() (in module pyray)":[[5,"pyray.quaternion_normalize",false]],"quaternion_scale() (in module pyray)":[[5,"pyray.quaternion_scale",false]],"quaternion_slerp() (in module pyray)":[[5,"pyray.quaternion_slerp",false]],"quaternion_subtract() (in module pyray)":[[5,"pyray.quaternion_subtract",false]],"quaternion_subtract_value() (in module pyray)":[[5,"pyray.quaternion_subtract_value",false]],"quaternion_to_axis_angle() (in module pyray)":[[5,"pyray.quaternion_to_axis_angle",false]],"quaternion_to_euler() (in module pyray)":[[5,"pyray.quaternion_to_euler",false]],"quaternion_to_matrix() (in module pyray)":[[5,"pyray.quaternion_to_matrix",false]],"quaternion_transform() (in module pyray)":[[5,"pyray.quaternion_transform",false]],"quaternionadd() (in module raylib)":[[6,"raylib.QuaternionAdd",false]],"quaternionaddvalue() (in module raylib)":[[6,"raylib.QuaternionAddValue",false]],"quaternioncubichermitespline() (in module raylib)":[[6,"raylib.QuaternionCubicHermiteSpline",false]],"quaterniondivide() (in module raylib)":[[6,"raylib.QuaternionDivide",false]],"quaternionequals() (in module raylib)":[[6,"raylib.QuaternionEquals",false]],"quaternionfromaxisangle() (in module raylib)":[[6,"raylib.QuaternionFromAxisAngle",false]],"quaternionfromeuler() (in module raylib)":[[6,"raylib.QuaternionFromEuler",false]],"quaternionfrommatrix() (in module raylib)":[[6,"raylib.QuaternionFromMatrix",false]],"quaternionfromvector3tovector3() (in module raylib)":[[6,"raylib.QuaternionFromVector3ToVector3",false]],"quaternionidentity() (in module raylib)":[[6,"raylib.QuaternionIdentity",false]],"quaternioninvert() (in module raylib)":[[6,"raylib.QuaternionInvert",false]],"quaternionlength() (in module raylib)":[[6,"raylib.QuaternionLength",false]],"quaternionlerp() (in module raylib)":[[6,"raylib.QuaternionLerp",false]],"quaternionmultiply() (in module raylib)":[[6,"raylib.QuaternionMultiply",false]],"quaternionnlerp() (in module raylib)":[[6,"raylib.QuaternionNlerp",false]],"quaternionnormalize() (in module raylib)":[[6,"raylib.QuaternionNormalize",false]],"quaternionscale() (in module raylib)":[[6,"raylib.QuaternionScale",false]],"quaternionslerp() (in module raylib)":[[6,"raylib.QuaternionSlerp",false]],"quaternionsubtract() (in module raylib)":[[6,"raylib.QuaternionSubtract",false]],"quaternionsubtractvalue() (in module raylib)":[[6,"raylib.QuaternionSubtractValue",false]],"quaterniontoaxisangle() (in module raylib)":[[6,"raylib.QuaternionToAxisAngle",false]],"quaterniontoeuler() (in module raylib)":[[6,"raylib.QuaternionToEuler",false]],"quaterniontomatrix() (in module raylib)":[[6,"raylib.QuaternionToMatrix",false]],"quaterniontransform() (in module raylib)":[[6,"raylib.QuaternionTransform",false]],"r (pyray.color attribute)":[[5,"pyray.Color.r",false]],"r (raylib.color attribute)":[[6,"raylib.Color.r",false]],"radius (pyray.physicsshape attribute)":[[5,"pyray.PhysicsShape.radius",false]],"radius (raylib.physicsshape attribute)":[[6,"raylib.PhysicsShape.radius",false]],"raudiobuffer (class in raylib)":[[6,"raylib.rAudioBuffer",false]],"raudioprocessor (class in raylib)":[[6,"raylib.rAudioProcessor",false]],"ray (class in pyray)":[[5,"pyray.Ray",false]],"ray (class in raylib)":[[6,"raylib.Ray",false]],"raycollision (class in pyray)":[[5,"pyray.RayCollision",false]],"raycollision (class in raylib)":[[6,"raylib.RayCollision",false]],"raylib":[[6,"module-raylib",false]],"raywhite (in module pyray)":[[5,"pyray.RAYWHITE",false]],"raywhite (in module raylib)":[[6,"raylib.RAYWHITE",false]],"reallocate (raylib.glfwallocator attribute)":[[6,"raylib.GLFWallocator.reallocate",false]],"recs (pyray.font attribute)":[[5,"pyray.Font.recs",false]],"recs (raylib.font attribute)":[[6,"raylib.Font.recs",false]],"rectangle (class in pyray)":[[5,"pyray.Rectangle",false]],"rectangle (class in raylib)":[[6,"raylib.Rectangle",false]],"red (in module pyray)":[[5,"pyray.RED",false]],"red (in module raylib)":[[6,"raylib.RED",false]],"red (raylib.glfwgammaramp attribute)":[[6,"raylib.GLFWgammaramp.red",false]],"redbits (raylib.glfwvidmode attribute)":[[6,"raylib.GLFWvidmode.redBits",false]],"refreshrate (raylib.glfwvidmode attribute)":[[6,"raylib.GLFWvidmode.refreshRate",false]],"remap() (in module pyray)":[[5,"pyray.remap",false]],"remap() (in module raylib)":[[6,"raylib.Remap",false]],"rendertexture (class in pyray)":[[5,"pyray.RenderTexture",false]],"rendertexture (class in raylib)":[[6,"raylib.RenderTexture",false]],"rendertexture2d (class in raylib)":[[6,"raylib.RenderTexture2D",false]],"reset_physics() (in module pyray)":[[5,"pyray.reset_physics",false]],"resetphysics() (in module raylib)":[[6,"raylib.ResetPhysics",false]],"restitution (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.restitution",false]],"restitution (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.restitution",false]],"restitution (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.restitution",false]],"restitution (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.restitution",false]],"restore_window() (in module pyray)":[[5,"pyray.restore_window",false]],"restorewindow() (in module raylib)":[[6,"raylib.RestoreWindow",false]],"resume_audio_stream() (in module pyray)":[[5,"pyray.resume_audio_stream",false]],"resume_music_stream() (in module pyray)":[[5,"pyray.resume_music_stream",false]],"resume_sound() (in module pyray)":[[5,"pyray.resume_sound",false]],"resumeaudiostream() (in module raylib)":[[6,"raylib.ResumeAudioStream",false]],"resumemusicstream() (in module raylib)":[[6,"raylib.ResumeMusicStream",false]],"resumesound() (in module raylib)":[[6,"raylib.ResumeSound",false]],"right (pyray.npatchinfo attribute)":[[5,"pyray.NPatchInfo.right",false]],"right (raylib.npatchinfo attribute)":[[6,"raylib.NPatchInfo.right",false]],"rightlenscenter (pyray.vrstereoconfig attribute)":[[5,"pyray.VrStereoConfig.rightLensCenter",false]],"rightlenscenter (raylib.vrstereoconfig attribute)":[[6,"raylib.VrStereoConfig.rightLensCenter",false]],"rightscreencenter (pyray.vrstereoconfig attribute)":[[5,"pyray.VrStereoConfig.rightScreenCenter",false]],"rightscreencenter (raylib.vrstereoconfig attribute)":[[6,"raylib.VrStereoConfig.rightScreenCenter",false]],"rl (in module raylib)":[[6,"raylib.rl",false]],"rl_active_draw_buffers() (in module pyray)":[[5,"pyray.rl_active_draw_buffers",false]],"rl_active_texture_slot() (in module pyray)":[[5,"pyray.rl_active_texture_slot",false]],"rl_attachment_color_channel0 (in module raylib)":[[6,"raylib.RL_ATTACHMENT_COLOR_CHANNEL0",false]],"rl_attachment_color_channel0 (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_COLOR_CHANNEL0",false]],"rl_attachment_color_channel1 (in module raylib)":[[6,"raylib.RL_ATTACHMENT_COLOR_CHANNEL1",false]],"rl_attachment_color_channel1 (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_COLOR_CHANNEL1",false]],"rl_attachment_color_channel2 (in module raylib)":[[6,"raylib.RL_ATTACHMENT_COLOR_CHANNEL2",false]],"rl_attachment_color_channel2 (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_COLOR_CHANNEL2",false]],"rl_attachment_color_channel3 (in module raylib)":[[6,"raylib.RL_ATTACHMENT_COLOR_CHANNEL3",false]],"rl_attachment_color_channel3 (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_COLOR_CHANNEL3",false]],"rl_attachment_color_channel4 (in module raylib)":[[6,"raylib.RL_ATTACHMENT_COLOR_CHANNEL4",false]],"rl_attachment_color_channel4 (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_COLOR_CHANNEL4",false]],"rl_attachment_color_channel5 (in module raylib)":[[6,"raylib.RL_ATTACHMENT_COLOR_CHANNEL5",false]],"rl_attachment_color_channel5 (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_COLOR_CHANNEL5",false]],"rl_attachment_color_channel6 (in module raylib)":[[6,"raylib.RL_ATTACHMENT_COLOR_CHANNEL6",false]],"rl_attachment_color_channel6 (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_COLOR_CHANNEL6",false]],"rl_attachment_color_channel7 (in module raylib)":[[6,"raylib.RL_ATTACHMENT_COLOR_CHANNEL7",false]],"rl_attachment_color_channel7 (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_COLOR_CHANNEL7",false]],"rl_attachment_cubemap_negative_x (in module raylib)":[[6,"raylib.RL_ATTACHMENT_CUBEMAP_NEGATIVE_X",false]],"rl_attachment_cubemap_negative_x (pyray.rlframebufferattachtexturetype attribute)":[[5,"pyray.rlFramebufferAttachTextureType.RL_ATTACHMENT_CUBEMAP_NEGATIVE_X",false]],"rl_attachment_cubemap_negative_y (in module raylib)":[[6,"raylib.RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y",false]],"rl_attachment_cubemap_negative_y (pyray.rlframebufferattachtexturetype attribute)":[[5,"pyray.rlFramebufferAttachTextureType.RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y",false]],"rl_attachment_cubemap_negative_z (in module raylib)":[[6,"raylib.RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z",false]],"rl_attachment_cubemap_negative_z (pyray.rlframebufferattachtexturetype attribute)":[[5,"pyray.rlFramebufferAttachTextureType.RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z",false]],"rl_attachment_cubemap_positive_x (in module raylib)":[[6,"raylib.RL_ATTACHMENT_CUBEMAP_POSITIVE_X",false]],"rl_attachment_cubemap_positive_x (pyray.rlframebufferattachtexturetype attribute)":[[5,"pyray.rlFramebufferAttachTextureType.RL_ATTACHMENT_CUBEMAP_POSITIVE_X",false]],"rl_attachment_cubemap_positive_y (in module raylib)":[[6,"raylib.RL_ATTACHMENT_CUBEMAP_POSITIVE_Y",false]],"rl_attachment_cubemap_positive_y (pyray.rlframebufferattachtexturetype attribute)":[[5,"pyray.rlFramebufferAttachTextureType.RL_ATTACHMENT_CUBEMAP_POSITIVE_Y",false]],"rl_attachment_cubemap_positive_z (in module raylib)":[[6,"raylib.RL_ATTACHMENT_CUBEMAP_POSITIVE_Z",false]],"rl_attachment_cubemap_positive_z (pyray.rlframebufferattachtexturetype attribute)":[[5,"pyray.rlFramebufferAttachTextureType.RL_ATTACHMENT_CUBEMAP_POSITIVE_Z",false]],"rl_attachment_depth (in module raylib)":[[6,"raylib.RL_ATTACHMENT_DEPTH",false]],"rl_attachment_depth (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_DEPTH",false]],"rl_attachment_renderbuffer (in module raylib)":[[6,"raylib.RL_ATTACHMENT_RENDERBUFFER",false]],"rl_attachment_renderbuffer (pyray.rlframebufferattachtexturetype attribute)":[[5,"pyray.rlFramebufferAttachTextureType.RL_ATTACHMENT_RENDERBUFFER",false]],"rl_attachment_stencil (in module raylib)":[[6,"raylib.RL_ATTACHMENT_STENCIL",false]],"rl_attachment_stencil (pyray.rlframebufferattachtype attribute)":[[5,"pyray.rlFramebufferAttachType.RL_ATTACHMENT_STENCIL",false]],"rl_attachment_texture2d (in module raylib)":[[6,"raylib.RL_ATTACHMENT_TEXTURE2D",false]],"rl_attachment_texture2d (pyray.rlframebufferattachtexturetype attribute)":[[5,"pyray.rlFramebufferAttachTextureType.RL_ATTACHMENT_TEXTURE2D",false]],"rl_begin() (in module pyray)":[[5,"pyray.rl_begin",false]],"rl_bind_framebuffer() (in module pyray)":[[5,"pyray.rl_bind_framebuffer",false]],"rl_bind_image_texture() (in module pyray)":[[5,"pyray.rl_bind_image_texture",false]],"rl_bind_shader_buffer() (in module pyray)":[[5,"pyray.rl_bind_shader_buffer",false]],"rl_blend_add_colors (in module raylib)":[[6,"raylib.RL_BLEND_ADD_COLORS",false]],"rl_blend_add_colors (pyray.rlblendmode attribute)":[[5,"pyray.rlBlendMode.RL_BLEND_ADD_COLORS",false]],"rl_blend_additive (in module raylib)":[[6,"raylib.RL_BLEND_ADDITIVE",false]],"rl_blend_additive (pyray.rlblendmode attribute)":[[5,"pyray.rlBlendMode.RL_BLEND_ADDITIVE",false]],"rl_blend_alpha (in module raylib)":[[6,"raylib.RL_BLEND_ALPHA",false]],"rl_blend_alpha (pyray.rlblendmode attribute)":[[5,"pyray.rlBlendMode.RL_BLEND_ALPHA",false]],"rl_blend_alpha_premultiply (in module raylib)":[[6,"raylib.RL_BLEND_ALPHA_PREMULTIPLY",false]],"rl_blend_alpha_premultiply (pyray.rlblendmode attribute)":[[5,"pyray.rlBlendMode.RL_BLEND_ALPHA_PREMULTIPLY",false]],"rl_blend_custom (in module raylib)":[[6,"raylib.RL_BLEND_CUSTOM",false]],"rl_blend_custom (pyray.rlblendmode attribute)":[[5,"pyray.rlBlendMode.RL_BLEND_CUSTOM",false]],"rl_blend_custom_separate (in module raylib)":[[6,"raylib.RL_BLEND_CUSTOM_SEPARATE",false]],"rl_blend_custom_separate (pyray.rlblendmode attribute)":[[5,"pyray.rlBlendMode.RL_BLEND_CUSTOM_SEPARATE",false]],"rl_blend_multiplied (in module raylib)":[[6,"raylib.RL_BLEND_MULTIPLIED",false]],"rl_blend_multiplied (pyray.rlblendmode attribute)":[[5,"pyray.rlBlendMode.RL_BLEND_MULTIPLIED",false]],"rl_blend_subtract_colors (in module raylib)":[[6,"raylib.RL_BLEND_SUBTRACT_COLORS",false]],"rl_blend_subtract_colors (pyray.rlblendmode attribute)":[[5,"pyray.rlBlendMode.RL_BLEND_SUBTRACT_COLORS",false]],"rl_blit_framebuffer() (in module pyray)":[[5,"pyray.rl_blit_framebuffer",false]],"rl_check_errors() (in module pyray)":[[5,"pyray.rl_check_errors",false]],"rl_check_render_batch_limit() (in module pyray)":[[5,"pyray.rl_check_render_batch_limit",false]],"rl_clear_color() (in module pyray)":[[5,"pyray.rl_clear_color",false]],"rl_clear_screen_buffers() (in module pyray)":[[5,"pyray.rl_clear_screen_buffers",false]],"rl_color3f() (in module pyray)":[[5,"pyray.rl_color3f",false]],"rl_color4f() (in module pyray)":[[5,"pyray.rl_color4f",false]],"rl_color4ub() (in module pyray)":[[5,"pyray.rl_color4ub",false]],"rl_color_mask() (in module pyray)":[[5,"pyray.rl_color_mask",false]],"rl_compile_shader() (in module pyray)":[[5,"pyray.rl_compile_shader",false]],"rl_compute_shader_dispatch() (in module pyray)":[[5,"pyray.rl_compute_shader_dispatch",false]],"rl_copy_shader_buffer() (in module pyray)":[[5,"pyray.rl_copy_shader_buffer",false]],"rl_cubemap_parameters() (in module pyray)":[[5,"pyray.rl_cubemap_parameters",false]],"rl_cull_face_back (in module raylib)":[[6,"raylib.RL_CULL_FACE_BACK",false]],"rl_cull_face_back (pyray.rlcullmode attribute)":[[5,"pyray.rlCullMode.RL_CULL_FACE_BACK",false]],"rl_cull_face_front (in module raylib)":[[6,"raylib.RL_CULL_FACE_FRONT",false]],"rl_cull_face_front (pyray.rlcullmode attribute)":[[5,"pyray.rlCullMode.RL_CULL_FACE_FRONT",false]],"rl_disable_backface_culling() (in module pyray)":[[5,"pyray.rl_disable_backface_culling",false]],"rl_disable_color_blend() (in module pyray)":[[5,"pyray.rl_disable_color_blend",false]],"rl_disable_depth_mask() (in module pyray)":[[5,"pyray.rl_disable_depth_mask",false]],"rl_disable_depth_test() (in module pyray)":[[5,"pyray.rl_disable_depth_test",false]],"rl_disable_framebuffer() (in module pyray)":[[5,"pyray.rl_disable_framebuffer",false]],"rl_disable_scissor_test() (in module pyray)":[[5,"pyray.rl_disable_scissor_test",false]],"rl_disable_shader() (in module pyray)":[[5,"pyray.rl_disable_shader",false]],"rl_disable_smooth_lines() (in module pyray)":[[5,"pyray.rl_disable_smooth_lines",false]],"rl_disable_stereo_render() (in module pyray)":[[5,"pyray.rl_disable_stereo_render",false]],"rl_disable_texture() (in module pyray)":[[5,"pyray.rl_disable_texture",false]],"rl_disable_texture_cubemap() (in module pyray)":[[5,"pyray.rl_disable_texture_cubemap",false]],"rl_disable_vertex_array() (in module pyray)":[[5,"pyray.rl_disable_vertex_array",false]],"rl_disable_vertex_attribute() (in module pyray)":[[5,"pyray.rl_disable_vertex_attribute",false]],"rl_disable_vertex_buffer() (in module pyray)":[[5,"pyray.rl_disable_vertex_buffer",false]],"rl_disable_vertex_buffer_element() (in module pyray)":[[5,"pyray.rl_disable_vertex_buffer_element",false]],"rl_disable_wire_mode() (in module pyray)":[[5,"pyray.rl_disable_wire_mode",false]],"rl_draw_render_batch() (in module pyray)":[[5,"pyray.rl_draw_render_batch",false]],"rl_draw_render_batch_active() (in module pyray)":[[5,"pyray.rl_draw_render_batch_active",false]],"rl_draw_vertex_array() (in module pyray)":[[5,"pyray.rl_draw_vertex_array",false]],"rl_draw_vertex_array_elements() (in module pyray)":[[5,"pyray.rl_draw_vertex_array_elements",false]],"rl_draw_vertex_array_elements_instanced() (in module pyray)":[[5,"pyray.rl_draw_vertex_array_elements_instanced",false]],"rl_draw_vertex_array_instanced() (in module pyray)":[[5,"pyray.rl_draw_vertex_array_instanced",false]],"rl_enable_backface_culling() (in module pyray)":[[5,"pyray.rl_enable_backface_culling",false]],"rl_enable_color_blend() (in module pyray)":[[5,"pyray.rl_enable_color_blend",false]],"rl_enable_depth_mask() (in module pyray)":[[5,"pyray.rl_enable_depth_mask",false]],"rl_enable_depth_test() (in module pyray)":[[5,"pyray.rl_enable_depth_test",false]],"rl_enable_framebuffer() (in module pyray)":[[5,"pyray.rl_enable_framebuffer",false]],"rl_enable_point_mode() (in module pyray)":[[5,"pyray.rl_enable_point_mode",false]],"rl_enable_scissor_test() (in module pyray)":[[5,"pyray.rl_enable_scissor_test",false]],"rl_enable_shader() (in module pyray)":[[5,"pyray.rl_enable_shader",false]],"rl_enable_smooth_lines() (in module pyray)":[[5,"pyray.rl_enable_smooth_lines",false]],"rl_enable_stereo_render() (in module pyray)":[[5,"pyray.rl_enable_stereo_render",false]],"rl_enable_texture() (in module pyray)":[[5,"pyray.rl_enable_texture",false]],"rl_enable_texture_cubemap() (in module pyray)":[[5,"pyray.rl_enable_texture_cubemap",false]],"rl_enable_vertex_array() (in module pyray)":[[5,"pyray.rl_enable_vertex_array",false]],"rl_enable_vertex_attribute() (in module pyray)":[[5,"pyray.rl_enable_vertex_attribute",false]],"rl_enable_vertex_buffer() (in module pyray)":[[5,"pyray.rl_enable_vertex_buffer",false]],"rl_enable_vertex_buffer_element() (in module pyray)":[[5,"pyray.rl_enable_vertex_buffer_element",false]],"rl_enable_wire_mode() (in module pyray)":[[5,"pyray.rl_enable_wire_mode",false]],"rl_end() (in module pyray)":[[5,"pyray.rl_end",false]],"rl_framebuffer_attach() (in module pyray)":[[5,"pyray.rl_framebuffer_attach",false]],"rl_framebuffer_complete() (in module pyray)":[[5,"pyray.rl_framebuffer_complete",false]],"rl_frustum() (in module pyray)":[[5,"pyray.rl_frustum",false]],"rl_gen_texture_mipmaps() (in module pyray)":[[5,"pyray.rl_gen_texture_mipmaps",false]],"rl_get_active_framebuffer() (in module pyray)":[[5,"pyray.rl_get_active_framebuffer",false]],"rl_get_cull_distance_far() (in module pyray)":[[5,"pyray.rl_get_cull_distance_far",false]],"rl_get_cull_distance_near() (in module pyray)":[[5,"pyray.rl_get_cull_distance_near",false]],"rl_get_framebuffer_height() (in module pyray)":[[5,"pyray.rl_get_framebuffer_height",false]],"rl_get_framebuffer_width() (in module pyray)":[[5,"pyray.rl_get_framebuffer_width",false]],"rl_get_gl_texture_formats() (in module pyray)":[[5,"pyray.rl_get_gl_texture_formats",false]],"rl_get_line_width() (in module pyray)":[[5,"pyray.rl_get_line_width",false]],"rl_get_location_attrib() (in module pyray)":[[5,"pyray.rl_get_location_attrib",false]],"rl_get_location_uniform() (in module pyray)":[[5,"pyray.rl_get_location_uniform",false]],"rl_get_matrix_modelview() (in module pyray)":[[5,"pyray.rl_get_matrix_modelview",false]],"rl_get_matrix_projection() (in module pyray)":[[5,"pyray.rl_get_matrix_projection",false]],"rl_get_matrix_projection_stereo() (in module pyray)":[[5,"pyray.rl_get_matrix_projection_stereo",false]],"rl_get_matrix_transform() (in module pyray)":[[5,"pyray.rl_get_matrix_transform",false]],"rl_get_matrix_view_offset_stereo() (in module pyray)":[[5,"pyray.rl_get_matrix_view_offset_stereo",false]],"rl_get_pixel_format_name() (in module pyray)":[[5,"pyray.rl_get_pixel_format_name",false]],"rl_get_shader_buffer_size() (in module pyray)":[[5,"pyray.rl_get_shader_buffer_size",false]],"rl_get_shader_id_default() (in module pyray)":[[5,"pyray.rl_get_shader_id_default",false]],"rl_get_shader_locs_default() (in module pyray)":[[5,"pyray.rl_get_shader_locs_default",false]],"rl_get_texture_id_default() (in module pyray)":[[5,"pyray.rl_get_texture_id_default",false]],"rl_get_version() (in module pyray)":[[5,"pyray.rl_get_version",false]],"rl_is_stereo_render_enabled() (in module pyray)":[[5,"pyray.rl_is_stereo_render_enabled",false]],"rl_load_compute_shader_program() (in module pyray)":[[5,"pyray.rl_load_compute_shader_program",false]],"rl_load_draw_cube() (in module pyray)":[[5,"pyray.rl_load_draw_cube",false]],"rl_load_draw_quad() (in module pyray)":[[5,"pyray.rl_load_draw_quad",false]],"rl_load_extensions() (in module pyray)":[[5,"pyray.rl_load_extensions",false]],"rl_load_framebuffer() (in module pyray)":[[5,"pyray.rl_load_framebuffer",false]],"rl_load_identity() (in module pyray)":[[5,"pyray.rl_load_identity",false]],"rl_load_render_batch() (in module pyray)":[[5,"pyray.rl_load_render_batch",false]],"rl_load_shader_buffer() (in module pyray)":[[5,"pyray.rl_load_shader_buffer",false]],"rl_load_shader_code() (in module pyray)":[[5,"pyray.rl_load_shader_code",false]],"rl_load_shader_program() (in module pyray)":[[5,"pyray.rl_load_shader_program",false]],"rl_load_texture() (in module pyray)":[[5,"pyray.rl_load_texture",false]],"rl_load_texture_cubemap() (in module pyray)":[[5,"pyray.rl_load_texture_cubemap",false]],"rl_load_texture_depth() (in module pyray)":[[5,"pyray.rl_load_texture_depth",false]],"rl_load_vertex_array() (in module pyray)":[[5,"pyray.rl_load_vertex_array",false]],"rl_load_vertex_buffer() (in module pyray)":[[5,"pyray.rl_load_vertex_buffer",false]],"rl_load_vertex_buffer_element() (in module pyray)":[[5,"pyray.rl_load_vertex_buffer_element",false]],"rl_log_all (in module raylib)":[[6,"raylib.RL_LOG_ALL",false]],"rl_log_all (pyray.rltraceloglevel attribute)":[[5,"pyray.rlTraceLogLevel.RL_LOG_ALL",false]],"rl_log_debug (in module raylib)":[[6,"raylib.RL_LOG_DEBUG",false]],"rl_log_debug (pyray.rltraceloglevel attribute)":[[5,"pyray.rlTraceLogLevel.RL_LOG_DEBUG",false]],"rl_log_error (in module raylib)":[[6,"raylib.RL_LOG_ERROR",false]],"rl_log_error (pyray.rltraceloglevel attribute)":[[5,"pyray.rlTraceLogLevel.RL_LOG_ERROR",false]],"rl_log_fatal (in module raylib)":[[6,"raylib.RL_LOG_FATAL",false]],"rl_log_fatal (pyray.rltraceloglevel attribute)":[[5,"pyray.rlTraceLogLevel.RL_LOG_FATAL",false]],"rl_log_info (in module raylib)":[[6,"raylib.RL_LOG_INFO",false]],"rl_log_info (pyray.rltraceloglevel attribute)":[[5,"pyray.rlTraceLogLevel.RL_LOG_INFO",false]],"rl_log_none (in module raylib)":[[6,"raylib.RL_LOG_NONE",false]],"rl_log_none (pyray.rltraceloglevel attribute)":[[5,"pyray.rlTraceLogLevel.RL_LOG_NONE",false]],"rl_log_trace (in module raylib)":[[6,"raylib.RL_LOG_TRACE",false]],"rl_log_trace (pyray.rltraceloglevel attribute)":[[5,"pyray.rlTraceLogLevel.RL_LOG_TRACE",false]],"rl_log_warning (in module raylib)":[[6,"raylib.RL_LOG_WARNING",false]],"rl_log_warning (pyray.rltraceloglevel attribute)":[[5,"pyray.rlTraceLogLevel.RL_LOG_WARNING",false]],"rl_matrix_mode() (in module pyray)":[[5,"pyray.rl_matrix_mode",false]],"rl_mult_matrixf() (in module pyray)":[[5,"pyray.rl_mult_matrixf",false]],"rl_normal3f() (in module pyray)":[[5,"pyray.rl_normal3f",false]],"rl_opengl_11 (in module raylib)":[[6,"raylib.RL_OPENGL_11",false]],"rl_opengl_11 (pyray.rlglversion attribute)":[[5,"pyray.rlGlVersion.RL_OPENGL_11",false]],"rl_opengl_21 (in module raylib)":[[6,"raylib.RL_OPENGL_21",false]],"rl_opengl_21 (pyray.rlglversion attribute)":[[5,"pyray.rlGlVersion.RL_OPENGL_21",false]],"rl_opengl_33 (in module raylib)":[[6,"raylib.RL_OPENGL_33",false]],"rl_opengl_33 (pyray.rlglversion attribute)":[[5,"pyray.rlGlVersion.RL_OPENGL_33",false]],"rl_opengl_43 (in module raylib)":[[6,"raylib.RL_OPENGL_43",false]],"rl_opengl_43 (pyray.rlglversion attribute)":[[5,"pyray.rlGlVersion.RL_OPENGL_43",false]],"rl_opengl_es_20 (in module raylib)":[[6,"raylib.RL_OPENGL_ES_20",false]],"rl_opengl_es_20 (pyray.rlglversion attribute)":[[5,"pyray.rlGlVersion.RL_OPENGL_ES_20",false]],"rl_opengl_es_30 (in module raylib)":[[6,"raylib.RL_OPENGL_ES_30",false]],"rl_opengl_es_30 (pyray.rlglversion attribute)":[[5,"pyray.rlGlVersion.RL_OPENGL_ES_30",false]],"rl_ortho() (in module pyray)":[[5,"pyray.rl_ortho",false]],"rl_pixelformat_compressed_astc_4x4_rgba (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA",false]],"rl_pixelformat_compressed_astc_4x4_rgba (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA",false]],"rl_pixelformat_compressed_astc_8x8_rgba (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA",false]],"rl_pixelformat_compressed_astc_8x8_rgba (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA",false]],"rl_pixelformat_compressed_dxt1_rgb (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_DXT1_RGB",false]],"rl_pixelformat_compressed_dxt1_rgb (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_DXT1_RGB",false]],"rl_pixelformat_compressed_dxt1_rgba (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA",false]],"rl_pixelformat_compressed_dxt1_rgba (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA",false]],"rl_pixelformat_compressed_dxt3_rgba (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA",false]],"rl_pixelformat_compressed_dxt3_rgba (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA",false]],"rl_pixelformat_compressed_dxt5_rgba (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA",false]],"rl_pixelformat_compressed_dxt5_rgba (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA",false]],"rl_pixelformat_compressed_etc1_rgb (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_ETC1_RGB",false]],"rl_pixelformat_compressed_etc1_rgb (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_ETC1_RGB",false]],"rl_pixelformat_compressed_etc2_eac_rgba (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA",false]],"rl_pixelformat_compressed_etc2_eac_rgba (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA",false]],"rl_pixelformat_compressed_etc2_rgb (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_ETC2_RGB",false]],"rl_pixelformat_compressed_etc2_rgb (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_ETC2_RGB",false]],"rl_pixelformat_compressed_pvrt_rgb (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_PVRT_RGB",false]],"rl_pixelformat_compressed_pvrt_rgb (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_PVRT_RGB",false]],"rl_pixelformat_compressed_pvrt_rgba (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA",false]],"rl_pixelformat_compressed_pvrt_rgba (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA",false]],"rl_pixelformat_uncompressed_gray_alpha (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA",false]],"rl_pixelformat_uncompressed_gray_alpha (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA",false]],"rl_pixelformat_uncompressed_grayscale (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE",false]],"rl_pixelformat_uncompressed_grayscale (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE",false]],"rl_pixelformat_uncompressed_r16 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R16",false]],"rl_pixelformat_uncompressed_r16 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R16",false]],"rl_pixelformat_uncompressed_r16g16b16 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16",false]],"rl_pixelformat_uncompressed_r16g16b16 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16",false]],"rl_pixelformat_uncompressed_r16g16b16a16 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16",false]],"rl_pixelformat_uncompressed_r16g16b16a16 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16",false]],"rl_pixelformat_uncompressed_r32 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R32",false]],"rl_pixelformat_uncompressed_r32 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R32",false]],"rl_pixelformat_uncompressed_r32g32b32 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32",false]],"rl_pixelformat_uncompressed_r32g32b32 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32",false]],"rl_pixelformat_uncompressed_r32g32b32a32 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32",false]],"rl_pixelformat_uncompressed_r32g32b32a32 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32",false]],"rl_pixelformat_uncompressed_r4g4b4a4 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4",false]],"rl_pixelformat_uncompressed_r4g4b4a4 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4",false]],"rl_pixelformat_uncompressed_r5g5b5a1 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1",false]],"rl_pixelformat_uncompressed_r5g5b5a1 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1",false]],"rl_pixelformat_uncompressed_r5g6b5 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5",false]],"rl_pixelformat_uncompressed_r5g6b5 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5",false]],"rl_pixelformat_uncompressed_r8g8b8 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8",false]],"rl_pixelformat_uncompressed_r8g8b8 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8",false]],"rl_pixelformat_uncompressed_r8g8b8a8 (in module raylib)":[[6,"raylib.RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8",false]],"rl_pixelformat_uncompressed_r8g8b8a8 (pyray.rlpixelformat attribute)":[[5,"pyray.rlPixelFormat.RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8",false]],"rl_pop_matrix() (in module pyray)":[[5,"pyray.rl_pop_matrix",false]],"rl_push_matrix() (in module pyray)":[[5,"pyray.rl_push_matrix",false]],"rl_read_screen_pixels() (in module pyray)":[[5,"pyray.rl_read_screen_pixels",false]],"rl_read_shader_buffer() (in module pyray)":[[5,"pyray.rl_read_shader_buffer",false]],"rl_read_texture_pixels() (in module pyray)":[[5,"pyray.rl_read_texture_pixels",false]],"rl_rotatef() (in module pyray)":[[5,"pyray.rl_rotatef",false]],"rl_scalef() (in module pyray)":[[5,"pyray.rl_scalef",false]],"rl_scissor() (in module pyray)":[[5,"pyray.rl_scissor",false]],"rl_set_blend_factors() (in module pyray)":[[5,"pyray.rl_set_blend_factors",false]],"rl_set_blend_factors_separate() (in module pyray)":[[5,"pyray.rl_set_blend_factors_separate",false]],"rl_set_blend_mode() (in module pyray)":[[5,"pyray.rl_set_blend_mode",false]],"rl_set_clip_planes() (in module pyray)":[[5,"pyray.rl_set_clip_planes",false]],"rl_set_cull_face() (in module pyray)":[[5,"pyray.rl_set_cull_face",false]],"rl_set_framebuffer_height() (in module pyray)":[[5,"pyray.rl_set_framebuffer_height",false]],"rl_set_framebuffer_width() (in module pyray)":[[5,"pyray.rl_set_framebuffer_width",false]],"rl_set_line_width() (in module pyray)":[[5,"pyray.rl_set_line_width",false]],"rl_set_matrix_modelview() (in module pyray)":[[5,"pyray.rl_set_matrix_modelview",false]],"rl_set_matrix_projection() (in module pyray)":[[5,"pyray.rl_set_matrix_projection",false]],"rl_set_matrix_projection_stereo() (in module pyray)":[[5,"pyray.rl_set_matrix_projection_stereo",false]],"rl_set_matrix_view_offset_stereo() (in module pyray)":[[5,"pyray.rl_set_matrix_view_offset_stereo",false]],"rl_set_render_batch_active() (in module pyray)":[[5,"pyray.rl_set_render_batch_active",false]],"rl_set_shader() (in module pyray)":[[5,"pyray.rl_set_shader",false]],"rl_set_texture() (in module pyray)":[[5,"pyray.rl_set_texture",false]],"rl_set_uniform() (in module pyray)":[[5,"pyray.rl_set_uniform",false]],"rl_set_uniform_matrices() (in module pyray)":[[5,"pyray.rl_set_uniform_matrices",false]],"rl_set_uniform_matrix() (in module pyray)":[[5,"pyray.rl_set_uniform_matrix",false]],"rl_set_uniform_sampler() (in module pyray)":[[5,"pyray.rl_set_uniform_sampler",false]],"rl_set_vertex_attribute() (in module pyray)":[[5,"pyray.rl_set_vertex_attribute",false]],"rl_set_vertex_attribute_default() (in module pyray)":[[5,"pyray.rl_set_vertex_attribute_default",false]],"rl_set_vertex_attribute_divisor() (in module pyray)":[[5,"pyray.rl_set_vertex_attribute_divisor",false]],"rl_shader_attrib_float (in module raylib)":[[6,"raylib.RL_SHADER_ATTRIB_FLOAT",false]],"rl_shader_attrib_float (pyray.rlshaderattributedatatype attribute)":[[5,"pyray.rlShaderAttributeDataType.RL_SHADER_ATTRIB_FLOAT",false]],"rl_shader_attrib_vec2 (in module raylib)":[[6,"raylib.RL_SHADER_ATTRIB_VEC2",false]],"rl_shader_attrib_vec2 (pyray.rlshaderattributedatatype attribute)":[[5,"pyray.rlShaderAttributeDataType.RL_SHADER_ATTRIB_VEC2",false]],"rl_shader_attrib_vec3 (in module raylib)":[[6,"raylib.RL_SHADER_ATTRIB_VEC3",false]],"rl_shader_attrib_vec3 (pyray.rlshaderattributedatatype attribute)":[[5,"pyray.rlShaderAttributeDataType.RL_SHADER_ATTRIB_VEC3",false]],"rl_shader_attrib_vec4 (in module raylib)":[[6,"raylib.RL_SHADER_ATTRIB_VEC4",false]],"rl_shader_attrib_vec4 (pyray.rlshaderattributedatatype attribute)":[[5,"pyray.rlShaderAttributeDataType.RL_SHADER_ATTRIB_VEC4",false]],"rl_shader_loc_color_ambient (in module raylib)":[[6,"raylib.RL_SHADER_LOC_COLOR_AMBIENT",false]],"rl_shader_loc_color_ambient (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_COLOR_AMBIENT",false]],"rl_shader_loc_color_diffuse (in module raylib)":[[6,"raylib.RL_SHADER_LOC_COLOR_DIFFUSE",false]],"rl_shader_loc_color_diffuse (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_COLOR_DIFFUSE",false]],"rl_shader_loc_color_specular (in module raylib)":[[6,"raylib.RL_SHADER_LOC_COLOR_SPECULAR",false]],"rl_shader_loc_color_specular (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_COLOR_SPECULAR",false]],"rl_shader_loc_map_albedo (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_ALBEDO",false]],"rl_shader_loc_map_albedo (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_ALBEDO",false]],"rl_shader_loc_map_brdf (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_BRDF",false]],"rl_shader_loc_map_brdf (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_BRDF",false]],"rl_shader_loc_map_cubemap (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_CUBEMAP",false]],"rl_shader_loc_map_cubemap (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_CUBEMAP",false]],"rl_shader_loc_map_emission (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_EMISSION",false]],"rl_shader_loc_map_emission (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_EMISSION",false]],"rl_shader_loc_map_height (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_HEIGHT",false]],"rl_shader_loc_map_height (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_HEIGHT",false]],"rl_shader_loc_map_irradiance (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_IRRADIANCE",false]],"rl_shader_loc_map_irradiance (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_IRRADIANCE",false]],"rl_shader_loc_map_metalness (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_METALNESS",false]],"rl_shader_loc_map_metalness (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_METALNESS",false]],"rl_shader_loc_map_normal (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_NORMAL",false]],"rl_shader_loc_map_normal (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_NORMAL",false]],"rl_shader_loc_map_occlusion (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_OCCLUSION",false]],"rl_shader_loc_map_occlusion (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_OCCLUSION",false]],"rl_shader_loc_map_prefilter (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_PREFILTER",false]],"rl_shader_loc_map_prefilter (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_PREFILTER",false]],"rl_shader_loc_map_roughness (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MAP_ROUGHNESS",false]],"rl_shader_loc_map_roughness (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MAP_ROUGHNESS",false]],"rl_shader_loc_matrix_model (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MATRIX_MODEL",false]],"rl_shader_loc_matrix_model (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MATRIX_MODEL",false]],"rl_shader_loc_matrix_mvp (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MATRIX_MVP",false]],"rl_shader_loc_matrix_mvp (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MATRIX_MVP",false]],"rl_shader_loc_matrix_normal (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MATRIX_NORMAL",false]],"rl_shader_loc_matrix_normal (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MATRIX_NORMAL",false]],"rl_shader_loc_matrix_projection (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MATRIX_PROJECTION",false]],"rl_shader_loc_matrix_projection (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MATRIX_PROJECTION",false]],"rl_shader_loc_matrix_view (in module raylib)":[[6,"raylib.RL_SHADER_LOC_MATRIX_VIEW",false]],"rl_shader_loc_matrix_view (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_MATRIX_VIEW",false]],"rl_shader_loc_vector_view (in module raylib)":[[6,"raylib.RL_SHADER_LOC_VECTOR_VIEW",false]],"rl_shader_loc_vector_view (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_VECTOR_VIEW",false]],"rl_shader_loc_vertex_color (in module raylib)":[[6,"raylib.RL_SHADER_LOC_VERTEX_COLOR",false]],"rl_shader_loc_vertex_color (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_VERTEX_COLOR",false]],"rl_shader_loc_vertex_normal (in module raylib)":[[6,"raylib.RL_SHADER_LOC_VERTEX_NORMAL",false]],"rl_shader_loc_vertex_normal (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_VERTEX_NORMAL",false]],"rl_shader_loc_vertex_position (in module raylib)":[[6,"raylib.RL_SHADER_LOC_VERTEX_POSITION",false]],"rl_shader_loc_vertex_position (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_VERTEX_POSITION",false]],"rl_shader_loc_vertex_tangent (in module raylib)":[[6,"raylib.RL_SHADER_LOC_VERTEX_TANGENT",false]],"rl_shader_loc_vertex_tangent (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_VERTEX_TANGENT",false]],"rl_shader_loc_vertex_texcoord01 (in module raylib)":[[6,"raylib.RL_SHADER_LOC_VERTEX_TEXCOORD01",false]],"rl_shader_loc_vertex_texcoord01 (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_VERTEX_TEXCOORD01",false]],"rl_shader_loc_vertex_texcoord02 (in module raylib)":[[6,"raylib.RL_SHADER_LOC_VERTEX_TEXCOORD02",false]],"rl_shader_loc_vertex_texcoord02 (pyray.rlshaderlocationindex attribute)":[[5,"pyray.rlShaderLocationIndex.RL_SHADER_LOC_VERTEX_TEXCOORD02",false]],"rl_shader_uniform_float (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_FLOAT",false]],"rl_shader_uniform_float (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_FLOAT",false]],"rl_shader_uniform_int (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_INT",false]],"rl_shader_uniform_int (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_INT",false]],"rl_shader_uniform_ivec2 (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_IVEC2",false]],"rl_shader_uniform_ivec2 (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_IVEC2",false]],"rl_shader_uniform_ivec3 (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_IVEC3",false]],"rl_shader_uniform_ivec3 (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_IVEC3",false]],"rl_shader_uniform_ivec4 (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_IVEC4",false]],"rl_shader_uniform_ivec4 (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_IVEC4",false]],"rl_shader_uniform_sampler2d (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_SAMPLER2D",false]],"rl_shader_uniform_sampler2d (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_SAMPLER2D",false]],"rl_shader_uniform_uint (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_UINT",false]],"rl_shader_uniform_uint (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_UINT",false]],"rl_shader_uniform_uivec2 (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_UIVEC2",false]],"rl_shader_uniform_uivec2 (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_UIVEC2",false]],"rl_shader_uniform_uivec3 (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_UIVEC3",false]],"rl_shader_uniform_uivec3 (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_UIVEC3",false]],"rl_shader_uniform_uivec4 (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_UIVEC4",false]],"rl_shader_uniform_uivec4 (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_UIVEC4",false]],"rl_shader_uniform_vec2 (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_VEC2",false]],"rl_shader_uniform_vec2 (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_VEC2",false]],"rl_shader_uniform_vec3 (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_VEC3",false]],"rl_shader_uniform_vec3 (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_VEC3",false]],"rl_shader_uniform_vec4 (in module raylib)":[[6,"raylib.RL_SHADER_UNIFORM_VEC4",false]],"rl_shader_uniform_vec4 (pyray.rlshaderuniformdatatype attribute)":[[5,"pyray.rlShaderUniformDataType.RL_SHADER_UNIFORM_VEC4",false]],"rl_tex_coord2f() (in module pyray)":[[5,"pyray.rl_tex_coord2f",false]],"rl_texture_filter_anisotropic_16x (in module raylib)":[[6,"raylib.RL_TEXTURE_FILTER_ANISOTROPIC_16X",false]],"rl_texture_filter_anisotropic_16x (pyray.rltexturefilter attribute)":[[5,"pyray.rlTextureFilter.RL_TEXTURE_FILTER_ANISOTROPIC_16X",false]],"rl_texture_filter_anisotropic_4x (in module raylib)":[[6,"raylib.RL_TEXTURE_FILTER_ANISOTROPIC_4X",false]],"rl_texture_filter_anisotropic_4x (pyray.rltexturefilter attribute)":[[5,"pyray.rlTextureFilter.RL_TEXTURE_FILTER_ANISOTROPIC_4X",false]],"rl_texture_filter_anisotropic_8x (in module raylib)":[[6,"raylib.RL_TEXTURE_FILTER_ANISOTROPIC_8X",false]],"rl_texture_filter_anisotropic_8x (pyray.rltexturefilter attribute)":[[5,"pyray.rlTextureFilter.RL_TEXTURE_FILTER_ANISOTROPIC_8X",false]],"rl_texture_filter_bilinear (in module raylib)":[[6,"raylib.RL_TEXTURE_FILTER_BILINEAR",false]],"rl_texture_filter_bilinear (pyray.rltexturefilter attribute)":[[5,"pyray.rlTextureFilter.RL_TEXTURE_FILTER_BILINEAR",false]],"rl_texture_filter_point (in module raylib)":[[6,"raylib.RL_TEXTURE_FILTER_POINT",false]],"rl_texture_filter_point (pyray.rltexturefilter attribute)":[[5,"pyray.rlTextureFilter.RL_TEXTURE_FILTER_POINT",false]],"rl_texture_filter_trilinear (in module raylib)":[[6,"raylib.RL_TEXTURE_FILTER_TRILINEAR",false]],"rl_texture_filter_trilinear (pyray.rltexturefilter attribute)":[[5,"pyray.rlTextureFilter.RL_TEXTURE_FILTER_TRILINEAR",false]],"rl_texture_parameters() (in module pyray)":[[5,"pyray.rl_texture_parameters",false]],"rl_translatef() (in module pyray)":[[5,"pyray.rl_translatef",false]],"rl_unload_framebuffer() (in module pyray)":[[5,"pyray.rl_unload_framebuffer",false]],"rl_unload_render_batch() (in module pyray)":[[5,"pyray.rl_unload_render_batch",false]],"rl_unload_shader_buffer() (in module pyray)":[[5,"pyray.rl_unload_shader_buffer",false]],"rl_unload_shader_program() (in module pyray)":[[5,"pyray.rl_unload_shader_program",false]],"rl_unload_texture() (in module pyray)":[[5,"pyray.rl_unload_texture",false]],"rl_unload_vertex_array() (in module pyray)":[[5,"pyray.rl_unload_vertex_array",false]],"rl_unload_vertex_buffer() (in module pyray)":[[5,"pyray.rl_unload_vertex_buffer",false]],"rl_update_shader_buffer() (in module pyray)":[[5,"pyray.rl_update_shader_buffer",false]],"rl_update_texture() (in module pyray)":[[5,"pyray.rl_update_texture",false]],"rl_update_vertex_buffer() (in module pyray)":[[5,"pyray.rl_update_vertex_buffer",false]],"rl_update_vertex_buffer_elements() (in module pyray)":[[5,"pyray.rl_update_vertex_buffer_elements",false]],"rl_vertex2f() (in module pyray)":[[5,"pyray.rl_vertex2f",false]],"rl_vertex2i() (in module pyray)":[[5,"pyray.rl_vertex2i",false]],"rl_vertex3f() (in module pyray)":[[5,"pyray.rl_vertex3f",false]],"rl_viewport() (in module pyray)":[[5,"pyray.rl_viewport",false]],"rlactivedrawbuffers() (in module raylib)":[[6,"raylib.rlActiveDrawBuffers",false]],"rlactivetextureslot() (in module raylib)":[[6,"raylib.rlActiveTextureSlot",false]],"rlbegin() (in module raylib)":[[6,"raylib.rlBegin",false]],"rlbindframebuffer() (in module raylib)":[[6,"raylib.rlBindFramebuffer",false]],"rlbindimagetexture() (in module raylib)":[[6,"raylib.rlBindImageTexture",false]],"rlbindshaderbuffer() (in module raylib)":[[6,"raylib.rlBindShaderBuffer",false]],"rlblendmode (class in pyray)":[[5,"pyray.rlBlendMode",false]],"rlblendmode (in module raylib)":[[6,"raylib.rlBlendMode",false]],"rlblitframebuffer() (in module raylib)":[[6,"raylib.rlBlitFramebuffer",false]],"rlcheckerrors() (in module raylib)":[[6,"raylib.rlCheckErrors",false]],"rlcheckrenderbatchlimit() (in module raylib)":[[6,"raylib.rlCheckRenderBatchLimit",false]],"rlclearcolor() (in module raylib)":[[6,"raylib.rlClearColor",false]],"rlclearscreenbuffers() (in module raylib)":[[6,"raylib.rlClearScreenBuffers",false]],"rlcolor3f() (in module raylib)":[[6,"raylib.rlColor3f",false]],"rlcolor4f() (in module raylib)":[[6,"raylib.rlColor4f",false]],"rlcolor4ub() (in module raylib)":[[6,"raylib.rlColor4ub",false]],"rlcolormask() (in module raylib)":[[6,"raylib.rlColorMask",false]],"rlcompileshader() (in module raylib)":[[6,"raylib.rlCompileShader",false]],"rlcomputeshaderdispatch() (in module raylib)":[[6,"raylib.rlComputeShaderDispatch",false]],"rlcopyshaderbuffer() (in module raylib)":[[6,"raylib.rlCopyShaderBuffer",false]],"rlcubemapparameters() (in module raylib)":[[6,"raylib.rlCubemapParameters",false]],"rlcullmode (class in pyray)":[[5,"pyray.rlCullMode",false]],"rlcullmode (in module raylib)":[[6,"raylib.rlCullMode",false]],"rldisablebackfaceculling() (in module raylib)":[[6,"raylib.rlDisableBackfaceCulling",false]],"rldisablecolorblend() (in module raylib)":[[6,"raylib.rlDisableColorBlend",false]],"rldisabledepthmask() (in module raylib)":[[6,"raylib.rlDisableDepthMask",false]],"rldisabledepthtest() (in module raylib)":[[6,"raylib.rlDisableDepthTest",false]],"rldisableframebuffer() (in module raylib)":[[6,"raylib.rlDisableFramebuffer",false]],"rldisablescissortest() (in module raylib)":[[6,"raylib.rlDisableScissorTest",false]],"rldisableshader() (in module raylib)":[[6,"raylib.rlDisableShader",false]],"rldisablesmoothlines() (in module raylib)":[[6,"raylib.rlDisableSmoothLines",false]],"rldisablestereorender() (in module raylib)":[[6,"raylib.rlDisableStereoRender",false]],"rldisabletexture() (in module raylib)":[[6,"raylib.rlDisableTexture",false]],"rldisabletexturecubemap() (in module raylib)":[[6,"raylib.rlDisableTextureCubemap",false]],"rldisablevertexarray() (in module raylib)":[[6,"raylib.rlDisableVertexArray",false]],"rldisablevertexattribute() (in module raylib)":[[6,"raylib.rlDisableVertexAttribute",false]],"rldisablevertexbuffer() (in module raylib)":[[6,"raylib.rlDisableVertexBuffer",false]],"rldisablevertexbufferelement() (in module raylib)":[[6,"raylib.rlDisableVertexBufferElement",false]],"rldisablewiremode() (in module raylib)":[[6,"raylib.rlDisableWireMode",false]],"rldrawcall (class in pyray)":[[5,"pyray.rlDrawCall",false]],"rldrawcall (class in raylib)":[[6,"raylib.rlDrawCall",false]],"rldrawrenderbatch() (in module raylib)":[[6,"raylib.rlDrawRenderBatch",false]],"rldrawrenderbatchactive() (in module raylib)":[[6,"raylib.rlDrawRenderBatchActive",false]],"rldrawvertexarray() (in module raylib)":[[6,"raylib.rlDrawVertexArray",false]],"rldrawvertexarrayelements() (in module raylib)":[[6,"raylib.rlDrawVertexArrayElements",false]],"rldrawvertexarrayelementsinstanced() (in module raylib)":[[6,"raylib.rlDrawVertexArrayElementsInstanced",false]],"rldrawvertexarrayinstanced() (in module raylib)":[[6,"raylib.rlDrawVertexArrayInstanced",false]],"rlenablebackfaceculling() (in module raylib)":[[6,"raylib.rlEnableBackfaceCulling",false]],"rlenablecolorblend() (in module raylib)":[[6,"raylib.rlEnableColorBlend",false]],"rlenabledepthmask() (in module raylib)":[[6,"raylib.rlEnableDepthMask",false]],"rlenabledepthtest() (in module raylib)":[[6,"raylib.rlEnableDepthTest",false]],"rlenableframebuffer() (in module raylib)":[[6,"raylib.rlEnableFramebuffer",false]],"rlenablepointmode() (in module raylib)":[[6,"raylib.rlEnablePointMode",false]],"rlenablescissortest() (in module raylib)":[[6,"raylib.rlEnableScissorTest",false]],"rlenableshader() (in module raylib)":[[6,"raylib.rlEnableShader",false]],"rlenablesmoothlines() (in module raylib)":[[6,"raylib.rlEnableSmoothLines",false]],"rlenablestereorender() (in module raylib)":[[6,"raylib.rlEnableStereoRender",false]],"rlenabletexture() (in module raylib)":[[6,"raylib.rlEnableTexture",false]],"rlenabletexturecubemap() (in module raylib)":[[6,"raylib.rlEnableTextureCubemap",false]],"rlenablevertexarray() (in module raylib)":[[6,"raylib.rlEnableVertexArray",false]],"rlenablevertexattribute() (in module raylib)":[[6,"raylib.rlEnableVertexAttribute",false]],"rlenablevertexbuffer() (in module raylib)":[[6,"raylib.rlEnableVertexBuffer",false]],"rlenablevertexbufferelement() (in module raylib)":[[6,"raylib.rlEnableVertexBufferElement",false]],"rlenablewiremode() (in module raylib)":[[6,"raylib.rlEnableWireMode",false]],"rlend() (in module raylib)":[[6,"raylib.rlEnd",false]],"rlframebufferattach() (in module raylib)":[[6,"raylib.rlFramebufferAttach",false]],"rlframebufferattachtexturetype (class in pyray)":[[5,"pyray.rlFramebufferAttachTextureType",false]],"rlframebufferattachtexturetype (in module raylib)":[[6,"raylib.rlFramebufferAttachTextureType",false]],"rlframebufferattachtype (class in pyray)":[[5,"pyray.rlFramebufferAttachType",false]],"rlframebufferattachtype (in module raylib)":[[6,"raylib.rlFramebufferAttachType",false]],"rlframebuffercomplete() (in module raylib)":[[6,"raylib.rlFramebufferComplete",false]],"rlfrustum() (in module raylib)":[[6,"raylib.rlFrustum",false]],"rlgentexturemipmaps() (in module raylib)":[[6,"raylib.rlGenTextureMipmaps",false]],"rlgetactiveframebuffer() (in module raylib)":[[6,"raylib.rlGetActiveFramebuffer",false]],"rlgetculldistancefar() (in module raylib)":[[6,"raylib.rlGetCullDistanceFar",false]],"rlgetculldistancenear() (in module raylib)":[[6,"raylib.rlGetCullDistanceNear",false]],"rlgetframebufferheight() (in module raylib)":[[6,"raylib.rlGetFramebufferHeight",false]],"rlgetframebufferwidth() (in module raylib)":[[6,"raylib.rlGetFramebufferWidth",false]],"rlgetgltextureformats() (in module raylib)":[[6,"raylib.rlGetGlTextureFormats",false]],"rlgetlinewidth() (in module raylib)":[[6,"raylib.rlGetLineWidth",false]],"rlgetlocationattrib() (in module raylib)":[[6,"raylib.rlGetLocationAttrib",false]],"rlgetlocationuniform() (in module raylib)":[[6,"raylib.rlGetLocationUniform",false]],"rlgetmatrixmodelview() (in module raylib)":[[6,"raylib.rlGetMatrixModelview",false]],"rlgetmatrixprojection() (in module raylib)":[[6,"raylib.rlGetMatrixProjection",false]],"rlgetmatrixprojectionstereo() (in module raylib)":[[6,"raylib.rlGetMatrixProjectionStereo",false]],"rlgetmatrixtransform() (in module raylib)":[[6,"raylib.rlGetMatrixTransform",false]],"rlgetmatrixviewoffsetstereo() (in module raylib)":[[6,"raylib.rlGetMatrixViewOffsetStereo",false]],"rlgetpixelformatname() (in module raylib)":[[6,"raylib.rlGetPixelFormatName",false]],"rlgetshaderbuffersize() (in module raylib)":[[6,"raylib.rlGetShaderBufferSize",false]],"rlgetshaderiddefault() (in module raylib)":[[6,"raylib.rlGetShaderIdDefault",false]],"rlgetshaderlocsdefault() (in module raylib)":[[6,"raylib.rlGetShaderLocsDefault",false]],"rlgettextureiddefault() (in module raylib)":[[6,"raylib.rlGetTextureIdDefault",false]],"rlgetversion() (in module raylib)":[[6,"raylib.rlGetVersion",false]],"rlgl_close() (in module pyray)":[[5,"pyray.rlgl_close",false]],"rlgl_init() (in module pyray)":[[5,"pyray.rlgl_init",false]],"rlglclose() (in module raylib)":[[6,"raylib.rlglClose",false]],"rlglinit() (in module raylib)":[[6,"raylib.rlglInit",false]],"rlglversion (class in pyray)":[[5,"pyray.rlGlVersion",false]],"rlglversion (in module raylib)":[[6,"raylib.rlGlVersion",false]],"rlisstereorenderenabled() (in module raylib)":[[6,"raylib.rlIsStereoRenderEnabled",false]],"rlloadcomputeshaderprogram() (in module raylib)":[[6,"raylib.rlLoadComputeShaderProgram",false]],"rlloaddrawcube() (in module raylib)":[[6,"raylib.rlLoadDrawCube",false]],"rlloaddrawquad() (in module raylib)":[[6,"raylib.rlLoadDrawQuad",false]],"rlloadextensions() (in module raylib)":[[6,"raylib.rlLoadExtensions",false]],"rlloadframebuffer() (in module raylib)":[[6,"raylib.rlLoadFramebuffer",false]],"rlloadidentity() (in module raylib)":[[6,"raylib.rlLoadIdentity",false]],"rlloadrenderbatch() (in module raylib)":[[6,"raylib.rlLoadRenderBatch",false]],"rlloadshaderbuffer() (in module raylib)":[[6,"raylib.rlLoadShaderBuffer",false]],"rlloadshadercode() (in module raylib)":[[6,"raylib.rlLoadShaderCode",false]],"rlloadshaderprogram() (in module raylib)":[[6,"raylib.rlLoadShaderProgram",false]],"rlloadtexture() (in module raylib)":[[6,"raylib.rlLoadTexture",false]],"rlloadtexturecubemap() (in module raylib)":[[6,"raylib.rlLoadTextureCubemap",false]],"rlloadtexturedepth() (in module raylib)":[[6,"raylib.rlLoadTextureDepth",false]],"rlloadvertexarray() (in module raylib)":[[6,"raylib.rlLoadVertexArray",false]],"rlloadvertexbuffer() (in module raylib)":[[6,"raylib.rlLoadVertexBuffer",false]],"rlloadvertexbufferelement() (in module raylib)":[[6,"raylib.rlLoadVertexBufferElement",false]],"rlmatrixmode() (in module raylib)":[[6,"raylib.rlMatrixMode",false]],"rlmultmatrixf() (in module raylib)":[[6,"raylib.rlMultMatrixf",false]],"rlnormal3f() (in module raylib)":[[6,"raylib.rlNormal3f",false]],"rlortho() (in module raylib)":[[6,"raylib.rlOrtho",false]],"rlpixelformat (class in pyray)":[[5,"pyray.rlPixelFormat",false]],"rlpixelformat (in module raylib)":[[6,"raylib.rlPixelFormat",false]],"rlpopmatrix() (in module raylib)":[[6,"raylib.rlPopMatrix",false]],"rlpushmatrix() (in module raylib)":[[6,"raylib.rlPushMatrix",false]],"rlreadscreenpixels() (in module raylib)":[[6,"raylib.rlReadScreenPixels",false]],"rlreadshaderbuffer() (in module raylib)":[[6,"raylib.rlReadShaderBuffer",false]],"rlreadtexturepixels() (in module raylib)":[[6,"raylib.rlReadTexturePixels",false]],"rlrenderbatch (class in pyray)":[[5,"pyray.rlRenderBatch",false]],"rlrenderbatch (class in raylib)":[[6,"raylib.rlRenderBatch",false]],"rlrotatef() (in module raylib)":[[6,"raylib.rlRotatef",false]],"rlscalef() (in module raylib)":[[6,"raylib.rlScalef",false]],"rlscissor() (in module raylib)":[[6,"raylib.rlScissor",false]],"rlsetblendfactors() (in module raylib)":[[6,"raylib.rlSetBlendFactors",false]],"rlsetblendfactorsseparate() (in module raylib)":[[6,"raylib.rlSetBlendFactorsSeparate",false]],"rlsetblendmode() (in module raylib)":[[6,"raylib.rlSetBlendMode",false]],"rlsetclipplanes() (in module raylib)":[[6,"raylib.rlSetClipPlanes",false]],"rlsetcullface() (in module raylib)":[[6,"raylib.rlSetCullFace",false]],"rlsetframebufferheight() (in module raylib)":[[6,"raylib.rlSetFramebufferHeight",false]],"rlsetframebufferwidth() (in module raylib)":[[6,"raylib.rlSetFramebufferWidth",false]],"rlsetlinewidth() (in module raylib)":[[6,"raylib.rlSetLineWidth",false]],"rlsetmatrixmodelview() (in module raylib)":[[6,"raylib.rlSetMatrixModelview",false]],"rlsetmatrixprojection() (in module raylib)":[[6,"raylib.rlSetMatrixProjection",false]],"rlsetmatrixprojectionstereo() (in module raylib)":[[6,"raylib.rlSetMatrixProjectionStereo",false]],"rlsetmatrixviewoffsetstereo() (in module raylib)":[[6,"raylib.rlSetMatrixViewOffsetStereo",false]],"rlsetrenderbatchactive() (in module raylib)":[[6,"raylib.rlSetRenderBatchActive",false]],"rlsetshader() (in module raylib)":[[6,"raylib.rlSetShader",false]],"rlsettexture() (in module raylib)":[[6,"raylib.rlSetTexture",false]],"rlsetuniform() (in module raylib)":[[6,"raylib.rlSetUniform",false]],"rlsetuniformmatrices() (in module raylib)":[[6,"raylib.rlSetUniformMatrices",false]],"rlsetuniformmatrix() (in module raylib)":[[6,"raylib.rlSetUniformMatrix",false]],"rlsetuniformsampler() (in module raylib)":[[6,"raylib.rlSetUniformSampler",false]],"rlsetvertexattribute() (in module raylib)":[[6,"raylib.rlSetVertexAttribute",false]],"rlsetvertexattributedefault() (in module raylib)":[[6,"raylib.rlSetVertexAttributeDefault",false]],"rlsetvertexattributedivisor() (in module raylib)":[[6,"raylib.rlSetVertexAttributeDivisor",false]],"rlshaderattributedatatype (class in pyray)":[[5,"pyray.rlShaderAttributeDataType",false]],"rlshaderattributedatatype (in module raylib)":[[6,"raylib.rlShaderAttributeDataType",false]],"rlshaderlocationindex (class in pyray)":[[5,"pyray.rlShaderLocationIndex",false]],"rlshaderlocationindex (in module raylib)":[[6,"raylib.rlShaderLocationIndex",false]],"rlshaderuniformdatatype (class in pyray)":[[5,"pyray.rlShaderUniformDataType",false]],"rlshaderuniformdatatype (in module raylib)":[[6,"raylib.rlShaderUniformDataType",false]],"rltexcoord2f() (in module raylib)":[[6,"raylib.rlTexCoord2f",false]],"rltexturefilter (class in pyray)":[[5,"pyray.rlTextureFilter",false]],"rltexturefilter (in module raylib)":[[6,"raylib.rlTextureFilter",false]],"rltextureparameters() (in module raylib)":[[6,"raylib.rlTextureParameters",false]],"rltraceloglevel (class in pyray)":[[5,"pyray.rlTraceLogLevel",false]],"rltraceloglevel (in module raylib)":[[6,"raylib.rlTraceLogLevel",false]],"rltranslatef() (in module raylib)":[[6,"raylib.rlTranslatef",false]],"rlunloadframebuffer() (in module raylib)":[[6,"raylib.rlUnloadFramebuffer",false]],"rlunloadrenderbatch() (in module raylib)":[[6,"raylib.rlUnloadRenderBatch",false]],"rlunloadshaderbuffer() (in module raylib)":[[6,"raylib.rlUnloadShaderBuffer",false]],"rlunloadshaderprogram() (in module raylib)":[[6,"raylib.rlUnloadShaderProgram",false]],"rlunloadtexture() (in module raylib)":[[6,"raylib.rlUnloadTexture",false]],"rlunloadvertexarray() (in module raylib)":[[6,"raylib.rlUnloadVertexArray",false]],"rlunloadvertexbuffer() (in module raylib)":[[6,"raylib.rlUnloadVertexBuffer",false]],"rlupdateshaderbuffer() (in module raylib)":[[6,"raylib.rlUpdateShaderBuffer",false]],"rlupdatetexture() (in module raylib)":[[6,"raylib.rlUpdateTexture",false]],"rlupdatevertexbuffer() (in module raylib)":[[6,"raylib.rlUpdateVertexBuffer",false]],"rlupdatevertexbufferelements() (in module raylib)":[[6,"raylib.rlUpdateVertexBufferElements",false]],"rlvertex2f() (in module raylib)":[[6,"raylib.rlVertex2f",false]],"rlvertex2i() (in module raylib)":[[6,"raylib.rlVertex2i",false]],"rlvertex3f() (in module raylib)":[[6,"raylib.rlVertex3f",false]],"rlvertexbuffer (class in pyray)":[[5,"pyray.rlVertexBuffer",false]],"rlvertexbuffer (class in raylib)":[[6,"raylib.rlVertexBuffer",false]],"rlviewport() (in module raylib)":[[6,"raylib.rlViewport",false]],"rotation (pyray.camera2d attribute)":[[5,"pyray.Camera2D.rotation",false]],"rotation (pyray.transform attribute)":[[5,"pyray.Transform.rotation",false]],"rotation (raylib.camera2d attribute)":[[6,"raylib.Camera2D.rotation",false]],"rotation (raylib.transform attribute)":[[6,"raylib.Transform.rotation",false]],"samplerate (pyray.audiostream attribute)":[[5,"pyray.AudioStream.sampleRate",false]],"samplerate (pyray.wave attribute)":[[5,"pyray.Wave.sampleRate",false]],"samplerate (raylib.audiostream attribute)":[[6,"raylib.AudioStream.sampleRate",false]],"samplerate (raylib.wave attribute)":[[6,"raylib.Wave.sampleRate",false]],"samplesize (pyray.audiostream attribute)":[[5,"pyray.AudioStream.sampleSize",false]],"samplesize (pyray.wave attribute)":[[5,"pyray.Wave.sampleSize",false]],"samplesize (raylib.audiostream attribute)":[[6,"raylib.AudioStream.sampleSize",false]],"samplesize (raylib.wave attribute)":[[6,"raylib.Wave.sampleSize",false]],"save_file_data() (in module pyray)":[[5,"pyray.save_file_data",false]],"save_file_text() (in module pyray)":[[5,"pyray.save_file_text",false]],"savefiledata() (in module raylib)":[[6,"raylib.SaveFileData",false]],"savefiletext() (in module raylib)":[[6,"raylib.SaveFileText",false]],"scale (pyray.transform attribute)":[[5,"pyray.Transform.scale",false]],"scale (pyray.vrstereoconfig attribute)":[[5,"pyray.VrStereoConfig.scale",false]],"scale (raylib.transform attribute)":[[6,"raylib.Transform.scale",false]],"scale (raylib.vrstereoconfig attribute)":[[6,"raylib.VrStereoConfig.scale",false]],"scalein (pyray.vrstereoconfig attribute)":[[5,"pyray.VrStereoConfig.scaleIn",false]],"scalein (raylib.vrstereoconfig attribute)":[[6,"raylib.VrStereoConfig.scaleIn",false]],"scroll_padding (in module raylib)":[[6,"raylib.SCROLL_PADDING",false]],"scroll_padding (pyray.guiscrollbarproperty attribute)":[[5,"pyray.GuiScrollBarProperty.SCROLL_PADDING",false]],"scroll_slider_padding (in module raylib)":[[6,"raylib.SCROLL_SLIDER_PADDING",false]],"scroll_slider_padding (pyray.guiscrollbarproperty attribute)":[[5,"pyray.GuiScrollBarProperty.SCROLL_SLIDER_PADDING",false]],"scroll_slider_size (in module raylib)":[[6,"raylib.SCROLL_SLIDER_SIZE",false]],"scroll_slider_size (pyray.guiscrollbarproperty attribute)":[[5,"pyray.GuiScrollBarProperty.SCROLL_SLIDER_SIZE",false]],"scroll_speed (in module raylib)":[[6,"raylib.SCROLL_SPEED",false]],"scroll_speed (pyray.guiscrollbarproperty attribute)":[[5,"pyray.GuiScrollBarProperty.SCROLL_SPEED",false]],"scrollbar (in module raylib)":[[6,"raylib.SCROLLBAR",false]],"scrollbar (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.SCROLLBAR",false]],"scrollbar_side (in module raylib)":[[6,"raylib.SCROLLBAR_SIDE",false]],"scrollbar_side (pyray.guilistviewproperty attribute)":[[5,"pyray.GuiListViewProperty.SCROLLBAR_SIDE",false]],"scrollbar_width (in module raylib)":[[6,"raylib.SCROLLBAR_WIDTH",false]],"scrollbar_width (pyray.guilistviewproperty attribute)":[[5,"pyray.GuiListViewProperty.SCROLLBAR_WIDTH",false]],"seek_music_stream() (in module pyray)":[[5,"pyray.seek_music_stream",false]],"seekmusicstream() (in module raylib)":[[6,"raylib.SeekMusicStream",false]],"set_audio_stream_buffer_size_default() (in module pyray)":[[5,"pyray.set_audio_stream_buffer_size_default",false]],"set_audio_stream_callback() (in module pyray)":[[5,"pyray.set_audio_stream_callback",false]],"set_audio_stream_pan() (in module pyray)":[[5,"pyray.set_audio_stream_pan",false]],"set_audio_stream_pitch() (in module pyray)":[[5,"pyray.set_audio_stream_pitch",false]],"set_audio_stream_volume() (in module pyray)":[[5,"pyray.set_audio_stream_volume",false]],"set_automation_event_base_frame() (in module pyray)":[[5,"pyray.set_automation_event_base_frame",false]],"set_automation_event_list() (in module pyray)":[[5,"pyray.set_automation_event_list",false]],"set_clipboard_text() (in module pyray)":[[5,"pyray.set_clipboard_text",false]],"set_config_flags() (in module pyray)":[[5,"pyray.set_config_flags",false]],"set_exit_key() (in module pyray)":[[5,"pyray.set_exit_key",false]],"set_gamepad_mappings() (in module pyray)":[[5,"pyray.set_gamepad_mappings",false]],"set_gamepad_vibration() (in module pyray)":[[5,"pyray.set_gamepad_vibration",false]],"set_gestures_enabled() (in module pyray)":[[5,"pyray.set_gestures_enabled",false]],"set_load_file_data_callback() (in module pyray)":[[5,"pyray.set_load_file_data_callback",false]],"set_load_file_text_callback() (in module pyray)":[[5,"pyray.set_load_file_text_callback",false]],"set_master_volume() (in module pyray)":[[5,"pyray.set_master_volume",false]],"set_material_texture() (in module pyray)":[[5,"pyray.set_material_texture",false]],"set_model_mesh_material() (in module pyray)":[[5,"pyray.set_model_mesh_material",false]],"set_mouse_cursor() (in module pyray)":[[5,"pyray.set_mouse_cursor",false]],"set_mouse_offset() (in module pyray)":[[5,"pyray.set_mouse_offset",false]],"set_mouse_position() (in module pyray)":[[5,"pyray.set_mouse_position",false]],"set_mouse_scale() (in module pyray)":[[5,"pyray.set_mouse_scale",false]],"set_music_pan() (in module pyray)":[[5,"pyray.set_music_pan",false]],"set_music_pitch() (in module pyray)":[[5,"pyray.set_music_pitch",false]],"set_music_volume() (in module pyray)":[[5,"pyray.set_music_volume",false]],"set_physics_body_rotation() (in module pyray)":[[5,"pyray.set_physics_body_rotation",false]],"set_physics_gravity() (in module pyray)":[[5,"pyray.set_physics_gravity",false]],"set_physics_time_step() (in module pyray)":[[5,"pyray.set_physics_time_step",false]],"set_pixel_color() (in module pyray)":[[5,"pyray.set_pixel_color",false]],"set_random_seed() (in module pyray)":[[5,"pyray.set_random_seed",false]],"set_save_file_data_callback() (in module pyray)":[[5,"pyray.set_save_file_data_callback",false]],"set_save_file_text_callback() (in module pyray)":[[5,"pyray.set_save_file_text_callback",false]],"set_shader_value() (in module pyray)":[[5,"pyray.set_shader_value",false]],"set_shader_value_matrix() (in module pyray)":[[5,"pyray.set_shader_value_matrix",false]],"set_shader_value_texture() (in module pyray)":[[5,"pyray.set_shader_value_texture",false]],"set_shader_value_v() (in module pyray)":[[5,"pyray.set_shader_value_v",false]],"set_shapes_texture() (in module pyray)":[[5,"pyray.set_shapes_texture",false]],"set_sound_pan() (in module pyray)":[[5,"pyray.set_sound_pan",false]],"set_sound_pitch() (in module pyray)":[[5,"pyray.set_sound_pitch",false]],"set_sound_volume() (in module pyray)":[[5,"pyray.set_sound_volume",false]],"set_target_fps() (in module pyray)":[[5,"pyray.set_target_fps",false]],"set_text_line_spacing() (in module pyray)":[[5,"pyray.set_text_line_spacing",false]],"set_texture_filter() (in module pyray)":[[5,"pyray.set_texture_filter",false]],"set_texture_wrap() (in module pyray)":[[5,"pyray.set_texture_wrap",false]],"set_trace_log_callback() (in module pyray)":[[5,"pyray.set_trace_log_callback",false]],"set_trace_log_level() (in module pyray)":[[5,"pyray.set_trace_log_level",false]],"set_window_focused() (in module pyray)":[[5,"pyray.set_window_focused",false]],"set_window_icon() (in module pyray)":[[5,"pyray.set_window_icon",false]],"set_window_icons() (in module pyray)":[[5,"pyray.set_window_icons",false]],"set_window_max_size() (in module pyray)":[[5,"pyray.set_window_max_size",false]],"set_window_min_size() (in module pyray)":[[5,"pyray.set_window_min_size",false]],"set_window_monitor() (in module pyray)":[[5,"pyray.set_window_monitor",false]],"set_window_opacity() (in module pyray)":[[5,"pyray.set_window_opacity",false]],"set_window_position() (in module pyray)":[[5,"pyray.set_window_position",false]],"set_window_size() (in module pyray)":[[5,"pyray.set_window_size",false]],"set_window_state() (in module pyray)":[[5,"pyray.set_window_state",false]],"set_window_title() (in module pyray)":[[5,"pyray.set_window_title",false]],"setaudiostreambuffersizedefault() (in module raylib)":[[6,"raylib.SetAudioStreamBufferSizeDefault",false]],"setaudiostreamcallback() (in module raylib)":[[6,"raylib.SetAudioStreamCallback",false]],"setaudiostreampan() (in module raylib)":[[6,"raylib.SetAudioStreamPan",false]],"setaudiostreampitch() (in module raylib)":[[6,"raylib.SetAudioStreamPitch",false]],"setaudiostreamvolume() (in module raylib)":[[6,"raylib.SetAudioStreamVolume",false]],"setautomationeventbaseframe() (in module raylib)":[[6,"raylib.SetAutomationEventBaseFrame",false]],"setautomationeventlist() (in module raylib)":[[6,"raylib.SetAutomationEventList",false]],"setclipboardtext() (in module raylib)":[[6,"raylib.SetClipboardText",false]],"setconfigflags() (in module raylib)":[[6,"raylib.SetConfigFlags",false]],"setexitkey() (in module raylib)":[[6,"raylib.SetExitKey",false]],"setgamepadmappings() (in module raylib)":[[6,"raylib.SetGamepadMappings",false]],"setgamepadvibration() (in module raylib)":[[6,"raylib.SetGamepadVibration",false]],"setgesturesenabled() (in module raylib)":[[6,"raylib.SetGesturesEnabled",false]],"setloadfiledatacallback() (in module raylib)":[[6,"raylib.SetLoadFileDataCallback",false]],"setloadfiletextcallback() (in module raylib)":[[6,"raylib.SetLoadFileTextCallback",false]],"setmastervolume() (in module raylib)":[[6,"raylib.SetMasterVolume",false]],"setmaterialtexture() (in module raylib)":[[6,"raylib.SetMaterialTexture",false]],"setmodelmeshmaterial() (in module raylib)":[[6,"raylib.SetModelMeshMaterial",false]],"setmousecursor() (in module raylib)":[[6,"raylib.SetMouseCursor",false]],"setmouseoffset() (in module raylib)":[[6,"raylib.SetMouseOffset",false]],"setmouseposition() (in module raylib)":[[6,"raylib.SetMousePosition",false]],"setmousescale() (in module raylib)":[[6,"raylib.SetMouseScale",false]],"setmusicpan() (in module raylib)":[[6,"raylib.SetMusicPan",false]],"setmusicpitch() (in module raylib)":[[6,"raylib.SetMusicPitch",false]],"setmusicvolume() (in module raylib)":[[6,"raylib.SetMusicVolume",false]],"setphysicsbodyrotation() (in module raylib)":[[6,"raylib.SetPhysicsBodyRotation",false]],"setphysicsgravity() (in module raylib)":[[6,"raylib.SetPhysicsGravity",false]],"setphysicstimestep() (in module raylib)":[[6,"raylib.SetPhysicsTimeStep",false]],"setpixelcolor() (in module raylib)":[[6,"raylib.SetPixelColor",false]],"setrandomseed() (in module raylib)":[[6,"raylib.SetRandomSeed",false]],"setsavefiledatacallback() (in module raylib)":[[6,"raylib.SetSaveFileDataCallback",false]],"setsavefiletextcallback() (in module raylib)":[[6,"raylib.SetSaveFileTextCallback",false]],"setshadervalue() (in module raylib)":[[6,"raylib.SetShaderValue",false]],"setshadervaluematrix() (in module raylib)":[[6,"raylib.SetShaderValueMatrix",false]],"setshadervaluetexture() (in module raylib)":[[6,"raylib.SetShaderValueTexture",false]],"setshadervaluev() (in module raylib)":[[6,"raylib.SetShaderValueV",false]],"setshapestexture() (in module raylib)":[[6,"raylib.SetShapesTexture",false]],"setsoundpan() (in module raylib)":[[6,"raylib.SetSoundPan",false]],"setsoundpitch() (in module raylib)":[[6,"raylib.SetSoundPitch",false]],"setsoundvolume() (in module raylib)":[[6,"raylib.SetSoundVolume",false]],"settargetfps() (in module raylib)":[[6,"raylib.SetTargetFPS",false]],"settextlinespacing() (in module raylib)":[[6,"raylib.SetTextLineSpacing",false]],"settexturefilter() (in module raylib)":[[6,"raylib.SetTextureFilter",false]],"settexturewrap() (in module raylib)":[[6,"raylib.SetTextureWrap",false]],"settracelogcallback() (in module raylib)":[[6,"raylib.SetTraceLogCallback",false]],"settraceloglevel() (in module raylib)":[[6,"raylib.SetTraceLogLevel",false]],"setwindowfocused() (in module raylib)":[[6,"raylib.SetWindowFocused",false]],"setwindowicon() (in module raylib)":[[6,"raylib.SetWindowIcon",false]],"setwindowicons() (in module raylib)":[[6,"raylib.SetWindowIcons",false]],"setwindowmaxsize() (in module raylib)":[[6,"raylib.SetWindowMaxSize",false]],"setwindowminsize() (in module raylib)":[[6,"raylib.SetWindowMinSize",false]],"setwindowmonitor() (in module raylib)":[[6,"raylib.SetWindowMonitor",false]],"setwindowopacity() (in module raylib)":[[6,"raylib.SetWindowOpacity",false]],"setwindowposition() (in module raylib)":[[6,"raylib.SetWindowPosition",false]],"setwindowsize() (in module raylib)":[[6,"raylib.SetWindowSize",false]],"setwindowstate() (in module raylib)":[[6,"raylib.SetWindowState",false]],"setwindowtitle() (in module raylib)":[[6,"raylib.SetWindowTitle",false]],"shader (class in pyray)":[[5,"pyray.Shader",false]],"shader (class in raylib)":[[6,"raylib.Shader",false]],"shader (pyray.material attribute)":[[5,"pyray.Material.shader",false]],"shader (raylib.material attribute)":[[6,"raylib.Material.shader",false]],"shader_attrib_float (in module raylib)":[[6,"raylib.SHADER_ATTRIB_FLOAT",false]],"shader_attrib_float (pyray.shaderattributedatatype attribute)":[[5,"pyray.ShaderAttributeDataType.SHADER_ATTRIB_FLOAT",false]],"shader_attrib_vec2 (in module raylib)":[[6,"raylib.SHADER_ATTRIB_VEC2",false]],"shader_attrib_vec2 (pyray.shaderattributedatatype attribute)":[[5,"pyray.ShaderAttributeDataType.SHADER_ATTRIB_VEC2",false]],"shader_attrib_vec3 (in module raylib)":[[6,"raylib.SHADER_ATTRIB_VEC3",false]],"shader_attrib_vec3 (pyray.shaderattributedatatype attribute)":[[5,"pyray.ShaderAttributeDataType.SHADER_ATTRIB_VEC3",false]],"shader_attrib_vec4 (in module raylib)":[[6,"raylib.SHADER_ATTRIB_VEC4",false]],"shader_attrib_vec4 (pyray.shaderattributedatatype attribute)":[[5,"pyray.ShaderAttributeDataType.SHADER_ATTRIB_VEC4",false]],"shader_loc_bone_matrices (in module raylib)":[[6,"raylib.SHADER_LOC_BONE_MATRICES",false]],"shader_loc_bone_matrices (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_BONE_MATRICES",false]],"shader_loc_color_ambient (in module raylib)":[[6,"raylib.SHADER_LOC_COLOR_AMBIENT",false]],"shader_loc_color_ambient (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_COLOR_AMBIENT",false]],"shader_loc_color_diffuse (in module raylib)":[[6,"raylib.SHADER_LOC_COLOR_DIFFUSE",false]],"shader_loc_color_diffuse (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_COLOR_DIFFUSE",false]],"shader_loc_color_specular (in module raylib)":[[6,"raylib.SHADER_LOC_COLOR_SPECULAR",false]],"shader_loc_color_specular (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_COLOR_SPECULAR",false]],"shader_loc_map_albedo (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_ALBEDO",false]],"shader_loc_map_albedo (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_ALBEDO",false]],"shader_loc_map_brdf (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_BRDF",false]],"shader_loc_map_brdf (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_BRDF",false]],"shader_loc_map_cubemap (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_CUBEMAP",false]],"shader_loc_map_cubemap (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_CUBEMAP",false]],"shader_loc_map_emission (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_EMISSION",false]],"shader_loc_map_emission (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_EMISSION",false]],"shader_loc_map_height (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_HEIGHT",false]],"shader_loc_map_height (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_HEIGHT",false]],"shader_loc_map_irradiance (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_IRRADIANCE",false]],"shader_loc_map_irradiance (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_IRRADIANCE",false]],"shader_loc_map_metalness (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_METALNESS",false]],"shader_loc_map_metalness (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_METALNESS",false]],"shader_loc_map_normal (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_NORMAL",false]],"shader_loc_map_normal (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_NORMAL",false]],"shader_loc_map_occlusion (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_OCCLUSION",false]],"shader_loc_map_occlusion (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_OCCLUSION",false]],"shader_loc_map_prefilter (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_PREFILTER",false]],"shader_loc_map_prefilter (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_PREFILTER",false]],"shader_loc_map_roughness (in module raylib)":[[6,"raylib.SHADER_LOC_MAP_ROUGHNESS",false]],"shader_loc_map_roughness (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MAP_ROUGHNESS",false]],"shader_loc_matrix_model (in module raylib)":[[6,"raylib.SHADER_LOC_MATRIX_MODEL",false]],"shader_loc_matrix_model (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MATRIX_MODEL",false]],"shader_loc_matrix_mvp (in module raylib)":[[6,"raylib.SHADER_LOC_MATRIX_MVP",false]],"shader_loc_matrix_mvp (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MATRIX_MVP",false]],"shader_loc_matrix_normal (in module raylib)":[[6,"raylib.SHADER_LOC_MATRIX_NORMAL",false]],"shader_loc_matrix_normal (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MATRIX_NORMAL",false]],"shader_loc_matrix_projection (in module raylib)":[[6,"raylib.SHADER_LOC_MATRIX_PROJECTION",false]],"shader_loc_matrix_projection (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MATRIX_PROJECTION",false]],"shader_loc_matrix_view (in module raylib)":[[6,"raylib.SHADER_LOC_MATRIX_VIEW",false]],"shader_loc_matrix_view (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_MATRIX_VIEW",false]],"shader_loc_vector_view (in module raylib)":[[6,"raylib.SHADER_LOC_VECTOR_VIEW",false]],"shader_loc_vector_view (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_VECTOR_VIEW",false]],"shader_loc_vertex_boneids (in module raylib)":[[6,"raylib.SHADER_LOC_VERTEX_BONEIDS",false]],"shader_loc_vertex_boneids (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_VERTEX_BONEIDS",false]],"shader_loc_vertex_boneweights (in module raylib)":[[6,"raylib.SHADER_LOC_VERTEX_BONEWEIGHTS",false]],"shader_loc_vertex_boneweights (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_VERTEX_BONEWEIGHTS",false]],"shader_loc_vertex_color (in module raylib)":[[6,"raylib.SHADER_LOC_VERTEX_COLOR",false]],"shader_loc_vertex_color (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_VERTEX_COLOR",false]],"shader_loc_vertex_normal (in module raylib)":[[6,"raylib.SHADER_LOC_VERTEX_NORMAL",false]],"shader_loc_vertex_normal (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_VERTEX_NORMAL",false]],"shader_loc_vertex_position (in module raylib)":[[6,"raylib.SHADER_LOC_VERTEX_POSITION",false]],"shader_loc_vertex_position (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_VERTEX_POSITION",false]],"shader_loc_vertex_tangent (in module raylib)":[[6,"raylib.SHADER_LOC_VERTEX_TANGENT",false]],"shader_loc_vertex_tangent (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_VERTEX_TANGENT",false]],"shader_loc_vertex_texcoord01 (in module raylib)":[[6,"raylib.SHADER_LOC_VERTEX_TEXCOORD01",false]],"shader_loc_vertex_texcoord01 (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_VERTEX_TEXCOORD01",false]],"shader_loc_vertex_texcoord02 (in module raylib)":[[6,"raylib.SHADER_LOC_VERTEX_TEXCOORD02",false]],"shader_loc_vertex_texcoord02 (pyray.shaderlocationindex attribute)":[[5,"pyray.ShaderLocationIndex.SHADER_LOC_VERTEX_TEXCOORD02",false]],"shader_uniform_float (in module raylib)":[[6,"raylib.SHADER_UNIFORM_FLOAT",false]],"shader_uniform_float (pyray.shaderuniformdatatype attribute)":[[5,"pyray.ShaderUniformDataType.SHADER_UNIFORM_FLOAT",false]],"shader_uniform_int (in module raylib)":[[6,"raylib.SHADER_UNIFORM_INT",false]],"shader_uniform_int (pyray.shaderuniformdatatype attribute)":[[5,"pyray.ShaderUniformDataType.SHADER_UNIFORM_INT",false]],"shader_uniform_ivec2 (in module raylib)":[[6,"raylib.SHADER_UNIFORM_IVEC2",false]],"shader_uniform_ivec2 (pyray.shaderuniformdatatype attribute)":[[5,"pyray.ShaderUniformDataType.SHADER_UNIFORM_IVEC2",false]],"shader_uniform_ivec3 (in module raylib)":[[6,"raylib.SHADER_UNIFORM_IVEC3",false]],"shader_uniform_ivec3 (pyray.shaderuniformdatatype attribute)":[[5,"pyray.ShaderUniformDataType.SHADER_UNIFORM_IVEC3",false]],"shader_uniform_ivec4 (in module raylib)":[[6,"raylib.SHADER_UNIFORM_IVEC4",false]],"shader_uniform_ivec4 (pyray.shaderuniformdatatype attribute)":[[5,"pyray.ShaderUniformDataType.SHADER_UNIFORM_IVEC4",false]],"shader_uniform_sampler2d (in module raylib)":[[6,"raylib.SHADER_UNIFORM_SAMPLER2D",false]],"shader_uniform_sampler2d (pyray.shaderuniformdatatype attribute)":[[5,"pyray.ShaderUniformDataType.SHADER_UNIFORM_SAMPLER2D",false]],"shader_uniform_vec2 (in module raylib)":[[6,"raylib.SHADER_UNIFORM_VEC2",false]],"shader_uniform_vec2 (pyray.shaderuniformdatatype attribute)":[[5,"pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC2",false]],"shader_uniform_vec3 (in module raylib)":[[6,"raylib.SHADER_UNIFORM_VEC3",false]],"shader_uniform_vec3 (pyray.shaderuniformdatatype attribute)":[[5,"pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC3",false]],"shader_uniform_vec4 (in module raylib)":[[6,"raylib.SHADER_UNIFORM_VEC4",false]],"shader_uniform_vec4 (pyray.shaderuniformdatatype attribute)":[[5,"pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC4",false]],"shaderattributedatatype (class in pyray)":[[5,"pyray.ShaderAttributeDataType",false]],"shaderattributedatatype (in module raylib)":[[6,"raylib.ShaderAttributeDataType",false]],"shaderlocationindex (class in pyray)":[[5,"pyray.ShaderLocationIndex",false]],"shaderlocationindex (in module raylib)":[[6,"raylib.ShaderLocationIndex",false]],"shaderuniformdatatype (class in pyray)":[[5,"pyray.ShaderUniformDataType",false]],"shaderuniformdatatype (in module raylib)":[[6,"raylib.ShaderUniformDataType",false]],"shape (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.shape",false]],"shape (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.shape",false]],"show_cursor() (in module pyray)":[[5,"pyray.show_cursor",false]],"showcursor() (in module raylib)":[[6,"raylib.ShowCursor",false]],"size (raylib.glfwgammaramp attribute)":[[6,"raylib.GLFWgammaramp.size",false]],"skyblue (in module pyray)":[[5,"pyray.SKYBLUE",false]],"skyblue (in module raylib)":[[6,"raylib.SKYBLUE",false]],"slider (in module raylib)":[[6,"raylib.SLIDER",false]],"slider (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.SLIDER",false]],"slider_padding (in module raylib)":[[6,"raylib.SLIDER_PADDING",false]],"slider_padding (pyray.guisliderproperty attribute)":[[5,"pyray.GuiSliderProperty.SLIDER_PADDING",false]],"slider_width (in module raylib)":[[6,"raylib.SLIDER_WIDTH",false]],"slider_width (pyray.guisliderproperty attribute)":[[5,"pyray.GuiSliderProperty.SLIDER_WIDTH",false]],"sound (class in pyray)":[[5,"pyray.Sound",false]],"sound (class in raylib)":[[6,"raylib.Sound",false]],"source (pyray.npatchinfo attribute)":[[5,"pyray.NPatchInfo.source",false]],"source (raylib.npatchinfo attribute)":[[6,"raylib.NPatchInfo.source",false]],"spin_button_spacing (in module raylib)":[[6,"raylib.SPIN_BUTTON_SPACING",false]],"spin_button_spacing (pyray.guispinnerproperty attribute)":[[5,"pyray.GuiSpinnerProperty.SPIN_BUTTON_SPACING",false]],"spin_button_width (in module raylib)":[[6,"raylib.SPIN_BUTTON_WIDTH",false]],"spin_button_width (pyray.guispinnerproperty attribute)":[[5,"pyray.GuiSpinnerProperty.SPIN_BUTTON_WIDTH",false]],"spinner (in module raylib)":[[6,"raylib.SPINNER",false]],"spinner (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.SPINNER",false]],"start_automation_event_recording() (in module pyray)":[[5,"pyray.start_automation_event_recording",false]],"startautomationeventrecording() (in module raylib)":[[6,"raylib.StartAutomationEventRecording",false]],"state_disabled (in module raylib)":[[6,"raylib.STATE_DISABLED",false]],"state_disabled (pyray.guistate attribute)":[[5,"pyray.GuiState.STATE_DISABLED",false]],"state_focused (in module raylib)":[[6,"raylib.STATE_FOCUSED",false]],"state_focused (pyray.guistate attribute)":[[5,"pyray.GuiState.STATE_FOCUSED",false]],"state_normal (in module raylib)":[[6,"raylib.STATE_NORMAL",false]],"state_normal (pyray.guistate attribute)":[[5,"pyray.GuiState.STATE_NORMAL",false]],"state_pressed (in module raylib)":[[6,"raylib.STATE_PRESSED",false]],"state_pressed (pyray.guistate attribute)":[[5,"pyray.GuiState.STATE_PRESSED",false]],"staticfriction (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.staticFriction",false]],"staticfriction (pyray.physicsmanifolddata attribute)":[[5,"pyray.PhysicsManifoldData.staticFriction",false]],"staticfriction (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.staticFriction",false]],"staticfriction (raylib.physicsmanifolddata attribute)":[[6,"raylib.PhysicsManifoldData.staticFriction",false]],"statusbar (in module raylib)":[[6,"raylib.STATUSBAR",false]],"statusbar (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.STATUSBAR",false]],"stop_audio_stream() (in module pyray)":[[5,"pyray.stop_audio_stream",false]],"stop_automation_event_recording() (in module pyray)":[[5,"pyray.stop_automation_event_recording",false]],"stop_music_stream() (in module pyray)":[[5,"pyray.stop_music_stream",false]],"stop_sound() (in module pyray)":[[5,"pyray.stop_sound",false]],"stopaudiostream() (in module raylib)":[[6,"raylib.StopAudioStream",false]],"stopautomationeventrecording() (in module raylib)":[[6,"raylib.StopAutomationEventRecording",false]],"stopmusicstream() (in module raylib)":[[6,"raylib.StopMusicStream",false]],"stopsound() (in module raylib)":[[6,"raylib.StopSound",false]],"stream (pyray.music attribute)":[[5,"pyray.Music.stream",false]],"stream (pyray.sound attribute)":[[5,"pyray.Sound.stream",false]],"stream (raylib.music attribute)":[[6,"raylib.Music.stream",false]],"stream (raylib.sound attribute)":[[6,"raylib.Sound.stream",false]],"struct (class in raylib)":[[6,"raylib.struct",false]],"swap_screen_buffer() (in module pyray)":[[5,"pyray.swap_screen_buffer",false]],"swapscreenbuffer() (in module raylib)":[[6,"raylib.SwapScreenBuffer",false]],"take_screenshot() (in module pyray)":[[5,"pyray.take_screenshot",false]],"takescreenshot() (in module raylib)":[[6,"raylib.TakeScreenshot",false]],"tangents (pyray.mesh attribute)":[[5,"pyray.Mesh.tangents",false]],"tangents (raylib.mesh attribute)":[[6,"raylib.Mesh.tangents",false]],"target (pyray.camera2d attribute)":[[5,"pyray.Camera2D.target",false]],"target (pyray.camera3d attribute)":[[5,"pyray.Camera3D.target",false]],"target (raylib.camera attribute)":[[6,"raylib.Camera.target",false]],"target (raylib.camera2d attribute)":[[6,"raylib.Camera2D.target",false]],"target (raylib.camera3d attribute)":[[6,"raylib.Camera3D.target",false]],"texcoords (pyray.mesh attribute)":[[5,"pyray.Mesh.texcoords",false]],"texcoords (pyray.rlvertexbuffer attribute)":[[5,"pyray.rlVertexBuffer.texcoords",false]],"texcoords (raylib.mesh attribute)":[[6,"raylib.Mesh.texcoords",false]],"texcoords (raylib.rlvertexbuffer attribute)":[[6,"raylib.rlVertexBuffer.texcoords",false]],"texcoords2 (pyray.mesh attribute)":[[5,"pyray.Mesh.texcoords2",false]],"texcoords2 (raylib.mesh attribute)":[[6,"raylib.Mesh.texcoords2",false]],"text_align_bottom (in module raylib)":[[6,"raylib.TEXT_ALIGN_BOTTOM",false]],"text_align_bottom (pyray.guitextalignmentvertical attribute)":[[5,"pyray.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM",false]],"text_align_center (in module raylib)":[[6,"raylib.TEXT_ALIGN_CENTER",false]],"text_align_center (pyray.guitextalignment attribute)":[[5,"pyray.GuiTextAlignment.TEXT_ALIGN_CENTER",false]],"text_align_left (in module raylib)":[[6,"raylib.TEXT_ALIGN_LEFT",false]],"text_align_left (pyray.guitextalignment attribute)":[[5,"pyray.GuiTextAlignment.TEXT_ALIGN_LEFT",false]],"text_align_middle (in module raylib)":[[6,"raylib.TEXT_ALIGN_MIDDLE",false]],"text_align_middle (pyray.guitextalignmentvertical attribute)":[[5,"pyray.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE",false]],"text_align_right (in module raylib)":[[6,"raylib.TEXT_ALIGN_RIGHT",false]],"text_align_right (pyray.guitextalignment attribute)":[[5,"pyray.GuiTextAlignment.TEXT_ALIGN_RIGHT",false]],"text_align_top (in module raylib)":[[6,"raylib.TEXT_ALIGN_TOP",false]],"text_align_top (pyray.guitextalignmentvertical attribute)":[[5,"pyray.GuiTextAlignmentVertical.TEXT_ALIGN_TOP",false]],"text_alignment (in module raylib)":[[6,"raylib.TEXT_ALIGNMENT",false]],"text_alignment (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.TEXT_ALIGNMENT",false]],"text_alignment_vertical (in module raylib)":[[6,"raylib.TEXT_ALIGNMENT_VERTICAL",false]],"text_alignment_vertical (pyray.guidefaultproperty attribute)":[[5,"pyray.GuiDefaultProperty.TEXT_ALIGNMENT_VERTICAL",false]],"text_append() (in module pyray)":[[5,"pyray.text_append",false]],"text_color_disabled (in module raylib)":[[6,"raylib.TEXT_COLOR_DISABLED",false]],"text_color_disabled (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.TEXT_COLOR_DISABLED",false]],"text_color_focused (in module raylib)":[[6,"raylib.TEXT_COLOR_FOCUSED",false]],"text_color_focused (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.TEXT_COLOR_FOCUSED",false]],"text_color_normal (in module raylib)":[[6,"raylib.TEXT_COLOR_NORMAL",false]],"text_color_normal (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.TEXT_COLOR_NORMAL",false]],"text_color_pressed (in module raylib)":[[6,"raylib.TEXT_COLOR_PRESSED",false]],"text_color_pressed (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.TEXT_COLOR_PRESSED",false]],"text_copy() (in module pyray)":[[5,"pyray.text_copy",false]],"text_find_index() (in module pyray)":[[5,"pyray.text_find_index",false]],"text_format() (in module pyray)":[[5,"pyray.text_format",false]],"text_insert() (in module pyray)":[[5,"pyray.text_insert",false]],"text_is_equal() (in module pyray)":[[5,"pyray.text_is_equal",false]],"text_join() (in module pyray)":[[5,"pyray.text_join",false]],"text_length() (in module pyray)":[[5,"pyray.text_length",false]],"text_line_spacing (in module raylib)":[[6,"raylib.TEXT_LINE_SPACING",false]],"text_line_spacing (pyray.guidefaultproperty attribute)":[[5,"pyray.GuiDefaultProperty.TEXT_LINE_SPACING",false]],"text_padding (in module raylib)":[[6,"raylib.TEXT_PADDING",false]],"text_padding (pyray.guicontrolproperty attribute)":[[5,"pyray.GuiControlProperty.TEXT_PADDING",false]],"text_readonly (in module raylib)":[[6,"raylib.TEXT_READONLY",false]],"text_readonly (pyray.guitextboxproperty attribute)":[[5,"pyray.GuiTextBoxProperty.TEXT_READONLY",false]],"text_replace() (in module pyray)":[[5,"pyray.text_replace",false]],"text_size (in module raylib)":[[6,"raylib.TEXT_SIZE",false]],"text_size (pyray.guidefaultproperty attribute)":[[5,"pyray.GuiDefaultProperty.TEXT_SIZE",false]],"text_spacing (in module raylib)":[[6,"raylib.TEXT_SPACING",false]],"text_spacing (pyray.guidefaultproperty attribute)":[[5,"pyray.GuiDefaultProperty.TEXT_SPACING",false]],"text_split() (in module pyray)":[[5,"pyray.text_split",false]],"text_subtext() (in module pyray)":[[5,"pyray.text_subtext",false]],"text_to_camel() (in module pyray)":[[5,"pyray.text_to_camel",false]],"text_to_float() (in module pyray)":[[5,"pyray.text_to_float",false]],"text_to_integer() (in module pyray)":[[5,"pyray.text_to_integer",false]],"text_to_lower() (in module pyray)":[[5,"pyray.text_to_lower",false]],"text_to_pascal() (in module pyray)":[[5,"pyray.text_to_pascal",false]],"text_to_snake() (in module pyray)":[[5,"pyray.text_to_snake",false]],"text_to_upper() (in module pyray)":[[5,"pyray.text_to_upper",false]],"text_wrap_char (in module raylib)":[[6,"raylib.TEXT_WRAP_CHAR",false]],"text_wrap_char (pyray.guitextwrapmode attribute)":[[5,"pyray.GuiTextWrapMode.TEXT_WRAP_CHAR",false]],"text_wrap_mode (in module raylib)":[[6,"raylib.TEXT_WRAP_MODE",false]],"text_wrap_mode (pyray.guidefaultproperty attribute)":[[5,"pyray.GuiDefaultProperty.TEXT_WRAP_MODE",false]],"text_wrap_none (in module raylib)":[[6,"raylib.TEXT_WRAP_NONE",false]],"text_wrap_none (pyray.guitextwrapmode attribute)":[[5,"pyray.GuiTextWrapMode.TEXT_WRAP_NONE",false]],"text_wrap_word (in module raylib)":[[6,"raylib.TEXT_WRAP_WORD",false]],"text_wrap_word (pyray.guitextwrapmode attribute)":[[5,"pyray.GuiTextWrapMode.TEXT_WRAP_WORD",false]],"textappend() (in module raylib)":[[6,"raylib.TextAppend",false]],"textbox (in module raylib)":[[6,"raylib.TEXTBOX",false]],"textbox (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.TEXTBOX",false]],"textcopy() (in module raylib)":[[6,"raylib.TextCopy",false]],"textfindindex() (in module raylib)":[[6,"raylib.TextFindIndex",false]],"textformat() (in module raylib)":[[6,"raylib.TextFormat",false]],"textinsert() (in module raylib)":[[6,"raylib.TextInsert",false]],"textisequal() (in module raylib)":[[6,"raylib.TextIsEqual",false]],"textjoin() (in module raylib)":[[6,"raylib.TextJoin",false]],"textlength() (in module raylib)":[[6,"raylib.TextLength",false]],"textreplace() (in module raylib)":[[6,"raylib.TextReplace",false]],"textsplit() (in module raylib)":[[6,"raylib.TextSplit",false]],"textsubtext() (in module raylib)":[[6,"raylib.TextSubtext",false]],"texttocamel() (in module raylib)":[[6,"raylib.TextToCamel",false]],"texttofloat() (in module raylib)":[[6,"raylib.TextToFloat",false]],"texttointeger() (in module raylib)":[[6,"raylib.TextToInteger",false]],"texttolower() (in module raylib)":[[6,"raylib.TextToLower",false]],"texttopascal() (in module raylib)":[[6,"raylib.TextToPascal",false]],"texttosnake() (in module raylib)":[[6,"raylib.TextToSnake",false]],"texttoupper() (in module raylib)":[[6,"raylib.TextToUpper",false]],"texture (class in pyray)":[[5,"pyray.Texture",false]],"texture (class in raylib)":[[6,"raylib.Texture",false]],"texture (pyray.font attribute)":[[5,"pyray.Font.texture",false]],"texture (pyray.materialmap attribute)":[[5,"pyray.MaterialMap.texture",false]],"texture (pyray.rendertexture attribute)":[[5,"pyray.RenderTexture.texture",false]],"texture (raylib.font attribute)":[[6,"raylib.Font.texture",false]],"texture (raylib.materialmap attribute)":[[6,"raylib.MaterialMap.texture",false]],"texture (raylib.rendertexture attribute)":[[6,"raylib.RenderTexture.texture",false]],"texture (raylib.rendertexture2d attribute)":[[6,"raylib.RenderTexture2D.texture",false]],"texture2d (class in pyray)":[[5,"pyray.Texture2D",false]],"texture2d (class in raylib)":[[6,"raylib.Texture2D",false]],"texture_filter_anisotropic_16x (in module raylib)":[[6,"raylib.TEXTURE_FILTER_ANISOTROPIC_16X",false]],"texture_filter_anisotropic_16x (pyray.texturefilter attribute)":[[5,"pyray.TextureFilter.TEXTURE_FILTER_ANISOTROPIC_16X",false]],"texture_filter_anisotropic_4x (in module raylib)":[[6,"raylib.TEXTURE_FILTER_ANISOTROPIC_4X",false]],"texture_filter_anisotropic_4x (pyray.texturefilter attribute)":[[5,"pyray.TextureFilter.TEXTURE_FILTER_ANISOTROPIC_4X",false]],"texture_filter_anisotropic_8x (in module raylib)":[[6,"raylib.TEXTURE_FILTER_ANISOTROPIC_8X",false]],"texture_filter_anisotropic_8x (pyray.texturefilter attribute)":[[5,"pyray.TextureFilter.TEXTURE_FILTER_ANISOTROPIC_8X",false]],"texture_filter_bilinear (in module raylib)":[[6,"raylib.TEXTURE_FILTER_BILINEAR",false]],"texture_filter_bilinear (pyray.texturefilter attribute)":[[5,"pyray.TextureFilter.TEXTURE_FILTER_BILINEAR",false]],"texture_filter_point (in module raylib)":[[6,"raylib.TEXTURE_FILTER_POINT",false]],"texture_filter_point (pyray.texturefilter attribute)":[[5,"pyray.TextureFilter.TEXTURE_FILTER_POINT",false]],"texture_filter_trilinear (in module raylib)":[[6,"raylib.TEXTURE_FILTER_TRILINEAR",false]],"texture_filter_trilinear (pyray.texturefilter attribute)":[[5,"pyray.TextureFilter.TEXTURE_FILTER_TRILINEAR",false]],"texture_wrap_clamp (in module raylib)":[[6,"raylib.TEXTURE_WRAP_CLAMP",false]],"texture_wrap_clamp (pyray.texturewrap attribute)":[[5,"pyray.TextureWrap.TEXTURE_WRAP_CLAMP",false]],"texture_wrap_mirror_clamp (in module raylib)":[[6,"raylib.TEXTURE_WRAP_MIRROR_CLAMP",false]],"texture_wrap_mirror_clamp (pyray.texturewrap attribute)":[[5,"pyray.TextureWrap.TEXTURE_WRAP_MIRROR_CLAMP",false]],"texture_wrap_mirror_repeat (in module raylib)":[[6,"raylib.TEXTURE_WRAP_MIRROR_REPEAT",false]],"texture_wrap_mirror_repeat (pyray.texturewrap attribute)":[[5,"pyray.TextureWrap.TEXTURE_WRAP_MIRROR_REPEAT",false]],"texture_wrap_repeat (in module raylib)":[[6,"raylib.TEXTURE_WRAP_REPEAT",false]],"texture_wrap_repeat (pyray.texturewrap attribute)":[[5,"pyray.TextureWrap.TEXTURE_WRAP_REPEAT",false]],"texturecubemap (class in raylib)":[[6,"raylib.TextureCubemap",false]],"texturefilter (class in pyray)":[[5,"pyray.TextureFilter",false]],"texturefilter (in module raylib)":[[6,"raylib.TextureFilter",false]],"textureid (pyray.rldrawcall attribute)":[[5,"pyray.rlDrawCall.textureId",false]],"textureid (raylib.rldrawcall attribute)":[[6,"raylib.rlDrawCall.textureId",false]],"texturewrap (class in pyray)":[[5,"pyray.TextureWrap",false]],"texturewrap (in module raylib)":[[6,"raylib.TextureWrap",false]],"toggle (in module raylib)":[[6,"raylib.TOGGLE",false]],"toggle (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.TOGGLE",false]],"toggle_borderless_windowed() (in module pyray)":[[5,"pyray.toggle_borderless_windowed",false]],"toggle_fullscreen() (in module pyray)":[[5,"pyray.toggle_fullscreen",false]],"toggleborderlesswindowed() (in module raylib)":[[6,"raylib.ToggleBorderlessWindowed",false]],"togglefullscreen() (in module raylib)":[[6,"raylib.ToggleFullscreen",false]],"top (pyray.npatchinfo attribute)":[[5,"pyray.NPatchInfo.top",false]],"top (raylib.npatchinfo attribute)":[[6,"raylib.NPatchInfo.top",false]],"torque (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.torque",false]],"torque (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.torque",false]],"trace_log() (in module pyray)":[[5,"pyray.trace_log",false]],"tracelog() (in module raylib)":[[6,"raylib.TraceLog",false]],"traceloglevel (class in pyray)":[[5,"pyray.TraceLogLevel",false]],"traceloglevel (in module raylib)":[[6,"raylib.TraceLogLevel",false]],"transform (class in pyray)":[[5,"pyray.Transform",false]],"transform (class in raylib)":[[6,"raylib.Transform",false]],"transform (pyray.model attribute)":[[5,"pyray.Model.transform",false]],"transform (pyray.physicsshape attribute)":[[5,"pyray.PhysicsShape.transform",false]],"transform (raylib.model attribute)":[[6,"raylib.Model.transform",false]],"transform (raylib.physicsshape attribute)":[[6,"raylib.PhysicsShape.transform",false]],"translation (pyray.transform attribute)":[[5,"pyray.Transform.translation",false]],"translation (raylib.transform attribute)":[[6,"raylib.Transform.translation",false]],"trianglecount (pyray.mesh attribute)":[[5,"pyray.Mesh.triangleCount",false]],"trianglecount (raylib.mesh attribute)":[[6,"raylib.Mesh.triangleCount",false]],"type (pyray.automationevent attribute)":[[5,"pyray.AutomationEvent.type",false]],"type (pyray.physicsshape attribute)":[[5,"pyray.PhysicsShape.type",false]],"type (raylib.automationevent attribute)":[[6,"raylib.AutomationEvent.type",false]],"type (raylib.physicsshape attribute)":[[6,"raylib.PhysicsShape.type",false]],"unload_audio_stream() (in module pyray)":[[5,"pyray.unload_audio_stream",false]],"unload_automation_event_list() (in module pyray)":[[5,"pyray.unload_automation_event_list",false]],"unload_codepoints() (in module pyray)":[[5,"pyray.unload_codepoints",false]],"unload_directory_files() (in module pyray)":[[5,"pyray.unload_directory_files",false]],"unload_dropped_files() (in module pyray)":[[5,"pyray.unload_dropped_files",false]],"unload_file_data() (in module pyray)":[[5,"pyray.unload_file_data",false]],"unload_file_text() (in module pyray)":[[5,"pyray.unload_file_text",false]],"unload_font() (in module pyray)":[[5,"pyray.unload_font",false]],"unload_font_data() (in module pyray)":[[5,"pyray.unload_font_data",false]],"unload_image() (in module pyray)":[[5,"pyray.unload_image",false]],"unload_image_colors() (in module pyray)":[[5,"pyray.unload_image_colors",false]],"unload_image_palette() (in module pyray)":[[5,"pyray.unload_image_palette",false]],"unload_material() (in module pyray)":[[5,"pyray.unload_material",false]],"unload_mesh() (in module pyray)":[[5,"pyray.unload_mesh",false]],"unload_model() (in module pyray)":[[5,"pyray.unload_model",false]],"unload_model_animation() (in module pyray)":[[5,"pyray.unload_model_animation",false]],"unload_model_animations() (in module pyray)":[[5,"pyray.unload_model_animations",false]],"unload_music_stream() (in module pyray)":[[5,"pyray.unload_music_stream",false]],"unload_random_sequence() (in module pyray)":[[5,"pyray.unload_random_sequence",false]],"unload_render_texture() (in module pyray)":[[5,"pyray.unload_render_texture",false]],"unload_shader() (in module pyray)":[[5,"pyray.unload_shader",false]],"unload_sound() (in module pyray)":[[5,"pyray.unload_sound",false]],"unload_sound_alias() (in module pyray)":[[5,"pyray.unload_sound_alias",false]],"unload_texture() (in module pyray)":[[5,"pyray.unload_texture",false]],"unload_utf8() (in module pyray)":[[5,"pyray.unload_utf8",false]],"unload_vr_stereo_config() (in module pyray)":[[5,"pyray.unload_vr_stereo_config",false]],"unload_wave() (in module pyray)":[[5,"pyray.unload_wave",false]],"unload_wave_samples() (in module pyray)":[[5,"pyray.unload_wave_samples",false]],"unloadaudiostream() (in module raylib)":[[6,"raylib.UnloadAudioStream",false]],"unloadautomationeventlist() (in module raylib)":[[6,"raylib.UnloadAutomationEventList",false]],"unloadcodepoints() (in module raylib)":[[6,"raylib.UnloadCodepoints",false]],"unloaddirectoryfiles() (in module raylib)":[[6,"raylib.UnloadDirectoryFiles",false]],"unloaddroppedfiles() (in module raylib)":[[6,"raylib.UnloadDroppedFiles",false]],"unloadfiledata() (in module raylib)":[[6,"raylib.UnloadFileData",false]],"unloadfiletext() (in module raylib)":[[6,"raylib.UnloadFileText",false]],"unloadfont() (in module raylib)":[[6,"raylib.UnloadFont",false]],"unloadfontdata() (in module raylib)":[[6,"raylib.UnloadFontData",false]],"unloadimage() (in module raylib)":[[6,"raylib.UnloadImage",false]],"unloadimagecolors() (in module raylib)":[[6,"raylib.UnloadImageColors",false]],"unloadimagepalette() (in module raylib)":[[6,"raylib.UnloadImagePalette",false]],"unloadmaterial() (in module raylib)":[[6,"raylib.UnloadMaterial",false]],"unloadmesh() (in module raylib)":[[6,"raylib.UnloadMesh",false]],"unloadmodel() (in module raylib)":[[6,"raylib.UnloadModel",false]],"unloadmodelanimation() (in module raylib)":[[6,"raylib.UnloadModelAnimation",false]],"unloadmodelanimations() (in module raylib)":[[6,"raylib.UnloadModelAnimations",false]],"unloadmusicstream() (in module raylib)":[[6,"raylib.UnloadMusicStream",false]],"unloadrandomsequence() (in module raylib)":[[6,"raylib.UnloadRandomSequence",false]],"unloadrendertexture() (in module raylib)":[[6,"raylib.UnloadRenderTexture",false]],"unloadshader() (in module raylib)":[[6,"raylib.UnloadShader",false]],"unloadsound() (in module raylib)":[[6,"raylib.UnloadSound",false]],"unloadsoundalias() (in module raylib)":[[6,"raylib.UnloadSoundAlias",false]],"unloadtexture() (in module raylib)":[[6,"raylib.UnloadTexture",false]],"unloadutf8() (in module raylib)":[[6,"raylib.UnloadUTF8",false]],"unloadvrstereoconfig() (in module raylib)":[[6,"raylib.UnloadVrStereoConfig",false]],"unloadwave() (in module raylib)":[[6,"raylib.UnloadWave",false]],"unloadwavesamples() (in module raylib)":[[6,"raylib.UnloadWaveSamples",false]],"up (pyray.camera3d attribute)":[[5,"pyray.Camera3D.up",false]],"up (raylib.camera attribute)":[[6,"raylib.Camera.up",false]],"up (raylib.camera3d attribute)":[[6,"raylib.Camera3D.up",false]],"update_audio_stream() (in module pyray)":[[5,"pyray.update_audio_stream",false]],"update_camera() (in module pyray)":[[5,"pyray.update_camera",false]],"update_camera_pro() (in module pyray)":[[5,"pyray.update_camera_pro",false]],"update_mesh_buffer() (in module pyray)":[[5,"pyray.update_mesh_buffer",false]],"update_model_animation() (in module pyray)":[[5,"pyray.update_model_animation",false]],"update_model_animation_bones() (in module pyray)":[[5,"pyray.update_model_animation_bones",false]],"update_music_stream() (in module pyray)":[[5,"pyray.update_music_stream",false]],"update_physics() (in module pyray)":[[5,"pyray.update_physics",false]],"update_sound() (in module pyray)":[[5,"pyray.update_sound",false]],"update_texture() (in module pyray)":[[5,"pyray.update_texture",false]],"update_texture_rec() (in module pyray)":[[5,"pyray.update_texture_rec",false]],"updateaudiostream() (in module raylib)":[[6,"raylib.UpdateAudioStream",false]],"updatecamera() (in module raylib)":[[6,"raylib.UpdateCamera",false]],"updatecamerapro() (in module raylib)":[[6,"raylib.UpdateCameraPro",false]],"updatemeshbuffer() (in module raylib)":[[6,"raylib.UpdateMeshBuffer",false]],"updatemodelanimation() (in module raylib)":[[6,"raylib.UpdateModelAnimation",false]],"updatemodelanimationbones() (in module raylib)":[[6,"raylib.UpdateModelAnimationBones",false]],"updatemusicstream() (in module raylib)":[[6,"raylib.UpdateMusicStream",false]],"updatephysics() (in module raylib)":[[6,"raylib.UpdatePhysics",false]],"updatesound() (in module raylib)":[[6,"raylib.UpdateSound",false]],"updatetexture() (in module raylib)":[[6,"raylib.UpdateTexture",false]],"updatetexturerec() (in module raylib)":[[6,"raylib.UpdateTextureRec",false]],"upload_mesh() (in module pyray)":[[5,"pyray.upload_mesh",false]],"uploadmesh() (in module raylib)":[[6,"raylib.UploadMesh",false]],"usegravity (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.useGravity",false]],"usegravity (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.useGravity",false]],"user (raylib.glfwallocator attribute)":[[6,"raylib.GLFWallocator.user",false]],"v (pyray.float16 attribute)":[[5,"pyray.float16.v",false]],"v (pyray.float3 attribute)":[[5,"pyray.float3.v",false]],"v (raylib.float16 attribute)":[[6,"raylib.float16.v",false]],"v (raylib.float3 attribute)":[[6,"raylib.float3.v",false]],"value (pyray.glyphinfo attribute)":[[5,"pyray.GlyphInfo.value",false]],"value (pyray.materialmap attribute)":[[5,"pyray.MaterialMap.value",false]],"value (raylib.glyphinfo attribute)":[[6,"raylib.GlyphInfo.value",false]],"value (raylib.materialmap attribute)":[[6,"raylib.MaterialMap.value",false]],"valuebox (in module raylib)":[[6,"raylib.VALUEBOX",false]],"valuebox (pyray.guicontrol attribute)":[[5,"pyray.GuiControl.VALUEBOX",false]],"vaoid (pyray.mesh attribute)":[[5,"pyray.Mesh.vaoId",false]],"vaoid (pyray.rlvertexbuffer attribute)":[[5,"pyray.rlVertexBuffer.vaoId",false]],"vaoid (raylib.mesh attribute)":[[6,"raylib.Mesh.vaoId",false]],"vaoid (raylib.rlvertexbuffer attribute)":[[6,"raylib.rlVertexBuffer.vaoId",false]],"vboid (pyray.mesh attribute)":[[5,"pyray.Mesh.vboId",false]],"vboid (pyray.rlvertexbuffer attribute)":[[5,"pyray.rlVertexBuffer.vboId",false]],"vboid (raylib.mesh attribute)":[[6,"raylib.Mesh.vboId",false]],"vboid (raylib.rlvertexbuffer attribute)":[[6,"raylib.rlVertexBuffer.vboId",false]],"vector2 (class in pyray)":[[5,"pyray.Vector2",false]],"vector2 (class in raylib)":[[6,"raylib.Vector2",false]],"vector2_add() (in module pyray)":[[5,"pyray.vector2_add",false]],"vector2_add_value() (in module pyray)":[[5,"pyray.vector2_add_value",false]],"vector2_angle() (in module pyray)":[[5,"pyray.vector2_angle",false]],"vector2_clamp() (in module pyray)":[[5,"pyray.vector2_clamp",false]],"vector2_clamp_value() (in module pyray)":[[5,"pyray.vector2_clamp_value",false]],"vector2_distance() (in module pyray)":[[5,"pyray.vector2_distance",false]],"vector2_distance_sqr() (in module pyray)":[[5,"pyray.vector2_distance_sqr",false]],"vector2_divide() (in module pyray)":[[5,"pyray.vector2_divide",false]],"vector2_dot_product() (in module pyray)":[[5,"pyray.vector2_dot_product",false]],"vector2_equals() (in module pyray)":[[5,"pyray.vector2_equals",false]],"vector2_invert() (in module pyray)":[[5,"pyray.vector2_invert",false]],"vector2_length() (in module pyray)":[[5,"pyray.vector2_length",false]],"vector2_length_sqr() (in module pyray)":[[5,"pyray.vector2_length_sqr",false]],"vector2_lerp() (in module pyray)":[[5,"pyray.vector2_lerp",false]],"vector2_line_angle() (in module pyray)":[[5,"pyray.vector2_line_angle",false]],"vector2_max() (in module pyray)":[[5,"pyray.vector2_max",false]],"vector2_min() (in module pyray)":[[5,"pyray.vector2_min",false]],"vector2_move_towards() (in module pyray)":[[5,"pyray.vector2_move_towards",false]],"vector2_multiply() (in module pyray)":[[5,"pyray.vector2_multiply",false]],"vector2_negate() (in module pyray)":[[5,"pyray.vector2_negate",false]],"vector2_normalize() (in module pyray)":[[5,"pyray.vector2_normalize",false]],"vector2_one() (in module pyray)":[[5,"pyray.vector2_one",false]],"vector2_reflect() (in module pyray)":[[5,"pyray.vector2_reflect",false]],"vector2_refract() (in module pyray)":[[5,"pyray.vector2_refract",false]],"vector2_rotate() (in module pyray)":[[5,"pyray.vector2_rotate",false]],"vector2_scale() (in module pyray)":[[5,"pyray.vector2_scale",false]],"vector2_subtract() (in module pyray)":[[5,"pyray.vector2_subtract",false]],"vector2_subtract_value() (in module pyray)":[[5,"pyray.vector2_subtract_value",false]],"vector2_transform() (in module pyray)":[[5,"pyray.vector2_transform",false]],"vector2_zero() (in module pyray)":[[5,"pyray.vector2_zero",false]],"vector2add() (in module raylib)":[[6,"raylib.Vector2Add",false]],"vector2addvalue() (in module raylib)":[[6,"raylib.Vector2AddValue",false]],"vector2angle() (in module raylib)":[[6,"raylib.Vector2Angle",false]],"vector2clamp() (in module raylib)":[[6,"raylib.Vector2Clamp",false]],"vector2clampvalue() (in module raylib)":[[6,"raylib.Vector2ClampValue",false]],"vector2distance() (in module raylib)":[[6,"raylib.Vector2Distance",false]],"vector2distancesqr() (in module raylib)":[[6,"raylib.Vector2DistanceSqr",false]],"vector2divide() (in module raylib)":[[6,"raylib.Vector2Divide",false]],"vector2dotproduct() (in module raylib)":[[6,"raylib.Vector2DotProduct",false]],"vector2equals() (in module raylib)":[[6,"raylib.Vector2Equals",false]],"vector2invert() (in module raylib)":[[6,"raylib.Vector2Invert",false]],"vector2length() (in module raylib)":[[6,"raylib.Vector2Length",false]],"vector2lengthsqr() (in module raylib)":[[6,"raylib.Vector2LengthSqr",false]],"vector2lerp() (in module raylib)":[[6,"raylib.Vector2Lerp",false]],"vector2lineangle() (in module raylib)":[[6,"raylib.Vector2LineAngle",false]],"vector2max() (in module raylib)":[[6,"raylib.Vector2Max",false]],"vector2min() (in module raylib)":[[6,"raylib.Vector2Min",false]],"vector2movetowards() (in module raylib)":[[6,"raylib.Vector2MoveTowards",false]],"vector2multiply() (in module raylib)":[[6,"raylib.Vector2Multiply",false]],"vector2negate() (in module raylib)":[[6,"raylib.Vector2Negate",false]],"vector2normalize() (in module raylib)":[[6,"raylib.Vector2Normalize",false]],"vector2one() (in module raylib)":[[6,"raylib.Vector2One",false]],"vector2reflect() (in module raylib)":[[6,"raylib.Vector2Reflect",false]],"vector2refract() (in module raylib)":[[6,"raylib.Vector2Refract",false]],"vector2rotate() (in module raylib)":[[6,"raylib.Vector2Rotate",false]],"vector2scale() (in module raylib)":[[6,"raylib.Vector2Scale",false]],"vector2subtract() (in module raylib)":[[6,"raylib.Vector2Subtract",false]],"vector2subtractvalue() (in module raylib)":[[6,"raylib.Vector2SubtractValue",false]],"vector2transform() (in module raylib)":[[6,"raylib.Vector2Transform",false]],"vector2zero() (in module raylib)":[[6,"raylib.Vector2Zero",false]],"vector3 (class in pyray)":[[5,"pyray.Vector3",false]],"vector3 (class in raylib)":[[6,"raylib.Vector3",false]],"vector3_add() (in module pyray)":[[5,"pyray.vector3_add",false]],"vector3_add_value() (in module pyray)":[[5,"pyray.vector3_add_value",false]],"vector3_angle() (in module pyray)":[[5,"pyray.vector3_angle",false]],"vector3_barycenter() (in module pyray)":[[5,"pyray.vector3_barycenter",false]],"vector3_clamp() (in module pyray)":[[5,"pyray.vector3_clamp",false]],"vector3_clamp_value() (in module pyray)":[[5,"pyray.vector3_clamp_value",false]],"vector3_cross_product() (in module pyray)":[[5,"pyray.vector3_cross_product",false]],"vector3_cubic_hermite() (in module pyray)":[[5,"pyray.vector3_cubic_hermite",false]],"vector3_distance() (in module pyray)":[[5,"pyray.vector3_distance",false]],"vector3_distance_sqr() (in module pyray)":[[5,"pyray.vector3_distance_sqr",false]],"vector3_divide() (in module pyray)":[[5,"pyray.vector3_divide",false]],"vector3_dot_product() (in module pyray)":[[5,"pyray.vector3_dot_product",false]],"vector3_equals() (in module pyray)":[[5,"pyray.vector3_equals",false]],"vector3_invert() (in module pyray)":[[5,"pyray.vector3_invert",false]],"vector3_length() (in module pyray)":[[5,"pyray.vector3_length",false]],"vector3_length_sqr() (in module pyray)":[[5,"pyray.vector3_length_sqr",false]],"vector3_lerp() (in module pyray)":[[5,"pyray.vector3_lerp",false]],"vector3_max() (in module pyray)":[[5,"pyray.vector3_max",false]],"vector3_min() (in module pyray)":[[5,"pyray.vector3_min",false]],"vector3_move_towards() (in module pyray)":[[5,"pyray.vector3_move_towards",false]],"vector3_multiply() (in module pyray)":[[5,"pyray.vector3_multiply",false]],"vector3_negate() (in module pyray)":[[5,"pyray.vector3_negate",false]],"vector3_normalize() (in module pyray)":[[5,"pyray.vector3_normalize",false]],"vector3_one() (in module pyray)":[[5,"pyray.vector3_one",false]],"vector3_ortho_normalize() (in module pyray)":[[5,"pyray.vector3_ortho_normalize",false]],"vector3_perpendicular() (in module pyray)":[[5,"pyray.vector3_perpendicular",false]],"vector3_project() (in module pyray)":[[5,"pyray.vector3_project",false]],"vector3_reflect() (in module pyray)":[[5,"pyray.vector3_reflect",false]],"vector3_refract() (in module pyray)":[[5,"pyray.vector3_refract",false]],"vector3_reject() (in module pyray)":[[5,"pyray.vector3_reject",false]],"vector3_rotate_by_axis_angle() (in module pyray)":[[5,"pyray.vector3_rotate_by_axis_angle",false]],"vector3_rotate_by_quaternion() (in module pyray)":[[5,"pyray.vector3_rotate_by_quaternion",false]],"vector3_scale() (in module pyray)":[[5,"pyray.vector3_scale",false]],"vector3_subtract() (in module pyray)":[[5,"pyray.vector3_subtract",false]],"vector3_subtract_value() (in module pyray)":[[5,"pyray.vector3_subtract_value",false]],"vector3_to_float_v() (in module pyray)":[[5,"pyray.vector3_to_float_v",false]],"vector3_transform() (in module pyray)":[[5,"pyray.vector3_transform",false]],"vector3_unproject() (in module pyray)":[[5,"pyray.vector3_unproject",false]],"vector3_zero() (in module pyray)":[[5,"pyray.vector3_zero",false]],"vector3add() (in module raylib)":[[6,"raylib.Vector3Add",false]],"vector3addvalue() (in module raylib)":[[6,"raylib.Vector3AddValue",false]],"vector3angle() (in module raylib)":[[6,"raylib.Vector3Angle",false]],"vector3barycenter() (in module raylib)":[[6,"raylib.Vector3Barycenter",false]],"vector3clamp() (in module raylib)":[[6,"raylib.Vector3Clamp",false]],"vector3clampvalue() (in module raylib)":[[6,"raylib.Vector3ClampValue",false]],"vector3crossproduct() (in module raylib)":[[6,"raylib.Vector3CrossProduct",false]],"vector3cubichermite() (in module raylib)":[[6,"raylib.Vector3CubicHermite",false]],"vector3distance() (in module raylib)":[[6,"raylib.Vector3Distance",false]],"vector3distancesqr() (in module raylib)":[[6,"raylib.Vector3DistanceSqr",false]],"vector3divide() (in module raylib)":[[6,"raylib.Vector3Divide",false]],"vector3dotproduct() (in module raylib)":[[6,"raylib.Vector3DotProduct",false]],"vector3equals() (in module raylib)":[[6,"raylib.Vector3Equals",false]],"vector3invert() (in module raylib)":[[6,"raylib.Vector3Invert",false]],"vector3length() (in module raylib)":[[6,"raylib.Vector3Length",false]],"vector3lengthsqr() (in module raylib)":[[6,"raylib.Vector3LengthSqr",false]],"vector3lerp() (in module raylib)":[[6,"raylib.Vector3Lerp",false]],"vector3max() (in module raylib)":[[6,"raylib.Vector3Max",false]],"vector3min() (in module raylib)":[[6,"raylib.Vector3Min",false]],"vector3movetowards() (in module raylib)":[[6,"raylib.Vector3MoveTowards",false]],"vector3multiply() (in module raylib)":[[6,"raylib.Vector3Multiply",false]],"vector3negate() (in module raylib)":[[6,"raylib.Vector3Negate",false]],"vector3normalize() (in module raylib)":[[6,"raylib.Vector3Normalize",false]],"vector3one() (in module raylib)":[[6,"raylib.Vector3One",false]],"vector3orthonormalize() (in module raylib)":[[6,"raylib.Vector3OrthoNormalize",false]],"vector3perpendicular() (in module raylib)":[[6,"raylib.Vector3Perpendicular",false]],"vector3project() (in module raylib)":[[6,"raylib.Vector3Project",false]],"vector3reflect() (in module raylib)":[[6,"raylib.Vector3Reflect",false]],"vector3refract() (in module raylib)":[[6,"raylib.Vector3Refract",false]],"vector3reject() (in module raylib)":[[6,"raylib.Vector3Reject",false]],"vector3rotatebyaxisangle() (in module raylib)":[[6,"raylib.Vector3RotateByAxisAngle",false]],"vector3rotatebyquaternion() (in module raylib)":[[6,"raylib.Vector3RotateByQuaternion",false]],"vector3scale() (in module raylib)":[[6,"raylib.Vector3Scale",false]],"vector3subtract() (in module raylib)":[[6,"raylib.Vector3Subtract",false]],"vector3subtractvalue() (in module raylib)":[[6,"raylib.Vector3SubtractValue",false]],"vector3tofloatv() (in module raylib)":[[6,"raylib.Vector3ToFloatV",false]],"vector3transform() (in module raylib)":[[6,"raylib.Vector3Transform",false]],"vector3unproject() (in module raylib)":[[6,"raylib.Vector3Unproject",false]],"vector3zero() (in module raylib)":[[6,"raylib.Vector3Zero",false]],"vector4 (class in pyray)":[[5,"pyray.Vector4",false]],"vector4 (class in raylib)":[[6,"raylib.Vector4",false]],"vector4_add() (in module pyray)":[[5,"pyray.vector4_add",false]],"vector4_add_value() (in module pyray)":[[5,"pyray.vector4_add_value",false]],"vector4_distance() (in module pyray)":[[5,"pyray.vector4_distance",false]],"vector4_distance_sqr() (in module pyray)":[[5,"pyray.vector4_distance_sqr",false]],"vector4_divide() (in module pyray)":[[5,"pyray.vector4_divide",false]],"vector4_dot_product() (in module pyray)":[[5,"pyray.vector4_dot_product",false]],"vector4_equals() (in module pyray)":[[5,"pyray.vector4_equals",false]],"vector4_invert() (in module pyray)":[[5,"pyray.vector4_invert",false]],"vector4_length() (in module pyray)":[[5,"pyray.vector4_length",false]],"vector4_length_sqr() (in module pyray)":[[5,"pyray.vector4_length_sqr",false]],"vector4_lerp() (in module pyray)":[[5,"pyray.vector4_lerp",false]],"vector4_max() (in module pyray)":[[5,"pyray.vector4_max",false]],"vector4_min() (in module pyray)":[[5,"pyray.vector4_min",false]],"vector4_move_towards() (in module pyray)":[[5,"pyray.vector4_move_towards",false]],"vector4_multiply() (in module pyray)":[[5,"pyray.vector4_multiply",false]],"vector4_negate() (in module pyray)":[[5,"pyray.vector4_negate",false]],"vector4_normalize() (in module pyray)":[[5,"pyray.vector4_normalize",false]],"vector4_one() (in module pyray)":[[5,"pyray.vector4_one",false]],"vector4_scale() (in module pyray)":[[5,"pyray.vector4_scale",false]],"vector4_subtract() (in module pyray)":[[5,"pyray.vector4_subtract",false]],"vector4_subtract_value() (in module pyray)":[[5,"pyray.vector4_subtract_value",false]],"vector4_zero() (in module pyray)":[[5,"pyray.vector4_zero",false]],"vector4add() (in module raylib)":[[6,"raylib.Vector4Add",false]],"vector4addvalue() (in module raylib)":[[6,"raylib.Vector4AddValue",false]],"vector4distance() (in module raylib)":[[6,"raylib.Vector4Distance",false]],"vector4distancesqr() (in module raylib)":[[6,"raylib.Vector4DistanceSqr",false]],"vector4divide() (in module raylib)":[[6,"raylib.Vector4Divide",false]],"vector4dotproduct() (in module raylib)":[[6,"raylib.Vector4DotProduct",false]],"vector4equals() (in module raylib)":[[6,"raylib.Vector4Equals",false]],"vector4invert() (in module raylib)":[[6,"raylib.Vector4Invert",false]],"vector4length() (in module raylib)":[[6,"raylib.Vector4Length",false]],"vector4lengthsqr() (in module raylib)":[[6,"raylib.Vector4LengthSqr",false]],"vector4lerp() (in module raylib)":[[6,"raylib.Vector4Lerp",false]],"vector4max() (in module raylib)":[[6,"raylib.Vector4Max",false]],"vector4min() (in module raylib)":[[6,"raylib.Vector4Min",false]],"vector4movetowards() (in module raylib)":[[6,"raylib.Vector4MoveTowards",false]],"vector4multiply() (in module raylib)":[[6,"raylib.Vector4Multiply",false]],"vector4negate() (in module raylib)":[[6,"raylib.Vector4Negate",false]],"vector4normalize() (in module raylib)":[[6,"raylib.Vector4Normalize",false]],"vector4one() (in module raylib)":[[6,"raylib.Vector4One",false]],"vector4scale() (in module raylib)":[[6,"raylib.Vector4Scale",false]],"vector4subtract() (in module raylib)":[[6,"raylib.Vector4Subtract",false]],"vector4subtractvalue() (in module raylib)":[[6,"raylib.Vector4SubtractValue",false]],"vector4zero() (in module raylib)":[[6,"raylib.Vector4Zero",false]],"velocity (pyray.physicsbodydata attribute)":[[5,"pyray.PhysicsBodyData.velocity",false]],"velocity (raylib.physicsbodydata attribute)":[[6,"raylib.PhysicsBodyData.velocity",false]],"vertexalignment (pyray.rldrawcall attribute)":[[5,"pyray.rlDrawCall.vertexAlignment",false]],"vertexalignment (raylib.rldrawcall attribute)":[[6,"raylib.rlDrawCall.vertexAlignment",false]],"vertexbuffer (pyray.rlrenderbatch attribute)":[[5,"pyray.rlRenderBatch.vertexBuffer",false]],"vertexbuffer (raylib.rlrenderbatch attribute)":[[6,"raylib.rlRenderBatch.vertexBuffer",false]],"vertexcount (pyray.mesh attribute)":[[5,"pyray.Mesh.vertexCount",false]],"vertexcount (pyray.physicsvertexdata attribute)":[[5,"pyray.PhysicsVertexData.vertexCount",false]],"vertexcount (pyray.rldrawcall attribute)":[[5,"pyray.rlDrawCall.vertexCount",false]],"vertexcount (raylib.mesh attribute)":[[6,"raylib.Mesh.vertexCount",false]],"vertexcount (raylib.physicsvertexdata attribute)":[[6,"raylib.PhysicsVertexData.vertexCount",false]],"vertexcount (raylib.rldrawcall attribute)":[[6,"raylib.rlDrawCall.vertexCount",false]],"vertexdata (pyray.physicsshape attribute)":[[5,"pyray.PhysicsShape.vertexData",false]],"vertexdata (raylib.physicsshape attribute)":[[6,"raylib.PhysicsShape.vertexData",false]],"vertices (pyray.mesh attribute)":[[5,"pyray.Mesh.vertices",false]],"vertices (pyray.rlvertexbuffer attribute)":[[5,"pyray.rlVertexBuffer.vertices",false]],"vertices (raylib.mesh attribute)":[[6,"raylib.Mesh.vertices",false]],"vertices (raylib.rlvertexbuffer attribute)":[[6,"raylib.rlVertexBuffer.vertices",false]],"viewoffset (pyray.vrstereoconfig attribute)":[[5,"pyray.VrStereoConfig.viewOffset",false]],"viewoffset (raylib.vrstereoconfig attribute)":[[6,"raylib.VrStereoConfig.viewOffset",false]],"violet (in module pyray)":[[5,"pyray.VIOLET",false]],"violet (in module raylib)":[[6,"raylib.VIOLET",false]],"vrdeviceinfo (class in pyray)":[[5,"pyray.VrDeviceInfo",false]],"vrdeviceinfo (class in raylib)":[[6,"raylib.VrDeviceInfo",false]],"vresolution (pyray.vrdeviceinfo attribute)":[[5,"pyray.VrDeviceInfo.vResolution",false]],"vresolution (raylib.vrdeviceinfo attribute)":[[6,"raylib.VrDeviceInfo.vResolution",false]],"vrstereoconfig (class in pyray)":[[5,"pyray.VrStereoConfig",false]],"vrstereoconfig (class in raylib)":[[6,"raylib.VrStereoConfig",false]],"vscreensize (pyray.vrdeviceinfo attribute)":[[5,"pyray.VrDeviceInfo.vScreenSize",false]],"vscreensize (raylib.vrdeviceinfo attribute)":[[6,"raylib.VrDeviceInfo.vScreenSize",false]],"w (pyray.vector4 attribute)":[[5,"pyray.Vector4.w",false]],"w (raylib.quaternion attribute)":[[6,"raylib.Quaternion.w",false]],"w (raylib.vector4 attribute)":[[6,"raylib.Vector4.w",false]],"wait_time() (in module pyray)":[[5,"pyray.wait_time",false]],"waittime() (in module raylib)":[[6,"raylib.WaitTime",false]],"wave (class in pyray)":[[5,"pyray.Wave",false]],"wave (class in raylib)":[[6,"raylib.Wave",false]],"wave_copy() (in module pyray)":[[5,"pyray.wave_copy",false]],"wave_crop() (in module pyray)":[[5,"pyray.wave_crop",false]],"wave_format() (in module pyray)":[[5,"pyray.wave_format",false]],"wavecopy() (in module raylib)":[[6,"raylib.WaveCopy",false]],"wavecrop() (in module raylib)":[[6,"raylib.WaveCrop",false]],"waveformat() (in module raylib)":[[6,"raylib.WaveFormat",false]],"white (in module pyray)":[[5,"pyray.WHITE",false]],"white (in module raylib)":[[6,"raylib.WHITE",false]],"width (pyray.image attribute)":[[5,"pyray.Image.width",false]],"width (pyray.rectangle attribute)":[[5,"pyray.Rectangle.width",false]],"width (pyray.texture attribute)":[[5,"pyray.Texture.width",false]],"width (pyray.texture2d attribute)":[[5,"pyray.Texture2D.width",false]],"width (raylib.glfwimage attribute)":[[6,"raylib.GLFWimage.width",false]],"width (raylib.glfwvidmode attribute)":[[6,"raylib.GLFWvidmode.width",false]],"width (raylib.image attribute)":[[6,"raylib.Image.width",false]],"width (raylib.rectangle attribute)":[[6,"raylib.Rectangle.width",false]],"width (raylib.texture attribute)":[[6,"raylib.Texture.width",false]],"width (raylib.texture2d attribute)":[[6,"raylib.Texture2D.width",false]],"width (raylib.texturecubemap attribute)":[[6,"raylib.TextureCubemap.width",false]],"window_should_close() (in module pyray)":[[5,"pyray.window_should_close",false]],"windowshouldclose() (in module raylib)":[[6,"raylib.WindowShouldClose",false]],"wrap() (in module pyray)":[[5,"pyray.wrap",false]],"wrap() (in module raylib)":[[6,"raylib.Wrap",false]],"x (pyray.rectangle attribute)":[[5,"pyray.Rectangle.x",false]],"x (pyray.vector2 attribute)":[[5,"pyray.Vector2.x",false]],"x (pyray.vector3 attribute)":[[5,"pyray.Vector3.x",false]],"x (pyray.vector4 attribute)":[[5,"pyray.Vector4.x",false]],"x (raylib.quaternion attribute)":[[6,"raylib.Quaternion.x",false]],"x (raylib.rectangle attribute)":[[6,"raylib.Rectangle.x",false]],"x (raylib.vector2 attribute)":[[6,"raylib.Vector2.x",false]],"x (raylib.vector3 attribute)":[[6,"raylib.Vector3.x",false]],"x (raylib.vector4 attribute)":[[6,"raylib.Vector4.x",false]],"y (pyray.rectangle attribute)":[[5,"pyray.Rectangle.y",false]],"y (pyray.vector2 attribute)":[[5,"pyray.Vector2.y",false]],"y (pyray.vector3 attribute)":[[5,"pyray.Vector3.y",false]],"y (pyray.vector4 attribute)":[[5,"pyray.Vector4.y",false]],"y (raylib.quaternion attribute)":[[6,"raylib.Quaternion.y",false]],"y (raylib.rectangle attribute)":[[6,"raylib.Rectangle.y",false]],"y (raylib.vector2 attribute)":[[6,"raylib.Vector2.y",false]],"y (raylib.vector3 attribute)":[[6,"raylib.Vector3.y",false]],"y (raylib.vector4 attribute)":[[6,"raylib.Vector4.y",false]],"yellow (in module pyray)":[[5,"pyray.YELLOW",false]],"yellow (in module raylib)":[[6,"raylib.YELLOW",false]],"z (pyray.vector3 attribute)":[[5,"pyray.Vector3.z",false]],"z (pyray.vector4 attribute)":[[5,"pyray.Vector4.z",false]],"z (raylib.quaternion attribute)":[[6,"raylib.Quaternion.z",false]],"z (raylib.vector3 attribute)":[[6,"raylib.Vector3.z",false]],"z (raylib.vector4 attribute)":[[6,"raylib.Vector4.z",false]],"zoom (pyray.camera2d attribute)":[[5,"pyray.Camera2D.zoom",false]],"zoom (raylib.camera2d attribute)":[[6,"raylib.Camera2D.zoom",false]]},"objects":{"":[[5,0,0,"-","pyray"],[6,0,0,"-","raylib"]],"pyray":[[5,1,1,"","AudioStream"],[5,1,1,"","AutomationEvent"],[5,1,1,"","AutomationEventList"],[5,3,1,"","BEIGE"],[5,3,1,"","BLACK"],[5,3,1,"","BLANK"],[5,3,1,"","BLUE"],[5,3,1,"","BROWN"],[5,1,1,"","BlendMode"],[5,1,1,"","BoneInfo"],[5,1,1,"","BoundingBox"],[5,1,1,"","Camera2D"],[5,1,1,"","Camera3D"],[5,1,1,"","CameraMode"],[5,1,1,"","CameraProjection"],[5,1,1,"","Color"],[5,1,1,"","ConfigFlags"],[5,1,1,"","CubemapLayout"],[5,3,1,"","DARKBLUE"],[5,3,1,"","DARKBROWN"],[5,3,1,"","DARKGRAY"],[5,3,1,"","DARKGREEN"],[5,3,1,"","DARKPURPLE"],[5,1,1,"","FilePathList"],[5,1,1,"","Font"],[5,1,1,"","FontType"],[5,3,1,"","GOLD"],[5,3,1,"","GRAY"],[5,3,1,"","GREEN"],[5,1,1,"","GamepadAxis"],[5,1,1,"","GamepadButton"],[5,1,1,"","Gesture"],[5,1,1,"","GlyphInfo"],[5,1,1,"","GuiCheckBoxProperty"],[5,1,1,"","GuiColorPickerProperty"],[5,1,1,"","GuiComboBoxProperty"],[5,1,1,"","GuiControl"],[5,1,1,"","GuiControlProperty"],[5,1,1,"","GuiDefaultProperty"],[5,1,1,"","GuiDropdownBoxProperty"],[5,1,1,"","GuiIconName"],[5,1,1,"","GuiListViewProperty"],[5,1,1,"","GuiProgressBarProperty"],[5,1,1,"","GuiScrollBarProperty"],[5,1,1,"","GuiSliderProperty"],[5,1,1,"","GuiSpinnerProperty"],[5,1,1,"","GuiState"],[5,1,1,"","GuiStyleProp"],[5,1,1,"","GuiTextAlignment"],[5,1,1,"","GuiTextAlignmentVertical"],[5,1,1,"","GuiTextBoxProperty"],[5,1,1,"","GuiTextWrapMode"],[5,1,1,"","GuiToggleProperty"],[5,1,1,"","Image"],[5,1,1,"","KeyboardKey"],[5,3,1,"","LIGHTGRAY"],[5,3,1,"","LIME"],[5,3,1,"","MAGENTA"],[5,3,1,"","MAROON"],[5,1,1,"","Material"],[5,1,1,"","MaterialMap"],[5,1,1,"","MaterialMapIndex"],[5,1,1,"","Matrix"],[5,1,1,"","Matrix2x2"],[5,1,1,"","Mesh"],[5,1,1,"","Model"],[5,1,1,"","ModelAnimation"],[5,1,1,"","MouseButton"],[5,1,1,"","MouseCursor"],[5,1,1,"","Music"],[5,1,1,"","NPatchInfo"],[5,1,1,"","NPatchLayout"],[5,3,1,"","ORANGE"],[5,3,1,"","PINK"],[5,3,1,"","PURPLE"],[5,1,1,"","PhysicsBodyData"],[5,1,1,"","PhysicsManifoldData"],[5,1,1,"","PhysicsShape"],[5,1,1,"","PhysicsVertexData"],[5,1,1,"","PixelFormat"],[5,3,1,"","RAYWHITE"],[5,3,1,"","RED"],[5,1,1,"","Ray"],[5,1,1,"","RayCollision"],[5,1,1,"","Rectangle"],[5,1,1,"","RenderTexture"],[5,3,1,"","SKYBLUE"],[5,1,1,"","Shader"],[5,1,1,"","ShaderAttributeDataType"],[5,1,1,"","ShaderLocationIndex"],[5,1,1,"","ShaderUniformDataType"],[5,1,1,"","Sound"],[5,1,1,"","Texture"],[5,1,1,"","Texture2D"],[5,1,1,"","TextureFilter"],[5,1,1,"","TextureWrap"],[5,1,1,"","TraceLogLevel"],[5,1,1,"","Transform"],[5,3,1,"","VIOLET"],[5,1,1,"","Vector2"],[5,1,1,"","Vector3"],[5,1,1,"","Vector4"],[5,1,1,"","VrDeviceInfo"],[5,1,1,"","VrStereoConfig"],[5,3,1,"","WHITE"],[5,1,1,"","Wave"],[5,3,1,"","YELLOW"],[5,4,1,"","attach_audio_mixed_processor"],[5,4,1,"","attach_audio_stream_processor"],[5,4,1,"","begin_blend_mode"],[5,4,1,"","begin_drawing"],[5,4,1,"","begin_mode_2d"],[5,4,1,"","begin_mode_3d"],[5,4,1,"","begin_scissor_mode"],[5,4,1,"","begin_shader_mode"],[5,4,1,"","begin_texture_mode"],[5,4,1,"","begin_vr_stereo_mode"],[5,4,1,"","change_directory"],[5,4,1,"","check_collision_box_sphere"],[5,4,1,"","check_collision_boxes"],[5,4,1,"","check_collision_circle_line"],[5,4,1,"","check_collision_circle_rec"],[5,4,1,"","check_collision_circles"],[5,4,1,"","check_collision_lines"],[5,4,1,"","check_collision_point_circle"],[5,4,1,"","check_collision_point_line"],[5,4,1,"","check_collision_point_poly"],[5,4,1,"","check_collision_point_rec"],[5,4,1,"","check_collision_point_triangle"],[5,4,1,"","check_collision_recs"],[5,4,1,"","check_collision_spheres"],[5,4,1,"","clamp"],[5,4,1,"","clear_background"],[5,4,1,"","clear_window_state"],[5,4,1,"","close_audio_device"],[5,4,1,"","close_physics"],[5,4,1,"","close_window"],[5,4,1,"","codepoint_to_utf8"],[5,4,1,"","color_alpha"],[5,4,1,"","color_alpha_blend"],[5,4,1,"","color_brightness"],[5,4,1,"","color_contrast"],[5,4,1,"","color_from_hsv"],[5,4,1,"","color_from_normalized"],[5,4,1,"","color_is_equal"],[5,4,1,"","color_lerp"],[5,4,1,"","color_normalize"],[5,4,1,"","color_tint"],[5,4,1,"","color_to_hsv"],[5,4,1,"","color_to_int"],[5,4,1,"","compress_data"],[5,4,1,"","compute_crc32"],[5,4,1,"","compute_md5"],[5,4,1,"","compute_sha1"],[5,4,1,"","create_physics_body_circle"],[5,4,1,"","create_physics_body_polygon"],[5,4,1,"","create_physics_body_rectangle"],[5,4,1,"","decode_data_base64"],[5,4,1,"","decompress_data"],[5,4,1,"","destroy_physics_body"],[5,4,1,"","detach_audio_mixed_processor"],[5,4,1,"","detach_audio_stream_processor"],[5,4,1,"","directory_exists"],[5,4,1,"","disable_cursor"],[5,4,1,"","disable_event_waiting"],[5,4,1,"","draw_billboard"],[5,4,1,"","draw_billboard_pro"],[5,4,1,"","draw_billboard_rec"],[5,4,1,"","draw_bounding_box"],[5,4,1,"","draw_capsule"],[5,4,1,"","draw_capsule_wires"],[5,4,1,"","draw_circle"],[5,4,1,"","draw_circle_3d"],[5,4,1,"","draw_circle_gradient"],[5,4,1,"","draw_circle_lines"],[5,4,1,"","draw_circle_lines_v"],[5,4,1,"","draw_circle_sector"],[5,4,1,"","draw_circle_sector_lines"],[5,4,1,"","draw_circle_v"],[5,4,1,"","draw_cube"],[5,4,1,"","draw_cube_v"],[5,4,1,"","draw_cube_wires"],[5,4,1,"","draw_cube_wires_v"],[5,4,1,"","draw_cylinder"],[5,4,1,"","draw_cylinder_ex"],[5,4,1,"","draw_cylinder_wires"],[5,4,1,"","draw_cylinder_wires_ex"],[5,4,1,"","draw_ellipse"],[5,4,1,"","draw_ellipse_lines"],[5,4,1,"","draw_fps"],[5,4,1,"","draw_grid"],[5,4,1,"","draw_line"],[5,4,1,"","draw_line_3d"],[5,4,1,"","draw_line_bezier"],[5,4,1,"","draw_line_ex"],[5,4,1,"","draw_line_strip"],[5,4,1,"","draw_line_v"],[5,4,1,"","draw_mesh"],[5,4,1,"","draw_mesh_instanced"],[5,4,1,"","draw_model"],[5,4,1,"","draw_model_ex"],[5,4,1,"","draw_model_points"],[5,4,1,"","draw_model_points_ex"],[5,4,1,"","draw_model_wires"],[5,4,1,"","draw_model_wires_ex"],[5,4,1,"","draw_pixel"],[5,4,1,"","draw_pixel_v"],[5,4,1,"","draw_plane"],[5,4,1,"","draw_point_3d"],[5,4,1,"","draw_poly"],[5,4,1,"","draw_poly_lines"],[5,4,1,"","draw_poly_lines_ex"],[5,4,1,"","draw_ray"],[5,4,1,"","draw_rectangle"],[5,4,1,"","draw_rectangle_gradient_ex"],[5,4,1,"","draw_rectangle_gradient_h"],[5,4,1,"","draw_rectangle_gradient_v"],[5,4,1,"","draw_rectangle_lines"],[5,4,1,"","draw_rectangle_lines_ex"],[5,4,1,"","draw_rectangle_pro"],[5,4,1,"","draw_rectangle_rec"],[5,4,1,"","draw_rectangle_rounded"],[5,4,1,"","draw_rectangle_rounded_lines"],[5,4,1,"","draw_rectangle_rounded_lines_ex"],[5,4,1,"","draw_rectangle_v"],[5,4,1,"","draw_ring"],[5,4,1,"","draw_ring_lines"],[5,4,1,"","draw_sphere"],[5,4,1,"","draw_sphere_ex"],[5,4,1,"","draw_sphere_wires"],[5,4,1,"","draw_spline_basis"],[5,4,1,"","draw_spline_bezier_cubic"],[5,4,1,"","draw_spline_bezier_quadratic"],[5,4,1,"","draw_spline_catmull_rom"],[5,4,1,"","draw_spline_linear"],[5,4,1,"","draw_spline_segment_basis"],[5,4,1,"","draw_spline_segment_bezier_cubic"],[5,4,1,"","draw_spline_segment_bezier_quadratic"],[5,4,1,"","draw_spline_segment_catmull_rom"],[5,4,1,"","draw_spline_segment_linear"],[5,4,1,"","draw_text"],[5,4,1,"","draw_text_codepoint"],[5,4,1,"","draw_text_codepoints"],[5,4,1,"","draw_text_ex"],[5,4,1,"","draw_text_pro"],[5,4,1,"","draw_texture"],[5,4,1,"","draw_texture_ex"],[5,4,1,"","draw_texture_n_patch"],[5,4,1,"","draw_texture_pro"],[5,4,1,"","draw_texture_rec"],[5,4,1,"","draw_texture_v"],[5,4,1,"","draw_triangle"],[5,4,1,"","draw_triangle_3d"],[5,4,1,"","draw_triangle_fan"],[5,4,1,"","draw_triangle_lines"],[5,4,1,"","draw_triangle_strip"],[5,4,1,"","draw_triangle_strip_3d"],[5,4,1,"","enable_cursor"],[5,4,1,"","enable_event_waiting"],[5,4,1,"","encode_data_base64"],[5,4,1,"","end_blend_mode"],[5,4,1,"","end_drawing"],[5,4,1,"","end_mode_2d"],[5,4,1,"","end_mode_3d"],[5,4,1,"","end_scissor_mode"],[5,4,1,"","end_shader_mode"],[5,4,1,"","end_texture_mode"],[5,4,1,"","end_vr_stereo_mode"],[5,4,1,"","export_automation_event_list"],[5,4,1,"","export_data_as_code"],[5,4,1,"","export_font_as_code"],[5,4,1,"","export_image"],[5,4,1,"","export_image_as_code"],[5,4,1,"","export_image_to_memory"],[5,4,1,"","export_mesh"],[5,4,1,"","export_mesh_as_code"],[5,4,1,"","export_wave"],[5,4,1,"","export_wave_as_code"],[5,4,1,"","fade"],[5,3,1,"","ffi"],[5,4,1,"","file_exists"],[5,1,1,"","float16"],[5,1,1,"","float3"],[5,4,1,"","float_equals"],[5,4,1,"","gen_image_cellular"],[5,4,1,"","gen_image_checked"],[5,4,1,"","gen_image_color"],[5,4,1,"","gen_image_font_atlas"],[5,4,1,"","gen_image_gradient_linear"],[5,4,1,"","gen_image_gradient_radial"],[5,4,1,"","gen_image_gradient_square"],[5,4,1,"","gen_image_perlin_noise"],[5,4,1,"","gen_image_text"],[5,4,1,"","gen_image_white_noise"],[5,4,1,"","gen_mesh_cone"],[5,4,1,"","gen_mesh_cube"],[5,4,1,"","gen_mesh_cubicmap"],[5,4,1,"","gen_mesh_cylinder"],[5,4,1,"","gen_mesh_heightmap"],[5,4,1,"","gen_mesh_hemi_sphere"],[5,4,1,"","gen_mesh_knot"],[5,4,1,"","gen_mesh_plane"],[5,4,1,"","gen_mesh_poly"],[5,4,1,"","gen_mesh_sphere"],[5,4,1,"","gen_mesh_tangents"],[5,4,1,"","gen_mesh_torus"],[5,4,1,"","gen_texture_mipmaps"],[5,4,1,"","get_application_directory"],[5,4,1,"","get_camera_matrix"],[5,4,1,"","get_camera_matrix_2d"],[5,4,1,"","get_char_pressed"],[5,4,1,"","get_clipboard_image"],[5,4,1,"","get_clipboard_text"],[5,4,1,"","get_codepoint"],[5,4,1,"","get_codepoint_count"],[5,4,1,"","get_codepoint_next"],[5,4,1,"","get_codepoint_previous"],[5,4,1,"","get_collision_rec"],[5,4,1,"","get_color"],[5,4,1,"","get_current_monitor"],[5,4,1,"","get_directory_path"],[5,4,1,"","get_file_extension"],[5,4,1,"","get_file_length"],[5,4,1,"","get_file_mod_time"],[5,4,1,"","get_file_name"],[5,4,1,"","get_file_name_without_ext"],[5,4,1,"","get_font_default"],[5,4,1,"","get_fps"],[5,4,1,"","get_frame_time"],[5,4,1,"","get_gamepad_axis_count"],[5,4,1,"","get_gamepad_axis_movement"],[5,4,1,"","get_gamepad_button_pressed"],[5,4,1,"","get_gamepad_name"],[5,4,1,"","get_gesture_detected"],[5,4,1,"","get_gesture_drag_angle"],[5,4,1,"","get_gesture_drag_vector"],[5,4,1,"","get_gesture_hold_duration"],[5,4,1,"","get_gesture_pinch_angle"],[5,4,1,"","get_gesture_pinch_vector"],[5,4,1,"","get_glyph_atlas_rec"],[5,4,1,"","get_glyph_index"],[5,4,1,"","get_glyph_info"],[5,4,1,"","get_image_alpha_border"],[5,4,1,"","get_image_color"],[5,4,1,"","get_key_pressed"],[5,4,1,"","get_master_volume"],[5,4,1,"","get_mesh_bounding_box"],[5,4,1,"","get_model_bounding_box"],[5,4,1,"","get_monitor_count"],[5,4,1,"","get_monitor_height"],[5,4,1,"","get_monitor_name"],[5,4,1,"","get_monitor_physical_height"],[5,4,1,"","get_monitor_physical_width"],[5,4,1,"","get_monitor_position"],[5,4,1,"","get_monitor_refresh_rate"],[5,4,1,"","get_monitor_width"],[5,4,1,"","get_mouse_delta"],[5,4,1,"","get_mouse_position"],[5,4,1,"","get_mouse_wheel_move"],[5,4,1,"","get_mouse_wheel_move_v"],[5,4,1,"","get_mouse_x"],[5,4,1,"","get_mouse_y"],[5,4,1,"","get_music_time_length"],[5,4,1,"","get_music_time_played"],[5,4,1,"","get_physics_bodies_count"],[5,4,1,"","get_physics_body"],[5,4,1,"","get_physics_shape_type"],[5,4,1,"","get_physics_shape_vertex"],[5,4,1,"","get_physics_shape_vertices_count"],[5,4,1,"","get_pixel_color"],[5,4,1,"","get_pixel_data_size"],[5,4,1,"","get_prev_directory_path"],[5,4,1,"","get_random_value"],[5,4,1,"","get_ray_collision_box"],[5,4,1,"","get_ray_collision_mesh"],[5,4,1,"","get_ray_collision_quad"],[5,4,1,"","get_ray_collision_sphere"],[5,4,1,"","get_ray_collision_triangle"],[5,4,1,"","get_render_height"],[5,4,1,"","get_render_width"],[5,4,1,"","get_screen_height"],[5,4,1,"","get_screen_to_world_2d"],[5,4,1,"","get_screen_to_world_ray"],[5,4,1,"","get_screen_to_world_ray_ex"],[5,4,1,"","get_screen_width"],[5,4,1,"","get_shader_location"],[5,4,1,"","get_shader_location_attrib"],[5,4,1,"","get_shapes_texture"],[5,4,1,"","get_shapes_texture_rectangle"],[5,4,1,"","get_spline_point_basis"],[5,4,1,"","get_spline_point_bezier_cubic"],[5,4,1,"","get_spline_point_bezier_quad"],[5,4,1,"","get_spline_point_catmull_rom"],[5,4,1,"","get_spline_point_linear"],[5,4,1,"","get_time"],[5,4,1,"","get_touch_point_count"],[5,4,1,"","get_touch_point_id"],[5,4,1,"","get_touch_position"],[5,4,1,"","get_touch_x"],[5,4,1,"","get_touch_y"],[5,4,1,"","get_window_handle"],[5,4,1,"","get_window_position"],[5,4,1,"","get_window_scale_dpi"],[5,4,1,"","get_working_directory"],[5,4,1,"","get_world_to_screen"],[5,4,1,"","get_world_to_screen_2d"],[5,4,1,"","get_world_to_screen_ex"],[5,4,1,"","glfw_create_cursor"],[5,4,1,"","glfw_create_standard_cursor"],[5,4,1,"","glfw_create_window"],[5,4,1,"","glfw_default_window_hints"],[5,4,1,"","glfw_destroy_cursor"],[5,4,1,"","glfw_destroy_window"],[5,4,1,"","glfw_extension_supported"],[5,4,1,"","glfw_focus_window"],[5,4,1,"","glfw_get_clipboard_string"],[5,4,1,"","glfw_get_current_context"],[5,4,1,"","glfw_get_cursor_pos"],[5,4,1,"","glfw_get_error"],[5,4,1,"","glfw_get_framebuffer_size"],[5,4,1,"","glfw_get_gamepad_name"],[5,4,1,"","glfw_get_gamepad_state"],[5,4,1,"","glfw_get_gamma_ramp"],[5,4,1,"","glfw_get_input_mode"],[5,4,1,"","glfw_get_joystick_axes"],[5,4,1,"","glfw_get_joystick_buttons"],[5,4,1,"","glfw_get_joystick_guid"],[5,4,1,"","glfw_get_joystick_hats"],[5,4,1,"","glfw_get_joystick_name"],[5,4,1,"","glfw_get_joystick_user_pointer"],[5,4,1,"","glfw_get_key"],[5,4,1,"","glfw_get_key_name"],[5,4,1,"","glfw_get_key_scancode"],[5,4,1,"","glfw_get_monitor_content_scale"],[5,4,1,"","glfw_get_monitor_name"],[5,4,1,"","glfw_get_monitor_physical_size"],[5,4,1,"","glfw_get_monitor_pos"],[5,4,1,"","glfw_get_monitor_user_pointer"],[5,4,1,"","glfw_get_monitor_workarea"],[5,4,1,"","glfw_get_monitors"],[5,4,1,"","glfw_get_mouse_button"],[5,4,1,"","glfw_get_platform"],[5,4,1,"","glfw_get_primary_monitor"],[5,4,1,"","glfw_get_proc_address"],[5,4,1,"","glfw_get_required_instance_extensions"],[5,4,1,"","glfw_get_time"],[5,4,1,"","glfw_get_timer_frequency"],[5,4,1,"","glfw_get_timer_value"],[5,4,1,"","glfw_get_version"],[5,4,1,"","glfw_get_version_string"],[5,4,1,"","glfw_get_video_mode"],[5,4,1,"","glfw_get_video_modes"],[5,4,1,"","glfw_get_window_attrib"],[5,4,1,"","glfw_get_window_content_scale"],[5,4,1,"","glfw_get_window_frame_size"],[5,4,1,"","glfw_get_window_monitor"],[5,4,1,"","glfw_get_window_opacity"],[5,4,1,"","glfw_get_window_pos"],[5,4,1,"","glfw_get_window_size"],[5,4,1,"","glfw_get_window_title"],[5,4,1,"","glfw_get_window_user_pointer"],[5,4,1,"","glfw_hide_window"],[5,4,1,"","glfw_iconify_window"],[5,4,1,"","glfw_init"],[5,4,1,"","glfw_init_allocator"],[5,4,1,"","glfw_init_hint"],[5,4,1,"","glfw_joystick_is_gamepad"],[5,4,1,"","glfw_joystick_present"],[5,4,1,"","glfw_make_context_current"],[5,4,1,"","glfw_maximize_window"],[5,4,1,"","glfw_platform_supported"],[5,4,1,"","glfw_poll_events"],[5,4,1,"","glfw_post_empty_event"],[5,4,1,"","glfw_raw_mouse_motion_supported"],[5,4,1,"","glfw_request_window_attention"],[5,4,1,"","glfw_restore_window"],[5,4,1,"","glfw_set_char_callback"],[5,4,1,"","glfw_set_char_mods_callback"],[5,4,1,"","glfw_set_clipboard_string"],[5,4,1,"","glfw_set_cursor"],[5,4,1,"","glfw_set_cursor_enter_callback"],[5,4,1,"","glfw_set_cursor_pos"],[5,4,1,"","glfw_set_cursor_pos_callback"],[5,4,1,"","glfw_set_drop_callback"],[5,4,1,"","glfw_set_error_callback"],[5,4,1,"","glfw_set_framebuffer_size_callback"],[5,4,1,"","glfw_set_gamma"],[5,4,1,"","glfw_set_gamma_ramp"],[5,4,1,"","glfw_set_input_mode"],[5,4,1,"","glfw_set_joystick_callback"],[5,4,1,"","glfw_set_joystick_user_pointer"],[5,4,1,"","glfw_set_key_callback"],[5,4,1,"","glfw_set_monitor_callback"],[5,4,1,"","glfw_set_monitor_user_pointer"],[5,4,1,"","glfw_set_mouse_button_callback"],[5,4,1,"","glfw_set_scroll_callback"],[5,4,1,"","glfw_set_time"],[5,4,1,"","glfw_set_window_aspect_ratio"],[5,4,1,"","glfw_set_window_attrib"],[5,4,1,"","glfw_set_window_close_callback"],[5,4,1,"","glfw_set_window_content_scale_callback"],[5,4,1,"","glfw_set_window_focus_callback"],[5,4,1,"","glfw_set_window_icon"],[5,4,1,"","glfw_set_window_iconify_callback"],[5,4,1,"","glfw_set_window_maximize_callback"],[5,4,1,"","glfw_set_window_monitor"],[5,4,1,"","glfw_set_window_opacity"],[5,4,1,"","glfw_set_window_pos"],[5,4,1,"","glfw_set_window_pos_callback"],[5,4,1,"","glfw_set_window_refresh_callback"],[5,4,1,"","glfw_set_window_should_close"],[5,4,1,"","glfw_set_window_size"],[5,4,1,"","glfw_set_window_size_callback"],[5,4,1,"","glfw_set_window_size_limits"],[5,4,1,"","glfw_set_window_title"],[5,4,1,"","glfw_set_window_user_pointer"],[5,4,1,"","glfw_show_window"],[5,4,1,"","glfw_swap_buffers"],[5,4,1,"","glfw_swap_interval"],[5,4,1,"","glfw_terminate"],[5,4,1,"","glfw_update_gamepad_mappings"],[5,4,1,"","glfw_vulkan_supported"],[5,4,1,"","glfw_wait_events"],[5,4,1,"","glfw_wait_events_timeout"],[5,4,1,"","glfw_window_hint"],[5,4,1,"","glfw_window_hint_string"],[5,4,1,"","glfw_window_should_close"],[5,4,1,"","gui_button"],[5,4,1,"","gui_check_box"],[5,4,1,"","gui_color_bar_alpha"],[5,4,1,"","gui_color_bar_hue"],[5,4,1,"","gui_color_panel"],[5,4,1,"","gui_color_panel_hsv"],[5,4,1,"","gui_color_picker"],[5,4,1,"","gui_color_picker_hsv"],[5,4,1,"","gui_combo_box"],[5,4,1,"","gui_disable"],[5,4,1,"","gui_disable_tooltip"],[5,4,1,"","gui_draw_icon"],[5,4,1,"","gui_dropdown_box"],[5,4,1,"","gui_dummy_rec"],[5,4,1,"","gui_enable"],[5,4,1,"","gui_enable_tooltip"],[5,4,1,"","gui_get_font"],[5,4,1,"","gui_get_icons"],[5,4,1,"","gui_get_state"],[5,4,1,"","gui_get_style"],[5,4,1,"","gui_grid"],[5,4,1,"","gui_group_box"],[5,4,1,"","gui_icon_text"],[5,4,1,"","gui_is_locked"],[5,4,1,"","gui_label"],[5,4,1,"","gui_label_button"],[5,4,1,"","gui_line"],[5,4,1,"","gui_list_view"],[5,4,1,"","gui_list_view_ex"],[5,4,1,"","gui_load_icons"],[5,4,1,"","gui_load_style"],[5,4,1,"","gui_load_style_default"],[5,4,1,"","gui_lock"],[5,4,1,"","gui_message_box"],[5,4,1,"","gui_panel"],[5,4,1,"","gui_progress_bar"],[5,4,1,"","gui_scroll_panel"],[5,4,1,"","gui_set_alpha"],[5,4,1,"","gui_set_font"],[5,4,1,"","gui_set_icon_scale"],[5,4,1,"","gui_set_state"],[5,4,1,"","gui_set_style"],[5,4,1,"","gui_set_tooltip"],[5,4,1,"","gui_slider"],[5,4,1,"","gui_slider_bar"],[5,4,1,"","gui_spinner"],[5,4,1,"","gui_status_bar"],[5,4,1,"","gui_tab_bar"],[5,4,1,"","gui_text_box"],[5,4,1,"","gui_text_input_box"],[5,4,1,"","gui_toggle"],[5,4,1,"","gui_toggle_group"],[5,4,1,"","gui_toggle_slider"],[5,4,1,"","gui_unlock"],[5,4,1,"","gui_value_box"],[5,4,1,"","gui_value_box_float"],[5,4,1,"","gui_window_box"],[5,4,1,"","hide_cursor"],[5,4,1,"","image_alpha_clear"],[5,4,1,"","image_alpha_crop"],[5,4,1,"","image_alpha_mask"],[5,4,1,"","image_alpha_premultiply"],[5,4,1,"","image_blur_gaussian"],[5,4,1,"","image_clear_background"],[5,4,1,"","image_color_brightness"],[5,4,1,"","image_color_contrast"],[5,4,1,"","image_color_grayscale"],[5,4,1,"","image_color_invert"],[5,4,1,"","image_color_replace"],[5,4,1,"","image_color_tint"],[5,4,1,"","image_copy"],[5,4,1,"","image_crop"],[5,4,1,"","image_dither"],[5,4,1,"","image_draw"],[5,4,1,"","image_draw_circle"],[5,4,1,"","image_draw_circle_lines"],[5,4,1,"","image_draw_circle_lines_v"],[5,4,1,"","image_draw_circle_v"],[5,4,1,"","image_draw_line"],[5,4,1,"","image_draw_line_ex"],[5,4,1,"","image_draw_line_v"],[5,4,1,"","image_draw_pixel"],[5,4,1,"","image_draw_pixel_v"],[5,4,1,"","image_draw_rectangle"],[5,4,1,"","image_draw_rectangle_lines"],[5,4,1,"","image_draw_rectangle_rec"],[5,4,1,"","image_draw_rectangle_v"],[5,4,1,"","image_draw_text"],[5,4,1,"","image_draw_text_ex"],[5,4,1,"","image_draw_triangle"],[5,4,1,"","image_draw_triangle_ex"],[5,4,1,"","image_draw_triangle_fan"],[5,4,1,"","image_draw_triangle_lines"],[5,4,1,"","image_draw_triangle_strip"],[5,4,1,"","image_flip_horizontal"],[5,4,1,"","image_flip_vertical"],[5,4,1,"","image_format"],[5,4,1,"","image_from_channel"],[5,4,1,"","image_from_image"],[5,4,1,"","image_kernel_convolution"],[5,4,1,"","image_mipmaps"],[5,4,1,"","image_resize"],[5,4,1,"","image_resize_canvas"],[5,4,1,"","image_resize_nn"],[5,4,1,"","image_rotate"],[5,4,1,"","image_rotate_ccw"],[5,4,1,"","image_rotate_cw"],[5,4,1,"","image_text"],[5,4,1,"","image_text_ex"],[5,4,1,"","image_to_pot"],[5,4,1,"","init_audio_device"],[5,4,1,"","init_physics"],[5,4,1,"","init_window"],[5,4,1,"","is_audio_device_ready"],[5,4,1,"","is_audio_stream_playing"],[5,4,1,"","is_audio_stream_processed"],[5,4,1,"","is_audio_stream_valid"],[5,4,1,"","is_cursor_hidden"],[5,4,1,"","is_cursor_on_screen"],[5,4,1,"","is_file_dropped"],[5,4,1,"","is_file_extension"],[5,4,1,"","is_file_name_valid"],[5,4,1,"","is_font_valid"],[5,4,1,"","is_gamepad_available"],[5,4,1,"","is_gamepad_button_down"],[5,4,1,"","is_gamepad_button_pressed"],[5,4,1,"","is_gamepad_button_released"],[5,4,1,"","is_gamepad_button_up"],[5,4,1,"","is_gesture_detected"],[5,4,1,"","is_image_valid"],[5,4,1,"","is_key_down"],[5,4,1,"","is_key_pressed"],[5,4,1,"","is_key_pressed_repeat"],[5,4,1,"","is_key_released"],[5,4,1,"","is_key_up"],[5,4,1,"","is_material_valid"],[5,4,1,"","is_model_animation_valid"],[5,4,1,"","is_model_valid"],[5,4,1,"","is_mouse_button_down"],[5,4,1,"","is_mouse_button_pressed"],[5,4,1,"","is_mouse_button_released"],[5,4,1,"","is_mouse_button_up"],[5,4,1,"","is_music_stream_playing"],[5,4,1,"","is_music_valid"],[5,4,1,"","is_path_file"],[5,4,1,"","is_render_texture_valid"],[5,4,1,"","is_shader_valid"],[5,4,1,"","is_sound_playing"],[5,4,1,"","is_sound_valid"],[5,4,1,"","is_texture_valid"],[5,4,1,"","is_wave_valid"],[5,4,1,"","is_window_focused"],[5,4,1,"","is_window_fullscreen"],[5,4,1,"","is_window_hidden"],[5,4,1,"","is_window_maximized"],[5,4,1,"","is_window_minimized"],[5,4,1,"","is_window_ready"],[5,4,1,"","is_window_resized"],[5,4,1,"","is_window_state"],[5,4,1,"","lerp"],[5,4,1,"","load_audio_stream"],[5,4,1,"","load_automation_event_list"],[5,4,1,"","load_codepoints"],[5,4,1,"","load_directory_files"],[5,4,1,"","load_directory_files_ex"],[5,4,1,"","load_dropped_files"],[5,4,1,"","load_file_data"],[5,4,1,"","load_file_text"],[5,4,1,"","load_font"],[5,4,1,"","load_font_data"],[5,4,1,"","load_font_ex"],[5,4,1,"","load_font_from_image"],[5,4,1,"","load_font_from_memory"],[5,4,1,"","load_image"],[5,4,1,"","load_image_anim"],[5,4,1,"","load_image_anim_from_memory"],[5,4,1,"","load_image_colors"],[5,4,1,"","load_image_from_memory"],[5,4,1,"","load_image_from_screen"],[5,4,1,"","load_image_from_texture"],[5,4,1,"","load_image_palette"],[5,4,1,"","load_image_raw"],[5,4,1,"","load_material_default"],[5,4,1,"","load_materials"],[5,4,1,"","load_model"],[5,4,1,"","load_model_animations"],[5,4,1,"","load_model_from_mesh"],[5,4,1,"","load_music_stream"],[5,4,1,"","load_music_stream_from_memory"],[5,4,1,"","load_random_sequence"],[5,4,1,"","load_render_texture"],[5,4,1,"","load_shader"],[5,4,1,"","load_shader_from_memory"],[5,4,1,"","load_sound"],[5,4,1,"","load_sound_alias"],[5,4,1,"","load_sound_from_wave"],[5,4,1,"","load_texture"],[5,4,1,"","load_texture_cubemap"],[5,4,1,"","load_texture_from_image"],[5,4,1,"","load_utf8"],[5,4,1,"","load_vr_stereo_config"],[5,4,1,"","load_wave"],[5,4,1,"","load_wave_from_memory"],[5,4,1,"","load_wave_samples"],[5,4,1,"","make_directory"],[5,4,1,"","matrix_add"],[5,4,1,"","matrix_decompose"],[5,4,1,"","matrix_determinant"],[5,4,1,"","matrix_frustum"],[5,4,1,"","matrix_identity"],[5,4,1,"","matrix_invert"],[5,4,1,"","matrix_look_at"],[5,4,1,"","matrix_multiply"],[5,4,1,"","matrix_ortho"],[5,4,1,"","matrix_perspective"],[5,4,1,"","matrix_rotate"],[5,4,1,"","matrix_rotate_x"],[5,4,1,"","matrix_rotate_xyz"],[5,4,1,"","matrix_rotate_y"],[5,4,1,"","matrix_rotate_z"],[5,4,1,"","matrix_rotate_zyx"],[5,4,1,"","matrix_scale"],[5,4,1,"","matrix_subtract"],[5,4,1,"","matrix_to_float_v"],[5,4,1,"","matrix_trace"],[5,4,1,"","matrix_translate"],[5,4,1,"","matrix_transpose"],[5,4,1,"","maximize_window"],[5,4,1,"","measure_text"],[5,4,1,"","measure_text_ex"],[5,4,1,"","mem_alloc"],[5,4,1,"","mem_free"],[5,4,1,"","mem_realloc"],[5,4,1,"","minimize_window"],[5,4,1,"","normalize"],[5,4,1,"","open_url"],[5,4,1,"","pause_audio_stream"],[5,4,1,"","pause_music_stream"],[5,4,1,"","pause_sound"],[5,4,1,"","physics_add_force"],[5,4,1,"","physics_add_torque"],[5,4,1,"","physics_shatter"],[5,4,1,"","play_audio_stream"],[5,4,1,"","play_automation_event"],[5,4,1,"","play_music_stream"],[5,4,1,"","play_sound"],[5,4,1,"","poll_input_events"],[5,4,1,"","quaternion_add"],[5,4,1,"","quaternion_add_value"],[5,4,1,"","quaternion_cubic_hermite_spline"],[5,4,1,"","quaternion_divide"],[5,4,1,"","quaternion_equals"],[5,4,1,"","quaternion_from_axis_angle"],[5,4,1,"","quaternion_from_euler"],[5,4,1,"","quaternion_from_matrix"],[5,4,1,"","quaternion_from_vector3_to_vector3"],[5,4,1,"","quaternion_identity"],[5,4,1,"","quaternion_invert"],[5,4,1,"","quaternion_length"],[5,4,1,"","quaternion_lerp"],[5,4,1,"","quaternion_multiply"],[5,4,1,"","quaternion_nlerp"],[5,4,1,"","quaternion_normalize"],[5,4,1,"","quaternion_scale"],[5,4,1,"","quaternion_slerp"],[5,4,1,"","quaternion_subtract"],[5,4,1,"","quaternion_subtract_value"],[5,4,1,"","quaternion_to_axis_angle"],[5,4,1,"","quaternion_to_euler"],[5,4,1,"","quaternion_to_matrix"],[5,4,1,"","quaternion_transform"],[5,4,1,"","remap"],[5,4,1,"","reset_physics"],[5,4,1,"","restore_window"],[5,4,1,"","resume_audio_stream"],[5,4,1,"","resume_music_stream"],[5,4,1,"","resume_sound"],[5,1,1,"","rlBlendMode"],[5,1,1,"","rlCullMode"],[5,1,1,"","rlDrawCall"],[5,1,1,"","rlFramebufferAttachTextureType"],[5,1,1,"","rlFramebufferAttachType"],[5,1,1,"","rlGlVersion"],[5,1,1,"","rlPixelFormat"],[5,1,1,"","rlRenderBatch"],[5,1,1,"","rlShaderAttributeDataType"],[5,1,1,"","rlShaderLocationIndex"],[5,1,1,"","rlShaderUniformDataType"],[5,1,1,"","rlTextureFilter"],[5,1,1,"","rlTraceLogLevel"],[5,1,1,"","rlVertexBuffer"],[5,4,1,"","rl_active_draw_buffers"],[5,4,1,"","rl_active_texture_slot"],[5,4,1,"","rl_begin"],[5,4,1,"","rl_bind_framebuffer"],[5,4,1,"","rl_bind_image_texture"],[5,4,1,"","rl_bind_shader_buffer"],[5,4,1,"","rl_blit_framebuffer"],[5,4,1,"","rl_check_errors"],[5,4,1,"","rl_check_render_batch_limit"],[5,4,1,"","rl_clear_color"],[5,4,1,"","rl_clear_screen_buffers"],[5,4,1,"","rl_color3f"],[5,4,1,"","rl_color4f"],[5,4,1,"","rl_color4ub"],[5,4,1,"","rl_color_mask"],[5,4,1,"","rl_compile_shader"],[5,4,1,"","rl_compute_shader_dispatch"],[5,4,1,"","rl_copy_shader_buffer"],[5,4,1,"","rl_cubemap_parameters"],[5,4,1,"","rl_disable_backface_culling"],[5,4,1,"","rl_disable_color_blend"],[5,4,1,"","rl_disable_depth_mask"],[5,4,1,"","rl_disable_depth_test"],[5,4,1,"","rl_disable_framebuffer"],[5,4,1,"","rl_disable_scissor_test"],[5,4,1,"","rl_disable_shader"],[5,4,1,"","rl_disable_smooth_lines"],[5,4,1,"","rl_disable_stereo_render"],[5,4,1,"","rl_disable_texture"],[5,4,1,"","rl_disable_texture_cubemap"],[5,4,1,"","rl_disable_vertex_array"],[5,4,1,"","rl_disable_vertex_attribute"],[5,4,1,"","rl_disable_vertex_buffer"],[5,4,1,"","rl_disable_vertex_buffer_element"],[5,4,1,"","rl_disable_wire_mode"],[5,4,1,"","rl_draw_render_batch"],[5,4,1,"","rl_draw_render_batch_active"],[5,4,1,"","rl_draw_vertex_array"],[5,4,1,"","rl_draw_vertex_array_elements"],[5,4,1,"","rl_draw_vertex_array_elements_instanced"],[5,4,1,"","rl_draw_vertex_array_instanced"],[5,4,1,"","rl_enable_backface_culling"],[5,4,1,"","rl_enable_color_blend"],[5,4,1,"","rl_enable_depth_mask"],[5,4,1,"","rl_enable_depth_test"],[5,4,1,"","rl_enable_framebuffer"],[5,4,1,"","rl_enable_point_mode"],[5,4,1,"","rl_enable_scissor_test"],[5,4,1,"","rl_enable_shader"],[5,4,1,"","rl_enable_smooth_lines"],[5,4,1,"","rl_enable_stereo_render"],[5,4,1,"","rl_enable_texture"],[5,4,1,"","rl_enable_texture_cubemap"],[5,4,1,"","rl_enable_vertex_array"],[5,4,1,"","rl_enable_vertex_attribute"],[5,4,1,"","rl_enable_vertex_buffer"],[5,4,1,"","rl_enable_vertex_buffer_element"],[5,4,1,"","rl_enable_wire_mode"],[5,4,1,"","rl_end"],[5,4,1,"","rl_framebuffer_attach"],[5,4,1,"","rl_framebuffer_complete"],[5,4,1,"","rl_frustum"],[5,4,1,"","rl_gen_texture_mipmaps"],[5,4,1,"","rl_get_active_framebuffer"],[5,4,1,"","rl_get_cull_distance_far"],[5,4,1,"","rl_get_cull_distance_near"],[5,4,1,"","rl_get_framebuffer_height"],[5,4,1,"","rl_get_framebuffer_width"],[5,4,1,"","rl_get_gl_texture_formats"],[5,4,1,"","rl_get_line_width"],[5,4,1,"","rl_get_location_attrib"],[5,4,1,"","rl_get_location_uniform"],[5,4,1,"","rl_get_matrix_modelview"],[5,4,1,"","rl_get_matrix_projection"],[5,4,1,"","rl_get_matrix_projection_stereo"],[5,4,1,"","rl_get_matrix_transform"],[5,4,1,"","rl_get_matrix_view_offset_stereo"],[5,4,1,"","rl_get_pixel_format_name"],[5,4,1,"","rl_get_shader_buffer_size"],[5,4,1,"","rl_get_shader_id_default"],[5,4,1,"","rl_get_shader_locs_default"],[5,4,1,"","rl_get_texture_id_default"],[5,4,1,"","rl_get_version"],[5,4,1,"","rl_is_stereo_render_enabled"],[5,4,1,"","rl_load_compute_shader_program"],[5,4,1,"","rl_load_draw_cube"],[5,4,1,"","rl_load_draw_quad"],[5,4,1,"","rl_load_extensions"],[5,4,1,"","rl_load_framebuffer"],[5,4,1,"","rl_load_identity"],[5,4,1,"","rl_load_render_batch"],[5,4,1,"","rl_load_shader_buffer"],[5,4,1,"","rl_load_shader_code"],[5,4,1,"","rl_load_shader_program"],[5,4,1,"","rl_load_texture"],[5,4,1,"","rl_load_texture_cubemap"],[5,4,1,"","rl_load_texture_depth"],[5,4,1,"","rl_load_vertex_array"],[5,4,1,"","rl_load_vertex_buffer"],[5,4,1,"","rl_load_vertex_buffer_element"],[5,4,1,"","rl_matrix_mode"],[5,4,1,"","rl_mult_matrixf"],[5,4,1,"","rl_normal3f"],[5,4,1,"","rl_ortho"],[5,4,1,"","rl_pop_matrix"],[5,4,1,"","rl_push_matrix"],[5,4,1,"","rl_read_screen_pixels"],[5,4,1,"","rl_read_shader_buffer"],[5,4,1,"","rl_read_texture_pixels"],[5,4,1,"","rl_rotatef"],[5,4,1,"","rl_scalef"],[5,4,1,"","rl_scissor"],[5,4,1,"","rl_set_blend_factors"],[5,4,1,"","rl_set_blend_factors_separate"],[5,4,1,"","rl_set_blend_mode"],[5,4,1,"","rl_set_clip_planes"],[5,4,1,"","rl_set_cull_face"],[5,4,1,"","rl_set_framebuffer_height"],[5,4,1,"","rl_set_framebuffer_width"],[5,4,1,"","rl_set_line_width"],[5,4,1,"","rl_set_matrix_modelview"],[5,4,1,"","rl_set_matrix_projection"],[5,4,1,"","rl_set_matrix_projection_stereo"],[5,4,1,"","rl_set_matrix_view_offset_stereo"],[5,4,1,"","rl_set_render_batch_active"],[5,4,1,"","rl_set_shader"],[5,4,1,"","rl_set_texture"],[5,4,1,"","rl_set_uniform"],[5,4,1,"","rl_set_uniform_matrices"],[5,4,1,"","rl_set_uniform_matrix"],[5,4,1,"","rl_set_uniform_sampler"],[5,4,1,"","rl_set_vertex_attribute"],[5,4,1,"","rl_set_vertex_attribute_default"],[5,4,1,"","rl_set_vertex_attribute_divisor"],[5,4,1,"","rl_tex_coord2f"],[5,4,1,"","rl_texture_parameters"],[5,4,1,"","rl_translatef"],[5,4,1,"","rl_unload_framebuffer"],[5,4,1,"","rl_unload_render_batch"],[5,4,1,"","rl_unload_shader_buffer"],[5,4,1,"","rl_unload_shader_program"],[5,4,1,"","rl_unload_texture"],[5,4,1,"","rl_unload_vertex_array"],[5,4,1,"","rl_unload_vertex_buffer"],[5,4,1,"","rl_update_shader_buffer"],[5,4,1,"","rl_update_texture"],[5,4,1,"","rl_update_vertex_buffer"],[5,4,1,"","rl_update_vertex_buffer_elements"],[5,4,1,"","rl_vertex2f"],[5,4,1,"","rl_vertex2i"],[5,4,1,"","rl_vertex3f"],[5,4,1,"","rl_viewport"],[5,4,1,"","rlgl_close"],[5,4,1,"","rlgl_init"],[5,4,1,"","save_file_data"],[5,4,1,"","save_file_text"],[5,4,1,"","seek_music_stream"],[5,4,1,"","set_audio_stream_buffer_size_default"],[5,4,1,"","set_audio_stream_callback"],[5,4,1,"","set_audio_stream_pan"],[5,4,1,"","set_audio_stream_pitch"],[5,4,1,"","set_audio_stream_volume"],[5,4,1,"","set_automation_event_base_frame"],[5,4,1,"","set_automation_event_list"],[5,4,1,"","set_clipboard_text"],[5,4,1,"","set_config_flags"],[5,4,1,"","set_exit_key"],[5,4,1,"","set_gamepad_mappings"],[5,4,1,"","set_gamepad_vibration"],[5,4,1,"","set_gestures_enabled"],[5,4,1,"","set_load_file_data_callback"],[5,4,1,"","set_load_file_text_callback"],[5,4,1,"","set_master_volume"],[5,4,1,"","set_material_texture"],[5,4,1,"","set_model_mesh_material"],[5,4,1,"","set_mouse_cursor"],[5,4,1,"","set_mouse_offset"],[5,4,1,"","set_mouse_position"],[5,4,1,"","set_mouse_scale"],[5,4,1,"","set_music_pan"],[5,4,1,"","set_music_pitch"],[5,4,1,"","set_music_volume"],[5,4,1,"","set_physics_body_rotation"],[5,4,1,"","set_physics_gravity"],[5,4,1,"","set_physics_time_step"],[5,4,1,"","set_pixel_color"],[5,4,1,"","set_random_seed"],[5,4,1,"","set_save_file_data_callback"],[5,4,1,"","set_save_file_text_callback"],[5,4,1,"","set_shader_value"],[5,4,1,"","set_shader_value_matrix"],[5,4,1,"","set_shader_value_texture"],[5,4,1,"","set_shader_value_v"],[5,4,1,"","set_shapes_texture"],[5,4,1,"","set_sound_pan"],[5,4,1,"","set_sound_pitch"],[5,4,1,"","set_sound_volume"],[5,4,1,"","set_target_fps"],[5,4,1,"","set_text_line_spacing"],[5,4,1,"","set_texture_filter"],[5,4,1,"","set_texture_wrap"],[5,4,1,"","set_trace_log_callback"],[5,4,1,"","set_trace_log_level"],[5,4,1,"","set_window_focused"],[5,4,1,"","set_window_icon"],[5,4,1,"","set_window_icons"],[5,4,1,"","set_window_max_size"],[5,4,1,"","set_window_min_size"],[5,4,1,"","set_window_monitor"],[5,4,1,"","set_window_opacity"],[5,4,1,"","set_window_position"],[5,4,1,"","set_window_size"],[5,4,1,"","set_window_state"],[5,4,1,"","set_window_title"],[5,4,1,"","show_cursor"],[5,4,1,"","start_automation_event_recording"],[5,4,1,"","stop_audio_stream"],[5,4,1,"","stop_automation_event_recording"],[5,4,1,"","stop_music_stream"],[5,4,1,"","stop_sound"],[5,4,1,"","swap_screen_buffer"],[5,4,1,"","take_screenshot"],[5,4,1,"","text_append"],[5,4,1,"","text_copy"],[5,4,1,"","text_find_index"],[5,4,1,"","text_format"],[5,4,1,"","text_insert"],[5,4,1,"","text_is_equal"],[5,4,1,"","text_join"],[5,4,1,"","text_length"],[5,4,1,"","text_replace"],[5,4,1,"","text_split"],[5,4,1,"","text_subtext"],[5,4,1,"","text_to_camel"],[5,4,1,"","text_to_float"],[5,4,1,"","text_to_integer"],[5,4,1,"","text_to_lower"],[5,4,1,"","text_to_pascal"],[5,4,1,"","text_to_snake"],[5,4,1,"","text_to_upper"],[5,4,1,"","toggle_borderless_windowed"],[5,4,1,"","toggle_fullscreen"],[5,4,1,"","trace_log"],[5,4,1,"","unload_audio_stream"],[5,4,1,"","unload_automation_event_list"],[5,4,1,"","unload_codepoints"],[5,4,1,"","unload_directory_files"],[5,4,1,"","unload_dropped_files"],[5,4,1,"","unload_file_data"],[5,4,1,"","unload_file_text"],[5,4,1,"","unload_font"],[5,4,1,"","unload_font_data"],[5,4,1,"","unload_image"],[5,4,1,"","unload_image_colors"],[5,4,1,"","unload_image_palette"],[5,4,1,"","unload_material"],[5,4,1,"","unload_mesh"],[5,4,1,"","unload_model"],[5,4,1,"","unload_model_animation"],[5,4,1,"","unload_model_animations"],[5,4,1,"","unload_music_stream"],[5,4,1,"","unload_random_sequence"],[5,4,1,"","unload_render_texture"],[5,4,1,"","unload_shader"],[5,4,1,"","unload_sound"],[5,4,1,"","unload_sound_alias"],[5,4,1,"","unload_texture"],[5,4,1,"","unload_utf8"],[5,4,1,"","unload_vr_stereo_config"],[5,4,1,"","unload_wave"],[5,4,1,"","unload_wave_samples"],[5,4,1,"","update_audio_stream"],[5,4,1,"","update_camera"],[5,4,1,"","update_camera_pro"],[5,4,1,"","update_mesh_buffer"],[5,4,1,"","update_model_animation"],[5,4,1,"","update_model_animation_bones"],[5,4,1,"","update_music_stream"],[5,4,1,"","update_physics"],[5,4,1,"","update_sound"],[5,4,1,"","update_texture"],[5,4,1,"","update_texture_rec"],[5,4,1,"","upload_mesh"],[5,4,1,"","vector2_add"],[5,4,1,"","vector2_add_value"],[5,4,1,"","vector2_angle"],[5,4,1,"","vector2_clamp"],[5,4,1,"","vector2_clamp_value"],[5,4,1,"","vector2_distance"],[5,4,1,"","vector2_distance_sqr"],[5,4,1,"","vector2_divide"],[5,4,1,"","vector2_dot_product"],[5,4,1,"","vector2_equals"],[5,4,1,"","vector2_invert"],[5,4,1,"","vector2_length"],[5,4,1,"","vector2_length_sqr"],[5,4,1,"","vector2_lerp"],[5,4,1,"","vector2_line_angle"],[5,4,1,"","vector2_max"],[5,4,1,"","vector2_min"],[5,4,1,"","vector2_move_towards"],[5,4,1,"","vector2_multiply"],[5,4,1,"","vector2_negate"],[5,4,1,"","vector2_normalize"],[5,4,1,"","vector2_one"],[5,4,1,"","vector2_reflect"],[5,4,1,"","vector2_refract"],[5,4,1,"","vector2_rotate"],[5,4,1,"","vector2_scale"],[5,4,1,"","vector2_subtract"],[5,4,1,"","vector2_subtract_value"],[5,4,1,"","vector2_transform"],[5,4,1,"","vector2_zero"],[5,4,1,"","vector3_add"],[5,4,1,"","vector3_add_value"],[5,4,1,"","vector3_angle"],[5,4,1,"","vector3_barycenter"],[5,4,1,"","vector3_clamp"],[5,4,1,"","vector3_clamp_value"],[5,4,1,"","vector3_cross_product"],[5,4,1,"","vector3_cubic_hermite"],[5,4,1,"","vector3_distance"],[5,4,1,"","vector3_distance_sqr"],[5,4,1,"","vector3_divide"],[5,4,1,"","vector3_dot_product"],[5,4,1,"","vector3_equals"],[5,4,1,"","vector3_invert"],[5,4,1,"","vector3_length"],[5,4,1,"","vector3_length_sqr"],[5,4,1,"","vector3_lerp"],[5,4,1,"","vector3_max"],[5,4,1,"","vector3_min"],[5,4,1,"","vector3_move_towards"],[5,4,1,"","vector3_multiply"],[5,4,1,"","vector3_negate"],[5,4,1,"","vector3_normalize"],[5,4,1,"","vector3_one"],[5,4,1,"","vector3_ortho_normalize"],[5,4,1,"","vector3_perpendicular"],[5,4,1,"","vector3_project"],[5,4,1,"","vector3_reflect"],[5,4,1,"","vector3_refract"],[5,4,1,"","vector3_reject"],[5,4,1,"","vector3_rotate_by_axis_angle"],[5,4,1,"","vector3_rotate_by_quaternion"],[5,4,1,"","vector3_scale"],[5,4,1,"","vector3_subtract"],[5,4,1,"","vector3_subtract_value"],[5,4,1,"","vector3_to_float_v"],[5,4,1,"","vector3_transform"],[5,4,1,"","vector3_unproject"],[5,4,1,"","vector3_zero"],[5,4,1,"","vector4_add"],[5,4,1,"","vector4_add_value"],[5,4,1,"","vector4_distance"],[5,4,1,"","vector4_distance_sqr"],[5,4,1,"","vector4_divide"],[5,4,1,"","vector4_dot_product"],[5,4,1,"","vector4_equals"],[5,4,1,"","vector4_invert"],[5,4,1,"","vector4_length"],[5,4,1,"","vector4_length_sqr"],[5,4,1,"","vector4_lerp"],[5,4,1,"","vector4_max"],[5,4,1,"","vector4_min"],[5,4,1,"","vector4_move_towards"],[5,4,1,"","vector4_multiply"],[5,4,1,"","vector4_negate"],[5,4,1,"","vector4_normalize"],[5,4,1,"","vector4_one"],[5,4,1,"","vector4_scale"],[5,4,1,"","vector4_subtract"],[5,4,1,"","vector4_subtract_value"],[5,4,1,"","vector4_zero"],[5,4,1,"","wait_time"],[5,4,1,"","wave_copy"],[5,4,1,"","wave_crop"],[5,4,1,"","wave_format"],[5,4,1,"","window_should_close"],[5,4,1,"","wrap"]],"pyray.AudioStream":[[5,2,1,"","buffer"],[5,2,1,"","channels"],[5,2,1,"","processor"],[5,2,1,"","sampleRate"],[5,2,1,"","sampleSize"]],"pyray.AutomationEvent":[[5,2,1,"","frame"],[5,2,1,"","params"],[5,2,1,"","type"]],"pyray.AutomationEventList":[[5,2,1,"","capacity"],[5,2,1,"","count"],[5,2,1,"","events"]],"pyray.BlendMode":[[5,2,1,"","BLEND_ADDITIVE"],[5,2,1,"","BLEND_ADD_COLORS"],[5,2,1,"","BLEND_ALPHA"],[5,2,1,"","BLEND_ALPHA_PREMULTIPLY"],[5,2,1,"","BLEND_CUSTOM"],[5,2,1,"","BLEND_CUSTOM_SEPARATE"],[5,2,1,"","BLEND_MULTIPLIED"],[5,2,1,"","BLEND_SUBTRACT_COLORS"]],"pyray.BoneInfo":[[5,2,1,"","name"],[5,2,1,"","parent"]],"pyray.BoundingBox":[[5,2,1,"","max"],[5,2,1,"","min"]],"pyray.Camera2D":[[5,2,1,"","offset"],[5,2,1,"","rotation"],[5,2,1,"","target"],[5,2,1,"","zoom"]],"pyray.Camera3D":[[5,2,1,"","fovy"],[5,2,1,"","position"],[5,2,1,"","projection"],[5,2,1,"","target"],[5,2,1,"","up"]],"pyray.CameraMode":[[5,2,1,"","CAMERA_CUSTOM"],[5,2,1,"","CAMERA_FIRST_PERSON"],[5,2,1,"","CAMERA_FREE"],[5,2,1,"","CAMERA_ORBITAL"],[5,2,1,"","CAMERA_THIRD_PERSON"]],"pyray.CameraProjection":[[5,2,1,"","CAMERA_ORTHOGRAPHIC"],[5,2,1,"","CAMERA_PERSPECTIVE"]],"pyray.Color":[[5,2,1,"","a"],[5,2,1,"","b"],[5,2,1,"","g"],[5,2,1,"","r"]],"pyray.ConfigFlags":[[5,2,1,"","FLAG_BORDERLESS_WINDOWED_MODE"],[5,2,1,"","FLAG_FULLSCREEN_MODE"],[5,2,1,"","FLAG_INTERLACED_HINT"],[5,2,1,"","FLAG_MSAA_4X_HINT"],[5,2,1,"","FLAG_VSYNC_HINT"],[5,2,1,"","FLAG_WINDOW_ALWAYS_RUN"],[5,2,1,"","FLAG_WINDOW_HIDDEN"],[5,2,1,"","FLAG_WINDOW_HIGHDPI"],[5,2,1,"","FLAG_WINDOW_MAXIMIZED"],[5,2,1,"","FLAG_WINDOW_MINIMIZED"],[5,2,1,"","FLAG_WINDOW_MOUSE_PASSTHROUGH"],[5,2,1,"","FLAG_WINDOW_RESIZABLE"],[5,2,1,"","FLAG_WINDOW_TOPMOST"],[5,2,1,"","FLAG_WINDOW_TRANSPARENT"],[5,2,1,"","FLAG_WINDOW_UNDECORATED"],[5,2,1,"","FLAG_WINDOW_UNFOCUSED"]],"pyray.CubemapLayout":[[5,2,1,"","CUBEMAP_LAYOUT_AUTO_DETECT"],[5,2,1,"","CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE"],[5,2,1,"","CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR"],[5,2,1,"","CUBEMAP_LAYOUT_LINE_HORIZONTAL"],[5,2,1,"","CUBEMAP_LAYOUT_LINE_VERTICAL"]],"pyray.FilePathList":[[5,2,1,"","capacity"],[5,2,1,"","count"],[5,2,1,"","paths"]],"pyray.Font":[[5,2,1,"","baseSize"],[5,2,1,"","glyphCount"],[5,2,1,"","glyphPadding"],[5,2,1,"","glyphs"],[5,2,1,"","recs"],[5,2,1,"","texture"]],"pyray.FontType":[[5,2,1,"","FONT_BITMAP"],[5,2,1,"","FONT_DEFAULT"],[5,2,1,"","FONT_SDF"]],"pyray.GamepadAxis":[[5,2,1,"","GAMEPAD_AXIS_LEFT_TRIGGER"],[5,2,1,"","GAMEPAD_AXIS_LEFT_X"],[5,2,1,"","GAMEPAD_AXIS_LEFT_Y"],[5,2,1,"","GAMEPAD_AXIS_RIGHT_TRIGGER"],[5,2,1,"","GAMEPAD_AXIS_RIGHT_X"],[5,2,1,"","GAMEPAD_AXIS_RIGHT_Y"]],"pyray.GamepadButton":[[5,2,1,"","GAMEPAD_BUTTON_LEFT_FACE_DOWN"],[5,2,1,"","GAMEPAD_BUTTON_LEFT_FACE_LEFT"],[5,2,1,"","GAMEPAD_BUTTON_LEFT_FACE_RIGHT"],[5,2,1,"","GAMEPAD_BUTTON_LEFT_FACE_UP"],[5,2,1,"","GAMEPAD_BUTTON_LEFT_THUMB"],[5,2,1,"","GAMEPAD_BUTTON_LEFT_TRIGGER_1"],[5,2,1,"","GAMEPAD_BUTTON_LEFT_TRIGGER_2"],[5,2,1,"","GAMEPAD_BUTTON_MIDDLE"],[5,2,1,"","GAMEPAD_BUTTON_MIDDLE_LEFT"],[5,2,1,"","GAMEPAD_BUTTON_MIDDLE_RIGHT"],[5,2,1,"","GAMEPAD_BUTTON_RIGHT_FACE_DOWN"],[5,2,1,"","GAMEPAD_BUTTON_RIGHT_FACE_LEFT"],[5,2,1,"","GAMEPAD_BUTTON_RIGHT_FACE_RIGHT"],[5,2,1,"","GAMEPAD_BUTTON_RIGHT_FACE_UP"],[5,2,1,"","GAMEPAD_BUTTON_RIGHT_THUMB"],[5,2,1,"","GAMEPAD_BUTTON_RIGHT_TRIGGER_1"],[5,2,1,"","GAMEPAD_BUTTON_RIGHT_TRIGGER_2"],[5,2,1,"","GAMEPAD_BUTTON_UNKNOWN"]],"pyray.Gesture":[[5,2,1,"","GESTURE_DOUBLETAP"],[5,2,1,"","GESTURE_DRAG"],[5,2,1,"","GESTURE_HOLD"],[5,2,1,"","GESTURE_NONE"],[5,2,1,"","GESTURE_PINCH_IN"],[5,2,1,"","GESTURE_PINCH_OUT"],[5,2,1,"","GESTURE_SWIPE_DOWN"],[5,2,1,"","GESTURE_SWIPE_LEFT"],[5,2,1,"","GESTURE_SWIPE_RIGHT"],[5,2,1,"","GESTURE_SWIPE_UP"],[5,2,1,"","GESTURE_TAP"]],"pyray.GlyphInfo":[[5,2,1,"","advanceX"],[5,2,1,"","image"],[5,2,1,"","offsetX"],[5,2,1,"","offsetY"],[5,2,1,"","value"]],"pyray.GuiCheckBoxProperty":[[5,2,1,"","CHECK_PADDING"]],"pyray.GuiColorPickerProperty":[[5,2,1,"","COLOR_SELECTOR_SIZE"],[5,2,1,"","HUEBAR_PADDING"],[5,2,1,"","HUEBAR_SELECTOR_HEIGHT"],[5,2,1,"","HUEBAR_SELECTOR_OVERFLOW"],[5,2,1,"","HUEBAR_WIDTH"]],"pyray.GuiComboBoxProperty":[[5,2,1,"","COMBO_BUTTON_SPACING"],[5,2,1,"","COMBO_BUTTON_WIDTH"]],"pyray.GuiControl":[[5,2,1,"","BUTTON"],[5,2,1,"","CHECKBOX"],[5,2,1,"","COLORPICKER"],[5,2,1,"","COMBOBOX"],[5,2,1,"","DEFAULT"],[5,2,1,"","DROPDOWNBOX"],[5,2,1,"","LABEL"],[5,2,1,"","LISTVIEW"],[5,2,1,"","PROGRESSBAR"],[5,2,1,"","SCROLLBAR"],[5,2,1,"","SLIDER"],[5,2,1,"","SPINNER"],[5,2,1,"","STATUSBAR"],[5,2,1,"","TEXTBOX"],[5,2,1,"","TOGGLE"],[5,2,1,"","VALUEBOX"]],"pyray.GuiControlProperty":[[5,2,1,"","BASE_COLOR_DISABLED"],[5,2,1,"","BASE_COLOR_FOCUSED"],[5,2,1,"","BASE_COLOR_NORMAL"],[5,2,1,"","BASE_COLOR_PRESSED"],[5,2,1,"","BORDER_COLOR_DISABLED"],[5,2,1,"","BORDER_COLOR_FOCUSED"],[5,2,1,"","BORDER_COLOR_NORMAL"],[5,2,1,"","BORDER_COLOR_PRESSED"],[5,2,1,"","BORDER_WIDTH"],[5,2,1,"","TEXT_ALIGNMENT"],[5,2,1,"","TEXT_COLOR_DISABLED"],[5,2,1,"","TEXT_COLOR_FOCUSED"],[5,2,1,"","TEXT_COLOR_NORMAL"],[5,2,1,"","TEXT_COLOR_PRESSED"],[5,2,1,"","TEXT_PADDING"]],"pyray.GuiDefaultProperty":[[5,2,1,"","BACKGROUND_COLOR"],[5,2,1,"","LINE_COLOR"],[5,2,1,"","TEXT_ALIGNMENT_VERTICAL"],[5,2,1,"","TEXT_LINE_SPACING"],[5,2,1,"","TEXT_SIZE"],[5,2,1,"","TEXT_SPACING"],[5,2,1,"","TEXT_WRAP_MODE"]],"pyray.GuiDropdownBoxProperty":[[5,2,1,"","ARROW_PADDING"],[5,2,1,"","DROPDOWN_ARROW_HIDDEN"],[5,2,1,"","DROPDOWN_ITEMS_SPACING"],[5,2,1,"","DROPDOWN_ROLL_UP"]],"pyray.GuiIconName":[[5,2,1,"","ICON_1UP"],[5,2,1,"","ICON_229"],[5,2,1,"","ICON_230"],[5,2,1,"","ICON_231"],[5,2,1,"","ICON_232"],[5,2,1,"","ICON_233"],[5,2,1,"","ICON_234"],[5,2,1,"","ICON_235"],[5,2,1,"","ICON_236"],[5,2,1,"","ICON_237"],[5,2,1,"","ICON_238"],[5,2,1,"","ICON_239"],[5,2,1,"","ICON_240"],[5,2,1,"","ICON_241"],[5,2,1,"","ICON_242"],[5,2,1,"","ICON_243"],[5,2,1,"","ICON_244"],[5,2,1,"","ICON_245"],[5,2,1,"","ICON_246"],[5,2,1,"","ICON_247"],[5,2,1,"","ICON_248"],[5,2,1,"","ICON_249"],[5,2,1,"","ICON_250"],[5,2,1,"","ICON_251"],[5,2,1,"","ICON_252"],[5,2,1,"","ICON_253"],[5,2,1,"","ICON_254"],[5,2,1,"","ICON_255"],[5,2,1,"","ICON_ALARM"],[5,2,1,"","ICON_ALPHA_CLEAR"],[5,2,1,"","ICON_ALPHA_MULTIPLY"],[5,2,1,"","ICON_ARROW_DOWN"],[5,2,1,"","ICON_ARROW_DOWN_FILL"],[5,2,1,"","ICON_ARROW_LEFT"],[5,2,1,"","ICON_ARROW_LEFT_FILL"],[5,2,1,"","ICON_ARROW_RIGHT"],[5,2,1,"","ICON_ARROW_RIGHT_FILL"],[5,2,1,"","ICON_ARROW_UP"],[5,2,1,"","ICON_ARROW_UP_FILL"],[5,2,1,"","ICON_AUDIO"],[5,2,1,"","ICON_BIN"],[5,2,1,"","ICON_BOX"],[5,2,1,"","ICON_BOX_BOTTOM"],[5,2,1,"","ICON_BOX_BOTTOM_LEFT"],[5,2,1,"","ICON_BOX_BOTTOM_RIGHT"],[5,2,1,"","ICON_BOX_CENTER"],[5,2,1,"","ICON_BOX_CIRCLE_MASK"],[5,2,1,"","ICON_BOX_CONCENTRIC"],[5,2,1,"","ICON_BOX_CORNERS_BIG"],[5,2,1,"","ICON_BOX_CORNERS_SMALL"],[5,2,1,"","ICON_BOX_DOTS_BIG"],[5,2,1,"","ICON_BOX_DOTS_SMALL"],[5,2,1,"","ICON_BOX_GRID"],[5,2,1,"","ICON_BOX_GRID_BIG"],[5,2,1,"","ICON_BOX_LEFT"],[5,2,1,"","ICON_BOX_MULTISIZE"],[5,2,1,"","ICON_BOX_RIGHT"],[5,2,1,"","ICON_BOX_TOP"],[5,2,1,"","ICON_BOX_TOP_LEFT"],[5,2,1,"","ICON_BOX_TOP_RIGHT"],[5,2,1,"","ICON_BREAKPOINT_OFF"],[5,2,1,"","ICON_BREAKPOINT_ON"],[5,2,1,"","ICON_BRUSH_CLASSIC"],[5,2,1,"","ICON_BRUSH_PAINTER"],[5,2,1,"","ICON_BURGER_MENU"],[5,2,1,"","ICON_CAMERA"],[5,2,1,"","ICON_CASE_SENSITIVE"],[5,2,1,"","ICON_CLOCK"],[5,2,1,"","ICON_COIN"],[5,2,1,"","ICON_COLOR_BUCKET"],[5,2,1,"","ICON_COLOR_PICKER"],[5,2,1,"","ICON_CORNER"],[5,2,1,"","ICON_CPU"],[5,2,1,"","ICON_CRACK"],[5,2,1,"","ICON_CRACK_POINTS"],[5,2,1,"","ICON_CROP"],[5,2,1,"","ICON_CROP_ALPHA"],[5,2,1,"","ICON_CROSS"],[5,2,1,"","ICON_CROSSLINE"],[5,2,1,"","ICON_CROSS_SMALL"],[5,2,1,"","ICON_CUBE"],[5,2,1,"","ICON_CUBE_FACE_BACK"],[5,2,1,"","ICON_CUBE_FACE_BOTTOM"],[5,2,1,"","ICON_CUBE_FACE_FRONT"],[5,2,1,"","ICON_CUBE_FACE_LEFT"],[5,2,1,"","ICON_CUBE_FACE_RIGHT"],[5,2,1,"","ICON_CUBE_FACE_TOP"],[5,2,1,"","ICON_CURSOR_CLASSIC"],[5,2,1,"","ICON_CURSOR_HAND"],[5,2,1,"","ICON_CURSOR_MOVE"],[5,2,1,"","ICON_CURSOR_MOVE_FILL"],[5,2,1,"","ICON_CURSOR_POINTER"],[5,2,1,"","ICON_CURSOR_SCALE"],[5,2,1,"","ICON_CURSOR_SCALE_FILL"],[5,2,1,"","ICON_CURSOR_SCALE_LEFT"],[5,2,1,"","ICON_CURSOR_SCALE_LEFT_FILL"],[5,2,1,"","ICON_CURSOR_SCALE_RIGHT"],[5,2,1,"","ICON_CURSOR_SCALE_RIGHT_FILL"],[5,2,1,"","ICON_DEMON"],[5,2,1,"","ICON_DITHERING"],[5,2,1,"","ICON_DOOR"],[5,2,1,"","ICON_EMPTYBOX"],[5,2,1,"","ICON_EMPTYBOX_SMALL"],[5,2,1,"","ICON_EXIT"],[5,2,1,"","ICON_EXPLOSION"],[5,2,1,"","ICON_EYE_OFF"],[5,2,1,"","ICON_EYE_ON"],[5,2,1,"","ICON_FILE"],[5,2,1,"","ICON_FILETYPE_ALPHA"],[5,2,1,"","ICON_FILETYPE_AUDIO"],[5,2,1,"","ICON_FILETYPE_BINARY"],[5,2,1,"","ICON_FILETYPE_HOME"],[5,2,1,"","ICON_FILETYPE_IMAGE"],[5,2,1,"","ICON_FILETYPE_INFO"],[5,2,1,"","ICON_FILETYPE_PLAY"],[5,2,1,"","ICON_FILETYPE_TEXT"],[5,2,1,"","ICON_FILETYPE_VIDEO"],[5,2,1,"","ICON_FILE_ADD"],[5,2,1,"","ICON_FILE_COPY"],[5,2,1,"","ICON_FILE_CUT"],[5,2,1,"","ICON_FILE_DELETE"],[5,2,1,"","ICON_FILE_EXPORT"],[5,2,1,"","ICON_FILE_NEW"],[5,2,1,"","ICON_FILE_OPEN"],[5,2,1,"","ICON_FILE_PASTE"],[5,2,1,"","ICON_FILE_SAVE"],[5,2,1,"","ICON_FILE_SAVE_CLASSIC"],[5,2,1,"","ICON_FILTER"],[5,2,1,"","ICON_FILTER_BILINEAR"],[5,2,1,"","ICON_FILTER_POINT"],[5,2,1,"","ICON_FILTER_TOP"],[5,2,1,"","ICON_FOLDER"],[5,2,1,"","ICON_FOLDER_ADD"],[5,2,1,"","ICON_FOLDER_FILE_OPEN"],[5,2,1,"","ICON_FOLDER_OPEN"],[5,2,1,"","ICON_FOLDER_SAVE"],[5,2,1,"","ICON_FOUR_BOXES"],[5,2,1,"","ICON_FX"],[5,2,1,"","ICON_GEAR"],[5,2,1,"","ICON_GEAR_BIG"],[5,2,1,"","ICON_GEAR_EX"],[5,2,1,"","ICON_GRID"],[5,2,1,"","ICON_GRID_FILL"],[5,2,1,"","ICON_HAND_POINTER"],[5,2,1,"","ICON_HEART"],[5,2,1,"","ICON_HELP"],[5,2,1,"","ICON_HELP_BOX"],[5,2,1,"","ICON_HEX"],[5,2,1,"","ICON_HIDPI"],[5,2,1,"","ICON_HOT"],[5,2,1,"","ICON_HOUSE"],[5,2,1,"","ICON_INFO"],[5,2,1,"","ICON_INFO_BOX"],[5,2,1,"","ICON_KEY"],[5,2,1,"","ICON_LASER"],[5,2,1,"","ICON_LAYERS"],[5,2,1,"","ICON_LAYERS2"],[5,2,1,"","ICON_LAYERS_ISO"],[5,2,1,"","ICON_LAYERS_VISIBLE"],[5,2,1,"","ICON_LENS"],[5,2,1,"","ICON_LENS_BIG"],[5,2,1,"","ICON_LIFE_BARS"],[5,2,1,"","ICON_LINK"],[5,2,1,"","ICON_LINK_BOXES"],[5,2,1,"","ICON_LINK_BROKE"],[5,2,1,"","ICON_LINK_MULTI"],[5,2,1,"","ICON_LINK_NET"],[5,2,1,"","ICON_LOCK_CLOSE"],[5,2,1,"","ICON_LOCK_OPEN"],[5,2,1,"","ICON_MAGNET"],[5,2,1,"","ICON_MAILBOX"],[5,2,1,"","ICON_MAPS"],[5,2,1,"","ICON_MIPMAPS"],[5,2,1,"","ICON_MLAYERS"],[5,2,1,"","ICON_MODE_2D"],[5,2,1,"","ICON_MODE_3D"],[5,2,1,"","ICON_MONITOR"],[5,2,1,"","ICON_MUTATE"],[5,2,1,"","ICON_MUTATE_FILL"],[5,2,1,"","ICON_NONE"],[5,2,1,"","ICON_NOTEBOOK"],[5,2,1,"","ICON_OK_TICK"],[5,2,1,"","ICON_PENCIL"],[5,2,1,"","ICON_PENCIL_BIG"],[5,2,1,"","ICON_PHOTO_CAMERA"],[5,2,1,"","ICON_PHOTO_CAMERA_FLASH"],[5,2,1,"","ICON_PLAYER"],[5,2,1,"","ICON_PLAYER_JUMP"],[5,2,1,"","ICON_PLAYER_NEXT"],[5,2,1,"","ICON_PLAYER_PAUSE"],[5,2,1,"","ICON_PLAYER_PLAY"],[5,2,1,"","ICON_PLAYER_PLAY_BACK"],[5,2,1,"","ICON_PLAYER_PREVIOUS"],[5,2,1,"","ICON_PLAYER_RECORD"],[5,2,1,"","ICON_PLAYER_STOP"],[5,2,1,"","ICON_POT"],[5,2,1,"","ICON_PRINTER"],[5,2,1,"","ICON_PRIORITY"],[5,2,1,"","ICON_REDO"],[5,2,1,"","ICON_REDO_FILL"],[5,2,1,"","ICON_REG_EXP"],[5,2,1,"","ICON_REPEAT"],[5,2,1,"","ICON_REPEAT_FILL"],[5,2,1,"","ICON_REREDO"],[5,2,1,"","ICON_REREDO_FILL"],[5,2,1,"","ICON_RESIZE"],[5,2,1,"","ICON_RESTART"],[5,2,1,"","ICON_ROM"],[5,2,1,"","ICON_ROTATE"],[5,2,1,"","ICON_ROTATE_FILL"],[5,2,1,"","ICON_RUBBER"],[5,2,1,"","ICON_SAND_TIMER"],[5,2,1,"","ICON_SCALE"],[5,2,1,"","ICON_SHIELD"],[5,2,1,"","ICON_SHUFFLE"],[5,2,1,"","ICON_SHUFFLE_FILL"],[5,2,1,"","ICON_SPECIAL"],[5,2,1,"","ICON_SQUARE_TOGGLE"],[5,2,1,"","ICON_STAR"],[5,2,1,"","ICON_STEP_INTO"],[5,2,1,"","ICON_STEP_OUT"],[5,2,1,"","ICON_STEP_OVER"],[5,2,1,"","ICON_SUITCASE"],[5,2,1,"","ICON_SUITCASE_ZIP"],[5,2,1,"","ICON_SYMMETRY"],[5,2,1,"","ICON_SYMMETRY_HORIZONTAL"],[5,2,1,"","ICON_SYMMETRY_VERTICAL"],[5,2,1,"","ICON_TARGET"],[5,2,1,"","ICON_TARGET_BIG"],[5,2,1,"","ICON_TARGET_BIG_FILL"],[5,2,1,"","ICON_TARGET_MOVE"],[5,2,1,"","ICON_TARGET_MOVE_FILL"],[5,2,1,"","ICON_TARGET_POINT"],[5,2,1,"","ICON_TARGET_SMALL"],[5,2,1,"","ICON_TARGET_SMALL_FILL"],[5,2,1,"","ICON_TEXT_A"],[5,2,1,"","ICON_TEXT_NOTES"],[5,2,1,"","ICON_TEXT_POPUP"],[5,2,1,"","ICON_TEXT_T"],[5,2,1,"","ICON_TOOLS"],[5,2,1,"","ICON_UNDO"],[5,2,1,"","ICON_UNDO_FILL"],[5,2,1,"","ICON_VERTICAL_BARS"],[5,2,1,"","ICON_VERTICAL_BARS_FILL"],[5,2,1,"","ICON_WARNING"],[5,2,1,"","ICON_WATER_DROP"],[5,2,1,"","ICON_WAVE"],[5,2,1,"","ICON_WAVE_SINUS"],[5,2,1,"","ICON_WAVE_SQUARE"],[5,2,1,"","ICON_WAVE_TRIANGULAR"],[5,2,1,"","ICON_WINDOW"],[5,2,1,"","ICON_ZOOM_ALL"],[5,2,1,"","ICON_ZOOM_BIG"],[5,2,1,"","ICON_ZOOM_CENTER"],[5,2,1,"","ICON_ZOOM_MEDIUM"],[5,2,1,"","ICON_ZOOM_SMALL"]],"pyray.GuiListViewProperty":[[5,2,1,"","LIST_ITEMS_BORDER_WIDTH"],[5,2,1,"","LIST_ITEMS_HEIGHT"],[5,2,1,"","LIST_ITEMS_SPACING"],[5,2,1,"","SCROLLBAR_SIDE"],[5,2,1,"","SCROLLBAR_WIDTH"]],"pyray.GuiProgressBarProperty":[[5,2,1,"","PROGRESS_PADDING"]],"pyray.GuiScrollBarProperty":[[5,2,1,"","ARROWS_SIZE"],[5,2,1,"","ARROWS_VISIBLE"],[5,2,1,"","SCROLL_PADDING"],[5,2,1,"","SCROLL_SLIDER_PADDING"],[5,2,1,"","SCROLL_SLIDER_SIZE"],[5,2,1,"","SCROLL_SPEED"]],"pyray.GuiSliderProperty":[[5,2,1,"","SLIDER_PADDING"],[5,2,1,"","SLIDER_WIDTH"]],"pyray.GuiSpinnerProperty":[[5,2,1,"","SPIN_BUTTON_SPACING"],[5,2,1,"","SPIN_BUTTON_WIDTH"]],"pyray.GuiState":[[5,2,1,"","STATE_DISABLED"],[5,2,1,"","STATE_FOCUSED"],[5,2,1,"","STATE_NORMAL"],[5,2,1,"","STATE_PRESSED"]],"pyray.GuiStyleProp":[[5,2,1,"","controlId"],[5,2,1,"","propertyId"],[5,2,1,"","propertyValue"]],"pyray.GuiTextAlignment":[[5,2,1,"","TEXT_ALIGN_CENTER"],[5,2,1,"","TEXT_ALIGN_LEFT"],[5,2,1,"","TEXT_ALIGN_RIGHT"]],"pyray.GuiTextAlignmentVertical":[[5,2,1,"","TEXT_ALIGN_BOTTOM"],[5,2,1,"","TEXT_ALIGN_MIDDLE"],[5,2,1,"","TEXT_ALIGN_TOP"]],"pyray.GuiTextBoxProperty":[[5,2,1,"","TEXT_READONLY"]],"pyray.GuiTextWrapMode":[[5,2,1,"","TEXT_WRAP_CHAR"],[5,2,1,"","TEXT_WRAP_NONE"],[5,2,1,"","TEXT_WRAP_WORD"]],"pyray.GuiToggleProperty":[[5,2,1,"","GROUP_PADDING"]],"pyray.Image":[[5,2,1,"","data"],[5,2,1,"","format"],[5,2,1,"","height"],[5,2,1,"","mipmaps"],[5,2,1,"","width"]],"pyray.KeyboardKey":[[5,2,1,"","KEY_A"],[5,2,1,"","KEY_APOSTROPHE"],[5,2,1,"","KEY_B"],[5,2,1,"","KEY_BACK"],[5,2,1,"","KEY_BACKSLASH"],[5,2,1,"","KEY_BACKSPACE"],[5,2,1,"","KEY_C"],[5,2,1,"","KEY_CAPS_LOCK"],[5,2,1,"","KEY_COMMA"],[5,2,1,"","KEY_D"],[5,2,1,"","KEY_DELETE"],[5,2,1,"","KEY_DOWN"],[5,2,1,"","KEY_E"],[5,2,1,"","KEY_EIGHT"],[5,2,1,"","KEY_END"],[5,2,1,"","KEY_ENTER"],[5,2,1,"","KEY_EQUAL"],[5,2,1,"","KEY_ESCAPE"],[5,2,1,"","KEY_F"],[5,2,1,"","KEY_F1"],[5,2,1,"","KEY_F10"],[5,2,1,"","KEY_F11"],[5,2,1,"","KEY_F12"],[5,2,1,"","KEY_F2"],[5,2,1,"","KEY_F3"],[5,2,1,"","KEY_F4"],[5,2,1,"","KEY_F5"],[5,2,1,"","KEY_F6"],[5,2,1,"","KEY_F7"],[5,2,1,"","KEY_F8"],[5,2,1,"","KEY_F9"],[5,2,1,"","KEY_FIVE"],[5,2,1,"","KEY_FOUR"],[5,2,1,"","KEY_G"],[5,2,1,"","KEY_GRAVE"],[5,2,1,"","KEY_H"],[5,2,1,"","KEY_HOME"],[5,2,1,"","KEY_I"],[5,2,1,"","KEY_INSERT"],[5,2,1,"","KEY_J"],[5,2,1,"","KEY_K"],[5,2,1,"","KEY_KB_MENU"],[5,2,1,"","KEY_KP_0"],[5,2,1,"","KEY_KP_1"],[5,2,1,"","KEY_KP_2"],[5,2,1,"","KEY_KP_3"],[5,2,1,"","KEY_KP_4"],[5,2,1,"","KEY_KP_5"],[5,2,1,"","KEY_KP_6"],[5,2,1,"","KEY_KP_7"],[5,2,1,"","KEY_KP_8"],[5,2,1,"","KEY_KP_9"],[5,2,1,"","KEY_KP_ADD"],[5,2,1,"","KEY_KP_DECIMAL"],[5,2,1,"","KEY_KP_DIVIDE"],[5,2,1,"","KEY_KP_ENTER"],[5,2,1,"","KEY_KP_EQUAL"],[5,2,1,"","KEY_KP_MULTIPLY"],[5,2,1,"","KEY_KP_SUBTRACT"],[5,2,1,"","KEY_L"],[5,2,1,"","KEY_LEFT"],[5,2,1,"","KEY_LEFT_ALT"],[5,2,1,"","KEY_LEFT_BRACKET"],[5,2,1,"","KEY_LEFT_CONTROL"],[5,2,1,"","KEY_LEFT_SHIFT"],[5,2,1,"","KEY_LEFT_SUPER"],[5,2,1,"","KEY_M"],[5,2,1,"","KEY_MENU"],[5,2,1,"","KEY_MINUS"],[5,2,1,"","KEY_N"],[5,2,1,"","KEY_NINE"],[5,2,1,"","KEY_NULL"],[5,2,1,"","KEY_NUM_LOCK"],[5,2,1,"","KEY_O"],[5,2,1,"","KEY_ONE"],[5,2,1,"","KEY_P"],[5,2,1,"","KEY_PAGE_DOWN"],[5,2,1,"","KEY_PAGE_UP"],[5,2,1,"","KEY_PAUSE"],[5,2,1,"","KEY_PERIOD"],[5,2,1,"","KEY_PRINT_SCREEN"],[5,2,1,"","KEY_Q"],[5,2,1,"","KEY_R"],[5,2,1,"","KEY_RIGHT"],[5,2,1,"","KEY_RIGHT_ALT"],[5,2,1,"","KEY_RIGHT_BRACKET"],[5,2,1,"","KEY_RIGHT_CONTROL"],[5,2,1,"","KEY_RIGHT_SHIFT"],[5,2,1,"","KEY_RIGHT_SUPER"],[5,2,1,"","KEY_S"],[5,2,1,"","KEY_SCROLL_LOCK"],[5,2,1,"","KEY_SEMICOLON"],[5,2,1,"","KEY_SEVEN"],[5,2,1,"","KEY_SIX"],[5,2,1,"","KEY_SLASH"],[5,2,1,"","KEY_SPACE"],[5,2,1,"","KEY_T"],[5,2,1,"","KEY_TAB"],[5,2,1,"","KEY_THREE"],[5,2,1,"","KEY_TWO"],[5,2,1,"","KEY_U"],[5,2,1,"","KEY_UP"],[5,2,1,"","KEY_V"],[5,2,1,"","KEY_VOLUME_DOWN"],[5,2,1,"","KEY_VOLUME_UP"],[5,2,1,"","KEY_W"],[5,2,1,"","KEY_X"],[5,2,1,"","KEY_Y"],[5,2,1,"","KEY_Z"],[5,2,1,"","KEY_ZERO"]],"pyray.Material":[[5,2,1,"","maps"],[5,2,1,"","params"],[5,2,1,"","shader"]],"pyray.MaterialMap":[[5,2,1,"","color"],[5,2,1,"","texture"],[5,2,1,"","value"]],"pyray.MaterialMapIndex":[[5,2,1,"","MATERIAL_MAP_ALBEDO"],[5,2,1,"","MATERIAL_MAP_BRDF"],[5,2,1,"","MATERIAL_MAP_CUBEMAP"],[5,2,1,"","MATERIAL_MAP_EMISSION"],[5,2,1,"","MATERIAL_MAP_HEIGHT"],[5,2,1,"","MATERIAL_MAP_IRRADIANCE"],[5,2,1,"","MATERIAL_MAP_METALNESS"],[5,2,1,"","MATERIAL_MAP_NORMAL"],[5,2,1,"","MATERIAL_MAP_OCCLUSION"],[5,2,1,"","MATERIAL_MAP_PREFILTER"],[5,2,1,"","MATERIAL_MAP_ROUGHNESS"]],"pyray.Matrix":[[5,2,1,"","m0"],[5,2,1,"","m1"],[5,2,1,"","m10"],[5,2,1,"","m11"],[5,2,1,"","m12"],[5,2,1,"","m13"],[5,2,1,"","m14"],[5,2,1,"","m15"],[5,2,1,"","m2"],[5,2,1,"","m3"],[5,2,1,"","m4"],[5,2,1,"","m5"],[5,2,1,"","m6"],[5,2,1,"","m7"],[5,2,1,"","m8"],[5,2,1,"","m9"]],"pyray.Matrix2x2":[[5,2,1,"","m00"],[5,2,1,"","m01"],[5,2,1,"","m10"],[5,2,1,"","m11"]],"pyray.Mesh":[[5,2,1,"","animNormals"],[5,2,1,"","animVertices"],[5,2,1,"","boneCount"],[5,2,1,"","boneIds"],[5,2,1,"","boneMatrices"],[5,2,1,"","boneWeights"],[5,2,1,"","colors"],[5,2,1,"","indices"],[5,2,1,"","normals"],[5,2,1,"","tangents"],[5,2,1,"","texcoords"],[5,2,1,"","texcoords2"],[5,2,1,"","triangleCount"],[5,2,1,"","vaoId"],[5,2,1,"","vboId"],[5,2,1,"","vertexCount"],[5,2,1,"","vertices"]],"pyray.Model":[[5,2,1,"","bindPose"],[5,2,1,"","boneCount"],[5,2,1,"","bones"],[5,2,1,"","materialCount"],[5,2,1,"","materials"],[5,2,1,"","meshCount"],[5,2,1,"","meshMaterial"],[5,2,1,"","meshes"],[5,2,1,"","transform"]],"pyray.ModelAnimation":[[5,2,1,"","boneCount"],[5,2,1,"","bones"],[5,2,1,"","frameCount"],[5,2,1,"","framePoses"],[5,2,1,"","name"]],"pyray.MouseButton":[[5,2,1,"","MOUSE_BUTTON_BACK"],[5,2,1,"","MOUSE_BUTTON_EXTRA"],[5,2,1,"","MOUSE_BUTTON_FORWARD"],[5,2,1,"","MOUSE_BUTTON_LEFT"],[5,2,1,"","MOUSE_BUTTON_MIDDLE"],[5,2,1,"","MOUSE_BUTTON_RIGHT"],[5,2,1,"","MOUSE_BUTTON_SIDE"]],"pyray.MouseCursor":[[5,2,1,"","MOUSE_CURSOR_ARROW"],[5,2,1,"","MOUSE_CURSOR_CROSSHAIR"],[5,2,1,"","MOUSE_CURSOR_DEFAULT"],[5,2,1,"","MOUSE_CURSOR_IBEAM"],[5,2,1,"","MOUSE_CURSOR_NOT_ALLOWED"],[5,2,1,"","MOUSE_CURSOR_POINTING_HAND"],[5,2,1,"","MOUSE_CURSOR_RESIZE_ALL"],[5,2,1,"","MOUSE_CURSOR_RESIZE_EW"],[5,2,1,"","MOUSE_CURSOR_RESIZE_NESW"],[5,2,1,"","MOUSE_CURSOR_RESIZE_NS"],[5,2,1,"","MOUSE_CURSOR_RESIZE_NWSE"]],"pyray.Music":[[5,2,1,"","ctxData"],[5,2,1,"","ctxType"],[5,2,1,"","frameCount"],[5,2,1,"","looping"],[5,2,1,"","stream"]],"pyray.NPatchInfo":[[5,2,1,"","bottom"],[5,2,1,"","layout"],[5,2,1,"","left"],[5,2,1,"","right"],[5,2,1,"","source"],[5,2,1,"","top"]],"pyray.NPatchLayout":[[5,2,1,"","NPATCH_NINE_PATCH"],[5,2,1,"","NPATCH_THREE_PATCH_HORIZONTAL"],[5,2,1,"","NPATCH_THREE_PATCH_VERTICAL"]],"pyray.PhysicsBodyData":[[5,2,1,"","angularVelocity"],[5,2,1,"","dynamicFriction"],[5,2,1,"","enabled"],[5,2,1,"","force"],[5,2,1,"","freezeOrient"],[5,2,1,"","id"],[5,2,1,"","inertia"],[5,2,1,"","inverseInertia"],[5,2,1,"","inverseMass"],[5,2,1,"","isGrounded"],[5,2,1,"","mass"],[5,2,1,"","orient"],[5,2,1,"","position"],[5,2,1,"","restitution"],[5,2,1,"","shape"],[5,2,1,"","staticFriction"],[5,2,1,"","torque"],[5,2,1,"","useGravity"],[5,2,1,"","velocity"]],"pyray.PhysicsManifoldData":[[5,2,1,"","bodyA"],[5,2,1,"","bodyB"],[5,2,1,"","contacts"],[5,2,1,"","contactsCount"],[5,2,1,"","dynamicFriction"],[5,2,1,"","id"],[5,2,1,"","normal"],[5,2,1,"","penetration"],[5,2,1,"","restitution"],[5,2,1,"","staticFriction"]],"pyray.PhysicsShape":[[5,2,1,"","body"],[5,2,1,"","radius"],[5,2,1,"","transform"],[5,2,1,"","type"],[5,2,1,"","vertexData"]],"pyray.PhysicsVertexData":[[5,2,1,"","normals"],[5,2,1,"","positions"],[5,2,1,"","vertexCount"]],"pyray.PixelFormat":[[5,2,1,"","PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA"],[5,2,1,"","PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA"],[5,2,1,"","PIXELFORMAT_COMPRESSED_DXT1_RGB"],[5,2,1,"","PIXELFORMAT_COMPRESSED_DXT1_RGBA"],[5,2,1,"","PIXELFORMAT_COMPRESSED_DXT3_RGBA"],[5,2,1,"","PIXELFORMAT_COMPRESSED_DXT5_RGBA"],[5,2,1,"","PIXELFORMAT_COMPRESSED_ETC1_RGB"],[5,2,1,"","PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA"],[5,2,1,"","PIXELFORMAT_COMPRESSED_ETC2_RGB"],[5,2,1,"","PIXELFORMAT_COMPRESSED_PVRT_RGB"],[5,2,1,"","PIXELFORMAT_COMPRESSED_PVRT_RGBA"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_GRAYSCALE"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R16"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R16G16B16"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R16G16B16A16"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R32"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R32G32B32"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R32G32B32A32"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R4G4B4A4"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R5G5B5A1"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R5G6B5"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R8G8B8"],[5,2,1,"","PIXELFORMAT_UNCOMPRESSED_R8G8B8A8"]],"pyray.Ray":[[5,2,1,"","direction"],[5,2,1,"","position"]],"pyray.RayCollision":[[5,2,1,"","distance"],[5,2,1,"","hit"],[5,2,1,"","normal"],[5,2,1,"","point"]],"pyray.Rectangle":[[5,2,1,"","height"],[5,2,1,"","width"],[5,2,1,"","x"],[5,2,1,"","y"]],"pyray.RenderTexture":[[5,2,1,"","depth"],[5,2,1,"","id"],[5,2,1,"","texture"]],"pyray.Shader":[[5,2,1,"","id"],[5,2,1,"","locs"]],"pyray.ShaderAttributeDataType":[[5,2,1,"","SHADER_ATTRIB_FLOAT"],[5,2,1,"","SHADER_ATTRIB_VEC2"],[5,2,1,"","SHADER_ATTRIB_VEC3"],[5,2,1,"","SHADER_ATTRIB_VEC4"]],"pyray.ShaderLocationIndex":[[5,2,1,"","SHADER_LOC_BONE_MATRICES"],[5,2,1,"","SHADER_LOC_COLOR_AMBIENT"],[5,2,1,"","SHADER_LOC_COLOR_DIFFUSE"],[5,2,1,"","SHADER_LOC_COLOR_SPECULAR"],[5,2,1,"","SHADER_LOC_MAP_ALBEDO"],[5,2,1,"","SHADER_LOC_MAP_BRDF"],[5,2,1,"","SHADER_LOC_MAP_CUBEMAP"],[5,2,1,"","SHADER_LOC_MAP_EMISSION"],[5,2,1,"","SHADER_LOC_MAP_HEIGHT"],[5,2,1,"","SHADER_LOC_MAP_IRRADIANCE"],[5,2,1,"","SHADER_LOC_MAP_METALNESS"],[5,2,1,"","SHADER_LOC_MAP_NORMAL"],[5,2,1,"","SHADER_LOC_MAP_OCCLUSION"],[5,2,1,"","SHADER_LOC_MAP_PREFILTER"],[5,2,1,"","SHADER_LOC_MAP_ROUGHNESS"],[5,2,1,"","SHADER_LOC_MATRIX_MODEL"],[5,2,1,"","SHADER_LOC_MATRIX_MVP"],[5,2,1,"","SHADER_LOC_MATRIX_NORMAL"],[5,2,1,"","SHADER_LOC_MATRIX_PROJECTION"],[5,2,1,"","SHADER_LOC_MATRIX_VIEW"],[5,2,1,"","SHADER_LOC_VECTOR_VIEW"],[5,2,1,"","SHADER_LOC_VERTEX_BONEIDS"],[5,2,1,"","SHADER_LOC_VERTEX_BONEWEIGHTS"],[5,2,1,"","SHADER_LOC_VERTEX_COLOR"],[5,2,1,"","SHADER_LOC_VERTEX_NORMAL"],[5,2,1,"","SHADER_LOC_VERTEX_POSITION"],[5,2,1,"","SHADER_LOC_VERTEX_TANGENT"],[5,2,1,"","SHADER_LOC_VERTEX_TEXCOORD01"],[5,2,1,"","SHADER_LOC_VERTEX_TEXCOORD02"]],"pyray.ShaderUniformDataType":[[5,2,1,"","SHADER_UNIFORM_FLOAT"],[5,2,1,"","SHADER_UNIFORM_INT"],[5,2,1,"","SHADER_UNIFORM_IVEC2"],[5,2,1,"","SHADER_UNIFORM_IVEC3"],[5,2,1,"","SHADER_UNIFORM_IVEC4"],[5,2,1,"","SHADER_UNIFORM_SAMPLER2D"],[5,2,1,"","SHADER_UNIFORM_VEC2"],[5,2,1,"","SHADER_UNIFORM_VEC3"],[5,2,1,"","SHADER_UNIFORM_VEC4"]],"pyray.Sound":[[5,2,1,"","frameCount"],[5,2,1,"","stream"]],"pyray.Texture":[[5,2,1,"","format"],[5,2,1,"","height"],[5,2,1,"","id"],[5,2,1,"","mipmaps"],[5,2,1,"","width"]],"pyray.Texture2D":[[5,2,1,"","format"],[5,2,1,"","height"],[5,2,1,"","id"],[5,2,1,"","mipmaps"],[5,2,1,"","width"]],"pyray.TextureFilter":[[5,2,1,"","TEXTURE_FILTER_ANISOTROPIC_16X"],[5,2,1,"","TEXTURE_FILTER_ANISOTROPIC_4X"],[5,2,1,"","TEXTURE_FILTER_ANISOTROPIC_8X"],[5,2,1,"","TEXTURE_FILTER_BILINEAR"],[5,2,1,"","TEXTURE_FILTER_POINT"],[5,2,1,"","TEXTURE_FILTER_TRILINEAR"]],"pyray.TextureWrap":[[5,2,1,"","TEXTURE_WRAP_CLAMP"],[5,2,1,"","TEXTURE_WRAP_MIRROR_CLAMP"],[5,2,1,"","TEXTURE_WRAP_MIRROR_REPEAT"],[5,2,1,"","TEXTURE_WRAP_REPEAT"]],"pyray.TraceLogLevel":[[5,2,1,"","LOG_ALL"],[5,2,1,"","LOG_DEBUG"],[5,2,1,"","LOG_ERROR"],[5,2,1,"","LOG_FATAL"],[5,2,1,"","LOG_INFO"],[5,2,1,"","LOG_NONE"],[5,2,1,"","LOG_TRACE"],[5,2,1,"","LOG_WARNING"]],"pyray.Transform":[[5,2,1,"","rotation"],[5,2,1,"","scale"],[5,2,1,"","translation"]],"pyray.Vector2":[[5,2,1,"","x"],[5,2,1,"","y"]],"pyray.Vector3":[[5,2,1,"","x"],[5,2,1,"","y"],[5,2,1,"","z"]],"pyray.Vector4":[[5,2,1,"","w"],[5,2,1,"","x"],[5,2,1,"","y"],[5,2,1,"","z"]],"pyray.VrDeviceInfo":[[5,2,1,"","chromaAbCorrection"],[5,2,1,"","eyeToScreenDistance"],[5,2,1,"","hResolution"],[5,2,1,"","hScreenSize"],[5,2,1,"","interpupillaryDistance"],[5,2,1,"","lensDistortionValues"],[5,2,1,"","lensSeparationDistance"],[5,2,1,"","vResolution"],[5,2,1,"","vScreenSize"]],"pyray.VrStereoConfig":[[5,2,1,"","leftLensCenter"],[5,2,1,"","leftScreenCenter"],[5,2,1,"","projection"],[5,2,1,"","rightLensCenter"],[5,2,1,"","rightScreenCenter"],[5,2,1,"","scale"],[5,2,1,"","scaleIn"],[5,2,1,"","viewOffset"]],"pyray.Wave":[[5,2,1,"","channels"],[5,2,1,"","data"],[5,2,1,"","frameCount"],[5,2,1,"","sampleRate"],[5,2,1,"","sampleSize"]],"pyray.float16":[[5,2,1,"","v"]],"pyray.float3":[[5,2,1,"","v"]],"pyray.rlBlendMode":[[5,2,1,"","RL_BLEND_ADDITIVE"],[5,2,1,"","RL_BLEND_ADD_COLORS"],[5,2,1,"","RL_BLEND_ALPHA"],[5,2,1,"","RL_BLEND_ALPHA_PREMULTIPLY"],[5,2,1,"","RL_BLEND_CUSTOM"],[5,2,1,"","RL_BLEND_CUSTOM_SEPARATE"],[5,2,1,"","RL_BLEND_MULTIPLIED"],[5,2,1,"","RL_BLEND_SUBTRACT_COLORS"]],"pyray.rlCullMode":[[5,2,1,"","RL_CULL_FACE_BACK"],[5,2,1,"","RL_CULL_FACE_FRONT"]],"pyray.rlDrawCall":[[5,2,1,"","mode"],[5,2,1,"","textureId"],[5,2,1,"","vertexAlignment"],[5,2,1,"","vertexCount"]],"pyray.rlFramebufferAttachTextureType":[[5,2,1,"","RL_ATTACHMENT_CUBEMAP_NEGATIVE_X"],[5,2,1,"","RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y"],[5,2,1,"","RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z"],[5,2,1,"","RL_ATTACHMENT_CUBEMAP_POSITIVE_X"],[5,2,1,"","RL_ATTACHMENT_CUBEMAP_POSITIVE_Y"],[5,2,1,"","RL_ATTACHMENT_CUBEMAP_POSITIVE_Z"],[5,2,1,"","RL_ATTACHMENT_RENDERBUFFER"],[5,2,1,"","RL_ATTACHMENT_TEXTURE2D"]],"pyray.rlFramebufferAttachType":[[5,2,1,"","RL_ATTACHMENT_COLOR_CHANNEL0"],[5,2,1,"","RL_ATTACHMENT_COLOR_CHANNEL1"],[5,2,1,"","RL_ATTACHMENT_COLOR_CHANNEL2"],[5,2,1,"","RL_ATTACHMENT_COLOR_CHANNEL3"],[5,2,1,"","RL_ATTACHMENT_COLOR_CHANNEL4"],[5,2,1,"","RL_ATTACHMENT_COLOR_CHANNEL5"],[5,2,1,"","RL_ATTACHMENT_COLOR_CHANNEL6"],[5,2,1,"","RL_ATTACHMENT_COLOR_CHANNEL7"],[5,2,1,"","RL_ATTACHMENT_DEPTH"],[5,2,1,"","RL_ATTACHMENT_STENCIL"]],"pyray.rlGlVersion":[[5,2,1,"","RL_OPENGL_11"],[5,2,1,"","RL_OPENGL_21"],[5,2,1,"","RL_OPENGL_33"],[5,2,1,"","RL_OPENGL_43"],[5,2,1,"","RL_OPENGL_ES_20"],[5,2,1,"","RL_OPENGL_ES_30"]],"pyray.rlPixelFormat":[[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_DXT1_RGB"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_ETC1_RGB"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_ETC2_RGB"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_PVRT_RGB"],[5,2,1,"","RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R16"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R32"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8"],[5,2,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8"]],"pyray.rlRenderBatch":[[5,2,1,"","bufferCount"],[5,2,1,"","currentBuffer"],[5,2,1,"","currentDepth"],[5,2,1,"","drawCounter"],[5,2,1,"","draws"],[5,2,1,"","vertexBuffer"]],"pyray.rlShaderAttributeDataType":[[5,2,1,"","RL_SHADER_ATTRIB_FLOAT"],[5,2,1,"","RL_SHADER_ATTRIB_VEC2"],[5,2,1,"","RL_SHADER_ATTRIB_VEC3"],[5,2,1,"","RL_SHADER_ATTRIB_VEC4"]],"pyray.rlShaderLocationIndex":[[5,2,1,"","RL_SHADER_LOC_COLOR_AMBIENT"],[5,2,1,"","RL_SHADER_LOC_COLOR_DIFFUSE"],[5,2,1,"","RL_SHADER_LOC_COLOR_SPECULAR"],[5,2,1,"","RL_SHADER_LOC_MAP_ALBEDO"],[5,2,1,"","RL_SHADER_LOC_MAP_BRDF"],[5,2,1,"","RL_SHADER_LOC_MAP_CUBEMAP"],[5,2,1,"","RL_SHADER_LOC_MAP_EMISSION"],[5,2,1,"","RL_SHADER_LOC_MAP_HEIGHT"],[5,2,1,"","RL_SHADER_LOC_MAP_IRRADIANCE"],[5,2,1,"","RL_SHADER_LOC_MAP_METALNESS"],[5,2,1,"","RL_SHADER_LOC_MAP_NORMAL"],[5,2,1,"","RL_SHADER_LOC_MAP_OCCLUSION"],[5,2,1,"","RL_SHADER_LOC_MAP_PREFILTER"],[5,2,1,"","RL_SHADER_LOC_MAP_ROUGHNESS"],[5,2,1,"","RL_SHADER_LOC_MATRIX_MODEL"],[5,2,1,"","RL_SHADER_LOC_MATRIX_MVP"],[5,2,1,"","RL_SHADER_LOC_MATRIX_NORMAL"],[5,2,1,"","RL_SHADER_LOC_MATRIX_PROJECTION"],[5,2,1,"","RL_SHADER_LOC_MATRIX_VIEW"],[5,2,1,"","RL_SHADER_LOC_VECTOR_VIEW"],[5,2,1,"","RL_SHADER_LOC_VERTEX_COLOR"],[5,2,1,"","RL_SHADER_LOC_VERTEX_NORMAL"],[5,2,1,"","RL_SHADER_LOC_VERTEX_POSITION"],[5,2,1,"","RL_SHADER_LOC_VERTEX_TANGENT"],[5,2,1,"","RL_SHADER_LOC_VERTEX_TEXCOORD01"],[5,2,1,"","RL_SHADER_LOC_VERTEX_TEXCOORD02"]],"pyray.rlShaderUniformDataType":[[5,2,1,"","RL_SHADER_UNIFORM_FLOAT"],[5,2,1,"","RL_SHADER_UNIFORM_INT"],[5,2,1,"","RL_SHADER_UNIFORM_IVEC2"],[5,2,1,"","RL_SHADER_UNIFORM_IVEC3"],[5,2,1,"","RL_SHADER_UNIFORM_IVEC4"],[5,2,1,"","RL_SHADER_UNIFORM_SAMPLER2D"],[5,2,1,"","RL_SHADER_UNIFORM_UINT"],[5,2,1,"","RL_SHADER_UNIFORM_UIVEC2"],[5,2,1,"","RL_SHADER_UNIFORM_UIVEC3"],[5,2,1,"","RL_SHADER_UNIFORM_UIVEC4"],[5,2,1,"","RL_SHADER_UNIFORM_VEC2"],[5,2,1,"","RL_SHADER_UNIFORM_VEC3"],[5,2,1,"","RL_SHADER_UNIFORM_VEC4"]],"pyray.rlTextureFilter":[[5,2,1,"","RL_TEXTURE_FILTER_ANISOTROPIC_16X"],[5,2,1,"","RL_TEXTURE_FILTER_ANISOTROPIC_4X"],[5,2,1,"","RL_TEXTURE_FILTER_ANISOTROPIC_8X"],[5,2,1,"","RL_TEXTURE_FILTER_BILINEAR"],[5,2,1,"","RL_TEXTURE_FILTER_POINT"],[5,2,1,"","RL_TEXTURE_FILTER_TRILINEAR"]],"pyray.rlTraceLogLevel":[[5,2,1,"","RL_LOG_ALL"],[5,2,1,"","RL_LOG_DEBUG"],[5,2,1,"","RL_LOG_ERROR"],[5,2,1,"","RL_LOG_FATAL"],[5,2,1,"","RL_LOG_INFO"],[5,2,1,"","RL_LOG_NONE"],[5,2,1,"","RL_LOG_TRACE"],[5,2,1,"","RL_LOG_WARNING"]],"pyray.rlVertexBuffer":[[5,2,1,"","colors"],[5,2,1,"","elementCount"],[5,2,1,"","indices"],[5,2,1,"","normals"],[5,2,1,"","texcoords"],[5,2,1,"","vaoId"],[5,2,1,"","vboId"],[5,2,1,"","vertices"]],"raylib":[[6,3,1,"","ARROWS_SIZE"],[6,3,1,"","ARROWS_VISIBLE"],[6,3,1,"","ARROW_PADDING"],[6,4,1,"","AttachAudioMixedProcessor"],[6,4,1,"","AttachAudioStreamProcessor"],[6,1,1,"","AudioStream"],[6,1,1,"","AutomationEvent"],[6,1,1,"","AutomationEventList"],[6,3,1,"","BACKGROUND_COLOR"],[6,3,1,"","BASE_COLOR_DISABLED"],[6,3,1,"","BASE_COLOR_FOCUSED"],[6,3,1,"","BASE_COLOR_NORMAL"],[6,3,1,"","BASE_COLOR_PRESSED"],[6,3,1,"","BEIGE"],[6,3,1,"","BLACK"],[6,3,1,"","BLANK"],[6,3,1,"","BLEND_ADDITIVE"],[6,3,1,"","BLEND_ADD_COLORS"],[6,3,1,"","BLEND_ALPHA"],[6,3,1,"","BLEND_ALPHA_PREMULTIPLY"],[6,3,1,"","BLEND_CUSTOM"],[6,3,1,"","BLEND_CUSTOM_SEPARATE"],[6,3,1,"","BLEND_MULTIPLIED"],[6,3,1,"","BLEND_SUBTRACT_COLORS"],[6,3,1,"","BLUE"],[6,3,1,"","BORDER_COLOR_DISABLED"],[6,3,1,"","BORDER_COLOR_FOCUSED"],[6,3,1,"","BORDER_COLOR_NORMAL"],[6,3,1,"","BORDER_COLOR_PRESSED"],[6,3,1,"","BORDER_WIDTH"],[6,3,1,"","BROWN"],[6,3,1,"","BUTTON"],[6,4,1,"","BeginBlendMode"],[6,4,1,"","BeginDrawing"],[6,4,1,"","BeginMode2D"],[6,4,1,"","BeginMode3D"],[6,4,1,"","BeginScissorMode"],[6,4,1,"","BeginShaderMode"],[6,4,1,"","BeginTextureMode"],[6,4,1,"","BeginVrStereoMode"],[6,3,1,"","BlendMode"],[6,1,1,"","BoneInfo"],[6,1,1,"","BoundingBox"],[6,3,1,"","CAMERA_CUSTOM"],[6,3,1,"","CAMERA_FIRST_PERSON"],[6,3,1,"","CAMERA_FREE"],[6,3,1,"","CAMERA_ORBITAL"],[6,3,1,"","CAMERA_ORTHOGRAPHIC"],[6,3,1,"","CAMERA_PERSPECTIVE"],[6,3,1,"","CAMERA_THIRD_PERSON"],[6,3,1,"","CHECKBOX"],[6,3,1,"","CHECK_PADDING"],[6,3,1,"","COLORPICKER"],[6,3,1,"","COLOR_SELECTOR_SIZE"],[6,3,1,"","COMBOBOX"],[6,3,1,"","COMBO_BUTTON_SPACING"],[6,3,1,"","COMBO_BUTTON_WIDTH"],[6,3,1,"","CUBEMAP_LAYOUT_AUTO_DETECT"],[6,3,1,"","CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE"],[6,3,1,"","CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR"],[6,3,1,"","CUBEMAP_LAYOUT_LINE_HORIZONTAL"],[6,3,1,"","CUBEMAP_LAYOUT_LINE_VERTICAL"],[6,1,1,"","Camera"],[6,1,1,"","Camera2D"],[6,1,1,"","Camera3D"],[6,3,1,"","CameraMode"],[6,3,1,"","CameraProjection"],[6,4,1,"","ChangeDirectory"],[6,4,1,"","CheckCollisionBoxSphere"],[6,4,1,"","CheckCollisionBoxes"],[6,4,1,"","CheckCollisionCircleLine"],[6,4,1,"","CheckCollisionCircleRec"],[6,4,1,"","CheckCollisionCircles"],[6,4,1,"","CheckCollisionLines"],[6,4,1,"","CheckCollisionPointCircle"],[6,4,1,"","CheckCollisionPointLine"],[6,4,1,"","CheckCollisionPointPoly"],[6,4,1,"","CheckCollisionPointRec"],[6,4,1,"","CheckCollisionPointTriangle"],[6,4,1,"","CheckCollisionRecs"],[6,4,1,"","CheckCollisionSpheres"],[6,4,1,"","Clamp"],[6,4,1,"","ClearBackground"],[6,4,1,"","ClearWindowState"],[6,4,1,"","CloseAudioDevice"],[6,4,1,"","ClosePhysics"],[6,4,1,"","CloseWindow"],[6,4,1,"","CodepointToUTF8"],[6,1,1,"","Color"],[6,4,1,"","ColorAlpha"],[6,4,1,"","ColorAlphaBlend"],[6,4,1,"","ColorBrightness"],[6,4,1,"","ColorContrast"],[6,4,1,"","ColorFromHSV"],[6,4,1,"","ColorFromNormalized"],[6,4,1,"","ColorIsEqual"],[6,4,1,"","ColorLerp"],[6,4,1,"","ColorNormalize"],[6,4,1,"","ColorTint"],[6,4,1,"","ColorToHSV"],[6,4,1,"","ColorToInt"],[6,4,1,"","CompressData"],[6,4,1,"","ComputeCRC32"],[6,4,1,"","ComputeMD5"],[6,4,1,"","ComputeSHA1"],[6,3,1,"","ConfigFlags"],[6,4,1,"","CreatePhysicsBodyCircle"],[6,4,1,"","CreatePhysicsBodyPolygon"],[6,4,1,"","CreatePhysicsBodyRectangle"],[6,3,1,"","CubemapLayout"],[6,3,1,"","DARKBLUE"],[6,3,1,"","DARKBROWN"],[6,3,1,"","DARKGRAY"],[6,3,1,"","DARKGREEN"],[6,3,1,"","DARKPURPLE"],[6,3,1,"","DEFAULT"],[6,3,1,"","DROPDOWNBOX"],[6,3,1,"","DROPDOWN_ARROW_HIDDEN"],[6,3,1,"","DROPDOWN_ITEMS_SPACING"],[6,3,1,"","DROPDOWN_ROLL_UP"],[6,4,1,"","DecodeDataBase64"],[6,4,1,"","DecompressData"],[6,4,1,"","DestroyPhysicsBody"],[6,4,1,"","DetachAudioMixedProcessor"],[6,4,1,"","DetachAudioStreamProcessor"],[6,4,1,"","DirectoryExists"],[6,4,1,"","DisableCursor"],[6,4,1,"","DisableEventWaiting"],[6,4,1,"","DrawBillboard"],[6,4,1,"","DrawBillboardPro"],[6,4,1,"","DrawBillboardRec"],[6,4,1,"","DrawBoundingBox"],[6,4,1,"","DrawCapsule"],[6,4,1,"","DrawCapsuleWires"],[6,4,1,"","DrawCircle"],[6,4,1,"","DrawCircle3D"],[6,4,1,"","DrawCircleGradient"],[6,4,1,"","DrawCircleLines"],[6,4,1,"","DrawCircleLinesV"],[6,4,1,"","DrawCircleSector"],[6,4,1,"","DrawCircleSectorLines"],[6,4,1,"","DrawCircleV"],[6,4,1,"","DrawCube"],[6,4,1,"","DrawCubeV"],[6,4,1,"","DrawCubeWires"],[6,4,1,"","DrawCubeWiresV"],[6,4,1,"","DrawCylinder"],[6,4,1,"","DrawCylinderEx"],[6,4,1,"","DrawCylinderWires"],[6,4,1,"","DrawCylinderWiresEx"],[6,4,1,"","DrawEllipse"],[6,4,1,"","DrawEllipseLines"],[6,4,1,"","DrawFPS"],[6,4,1,"","DrawGrid"],[6,4,1,"","DrawLine"],[6,4,1,"","DrawLine3D"],[6,4,1,"","DrawLineBezier"],[6,4,1,"","DrawLineEx"],[6,4,1,"","DrawLineStrip"],[6,4,1,"","DrawLineV"],[6,4,1,"","DrawMesh"],[6,4,1,"","DrawMeshInstanced"],[6,4,1,"","DrawModel"],[6,4,1,"","DrawModelEx"],[6,4,1,"","DrawModelPoints"],[6,4,1,"","DrawModelPointsEx"],[6,4,1,"","DrawModelWires"],[6,4,1,"","DrawModelWiresEx"],[6,4,1,"","DrawPixel"],[6,4,1,"","DrawPixelV"],[6,4,1,"","DrawPlane"],[6,4,1,"","DrawPoint3D"],[6,4,1,"","DrawPoly"],[6,4,1,"","DrawPolyLines"],[6,4,1,"","DrawPolyLinesEx"],[6,4,1,"","DrawRay"],[6,4,1,"","DrawRectangle"],[6,4,1,"","DrawRectangleGradientEx"],[6,4,1,"","DrawRectangleGradientH"],[6,4,1,"","DrawRectangleGradientV"],[6,4,1,"","DrawRectangleLines"],[6,4,1,"","DrawRectangleLinesEx"],[6,4,1,"","DrawRectanglePro"],[6,4,1,"","DrawRectangleRec"],[6,4,1,"","DrawRectangleRounded"],[6,4,1,"","DrawRectangleRoundedLines"],[6,4,1,"","DrawRectangleRoundedLinesEx"],[6,4,1,"","DrawRectangleV"],[6,4,1,"","DrawRing"],[6,4,1,"","DrawRingLines"],[6,4,1,"","DrawSphere"],[6,4,1,"","DrawSphereEx"],[6,4,1,"","DrawSphereWires"],[6,4,1,"","DrawSplineBasis"],[6,4,1,"","DrawSplineBezierCubic"],[6,4,1,"","DrawSplineBezierQuadratic"],[6,4,1,"","DrawSplineCatmullRom"],[6,4,1,"","DrawSplineLinear"],[6,4,1,"","DrawSplineSegmentBasis"],[6,4,1,"","DrawSplineSegmentBezierCubic"],[6,4,1,"","DrawSplineSegmentBezierQuadratic"],[6,4,1,"","DrawSplineSegmentCatmullRom"],[6,4,1,"","DrawSplineSegmentLinear"],[6,4,1,"","DrawText"],[6,4,1,"","DrawTextCodepoint"],[6,4,1,"","DrawTextCodepoints"],[6,4,1,"","DrawTextEx"],[6,4,1,"","DrawTextPro"],[6,4,1,"","DrawTexture"],[6,4,1,"","DrawTextureEx"],[6,4,1,"","DrawTextureNPatch"],[6,4,1,"","DrawTexturePro"],[6,4,1,"","DrawTextureRec"],[6,4,1,"","DrawTextureV"],[6,4,1,"","DrawTriangle"],[6,4,1,"","DrawTriangle3D"],[6,4,1,"","DrawTriangleFan"],[6,4,1,"","DrawTriangleLines"],[6,4,1,"","DrawTriangleStrip"],[6,4,1,"","DrawTriangleStrip3D"],[6,4,1,"","EnableCursor"],[6,4,1,"","EnableEventWaiting"],[6,4,1,"","EncodeDataBase64"],[6,4,1,"","EndBlendMode"],[6,4,1,"","EndDrawing"],[6,4,1,"","EndMode2D"],[6,4,1,"","EndMode3D"],[6,4,1,"","EndScissorMode"],[6,4,1,"","EndShaderMode"],[6,4,1,"","EndTextureMode"],[6,4,1,"","EndVrStereoMode"],[6,4,1,"","ExportAutomationEventList"],[6,4,1,"","ExportDataAsCode"],[6,4,1,"","ExportFontAsCode"],[6,4,1,"","ExportImage"],[6,4,1,"","ExportImageAsCode"],[6,4,1,"","ExportImageToMemory"],[6,4,1,"","ExportMesh"],[6,4,1,"","ExportMeshAsCode"],[6,4,1,"","ExportWave"],[6,4,1,"","ExportWaveAsCode"],[6,3,1,"","FLAG_BORDERLESS_WINDOWED_MODE"],[6,3,1,"","FLAG_FULLSCREEN_MODE"],[6,3,1,"","FLAG_INTERLACED_HINT"],[6,3,1,"","FLAG_MSAA_4X_HINT"],[6,3,1,"","FLAG_VSYNC_HINT"],[6,3,1,"","FLAG_WINDOW_ALWAYS_RUN"],[6,3,1,"","FLAG_WINDOW_HIDDEN"],[6,3,1,"","FLAG_WINDOW_HIGHDPI"],[6,3,1,"","FLAG_WINDOW_MAXIMIZED"],[6,3,1,"","FLAG_WINDOW_MINIMIZED"],[6,3,1,"","FLAG_WINDOW_MOUSE_PASSTHROUGH"],[6,3,1,"","FLAG_WINDOW_RESIZABLE"],[6,3,1,"","FLAG_WINDOW_TOPMOST"],[6,3,1,"","FLAG_WINDOW_TRANSPARENT"],[6,3,1,"","FLAG_WINDOW_UNDECORATED"],[6,3,1,"","FLAG_WINDOW_UNFOCUSED"],[6,3,1,"","FONT_BITMAP"],[6,3,1,"","FONT_DEFAULT"],[6,3,1,"","FONT_SDF"],[6,4,1,"","Fade"],[6,4,1,"","FileExists"],[6,1,1,"","FilePathList"],[6,4,1,"","FloatEquals"],[6,1,1,"","Font"],[6,3,1,"","FontType"],[6,3,1,"","GAMEPAD_AXIS_LEFT_TRIGGER"],[6,3,1,"","GAMEPAD_AXIS_LEFT_X"],[6,3,1,"","GAMEPAD_AXIS_LEFT_Y"],[6,3,1,"","GAMEPAD_AXIS_RIGHT_TRIGGER"],[6,3,1,"","GAMEPAD_AXIS_RIGHT_X"],[6,3,1,"","GAMEPAD_AXIS_RIGHT_Y"],[6,3,1,"","GAMEPAD_BUTTON_LEFT_FACE_DOWN"],[6,3,1,"","GAMEPAD_BUTTON_LEFT_FACE_LEFT"],[6,3,1,"","GAMEPAD_BUTTON_LEFT_FACE_RIGHT"],[6,3,1,"","GAMEPAD_BUTTON_LEFT_FACE_UP"],[6,3,1,"","GAMEPAD_BUTTON_LEFT_THUMB"],[6,3,1,"","GAMEPAD_BUTTON_LEFT_TRIGGER_1"],[6,3,1,"","GAMEPAD_BUTTON_LEFT_TRIGGER_2"],[6,3,1,"","GAMEPAD_BUTTON_MIDDLE"],[6,3,1,"","GAMEPAD_BUTTON_MIDDLE_LEFT"],[6,3,1,"","GAMEPAD_BUTTON_MIDDLE_RIGHT"],[6,3,1,"","GAMEPAD_BUTTON_RIGHT_FACE_DOWN"],[6,3,1,"","GAMEPAD_BUTTON_RIGHT_FACE_LEFT"],[6,3,1,"","GAMEPAD_BUTTON_RIGHT_FACE_RIGHT"],[6,3,1,"","GAMEPAD_BUTTON_RIGHT_FACE_UP"],[6,3,1,"","GAMEPAD_BUTTON_RIGHT_THUMB"],[6,3,1,"","GAMEPAD_BUTTON_RIGHT_TRIGGER_1"],[6,3,1,"","GAMEPAD_BUTTON_RIGHT_TRIGGER_2"],[6,3,1,"","GAMEPAD_BUTTON_UNKNOWN"],[6,3,1,"","GESTURE_DOUBLETAP"],[6,3,1,"","GESTURE_DRAG"],[6,3,1,"","GESTURE_HOLD"],[6,3,1,"","GESTURE_NONE"],[6,3,1,"","GESTURE_PINCH_IN"],[6,3,1,"","GESTURE_PINCH_OUT"],[6,3,1,"","GESTURE_SWIPE_DOWN"],[6,3,1,"","GESTURE_SWIPE_LEFT"],[6,3,1,"","GESTURE_SWIPE_RIGHT"],[6,3,1,"","GESTURE_SWIPE_UP"],[6,3,1,"","GESTURE_TAP"],[6,1,1,"","GLFWallocator"],[6,1,1,"","GLFWcursor"],[6,1,1,"","GLFWgamepadstate"],[6,1,1,"","GLFWgammaramp"],[6,1,1,"","GLFWimage"],[6,1,1,"","GLFWmonitor"],[6,1,1,"","GLFWvidmode"],[6,1,1,"","GLFWwindow"],[6,3,1,"","GOLD"],[6,3,1,"","GRAY"],[6,3,1,"","GREEN"],[6,3,1,"","GROUP_PADDING"],[6,3,1,"","GamepadAxis"],[6,3,1,"","GamepadButton"],[6,4,1,"","GenImageCellular"],[6,4,1,"","GenImageChecked"],[6,4,1,"","GenImageColor"],[6,4,1,"","GenImageFontAtlas"],[6,4,1,"","GenImageGradientLinear"],[6,4,1,"","GenImageGradientRadial"],[6,4,1,"","GenImageGradientSquare"],[6,4,1,"","GenImagePerlinNoise"],[6,4,1,"","GenImageText"],[6,4,1,"","GenImageWhiteNoise"],[6,4,1,"","GenMeshCone"],[6,4,1,"","GenMeshCube"],[6,4,1,"","GenMeshCubicmap"],[6,4,1,"","GenMeshCylinder"],[6,4,1,"","GenMeshHeightmap"],[6,4,1,"","GenMeshHemiSphere"],[6,4,1,"","GenMeshKnot"],[6,4,1,"","GenMeshPlane"],[6,4,1,"","GenMeshPoly"],[6,4,1,"","GenMeshSphere"],[6,4,1,"","GenMeshTangents"],[6,4,1,"","GenMeshTorus"],[6,4,1,"","GenTextureMipmaps"],[6,3,1,"","Gesture"],[6,4,1,"","GetApplicationDirectory"],[6,4,1,"","GetCameraMatrix"],[6,4,1,"","GetCameraMatrix2D"],[6,4,1,"","GetCharPressed"],[6,4,1,"","GetClipboardImage"],[6,4,1,"","GetClipboardText"],[6,4,1,"","GetCodepoint"],[6,4,1,"","GetCodepointCount"],[6,4,1,"","GetCodepointNext"],[6,4,1,"","GetCodepointPrevious"],[6,4,1,"","GetCollisionRec"],[6,4,1,"","GetColor"],[6,4,1,"","GetCurrentMonitor"],[6,4,1,"","GetDirectoryPath"],[6,4,1,"","GetFPS"],[6,4,1,"","GetFileExtension"],[6,4,1,"","GetFileLength"],[6,4,1,"","GetFileModTime"],[6,4,1,"","GetFileName"],[6,4,1,"","GetFileNameWithoutExt"],[6,4,1,"","GetFontDefault"],[6,4,1,"","GetFrameTime"],[6,4,1,"","GetGamepadAxisCount"],[6,4,1,"","GetGamepadAxisMovement"],[6,4,1,"","GetGamepadButtonPressed"],[6,4,1,"","GetGamepadName"],[6,4,1,"","GetGestureDetected"],[6,4,1,"","GetGestureDragAngle"],[6,4,1,"","GetGestureDragVector"],[6,4,1,"","GetGestureHoldDuration"],[6,4,1,"","GetGesturePinchAngle"],[6,4,1,"","GetGesturePinchVector"],[6,4,1,"","GetGlyphAtlasRec"],[6,4,1,"","GetGlyphIndex"],[6,4,1,"","GetGlyphInfo"],[6,4,1,"","GetImageAlphaBorder"],[6,4,1,"","GetImageColor"],[6,4,1,"","GetKeyPressed"],[6,4,1,"","GetMasterVolume"],[6,4,1,"","GetMeshBoundingBox"],[6,4,1,"","GetModelBoundingBox"],[6,4,1,"","GetMonitorCount"],[6,4,1,"","GetMonitorHeight"],[6,4,1,"","GetMonitorName"],[6,4,1,"","GetMonitorPhysicalHeight"],[6,4,1,"","GetMonitorPhysicalWidth"],[6,4,1,"","GetMonitorPosition"],[6,4,1,"","GetMonitorRefreshRate"],[6,4,1,"","GetMonitorWidth"],[6,4,1,"","GetMouseDelta"],[6,4,1,"","GetMousePosition"],[6,4,1,"","GetMouseWheelMove"],[6,4,1,"","GetMouseWheelMoveV"],[6,4,1,"","GetMouseX"],[6,4,1,"","GetMouseY"],[6,4,1,"","GetMusicTimeLength"],[6,4,1,"","GetMusicTimePlayed"],[6,4,1,"","GetPhysicsBodiesCount"],[6,4,1,"","GetPhysicsBody"],[6,4,1,"","GetPhysicsShapeType"],[6,4,1,"","GetPhysicsShapeVertex"],[6,4,1,"","GetPhysicsShapeVerticesCount"],[6,4,1,"","GetPixelColor"],[6,4,1,"","GetPixelDataSize"],[6,4,1,"","GetPrevDirectoryPath"],[6,4,1,"","GetRandomValue"],[6,4,1,"","GetRayCollisionBox"],[6,4,1,"","GetRayCollisionMesh"],[6,4,1,"","GetRayCollisionQuad"],[6,4,1,"","GetRayCollisionSphere"],[6,4,1,"","GetRayCollisionTriangle"],[6,4,1,"","GetRenderHeight"],[6,4,1,"","GetRenderWidth"],[6,4,1,"","GetScreenHeight"],[6,4,1,"","GetScreenToWorld2D"],[6,4,1,"","GetScreenToWorldRay"],[6,4,1,"","GetScreenToWorldRayEx"],[6,4,1,"","GetScreenWidth"],[6,4,1,"","GetShaderLocation"],[6,4,1,"","GetShaderLocationAttrib"],[6,4,1,"","GetShapesTexture"],[6,4,1,"","GetShapesTextureRectangle"],[6,4,1,"","GetSplinePointBasis"],[6,4,1,"","GetSplinePointBezierCubic"],[6,4,1,"","GetSplinePointBezierQuad"],[6,4,1,"","GetSplinePointCatmullRom"],[6,4,1,"","GetSplinePointLinear"],[6,4,1,"","GetTime"],[6,4,1,"","GetTouchPointCount"],[6,4,1,"","GetTouchPointId"],[6,4,1,"","GetTouchPosition"],[6,4,1,"","GetTouchX"],[6,4,1,"","GetTouchY"],[6,4,1,"","GetWindowHandle"],[6,4,1,"","GetWindowPosition"],[6,4,1,"","GetWindowScaleDPI"],[6,4,1,"","GetWorkingDirectory"],[6,4,1,"","GetWorldToScreen"],[6,4,1,"","GetWorldToScreen2D"],[6,4,1,"","GetWorldToScreenEx"],[6,1,1,"","GlyphInfo"],[6,4,1,"","GuiButton"],[6,4,1,"","GuiCheckBox"],[6,3,1,"","GuiCheckBoxProperty"],[6,4,1,"","GuiColorBarAlpha"],[6,4,1,"","GuiColorBarHue"],[6,4,1,"","GuiColorPanel"],[6,4,1,"","GuiColorPanelHSV"],[6,4,1,"","GuiColorPicker"],[6,4,1,"","GuiColorPickerHSV"],[6,3,1,"","GuiColorPickerProperty"],[6,4,1,"","GuiComboBox"],[6,3,1,"","GuiComboBoxProperty"],[6,3,1,"","GuiControl"],[6,3,1,"","GuiControlProperty"],[6,3,1,"","GuiDefaultProperty"],[6,4,1,"","GuiDisable"],[6,4,1,"","GuiDisableTooltip"],[6,4,1,"","GuiDrawIcon"],[6,4,1,"","GuiDropdownBox"],[6,3,1,"","GuiDropdownBoxProperty"],[6,4,1,"","GuiDummyRec"],[6,4,1,"","GuiEnable"],[6,4,1,"","GuiEnableTooltip"],[6,4,1,"","GuiGetFont"],[6,4,1,"","GuiGetIcons"],[6,4,1,"","GuiGetState"],[6,4,1,"","GuiGetStyle"],[6,4,1,"","GuiGrid"],[6,4,1,"","GuiGroupBox"],[6,3,1,"","GuiIconName"],[6,4,1,"","GuiIconText"],[6,4,1,"","GuiIsLocked"],[6,4,1,"","GuiLabel"],[6,4,1,"","GuiLabelButton"],[6,4,1,"","GuiLine"],[6,4,1,"","GuiListView"],[6,4,1,"","GuiListViewEx"],[6,3,1,"","GuiListViewProperty"],[6,4,1,"","GuiLoadIcons"],[6,4,1,"","GuiLoadStyle"],[6,4,1,"","GuiLoadStyleDefault"],[6,4,1,"","GuiLock"],[6,4,1,"","GuiMessageBox"],[6,4,1,"","GuiPanel"],[6,4,1,"","GuiProgressBar"],[6,3,1,"","GuiProgressBarProperty"],[6,3,1,"","GuiScrollBarProperty"],[6,4,1,"","GuiScrollPanel"],[6,4,1,"","GuiSetAlpha"],[6,4,1,"","GuiSetFont"],[6,4,1,"","GuiSetIconScale"],[6,4,1,"","GuiSetState"],[6,4,1,"","GuiSetStyle"],[6,4,1,"","GuiSetTooltip"],[6,4,1,"","GuiSlider"],[6,4,1,"","GuiSliderBar"],[6,3,1,"","GuiSliderProperty"],[6,4,1,"","GuiSpinner"],[6,3,1,"","GuiSpinnerProperty"],[6,3,1,"","GuiState"],[6,4,1,"","GuiStatusBar"],[6,1,1,"","GuiStyleProp"],[6,4,1,"","GuiTabBar"],[6,3,1,"","GuiTextAlignment"],[6,3,1,"","GuiTextAlignmentVertical"],[6,4,1,"","GuiTextBox"],[6,3,1,"","GuiTextBoxProperty"],[6,4,1,"","GuiTextInputBox"],[6,3,1,"","GuiTextWrapMode"],[6,4,1,"","GuiToggle"],[6,4,1,"","GuiToggleGroup"],[6,3,1,"","GuiToggleProperty"],[6,4,1,"","GuiToggleSlider"],[6,4,1,"","GuiUnlock"],[6,4,1,"","GuiValueBox"],[6,4,1,"","GuiValueBoxFloat"],[6,4,1,"","GuiWindowBox"],[6,3,1,"","HUEBAR_PADDING"],[6,3,1,"","HUEBAR_SELECTOR_HEIGHT"],[6,3,1,"","HUEBAR_SELECTOR_OVERFLOW"],[6,3,1,"","HUEBAR_WIDTH"],[6,4,1,"","HideCursor"],[6,3,1,"","ICON_1UP"],[6,3,1,"","ICON_229"],[6,3,1,"","ICON_230"],[6,3,1,"","ICON_231"],[6,3,1,"","ICON_232"],[6,3,1,"","ICON_233"],[6,3,1,"","ICON_234"],[6,3,1,"","ICON_235"],[6,3,1,"","ICON_236"],[6,3,1,"","ICON_237"],[6,3,1,"","ICON_238"],[6,3,1,"","ICON_239"],[6,3,1,"","ICON_240"],[6,3,1,"","ICON_241"],[6,3,1,"","ICON_242"],[6,3,1,"","ICON_243"],[6,3,1,"","ICON_244"],[6,3,1,"","ICON_245"],[6,3,1,"","ICON_246"],[6,3,1,"","ICON_247"],[6,3,1,"","ICON_248"],[6,3,1,"","ICON_249"],[6,3,1,"","ICON_250"],[6,3,1,"","ICON_251"],[6,3,1,"","ICON_252"],[6,3,1,"","ICON_253"],[6,3,1,"","ICON_254"],[6,3,1,"","ICON_255"],[6,3,1,"","ICON_ALARM"],[6,3,1,"","ICON_ALPHA_CLEAR"],[6,3,1,"","ICON_ALPHA_MULTIPLY"],[6,3,1,"","ICON_ARROW_DOWN"],[6,3,1,"","ICON_ARROW_DOWN_FILL"],[6,3,1,"","ICON_ARROW_LEFT"],[6,3,1,"","ICON_ARROW_LEFT_FILL"],[6,3,1,"","ICON_ARROW_RIGHT"],[6,3,1,"","ICON_ARROW_RIGHT_FILL"],[6,3,1,"","ICON_ARROW_UP"],[6,3,1,"","ICON_ARROW_UP_FILL"],[6,3,1,"","ICON_AUDIO"],[6,3,1,"","ICON_BIN"],[6,3,1,"","ICON_BOX"],[6,3,1,"","ICON_BOX_BOTTOM"],[6,3,1,"","ICON_BOX_BOTTOM_LEFT"],[6,3,1,"","ICON_BOX_BOTTOM_RIGHT"],[6,3,1,"","ICON_BOX_CENTER"],[6,3,1,"","ICON_BOX_CIRCLE_MASK"],[6,3,1,"","ICON_BOX_CONCENTRIC"],[6,3,1,"","ICON_BOX_CORNERS_BIG"],[6,3,1,"","ICON_BOX_CORNERS_SMALL"],[6,3,1,"","ICON_BOX_DOTS_BIG"],[6,3,1,"","ICON_BOX_DOTS_SMALL"],[6,3,1,"","ICON_BOX_GRID"],[6,3,1,"","ICON_BOX_GRID_BIG"],[6,3,1,"","ICON_BOX_LEFT"],[6,3,1,"","ICON_BOX_MULTISIZE"],[6,3,1,"","ICON_BOX_RIGHT"],[6,3,1,"","ICON_BOX_TOP"],[6,3,1,"","ICON_BOX_TOP_LEFT"],[6,3,1,"","ICON_BOX_TOP_RIGHT"],[6,3,1,"","ICON_BREAKPOINT_OFF"],[6,3,1,"","ICON_BREAKPOINT_ON"],[6,3,1,"","ICON_BRUSH_CLASSIC"],[6,3,1,"","ICON_BRUSH_PAINTER"],[6,3,1,"","ICON_BURGER_MENU"],[6,3,1,"","ICON_CAMERA"],[6,3,1,"","ICON_CASE_SENSITIVE"],[6,3,1,"","ICON_CLOCK"],[6,3,1,"","ICON_COIN"],[6,3,1,"","ICON_COLOR_BUCKET"],[6,3,1,"","ICON_COLOR_PICKER"],[6,3,1,"","ICON_CORNER"],[6,3,1,"","ICON_CPU"],[6,3,1,"","ICON_CRACK"],[6,3,1,"","ICON_CRACK_POINTS"],[6,3,1,"","ICON_CROP"],[6,3,1,"","ICON_CROP_ALPHA"],[6,3,1,"","ICON_CROSS"],[6,3,1,"","ICON_CROSSLINE"],[6,3,1,"","ICON_CROSS_SMALL"],[6,3,1,"","ICON_CUBE"],[6,3,1,"","ICON_CUBE_FACE_BACK"],[6,3,1,"","ICON_CUBE_FACE_BOTTOM"],[6,3,1,"","ICON_CUBE_FACE_FRONT"],[6,3,1,"","ICON_CUBE_FACE_LEFT"],[6,3,1,"","ICON_CUBE_FACE_RIGHT"],[6,3,1,"","ICON_CUBE_FACE_TOP"],[6,3,1,"","ICON_CURSOR_CLASSIC"],[6,3,1,"","ICON_CURSOR_HAND"],[6,3,1,"","ICON_CURSOR_MOVE"],[6,3,1,"","ICON_CURSOR_MOVE_FILL"],[6,3,1,"","ICON_CURSOR_POINTER"],[6,3,1,"","ICON_CURSOR_SCALE"],[6,3,1,"","ICON_CURSOR_SCALE_FILL"],[6,3,1,"","ICON_CURSOR_SCALE_LEFT"],[6,3,1,"","ICON_CURSOR_SCALE_LEFT_FILL"],[6,3,1,"","ICON_CURSOR_SCALE_RIGHT"],[6,3,1,"","ICON_CURSOR_SCALE_RIGHT_FILL"],[6,3,1,"","ICON_DEMON"],[6,3,1,"","ICON_DITHERING"],[6,3,1,"","ICON_DOOR"],[6,3,1,"","ICON_EMPTYBOX"],[6,3,1,"","ICON_EMPTYBOX_SMALL"],[6,3,1,"","ICON_EXIT"],[6,3,1,"","ICON_EXPLOSION"],[6,3,1,"","ICON_EYE_OFF"],[6,3,1,"","ICON_EYE_ON"],[6,3,1,"","ICON_FILE"],[6,3,1,"","ICON_FILETYPE_ALPHA"],[6,3,1,"","ICON_FILETYPE_AUDIO"],[6,3,1,"","ICON_FILETYPE_BINARY"],[6,3,1,"","ICON_FILETYPE_HOME"],[6,3,1,"","ICON_FILETYPE_IMAGE"],[6,3,1,"","ICON_FILETYPE_INFO"],[6,3,1,"","ICON_FILETYPE_PLAY"],[6,3,1,"","ICON_FILETYPE_TEXT"],[6,3,1,"","ICON_FILETYPE_VIDEO"],[6,3,1,"","ICON_FILE_ADD"],[6,3,1,"","ICON_FILE_COPY"],[6,3,1,"","ICON_FILE_CUT"],[6,3,1,"","ICON_FILE_DELETE"],[6,3,1,"","ICON_FILE_EXPORT"],[6,3,1,"","ICON_FILE_NEW"],[6,3,1,"","ICON_FILE_OPEN"],[6,3,1,"","ICON_FILE_PASTE"],[6,3,1,"","ICON_FILE_SAVE"],[6,3,1,"","ICON_FILE_SAVE_CLASSIC"],[6,3,1,"","ICON_FILTER"],[6,3,1,"","ICON_FILTER_BILINEAR"],[6,3,1,"","ICON_FILTER_POINT"],[6,3,1,"","ICON_FILTER_TOP"],[6,3,1,"","ICON_FOLDER"],[6,3,1,"","ICON_FOLDER_ADD"],[6,3,1,"","ICON_FOLDER_FILE_OPEN"],[6,3,1,"","ICON_FOLDER_OPEN"],[6,3,1,"","ICON_FOLDER_SAVE"],[6,3,1,"","ICON_FOUR_BOXES"],[6,3,1,"","ICON_FX"],[6,3,1,"","ICON_GEAR"],[6,3,1,"","ICON_GEAR_BIG"],[6,3,1,"","ICON_GEAR_EX"],[6,3,1,"","ICON_GRID"],[6,3,1,"","ICON_GRID_FILL"],[6,3,1,"","ICON_HAND_POINTER"],[6,3,1,"","ICON_HEART"],[6,3,1,"","ICON_HELP"],[6,3,1,"","ICON_HELP_BOX"],[6,3,1,"","ICON_HEX"],[6,3,1,"","ICON_HIDPI"],[6,3,1,"","ICON_HOT"],[6,3,1,"","ICON_HOUSE"],[6,3,1,"","ICON_INFO"],[6,3,1,"","ICON_INFO_BOX"],[6,3,1,"","ICON_KEY"],[6,3,1,"","ICON_LASER"],[6,3,1,"","ICON_LAYERS"],[6,3,1,"","ICON_LAYERS2"],[6,3,1,"","ICON_LAYERS_ISO"],[6,3,1,"","ICON_LAYERS_VISIBLE"],[6,3,1,"","ICON_LENS"],[6,3,1,"","ICON_LENS_BIG"],[6,3,1,"","ICON_LIFE_BARS"],[6,3,1,"","ICON_LINK"],[6,3,1,"","ICON_LINK_BOXES"],[6,3,1,"","ICON_LINK_BROKE"],[6,3,1,"","ICON_LINK_MULTI"],[6,3,1,"","ICON_LINK_NET"],[6,3,1,"","ICON_LOCK_CLOSE"],[6,3,1,"","ICON_LOCK_OPEN"],[6,3,1,"","ICON_MAGNET"],[6,3,1,"","ICON_MAILBOX"],[6,3,1,"","ICON_MAPS"],[6,3,1,"","ICON_MIPMAPS"],[6,3,1,"","ICON_MLAYERS"],[6,3,1,"","ICON_MODE_2D"],[6,3,1,"","ICON_MODE_3D"],[6,3,1,"","ICON_MONITOR"],[6,3,1,"","ICON_MUTATE"],[6,3,1,"","ICON_MUTATE_FILL"],[6,3,1,"","ICON_NONE"],[6,3,1,"","ICON_NOTEBOOK"],[6,3,1,"","ICON_OK_TICK"],[6,3,1,"","ICON_PENCIL"],[6,3,1,"","ICON_PENCIL_BIG"],[6,3,1,"","ICON_PHOTO_CAMERA"],[6,3,1,"","ICON_PHOTO_CAMERA_FLASH"],[6,3,1,"","ICON_PLAYER"],[6,3,1,"","ICON_PLAYER_JUMP"],[6,3,1,"","ICON_PLAYER_NEXT"],[6,3,1,"","ICON_PLAYER_PAUSE"],[6,3,1,"","ICON_PLAYER_PLAY"],[6,3,1,"","ICON_PLAYER_PLAY_BACK"],[6,3,1,"","ICON_PLAYER_PREVIOUS"],[6,3,1,"","ICON_PLAYER_RECORD"],[6,3,1,"","ICON_PLAYER_STOP"],[6,3,1,"","ICON_POT"],[6,3,1,"","ICON_PRINTER"],[6,3,1,"","ICON_PRIORITY"],[6,3,1,"","ICON_REDO"],[6,3,1,"","ICON_REDO_FILL"],[6,3,1,"","ICON_REG_EXP"],[6,3,1,"","ICON_REPEAT"],[6,3,1,"","ICON_REPEAT_FILL"],[6,3,1,"","ICON_REREDO"],[6,3,1,"","ICON_REREDO_FILL"],[6,3,1,"","ICON_RESIZE"],[6,3,1,"","ICON_RESTART"],[6,3,1,"","ICON_ROM"],[6,3,1,"","ICON_ROTATE"],[6,3,1,"","ICON_ROTATE_FILL"],[6,3,1,"","ICON_RUBBER"],[6,3,1,"","ICON_SAND_TIMER"],[6,3,1,"","ICON_SCALE"],[6,3,1,"","ICON_SHIELD"],[6,3,1,"","ICON_SHUFFLE"],[6,3,1,"","ICON_SHUFFLE_FILL"],[6,3,1,"","ICON_SPECIAL"],[6,3,1,"","ICON_SQUARE_TOGGLE"],[6,3,1,"","ICON_STAR"],[6,3,1,"","ICON_STEP_INTO"],[6,3,1,"","ICON_STEP_OUT"],[6,3,1,"","ICON_STEP_OVER"],[6,3,1,"","ICON_SUITCASE"],[6,3,1,"","ICON_SUITCASE_ZIP"],[6,3,1,"","ICON_SYMMETRY"],[6,3,1,"","ICON_SYMMETRY_HORIZONTAL"],[6,3,1,"","ICON_SYMMETRY_VERTICAL"],[6,3,1,"","ICON_TARGET"],[6,3,1,"","ICON_TARGET_BIG"],[6,3,1,"","ICON_TARGET_BIG_FILL"],[6,3,1,"","ICON_TARGET_MOVE"],[6,3,1,"","ICON_TARGET_MOVE_FILL"],[6,3,1,"","ICON_TARGET_POINT"],[6,3,1,"","ICON_TARGET_SMALL"],[6,3,1,"","ICON_TARGET_SMALL_FILL"],[6,3,1,"","ICON_TEXT_A"],[6,3,1,"","ICON_TEXT_NOTES"],[6,3,1,"","ICON_TEXT_POPUP"],[6,3,1,"","ICON_TEXT_T"],[6,3,1,"","ICON_TOOLS"],[6,3,1,"","ICON_UNDO"],[6,3,1,"","ICON_UNDO_FILL"],[6,3,1,"","ICON_VERTICAL_BARS"],[6,3,1,"","ICON_VERTICAL_BARS_FILL"],[6,3,1,"","ICON_WARNING"],[6,3,1,"","ICON_WATER_DROP"],[6,3,1,"","ICON_WAVE"],[6,3,1,"","ICON_WAVE_SINUS"],[6,3,1,"","ICON_WAVE_SQUARE"],[6,3,1,"","ICON_WAVE_TRIANGULAR"],[6,3,1,"","ICON_WINDOW"],[6,3,1,"","ICON_ZOOM_ALL"],[6,3,1,"","ICON_ZOOM_BIG"],[6,3,1,"","ICON_ZOOM_CENTER"],[6,3,1,"","ICON_ZOOM_MEDIUM"],[6,3,1,"","ICON_ZOOM_SMALL"],[6,1,1,"","Image"],[6,4,1,"","ImageAlphaClear"],[6,4,1,"","ImageAlphaCrop"],[6,4,1,"","ImageAlphaMask"],[6,4,1,"","ImageAlphaPremultiply"],[6,4,1,"","ImageBlurGaussian"],[6,4,1,"","ImageClearBackground"],[6,4,1,"","ImageColorBrightness"],[6,4,1,"","ImageColorContrast"],[6,4,1,"","ImageColorGrayscale"],[6,4,1,"","ImageColorInvert"],[6,4,1,"","ImageColorReplace"],[6,4,1,"","ImageColorTint"],[6,4,1,"","ImageCopy"],[6,4,1,"","ImageCrop"],[6,4,1,"","ImageDither"],[6,4,1,"","ImageDraw"],[6,4,1,"","ImageDrawCircle"],[6,4,1,"","ImageDrawCircleLines"],[6,4,1,"","ImageDrawCircleLinesV"],[6,4,1,"","ImageDrawCircleV"],[6,4,1,"","ImageDrawLine"],[6,4,1,"","ImageDrawLineEx"],[6,4,1,"","ImageDrawLineV"],[6,4,1,"","ImageDrawPixel"],[6,4,1,"","ImageDrawPixelV"],[6,4,1,"","ImageDrawRectangle"],[6,4,1,"","ImageDrawRectangleLines"],[6,4,1,"","ImageDrawRectangleRec"],[6,4,1,"","ImageDrawRectangleV"],[6,4,1,"","ImageDrawText"],[6,4,1,"","ImageDrawTextEx"],[6,4,1,"","ImageDrawTriangle"],[6,4,1,"","ImageDrawTriangleEx"],[6,4,1,"","ImageDrawTriangleFan"],[6,4,1,"","ImageDrawTriangleLines"],[6,4,1,"","ImageDrawTriangleStrip"],[6,4,1,"","ImageFlipHorizontal"],[6,4,1,"","ImageFlipVertical"],[6,4,1,"","ImageFormat"],[6,4,1,"","ImageFromChannel"],[6,4,1,"","ImageFromImage"],[6,4,1,"","ImageKernelConvolution"],[6,4,1,"","ImageMipmaps"],[6,4,1,"","ImageResize"],[6,4,1,"","ImageResizeCanvas"],[6,4,1,"","ImageResizeNN"],[6,4,1,"","ImageRotate"],[6,4,1,"","ImageRotateCCW"],[6,4,1,"","ImageRotateCW"],[6,4,1,"","ImageText"],[6,4,1,"","ImageTextEx"],[6,4,1,"","ImageToPOT"],[6,4,1,"","InitAudioDevice"],[6,4,1,"","InitPhysics"],[6,4,1,"","InitWindow"],[6,4,1,"","IsAudioDeviceReady"],[6,4,1,"","IsAudioStreamPlaying"],[6,4,1,"","IsAudioStreamProcessed"],[6,4,1,"","IsAudioStreamValid"],[6,4,1,"","IsCursorHidden"],[6,4,1,"","IsCursorOnScreen"],[6,4,1,"","IsFileDropped"],[6,4,1,"","IsFileExtension"],[6,4,1,"","IsFileNameValid"],[6,4,1,"","IsFontValid"],[6,4,1,"","IsGamepadAvailable"],[6,4,1,"","IsGamepadButtonDown"],[6,4,1,"","IsGamepadButtonPressed"],[6,4,1,"","IsGamepadButtonReleased"],[6,4,1,"","IsGamepadButtonUp"],[6,4,1,"","IsGestureDetected"],[6,4,1,"","IsImageValid"],[6,4,1,"","IsKeyDown"],[6,4,1,"","IsKeyPressed"],[6,4,1,"","IsKeyPressedRepeat"],[6,4,1,"","IsKeyReleased"],[6,4,1,"","IsKeyUp"],[6,4,1,"","IsMaterialValid"],[6,4,1,"","IsModelAnimationValid"],[6,4,1,"","IsModelValid"],[6,4,1,"","IsMouseButtonDown"],[6,4,1,"","IsMouseButtonPressed"],[6,4,1,"","IsMouseButtonReleased"],[6,4,1,"","IsMouseButtonUp"],[6,4,1,"","IsMusicStreamPlaying"],[6,4,1,"","IsMusicValid"],[6,4,1,"","IsPathFile"],[6,4,1,"","IsRenderTextureValid"],[6,4,1,"","IsShaderValid"],[6,4,1,"","IsSoundPlaying"],[6,4,1,"","IsSoundValid"],[6,4,1,"","IsTextureValid"],[6,4,1,"","IsWaveValid"],[6,4,1,"","IsWindowFocused"],[6,4,1,"","IsWindowFullscreen"],[6,4,1,"","IsWindowHidden"],[6,4,1,"","IsWindowMaximized"],[6,4,1,"","IsWindowMinimized"],[6,4,1,"","IsWindowReady"],[6,4,1,"","IsWindowResized"],[6,4,1,"","IsWindowState"],[6,3,1,"","KEY_A"],[6,3,1,"","KEY_APOSTROPHE"],[6,3,1,"","KEY_B"],[6,3,1,"","KEY_BACK"],[6,3,1,"","KEY_BACKSLASH"],[6,3,1,"","KEY_BACKSPACE"],[6,3,1,"","KEY_C"],[6,3,1,"","KEY_CAPS_LOCK"],[6,3,1,"","KEY_COMMA"],[6,3,1,"","KEY_D"],[6,3,1,"","KEY_DELETE"],[6,3,1,"","KEY_DOWN"],[6,3,1,"","KEY_E"],[6,3,1,"","KEY_EIGHT"],[6,3,1,"","KEY_END"],[6,3,1,"","KEY_ENTER"],[6,3,1,"","KEY_EQUAL"],[6,3,1,"","KEY_ESCAPE"],[6,3,1,"","KEY_F"],[6,3,1,"","KEY_F1"],[6,3,1,"","KEY_F10"],[6,3,1,"","KEY_F11"],[6,3,1,"","KEY_F12"],[6,3,1,"","KEY_F2"],[6,3,1,"","KEY_F3"],[6,3,1,"","KEY_F4"],[6,3,1,"","KEY_F5"],[6,3,1,"","KEY_F6"],[6,3,1,"","KEY_F7"],[6,3,1,"","KEY_F8"],[6,3,1,"","KEY_F9"],[6,3,1,"","KEY_FIVE"],[6,3,1,"","KEY_FOUR"],[6,3,1,"","KEY_G"],[6,3,1,"","KEY_GRAVE"],[6,3,1,"","KEY_H"],[6,3,1,"","KEY_HOME"],[6,3,1,"","KEY_I"],[6,3,1,"","KEY_INSERT"],[6,3,1,"","KEY_J"],[6,3,1,"","KEY_K"],[6,3,1,"","KEY_KB_MENU"],[6,3,1,"","KEY_KP_0"],[6,3,1,"","KEY_KP_1"],[6,3,1,"","KEY_KP_2"],[6,3,1,"","KEY_KP_3"],[6,3,1,"","KEY_KP_4"],[6,3,1,"","KEY_KP_5"],[6,3,1,"","KEY_KP_6"],[6,3,1,"","KEY_KP_7"],[6,3,1,"","KEY_KP_8"],[6,3,1,"","KEY_KP_9"],[6,3,1,"","KEY_KP_ADD"],[6,3,1,"","KEY_KP_DECIMAL"],[6,3,1,"","KEY_KP_DIVIDE"],[6,3,1,"","KEY_KP_ENTER"],[6,3,1,"","KEY_KP_EQUAL"],[6,3,1,"","KEY_KP_MULTIPLY"],[6,3,1,"","KEY_KP_SUBTRACT"],[6,3,1,"","KEY_L"],[6,3,1,"","KEY_LEFT"],[6,3,1,"","KEY_LEFT_ALT"],[6,3,1,"","KEY_LEFT_BRACKET"],[6,3,1,"","KEY_LEFT_CONTROL"],[6,3,1,"","KEY_LEFT_SHIFT"],[6,3,1,"","KEY_LEFT_SUPER"],[6,3,1,"","KEY_M"],[6,3,1,"","KEY_MENU"],[6,3,1,"","KEY_MINUS"],[6,3,1,"","KEY_N"],[6,3,1,"","KEY_NINE"],[6,3,1,"","KEY_NULL"],[6,3,1,"","KEY_NUM_LOCK"],[6,3,1,"","KEY_O"],[6,3,1,"","KEY_ONE"],[6,3,1,"","KEY_P"],[6,3,1,"","KEY_PAGE_DOWN"],[6,3,1,"","KEY_PAGE_UP"],[6,3,1,"","KEY_PAUSE"],[6,3,1,"","KEY_PERIOD"],[6,3,1,"","KEY_PRINT_SCREEN"],[6,3,1,"","KEY_Q"],[6,3,1,"","KEY_R"],[6,3,1,"","KEY_RIGHT"],[6,3,1,"","KEY_RIGHT_ALT"],[6,3,1,"","KEY_RIGHT_BRACKET"],[6,3,1,"","KEY_RIGHT_CONTROL"],[6,3,1,"","KEY_RIGHT_SHIFT"],[6,3,1,"","KEY_RIGHT_SUPER"],[6,3,1,"","KEY_S"],[6,3,1,"","KEY_SCROLL_LOCK"],[6,3,1,"","KEY_SEMICOLON"],[6,3,1,"","KEY_SEVEN"],[6,3,1,"","KEY_SIX"],[6,3,1,"","KEY_SLASH"],[6,3,1,"","KEY_SPACE"],[6,3,1,"","KEY_T"],[6,3,1,"","KEY_TAB"],[6,3,1,"","KEY_THREE"],[6,3,1,"","KEY_TWO"],[6,3,1,"","KEY_U"],[6,3,1,"","KEY_UP"],[6,3,1,"","KEY_V"],[6,3,1,"","KEY_VOLUME_DOWN"],[6,3,1,"","KEY_VOLUME_UP"],[6,3,1,"","KEY_W"],[6,3,1,"","KEY_X"],[6,3,1,"","KEY_Y"],[6,3,1,"","KEY_Z"],[6,3,1,"","KEY_ZERO"],[6,3,1,"","KeyboardKey"],[6,3,1,"","LABEL"],[6,3,1,"","LIGHTGRAY"],[6,3,1,"","LIME"],[6,3,1,"","LINE_COLOR"],[6,3,1,"","LISTVIEW"],[6,3,1,"","LIST_ITEMS_BORDER_WIDTH"],[6,3,1,"","LIST_ITEMS_HEIGHT"],[6,3,1,"","LIST_ITEMS_SPACING"],[6,3,1,"","LOG_ALL"],[6,3,1,"","LOG_DEBUG"],[6,3,1,"","LOG_ERROR"],[6,3,1,"","LOG_FATAL"],[6,3,1,"","LOG_INFO"],[6,3,1,"","LOG_NONE"],[6,3,1,"","LOG_TRACE"],[6,3,1,"","LOG_WARNING"],[6,4,1,"","Lerp"],[6,4,1,"","LoadAudioStream"],[6,4,1,"","LoadAutomationEventList"],[6,4,1,"","LoadCodepoints"],[6,4,1,"","LoadDirectoryFiles"],[6,4,1,"","LoadDirectoryFilesEx"],[6,4,1,"","LoadDroppedFiles"],[6,4,1,"","LoadFileData"],[6,4,1,"","LoadFileText"],[6,4,1,"","LoadFont"],[6,4,1,"","LoadFontData"],[6,4,1,"","LoadFontEx"],[6,4,1,"","LoadFontFromImage"],[6,4,1,"","LoadFontFromMemory"],[6,4,1,"","LoadImage"],[6,4,1,"","LoadImageAnim"],[6,4,1,"","LoadImageAnimFromMemory"],[6,4,1,"","LoadImageColors"],[6,4,1,"","LoadImageFromMemory"],[6,4,1,"","LoadImageFromScreen"],[6,4,1,"","LoadImageFromTexture"],[6,4,1,"","LoadImagePalette"],[6,4,1,"","LoadImageRaw"],[6,4,1,"","LoadMaterialDefault"],[6,4,1,"","LoadMaterials"],[6,4,1,"","LoadModel"],[6,4,1,"","LoadModelAnimations"],[6,4,1,"","LoadModelFromMesh"],[6,4,1,"","LoadMusicStream"],[6,4,1,"","LoadMusicStreamFromMemory"],[6,4,1,"","LoadRandomSequence"],[6,4,1,"","LoadRenderTexture"],[6,4,1,"","LoadShader"],[6,4,1,"","LoadShaderFromMemory"],[6,4,1,"","LoadSound"],[6,4,1,"","LoadSoundAlias"],[6,4,1,"","LoadSoundFromWave"],[6,4,1,"","LoadTexture"],[6,4,1,"","LoadTextureCubemap"],[6,4,1,"","LoadTextureFromImage"],[6,4,1,"","LoadUTF8"],[6,4,1,"","LoadVrStereoConfig"],[6,4,1,"","LoadWave"],[6,4,1,"","LoadWaveFromMemory"],[6,4,1,"","LoadWaveSamples"],[6,3,1,"","MAGENTA"],[6,3,1,"","MAROON"],[6,3,1,"","MATERIAL_MAP_ALBEDO"],[6,3,1,"","MATERIAL_MAP_BRDF"],[6,3,1,"","MATERIAL_MAP_CUBEMAP"],[6,3,1,"","MATERIAL_MAP_EMISSION"],[6,3,1,"","MATERIAL_MAP_HEIGHT"],[6,3,1,"","MATERIAL_MAP_IRRADIANCE"],[6,3,1,"","MATERIAL_MAP_METALNESS"],[6,3,1,"","MATERIAL_MAP_NORMAL"],[6,3,1,"","MATERIAL_MAP_OCCLUSION"],[6,3,1,"","MATERIAL_MAP_PREFILTER"],[6,3,1,"","MATERIAL_MAP_ROUGHNESS"],[6,3,1,"","MOUSE_BUTTON_BACK"],[6,3,1,"","MOUSE_BUTTON_EXTRA"],[6,3,1,"","MOUSE_BUTTON_FORWARD"],[6,3,1,"","MOUSE_BUTTON_LEFT"],[6,3,1,"","MOUSE_BUTTON_MIDDLE"],[6,3,1,"","MOUSE_BUTTON_RIGHT"],[6,3,1,"","MOUSE_BUTTON_SIDE"],[6,3,1,"","MOUSE_CURSOR_ARROW"],[6,3,1,"","MOUSE_CURSOR_CROSSHAIR"],[6,3,1,"","MOUSE_CURSOR_DEFAULT"],[6,3,1,"","MOUSE_CURSOR_IBEAM"],[6,3,1,"","MOUSE_CURSOR_NOT_ALLOWED"],[6,3,1,"","MOUSE_CURSOR_POINTING_HAND"],[6,3,1,"","MOUSE_CURSOR_RESIZE_ALL"],[6,3,1,"","MOUSE_CURSOR_RESIZE_EW"],[6,3,1,"","MOUSE_CURSOR_RESIZE_NESW"],[6,3,1,"","MOUSE_CURSOR_RESIZE_NS"],[6,3,1,"","MOUSE_CURSOR_RESIZE_NWSE"],[6,4,1,"","MakeDirectory"],[6,1,1,"","Material"],[6,1,1,"","MaterialMap"],[6,3,1,"","MaterialMapIndex"],[6,1,1,"","Matrix"],[6,1,1,"","Matrix2x2"],[6,4,1,"","MatrixAdd"],[6,4,1,"","MatrixDecompose"],[6,4,1,"","MatrixDeterminant"],[6,4,1,"","MatrixFrustum"],[6,4,1,"","MatrixIdentity"],[6,4,1,"","MatrixInvert"],[6,4,1,"","MatrixLookAt"],[6,4,1,"","MatrixMultiply"],[6,4,1,"","MatrixOrtho"],[6,4,1,"","MatrixPerspective"],[6,4,1,"","MatrixRotate"],[6,4,1,"","MatrixRotateX"],[6,4,1,"","MatrixRotateXYZ"],[6,4,1,"","MatrixRotateY"],[6,4,1,"","MatrixRotateZ"],[6,4,1,"","MatrixRotateZYX"],[6,4,1,"","MatrixScale"],[6,4,1,"","MatrixSubtract"],[6,4,1,"","MatrixToFloatV"],[6,4,1,"","MatrixTrace"],[6,4,1,"","MatrixTranslate"],[6,4,1,"","MatrixTranspose"],[6,4,1,"","MaximizeWindow"],[6,4,1,"","MeasureText"],[6,4,1,"","MeasureTextEx"],[6,4,1,"","MemAlloc"],[6,4,1,"","MemFree"],[6,4,1,"","MemRealloc"],[6,1,1,"","Mesh"],[6,4,1,"","MinimizeWindow"],[6,1,1,"","Model"],[6,1,1,"","ModelAnimation"],[6,3,1,"","MouseButton"],[6,3,1,"","MouseCursor"],[6,1,1,"","Music"],[6,3,1,"","NPATCH_NINE_PATCH"],[6,3,1,"","NPATCH_THREE_PATCH_HORIZONTAL"],[6,3,1,"","NPATCH_THREE_PATCH_VERTICAL"],[6,1,1,"","NPatchInfo"],[6,3,1,"","NPatchLayout"],[6,4,1,"","Normalize"],[6,3,1,"","ORANGE"],[6,4,1,"","OpenURL"],[6,3,1,"","PHYSICS_CIRCLE"],[6,3,1,"","PHYSICS_POLYGON"],[6,3,1,"","PINK"],[6,3,1,"","PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA"],[6,3,1,"","PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA"],[6,3,1,"","PIXELFORMAT_COMPRESSED_DXT1_RGB"],[6,3,1,"","PIXELFORMAT_COMPRESSED_DXT1_RGBA"],[6,3,1,"","PIXELFORMAT_COMPRESSED_DXT3_RGBA"],[6,3,1,"","PIXELFORMAT_COMPRESSED_DXT5_RGBA"],[6,3,1,"","PIXELFORMAT_COMPRESSED_ETC1_RGB"],[6,3,1,"","PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA"],[6,3,1,"","PIXELFORMAT_COMPRESSED_ETC2_RGB"],[6,3,1,"","PIXELFORMAT_COMPRESSED_PVRT_RGB"],[6,3,1,"","PIXELFORMAT_COMPRESSED_PVRT_RGBA"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_GRAYSCALE"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R16"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R16G16B16"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R16G16B16A16"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R32"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R32G32B32"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R32G32B32A32"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R4G4B4A4"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R5G5B5A1"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R5G6B5"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R8G8B8"],[6,3,1,"","PIXELFORMAT_UNCOMPRESSED_R8G8B8A8"],[6,3,1,"","PROGRESSBAR"],[6,3,1,"","PROGRESS_PADDING"],[6,3,1,"","PURPLE"],[6,4,1,"","PauseAudioStream"],[6,4,1,"","PauseMusicStream"],[6,4,1,"","PauseSound"],[6,4,1,"","PhysicsAddForce"],[6,4,1,"","PhysicsAddTorque"],[6,1,1,"","PhysicsBodyData"],[6,1,1,"","PhysicsManifoldData"],[6,1,1,"","PhysicsShape"],[6,3,1,"","PhysicsShapeType"],[6,4,1,"","PhysicsShatter"],[6,1,1,"","PhysicsVertexData"],[6,3,1,"","PixelFormat"],[6,4,1,"","PlayAudioStream"],[6,4,1,"","PlayAutomationEvent"],[6,4,1,"","PlayMusicStream"],[6,4,1,"","PlaySound"],[6,4,1,"","PollInputEvents"],[6,1,1,"","Quaternion"],[6,4,1,"","QuaternionAdd"],[6,4,1,"","QuaternionAddValue"],[6,4,1,"","QuaternionCubicHermiteSpline"],[6,4,1,"","QuaternionDivide"],[6,4,1,"","QuaternionEquals"],[6,4,1,"","QuaternionFromAxisAngle"],[6,4,1,"","QuaternionFromEuler"],[6,4,1,"","QuaternionFromMatrix"],[6,4,1,"","QuaternionFromVector3ToVector3"],[6,4,1,"","QuaternionIdentity"],[6,4,1,"","QuaternionInvert"],[6,4,1,"","QuaternionLength"],[6,4,1,"","QuaternionLerp"],[6,4,1,"","QuaternionMultiply"],[6,4,1,"","QuaternionNlerp"],[6,4,1,"","QuaternionNormalize"],[6,4,1,"","QuaternionScale"],[6,4,1,"","QuaternionSlerp"],[6,4,1,"","QuaternionSubtract"],[6,4,1,"","QuaternionSubtractValue"],[6,4,1,"","QuaternionToAxisAngle"],[6,4,1,"","QuaternionToEuler"],[6,4,1,"","QuaternionToMatrix"],[6,4,1,"","QuaternionTransform"],[6,3,1,"","RAYWHITE"],[6,3,1,"","RED"],[6,3,1,"","RL_ATTACHMENT_COLOR_CHANNEL0"],[6,3,1,"","RL_ATTACHMENT_COLOR_CHANNEL1"],[6,3,1,"","RL_ATTACHMENT_COLOR_CHANNEL2"],[6,3,1,"","RL_ATTACHMENT_COLOR_CHANNEL3"],[6,3,1,"","RL_ATTACHMENT_COLOR_CHANNEL4"],[6,3,1,"","RL_ATTACHMENT_COLOR_CHANNEL5"],[6,3,1,"","RL_ATTACHMENT_COLOR_CHANNEL6"],[6,3,1,"","RL_ATTACHMENT_COLOR_CHANNEL7"],[6,3,1,"","RL_ATTACHMENT_CUBEMAP_NEGATIVE_X"],[6,3,1,"","RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y"],[6,3,1,"","RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z"],[6,3,1,"","RL_ATTACHMENT_CUBEMAP_POSITIVE_X"],[6,3,1,"","RL_ATTACHMENT_CUBEMAP_POSITIVE_Y"],[6,3,1,"","RL_ATTACHMENT_CUBEMAP_POSITIVE_Z"],[6,3,1,"","RL_ATTACHMENT_DEPTH"],[6,3,1,"","RL_ATTACHMENT_RENDERBUFFER"],[6,3,1,"","RL_ATTACHMENT_STENCIL"],[6,3,1,"","RL_ATTACHMENT_TEXTURE2D"],[6,3,1,"","RL_BLEND_ADDITIVE"],[6,3,1,"","RL_BLEND_ADD_COLORS"],[6,3,1,"","RL_BLEND_ALPHA"],[6,3,1,"","RL_BLEND_ALPHA_PREMULTIPLY"],[6,3,1,"","RL_BLEND_CUSTOM"],[6,3,1,"","RL_BLEND_CUSTOM_SEPARATE"],[6,3,1,"","RL_BLEND_MULTIPLIED"],[6,3,1,"","RL_BLEND_SUBTRACT_COLORS"],[6,3,1,"","RL_CULL_FACE_BACK"],[6,3,1,"","RL_CULL_FACE_FRONT"],[6,3,1,"","RL_LOG_ALL"],[6,3,1,"","RL_LOG_DEBUG"],[6,3,1,"","RL_LOG_ERROR"],[6,3,1,"","RL_LOG_FATAL"],[6,3,1,"","RL_LOG_INFO"],[6,3,1,"","RL_LOG_NONE"],[6,3,1,"","RL_LOG_TRACE"],[6,3,1,"","RL_LOG_WARNING"],[6,3,1,"","RL_OPENGL_11"],[6,3,1,"","RL_OPENGL_21"],[6,3,1,"","RL_OPENGL_33"],[6,3,1,"","RL_OPENGL_43"],[6,3,1,"","RL_OPENGL_ES_20"],[6,3,1,"","RL_OPENGL_ES_30"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_DXT1_RGB"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_ETC1_RGB"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_ETC2_RGB"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_PVRT_RGB"],[6,3,1,"","RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R16"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R32"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8"],[6,3,1,"","RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8"],[6,3,1,"","RL_SHADER_ATTRIB_FLOAT"],[6,3,1,"","RL_SHADER_ATTRIB_VEC2"],[6,3,1,"","RL_SHADER_ATTRIB_VEC3"],[6,3,1,"","RL_SHADER_ATTRIB_VEC4"],[6,3,1,"","RL_SHADER_LOC_COLOR_AMBIENT"],[6,3,1,"","RL_SHADER_LOC_COLOR_DIFFUSE"],[6,3,1,"","RL_SHADER_LOC_COLOR_SPECULAR"],[6,3,1,"","RL_SHADER_LOC_MAP_ALBEDO"],[6,3,1,"","RL_SHADER_LOC_MAP_BRDF"],[6,3,1,"","RL_SHADER_LOC_MAP_CUBEMAP"],[6,3,1,"","RL_SHADER_LOC_MAP_EMISSION"],[6,3,1,"","RL_SHADER_LOC_MAP_HEIGHT"],[6,3,1,"","RL_SHADER_LOC_MAP_IRRADIANCE"],[6,3,1,"","RL_SHADER_LOC_MAP_METALNESS"],[6,3,1,"","RL_SHADER_LOC_MAP_NORMAL"],[6,3,1,"","RL_SHADER_LOC_MAP_OCCLUSION"],[6,3,1,"","RL_SHADER_LOC_MAP_PREFILTER"],[6,3,1,"","RL_SHADER_LOC_MAP_ROUGHNESS"],[6,3,1,"","RL_SHADER_LOC_MATRIX_MODEL"],[6,3,1,"","RL_SHADER_LOC_MATRIX_MVP"],[6,3,1,"","RL_SHADER_LOC_MATRIX_NORMAL"],[6,3,1,"","RL_SHADER_LOC_MATRIX_PROJECTION"],[6,3,1,"","RL_SHADER_LOC_MATRIX_VIEW"],[6,3,1,"","RL_SHADER_LOC_VECTOR_VIEW"],[6,3,1,"","RL_SHADER_LOC_VERTEX_COLOR"],[6,3,1,"","RL_SHADER_LOC_VERTEX_NORMAL"],[6,3,1,"","RL_SHADER_LOC_VERTEX_POSITION"],[6,3,1,"","RL_SHADER_LOC_VERTEX_TANGENT"],[6,3,1,"","RL_SHADER_LOC_VERTEX_TEXCOORD01"],[6,3,1,"","RL_SHADER_LOC_VERTEX_TEXCOORD02"],[6,3,1,"","RL_SHADER_UNIFORM_FLOAT"],[6,3,1,"","RL_SHADER_UNIFORM_INT"],[6,3,1,"","RL_SHADER_UNIFORM_IVEC2"],[6,3,1,"","RL_SHADER_UNIFORM_IVEC3"],[6,3,1,"","RL_SHADER_UNIFORM_IVEC4"],[6,3,1,"","RL_SHADER_UNIFORM_SAMPLER2D"],[6,3,1,"","RL_SHADER_UNIFORM_UINT"],[6,3,1,"","RL_SHADER_UNIFORM_UIVEC2"],[6,3,1,"","RL_SHADER_UNIFORM_UIVEC3"],[6,3,1,"","RL_SHADER_UNIFORM_UIVEC4"],[6,3,1,"","RL_SHADER_UNIFORM_VEC2"],[6,3,1,"","RL_SHADER_UNIFORM_VEC3"],[6,3,1,"","RL_SHADER_UNIFORM_VEC4"],[6,3,1,"","RL_TEXTURE_FILTER_ANISOTROPIC_16X"],[6,3,1,"","RL_TEXTURE_FILTER_ANISOTROPIC_4X"],[6,3,1,"","RL_TEXTURE_FILTER_ANISOTROPIC_8X"],[6,3,1,"","RL_TEXTURE_FILTER_BILINEAR"],[6,3,1,"","RL_TEXTURE_FILTER_POINT"],[6,3,1,"","RL_TEXTURE_FILTER_TRILINEAR"],[6,1,1,"","Ray"],[6,1,1,"","RayCollision"],[6,1,1,"","Rectangle"],[6,4,1,"","Remap"],[6,1,1,"","RenderTexture"],[6,1,1,"","RenderTexture2D"],[6,4,1,"","ResetPhysics"],[6,4,1,"","RestoreWindow"],[6,4,1,"","ResumeAudioStream"],[6,4,1,"","ResumeMusicStream"],[6,4,1,"","ResumeSound"],[6,3,1,"","SCROLLBAR"],[6,3,1,"","SCROLLBAR_SIDE"],[6,3,1,"","SCROLLBAR_WIDTH"],[6,3,1,"","SCROLL_PADDING"],[6,3,1,"","SCROLL_SLIDER_PADDING"],[6,3,1,"","SCROLL_SLIDER_SIZE"],[6,3,1,"","SCROLL_SPEED"],[6,3,1,"","SHADER_ATTRIB_FLOAT"],[6,3,1,"","SHADER_ATTRIB_VEC2"],[6,3,1,"","SHADER_ATTRIB_VEC3"],[6,3,1,"","SHADER_ATTRIB_VEC4"],[6,3,1,"","SHADER_LOC_BONE_MATRICES"],[6,3,1,"","SHADER_LOC_COLOR_AMBIENT"],[6,3,1,"","SHADER_LOC_COLOR_DIFFUSE"],[6,3,1,"","SHADER_LOC_COLOR_SPECULAR"],[6,3,1,"","SHADER_LOC_MAP_ALBEDO"],[6,3,1,"","SHADER_LOC_MAP_BRDF"],[6,3,1,"","SHADER_LOC_MAP_CUBEMAP"],[6,3,1,"","SHADER_LOC_MAP_EMISSION"],[6,3,1,"","SHADER_LOC_MAP_HEIGHT"],[6,3,1,"","SHADER_LOC_MAP_IRRADIANCE"],[6,3,1,"","SHADER_LOC_MAP_METALNESS"],[6,3,1,"","SHADER_LOC_MAP_NORMAL"],[6,3,1,"","SHADER_LOC_MAP_OCCLUSION"],[6,3,1,"","SHADER_LOC_MAP_PREFILTER"],[6,3,1,"","SHADER_LOC_MAP_ROUGHNESS"],[6,3,1,"","SHADER_LOC_MATRIX_MODEL"],[6,3,1,"","SHADER_LOC_MATRIX_MVP"],[6,3,1,"","SHADER_LOC_MATRIX_NORMAL"],[6,3,1,"","SHADER_LOC_MATRIX_PROJECTION"],[6,3,1,"","SHADER_LOC_MATRIX_VIEW"],[6,3,1,"","SHADER_LOC_VECTOR_VIEW"],[6,3,1,"","SHADER_LOC_VERTEX_BONEIDS"],[6,3,1,"","SHADER_LOC_VERTEX_BONEWEIGHTS"],[6,3,1,"","SHADER_LOC_VERTEX_COLOR"],[6,3,1,"","SHADER_LOC_VERTEX_NORMAL"],[6,3,1,"","SHADER_LOC_VERTEX_POSITION"],[6,3,1,"","SHADER_LOC_VERTEX_TANGENT"],[6,3,1,"","SHADER_LOC_VERTEX_TEXCOORD01"],[6,3,1,"","SHADER_LOC_VERTEX_TEXCOORD02"],[6,3,1,"","SHADER_UNIFORM_FLOAT"],[6,3,1,"","SHADER_UNIFORM_INT"],[6,3,1,"","SHADER_UNIFORM_IVEC2"],[6,3,1,"","SHADER_UNIFORM_IVEC3"],[6,3,1,"","SHADER_UNIFORM_IVEC4"],[6,3,1,"","SHADER_UNIFORM_SAMPLER2D"],[6,3,1,"","SHADER_UNIFORM_VEC2"],[6,3,1,"","SHADER_UNIFORM_VEC3"],[6,3,1,"","SHADER_UNIFORM_VEC4"],[6,3,1,"","SKYBLUE"],[6,3,1,"","SLIDER"],[6,3,1,"","SLIDER_PADDING"],[6,3,1,"","SLIDER_WIDTH"],[6,3,1,"","SPINNER"],[6,3,1,"","SPIN_BUTTON_SPACING"],[6,3,1,"","SPIN_BUTTON_WIDTH"],[6,3,1,"","STATE_DISABLED"],[6,3,1,"","STATE_FOCUSED"],[6,3,1,"","STATE_NORMAL"],[6,3,1,"","STATE_PRESSED"],[6,3,1,"","STATUSBAR"],[6,4,1,"","SaveFileData"],[6,4,1,"","SaveFileText"],[6,4,1,"","SeekMusicStream"],[6,4,1,"","SetAudioStreamBufferSizeDefault"],[6,4,1,"","SetAudioStreamCallback"],[6,4,1,"","SetAudioStreamPan"],[6,4,1,"","SetAudioStreamPitch"],[6,4,1,"","SetAudioStreamVolume"],[6,4,1,"","SetAutomationEventBaseFrame"],[6,4,1,"","SetAutomationEventList"],[6,4,1,"","SetClipboardText"],[6,4,1,"","SetConfigFlags"],[6,4,1,"","SetExitKey"],[6,4,1,"","SetGamepadMappings"],[6,4,1,"","SetGamepadVibration"],[6,4,1,"","SetGesturesEnabled"],[6,4,1,"","SetLoadFileDataCallback"],[6,4,1,"","SetLoadFileTextCallback"],[6,4,1,"","SetMasterVolume"],[6,4,1,"","SetMaterialTexture"],[6,4,1,"","SetModelMeshMaterial"],[6,4,1,"","SetMouseCursor"],[6,4,1,"","SetMouseOffset"],[6,4,1,"","SetMousePosition"],[6,4,1,"","SetMouseScale"],[6,4,1,"","SetMusicPan"],[6,4,1,"","SetMusicPitch"],[6,4,1,"","SetMusicVolume"],[6,4,1,"","SetPhysicsBodyRotation"],[6,4,1,"","SetPhysicsGravity"],[6,4,1,"","SetPhysicsTimeStep"],[6,4,1,"","SetPixelColor"],[6,4,1,"","SetRandomSeed"],[6,4,1,"","SetSaveFileDataCallback"],[6,4,1,"","SetSaveFileTextCallback"],[6,4,1,"","SetShaderValue"],[6,4,1,"","SetShaderValueMatrix"],[6,4,1,"","SetShaderValueTexture"],[6,4,1,"","SetShaderValueV"],[6,4,1,"","SetShapesTexture"],[6,4,1,"","SetSoundPan"],[6,4,1,"","SetSoundPitch"],[6,4,1,"","SetSoundVolume"],[6,4,1,"","SetTargetFPS"],[6,4,1,"","SetTextLineSpacing"],[6,4,1,"","SetTextureFilter"],[6,4,1,"","SetTextureWrap"],[6,4,1,"","SetTraceLogCallback"],[6,4,1,"","SetTraceLogLevel"],[6,4,1,"","SetWindowFocused"],[6,4,1,"","SetWindowIcon"],[6,4,1,"","SetWindowIcons"],[6,4,1,"","SetWindowMaxSize"],[6,4,1,"","SetWindowMinSize"],[6,4,1,"","SetWindowMonitor"],[6,4,1,"","SetWindowOpacity"],[6,4,1,"","SetWindowPosition"],[6,4,1,"","SetWindowSize"],[6,4,1,"","SetWindowState"],[6,4,1,"","SetWindowTitle"],[6,1,1,"","Shader"],[6,3,1,"","ShaderAttributeDataType"],[6,3,1,"","ShaderLocationIndex"],[6,3,1,"","ShaderUniformDataType"],[6,4,1,"","ShowCursor"],[6,1,1,"","Sound"],[6,4,1,"","StartAutomationEventRecording"],[6,4,1,"","StopAudioStream"],[6,4,1,"","StopAutomationEventRecording"],[6,4,1,"","StopMusicStream"],[6,4,1,"","StopSound"],[6,4,1,"","SwapScreenBuffer"],[6,3,1,"","TEXTBOX"],[6,3,1,"","TEXTURE_FILTER_ANISOTROPIC_16X"],[6,3,1,"","TEXTURE_FILTER_ANISOTROPIC_4X"],[6,3,1,"","TEXTURE_FILTER_ANISOTROPIC_8X"],[6,3,1,"","TEXTURE_FILTER_BILINEAR"],[6,3,1,"","TEXTURE_FILTER_POINT"],[6,3,1,"","TEXTURE_FILTER_TRILINEAR"],[6,3,1,"","TEXTURE_WRAP_CLAMP"],[6,3,1,"","TEXTURE_WRAP_MIRROR_CLAMP"],[6,3,1,"","TEXTURE_WRAP_MIRROR_REPEAT"],[6,3,1,"","TEXTURE_WRAP_REPEAT"],[6,3,1,"","TEXT_ALIGNMENT"],[6,3,1,"","TEXT_ALIGNMENT_VERTICAL"],[6,3,1,"","TEXT_ALIGN_BOTTOM"],[6,3,1,"","TEXT_ALIGN_CENTER"],[6,3,1,"","TEXT_ALIGN_LEFT"],[6,3,1,"","TEXT_ALIGN_MIDDLE"],[6,3,1,"","TEXT_ALIGN_RIGHT"],[6,3,1,"","TEXT_ALIGN_TOP"],[6,3,1,"","TEXT_COLOR_DISABLED"],[6,3,1,"","TEXT_COLOR_FOCUSED"],[6,3,1,"","TEXT_COLOR_NORMAL"],[6,3,1,"","TEXT_COLOR_PRESSED"],[6,3,1,"","TEXT_LINE_SPACING"],[6,3,1,"","TEXT_PADDING"],[6,3,1,"","TEXT_READONLY"],[6,3,1,"","TEXT_SIZE"],[6,3,1,"","TEXT_SPACING"],[6,3,1,"","TEXT_WRAP_CHAR"],[6,3,1,"","TEXT_WRAP_MODE"],[6,3,1,"","TEXT_WRAP_NONE"],[6,3,1,"","TEXT_WRAP_WORD"],[6,3,1,"","TOGGLE"],[6,4,1,"","TakeScreenshot"],[6,4,1,"","TextAppend"],[6,4,1,"","TextCopy"],[6,4,1,"","TextFindIndex"],[6,4,1,"","TextFormat"],[6,4,1,"","TextInsert"],[6,4,1,"","TextIsEqual"],[6,4,1,"","TextJoin"],[6,4,1,"","TextLength"],[6,4,1,"","TextReplace"],[6,4,1,"","TextSplit"],[6,4,1,"","TextSubtext"],[6,4,1,"","TextToCamel"],[6,4,1,"","TextToFloat"],[6,4,1,"","TextToInteger"],[6,4,1,"","TextToLower"],[6,4,1,"","TextToPascal"],[6,4,1,"","TextToSnake"],[6,4,1,"","TextToUpper"],[6,1,1,"","Texture"],[6,1,1,"","Texture2D"],[6,1,1,"","TextureCubemap"],[6,3,1,"","TextureFilter"],[6,3,1,"","TextureWrap"],[6,4,1,"","ToggleBorderlessWindowed"],[6,4,1,"","ToggleFullscreen"],[6,4,1,"","TraceLog"],[6,3,1,"","TraceLogLevel"],[6,1,1,"","Transform"],[6,4,1,"","UnloadAudioStream"],[6,4,1,"","UnloadAutomationEventList"],[6,4,1,"","UnloadCodepoints"],[6,4,1,"","UnloadDirectoryFiles"],[6,4,1,"","UnloadDroppedFiles"],[6,4,1,"","UnloadFileData"],[6,4,1,"","UnloadFileText"],[6,4,1,"","UnloadFont"],[6,4,1,"","UnloadFontData"],[6,4,1,"","UnloadImage"],[6,4,1,"","UnloadImageColors"],[6,4,1,"","UnloadImagePalette"],[6,4,1,"","UnloadMaterial"],[6,4,1,"","UnloadMesh"],[6,4,1,"","UnloadModel"],[6,4,1,"","UnloadModelAnimation"],[6,4,1,"","UnloadModelAnimations"],[6,4,1,"","UnloadMusicStream"],[6,4,1,"","UnloadRandomSequence"],[6,4,1,"","UnloadRenderTexture"],[6,4,1,"","UnloadShader"],[6,4,1,"","UnloadSound"],[6,4,1,"","UnloadSoundAlias"],[6,4,1,"","UnloadTexture"],[6,4,1,"","UnloadUTF8"],[6,4,1,"","UnloadVrStereoConfig"],[6,4,1,"","UnloadWave"],[6,4,1,"","UnloadWaveSamples"],[6,4,1,"","UpdateAudioStream"],[6,4,1,"","UpdateCamera"],[6,4,1,"","UpdateCameraPro"],[6,4,1,"","UpdateMeshBuffer"],[6,4,1,"","UpdateModelAnimation"],[6,4,1,"","UpdateModelAnimationBones"],[6,4,1,"","UpdateMusicStream"],[6,4,1,"","UpdatePhysics"],[6,4,1,"","UpdateSound"],[6,4,1,"","UpdateTexture"],[6,4,1,"","UpdateTextureRec"],[6,4,1,"","UploadMesh"],[6,3,1,"","VALUEBOX"],[6,3,1,"","VIOLET"],[6,1,1,"","Vector2"],[6,4,1,"","Vector2Add"],[6,4,1,"","Vector2AddValue"],[6,4,1,"","Vector2Angle"],[6,4,1,"","Vector2Clamp"],[6,4,1,"","Vector2ClampValue"],[6,4,1,"","Vector2Distance"],[6,4,1,"","Vector2DistanceSqr"],[6,4,1,"","Vector2Divide"],[6,4,1,"","Vector2DotProduct"],[6,4,1,"","Vector2Equals"],[6,4,1,"","Vector2Invert"],[6,4,1,"","Vector2Length"],[6,4,1,"","Vector2LengthSqr"],[6,4,1,"","Vector2Lerp"],[6,4,1,"","Vector2LineAngle"],[6,4,1,"","Vector2Max"],[6,4,1,"","Vector2Min"],[6,4,1,"","Vector2MoveTowards"],[6,4,1,"","Vector2Multiply"],[6,4,1,"","Vector2Negate"],[6,4,1,"","Vector2Normalize"],[6,4,1,"","Vector2One"],[6,4,1,"","Vector2Reflect"],[6,4,1,"","Vector2Refract"],[6,4,1,"","Vector2Rotate"],[6,4,1,"","Vector2Scale"],[6,4,1,"","Vector2Subtract"],[6,4,1,"","Vector2SubtractValue"],[6,4,1,"","Vector2Transform"],[6,4,1,"","Vector2Zero"],[6,1,1,"","Vector3"],[6,4,1,"","Vector3Add"],[6,4,1,"","Vector3AddValue"],[6,4,1,"","Vector3Angle"],[6,4,1,"","Vector3Barycenter"],[6,4,1,"","Vector3Clamp"],[6,4,1,"","Vector3ClampValue"],[6,4,1,"","Vector3CrossProduct"],[6,4,1,"","Vector3CubicHermite"],[6,4,1,"","Vector3Distance"],[6,4,1,"","Vector3DistanceSqr"],[6,4,1,"","Vector3Divide"],[6,4,1,"","Vector3DotProduct"],[6,4,1,"","Vector3Equals"],[6,4,1,"","Vector3Invert"],[6,4,1,"","Vector3Length"],[6,4,1,"","Vector3LengthSqr"],[6,4,1,"","Vector3Lerp"],[6,4,1,"","Vector3Max"],[6,4,1,"","Vector3Min"],[6,4,1,"","Vector3MoveTowards"],[6,4,1,"","Vector3Multiply"],[6,4,1,"","Vector3Negate"],[6,4,1,"","Vector3Normalize"],[6,4,1,"","Vector3One"],[6,4,1,"","Vector3OrthoNormalize"],[6,4,1,"","Vector3Perpendicular"],[6,4,1,"","Vector3Project"],[6,4,1,"","Vector3Reflect"],[6,4,1,"","Vector3Refract"],[6,4,1,"","Vector3Reject"],[6,4,1,"","Vector3RotateByAxisAngle"],[6,4,1,"","Vector3RotateByQuaternion"],[6,4,1,"","Vector3Scale"],[6,4,1,"","Vector3Subtract"],[6,4,1,"","Vector3SubtractValue"],[6,4,1,"","Vector3ToFloatV"],[6,4,1,"","Vector3Transform"],[6,4,1,"","Vector3Unproject"],[6,4,1,"","Vector3Zero"],[6,1,1,"","Vector4"],[6,4,1,"","Vector4Add"],[6,4,1,"","Vector4AddValue"],[6,4,1,"","Vector4Distance"],[6,4,1,"","Vector4DistanceSqr"],[6,4,1,"","Vector4Divide"],[6,4,1,"","Vector4DotProduct"],[6,4,1,"","Vector4Equals"],[6,4,1,"","Vector4Invert"],[6,4,1,"","Vector4Length"],[6,4,1,"","Vector4LengthSqr"],[6,4,1,"","Vector4Lerp"],[6,4,1,"","Vector4Max"],[6,4,1,"","Vector4Min"],[6,4,1,"","Vector4MoveTowards"],[6,4,1,"","Vector4Multiply"],[6,4,1,"","Vector4Negate"],[6,4,1,"","Vector4Normalize"],[6,4,1,"","Vector4One"],[6,4,1,"","Vector4Scale"],[6,4,1,"","Vector4Subtract"],[6,4,1,"","Vector4SubtractValue"],[6,4,1,"","Vector4Zero"],[6,1,1,"","VrDeviceInfo"],[6,1,1,"","VrStereoConfig"],[6,3,1,"","WHITE"],[6,4,1,"","WaitTime"],[6,1,1,"","Wave"],[6,4,1,"","WaveCopy"],[6,4,1,"","WaveCrop"],[6,4,1,"","WaveFormat"],[6,4,1,"","WindowShouldClose"],[6,4,1,"","Wrap"],[6,3,1,"","YELLOW"],[6,3,1,"","ffi"],[6,1,1,"","float16"],[6,1,1,"","float3"],[6,4,1,"","glfwCreateCursor"],[6,4,1,"","glfwCreateStandardCursor"],[6,4,1,"","glfwCreateWindow"],[6,4,1,"","glfwDefaultWindowHints"],[6,4,1,"","glfwDestroyCursor"],[6,4,1,"","glfwDestroyWindow"],[6,4,1,"","glfwExtensionSupported"],[6,4,1,"","glfwFocusWindow"],[6,4,1,"","glfwGetClipboardString"],[6,4,1,"","glfwGetCurrentContext"],[6,4,1,"","glfwGetCursorPos"],[6,4,1,"","glfwGetError"],[6,4,1,"","glfwGetFramebufferSize"],[6,4,1,"","glfwGetGamepadName"],[6,4,1,"","glfwGetGamepadState"],[6,4,1,"","glfwGetGammaRamp"],[6,4,1,"","glfwGetInputMode"],[6,4,1,"","glfwGetJoystickAxes"],[6,4,1,"","glfwGetJoystickButtons"],[6,4,1,"","glfwGetJoystickGUID"],[6,4,1,"","glfwGetJoystickHats"],[6,4,1,"","glfwGetJoystickName"],[6,4,1,"","glfwGetJoystickUserPointer"],[6,4,1,"","glfwGetKey"],[6,4,1,"","glfwGetKeyName"],[6,4,1,"","glfwGetKeyScancode"],[6,4,1,"","glfwGetMonitorContentScale"],[6,4,1,"","glfwGetMonitorName"],[6,4,1,"","glfwGetMonitorPhysicalSize"],[6,4,1,"","glfwGetMonitorPos"],[6,4,1,"","glfwGetMonitorUserPointer"],[6,4,1,"","glfwGetMonitorWorkarea"],[6,4,1,"","glfwGetMonitors"],[6,4,1,"","glfwGetMouseButton"],[6,4,1,"","glfwGetPlatform"],[6,4,1,"","glfwGetPrimaryMonitor"],[6,4,1,"","glfwGetProcAddress"],[6,4,1,"","glfwGetRequiredInstanceExtensions"],[6,4,1,"","glfwGetTime"],[6,4,1,"","glfwGetTimerFrequency"],[6,4,1,"","glfwGetTimerValue"],[6,4,1,"","glfwGetVersion"],[6,4,1,"","glfwGetVersionString"],[6,4,1,"","glfwGetVideoMode"],[6,4,1,"","glfwGetVideoModes"],[6,4,1,"","glfwGetWindowAttrib"],[6,4,1,"","glfwGetWindowContentScale"],[6,4,1,"","glfwGetWindowFrameSize"],[6,4,1,"","glfwGetWindowMonitor"],[6,4,1,"","glfwGetWindowOpacity"],[6,4,1,"","glfwGetWindowPos"],[6,4,1,"","glfwGetWindowSize"],[6,4,1,"","glfwGetWindowTitle"],[6,4,1,"","glfwGetWindowUserPointer"],[6,4,1,"","glfwHideWindow"],[6,4,1,"","glfwIconifyWindow"],[6,4,1,"","glfwInit"],[6,4,1,"","glfwInitAllocator"],[6,4,1,"","glfwInitHint"],[6,4,1,"","glfwJoystickIsGamepad"],[6,4,1,"","glfwJoystickPresent"],[6,4,1,"","glfwMakeContextCurrent"],[6,4,1,"","glfwMaximizeWindow"],[6,4,1,"","glfwPlatformSupported"],[6,4,1,"","glfwPollEvents"],[6,4,1,"","glfwPostEmptyEvent"],[6,4,1,"","glfwRawMouseMotionSupported"],[6,4,1,"","glfwRequestWindowAttention"],[6,4,1,"","glfwRestoreWindow"],[6,4,1,"","glfwSetCharCallback"],[6,4,1,"","glfwSetCharModsCallback"],[6,4,1,"","glfwSetClipboardString"],[6,4,1,"","glfwSetCursor"],[6,4,1,"","glfwSetCursorEnterCallback"],[6,4,1,"","glfwSetCursorPos"],[6,4,1,"","glfwSetCursorPosCallback"],[6,4,1,"","glfwSetDropCallback"],[6,4,1,"","glfwSetErrorCallback"],[6,4,1,"","glfwSetFramebufferSizeCallback"],[6,4,1,"","glfwSetGamma"],[6,4,1,"","glfwSetGammaRamp"],[6,4,1,"","glfwSetInputMode"],[6,4,1,"","glfwSetJoystickCallback"],[6,4,1,"","glfwSetJoystickUserPointer"],[6,4,1,"","glfwSetKeyCallback"],[6,4,1,"","glfwSetMonitorCallback"],[6,4,1,"","glfwSetMonitorUserPointer"],[6,4,1,"","glfwSetMouseButtonCallback"],[6,4,1,"","glfwSetScrollCallback"],[6,4,1,"","glfwSetTime"],[6,4,1,"","glfwSetWindowAspectRatio"],[6,4,1,"","glfwSetWindowAttrib"],[6,4,1,"","glfwSetWindowCloseCallback"],[6,4,1,"","glfwSetWindowContentScaleCallback"],[6,4,1,"","glfwSetWindowFocusCallback"],[6,4,1,"","glfwSetWindowIcon"],[6,4,1,"","glfwSetWindowIconifyCallback"],[6,4,1,"","glfwSetWindowMaximizeCallback"],[6,4,1,"","glfwSetWindowMonitor"],[6,4,1,"","glfwSetWindowOpacity"],[6,4,1,"","glfwSetWindowPos"],[6,4,1,"","glfwSetWindowPosCallback"],[6,4,1,"","glfwSetWindowRefreshCallback"],[6,4,1,"","glfwSetWindowShouldClose"],[6,4,1,"","glfwSetWindowSize"],[6,4,1,"","glfwSetWindowSizeCallback"],[6,4,1,"","glfwSetWindowSizeLimits"],[6,4,1,"","glfwSetWindowTitle"],[6,4,1,"","glfwSetWindowUserPointer"],[6,4,1,"","glfwShowWindow"],[6,4,1,"","glfwSwapBuffers"],[6,4,1,"","glfwSwapInterval"],[6,4,1,"","glfwTerminate"],[6,4,1,"","glfwUpdateGamepadMappings"],[6,4,1,"","glfwVulkanSupported"],[6,4,1,"","glfwWaitEvents"],[6,4,1,"","glfwWaitEventsTimeout"],[6,4,1,"","glfwWindowHint"],[6,4,1,"","glfwWindowHintString"],[6,4,1,"","glfwWindowShouldClose"],[6,1,1,"","rAudioBuffer"],[6,1,1,"","rAudioProcessor"],[6,3,1,"","rl"],[6,4,1,"","rlActiveDrawBuffers"],[6,4,1,"","rlActiveTextureSlot"],[6,4,1,"","rlBegin"],[6,4,1,"","rlBindFramebuffer"],[6,4,1,"","rlBindImageTexture"],[6,4,1,"","rlBindShaderBuffer"],[6,3,1,"","rlBlendMode"],[6,4,1,"","rlBlitFramebuffer"],[6,4,1,"","rlCheckErrors"],[6,4,1,"","rlCheckRenderBatchLimit"],[6,4,1,"","rlClearColor"],[6,4,1,"","rlClearScreenBuffers"],[6,4,1,"","rlColor3f"],[6,4,1,"","rlColor4f"],[6,4,1,"","rlColor4ub"],[6,4,1,"","rlColorMask"],[6,4,1,"","rlCompileShader"],[6,4,1,"","rlComputeShaderDispatch"],[6,4,1,"","rlCopyShaderBuffer"],[6,4,1,"","rlCubemapParameters"],[6,3,1,"","rlCullMode"],[6,4,1,"","rlDisableBackfaceCulling"],[6,4,1,"","rlDisableColorBlend"],[6,4,1,"","rlDisableDepthMask"],[6,4,1,"","rlDisableDepthTest"],[6,4,1,"","rlDisableFramebuffer"],[6,4,1,"","rlDisableScissorTest"],[6,4,1,"","rlDisableShader"],[6,4,1,"","rlDisableSmoothLines"],[6,4,1,"","rlDisableStereoRender"],[6,4,1,"","rlDisableTexture"],[6,4,1,"","rlDisableTextureCubemap"],[6,4,1,"","rlDisableVertexArray"],[6,4,1,"","rlDisableVertexAttribute"],[6,4,1,"","rlDisableVertexBuffer"],[6,4,1,"","rlDisableVertexBufferElement"],[6,4,1,"","rlDisableWireMode"],[6,1,1,"","rlDrawCall"],[6,4,1,"","rlDrawRenderBatch"],[6,4,1,"","rlDrawRenderBatchActive"],[6,4,1,"","rlDrawVertexArray"],[6,4,1,"","rlDrawVertexArrayElements"],[6,4,1,"","rlDrawVertexArrayElementsInstanced"],[6,4,1,"","rlDrawVertexArrayInstanced"],[6,4,1,"","rlEnableBackfaceCulling"],[6,4,1,"","rlEnableColorBlend"],[6,4,1,"","rlEnableDepthMask"],[6,4,1,"","rlEnableDepthTest"],[6,4,1,"","rlEnableFramebuffer"],[6,4,1,"","rlEnablePointMode"],[6,4,1,"","rlEnableScissorTest"],[6,4,1,"","rlEnableShader"],[6,4,1,"","rlEnableSmoothLines"],[6,4,1,"","rlEnableStereoRender"],[6,4,1,"","rlEnableTexture"],[6,4,1,"","rlEnableTextureCubemap"],[6,4,1,"","rlEnableVertexArray"],[6,4,1,"","rlEnableVertexAttribute"],[6,4,1,"","rlEnableVertexBuffer"],[6,4,1,"","rlEnableVertexBufferElement"],[6,4,1,"","rlEnableWireMode"],[6,4,1,"","rlEnd"],[6,4,1,"","rlFramebufferAttach"],[6,3,1,"","rlFramebufferAttachTextureType"],[6,3,1,"","rlFramebufferAttachType"],[6,4,1,"","rlFramebufferComplete"],[6,4,1,"","rlFrustum"],[6,4,1,"","rlGenTextureMipmaps"],[6,4,1,"","rlGetActiveFramebuffer"],[6,4,1,"","rlGetCullDistanceFar"],[6,4,1,"","rlGetCullDistanceNear"],[6,4,1,"","rlGetFramebufferHeight"],[6,4,1,"","rlGetFramebufferWidth"],[6,4,1,"","rlGetGlTextureFormats"],[6,4,1,"","rlGetLineWidth"],[6,4,1,"","rlGetLocationAttrib"],[6,4,1,"","rlGetLocationUniform"],[6,4,1,"","rlGetMatrixModelview"],[6,4,1,"","rlGetMatrixProjection"],[6,4,1,"","rlGetMatrixProjectionStereo"],[6,4,1,"","rlGetMatrixTransform"],[6,4,1,"","rlGetMatrixViewOffsetStereo"],[6,4,1,"","rlGetPixelFormatName"],[6,4,1,"","rlGetShaderBufferSize"],[6,4,1,"","rlGetShaderIdDefault"],[6,4,1,"","rlGetShaderLocsDefault"],[6,4,1,"","rlGetTextureIdDefault"],[6,4,1,"","rlGetVersion"],[6,3,1,"","rlGlVersion"],[6,4,1,"","rlIsStereoRenderEnabled"],[6,4,1,"","rlLoadComputeShaderProgram"],[6,4,1,"","rlLoadDrawCube"],[6,4,1,"","rlLoadDrawQuad"],[6,4,1,"","rlLoadExtensions"],[6,4,1,"","rlLoadFramebuffer"],[6,4,1,"","rlLoadIdentity"],[6,4,1,"","rlLoadRenderBatch"],[6,4,1,"","rlLoadShaderBuffer"],[6,4,1,"","rlLoadShaderCode"],[6,4,1,"","rlLoadShaderProgram"],[6,4,1,"","rlLoadTexture"],[6,4,1,"","rlLoadTextureCubemap"],[6,4,1,"","rlLoadTextureDepth"],[6,4,1,"","rlLoadVertexArray"],[6,4,1,"","rlLoadVertexBuffer"],[6,4,1,"","rlLoadVertexBufferElement"],[6,4,1,"","rlMatrixMode"],[6,4,1,"","rlMultMatrixf"],[6,4,1,"","rlNormal3f"],[6,4,1,"","rlOrtho"],[6,3,1,"","rlPixelFormat"],[6,4,1,"","rlPopMatrix"],[6,4,1,"","rlPushMatrix"],[6,4,1,"","rlReadScreenPixels"],[6,4,1,"","rlReadShaderBuffer"],[6,4,1,"","rlReadTexturePixels"],[6,1,1,"","rlRenderBatch"],[6,4,1,"","rlRotatef"],[6,4,1,"","rlScalef"],[6,4,1,"","rlScissor"],[6,4,1,"","rlSetBlendFactors"],[6,4,1,"","rlSetBlendFactorsSeparate"],[6,4,1,"","rlSetBlendMode"],[6,4,1,"","rlSetClipPlanes"],[6,4,1,"","rlSetCullFace"],[6,4,1,"","rlSetFramebufferHeight"],[6,4,1,"","rlSetFramebufferWidth"],[6,4,1,"","rlSetLineWidth"],[6,4,1,"","rlSetMatrixModelview"],[6,4,1,"","rlSetMatrixProjection"],[6,4,1,"","rlSetMatrixProjectionStereo"],[6,4,1,"","rlSetMatrixViewOffsetStereo"],[6,4,1,"","rlSetRenderBatchActive"],[6,4,1,"","rlSetShader"],[6,4,1,"","rlSetTexture"],[6,4,1,"","rlSetUniform"],[6,4,1,"","rlSetUniformMatrices"],[6,4,1,"","rlSetUniformMatrix"],[6,4,1,"","rlSetUniformSampler"],[6,4,1,"","rlSetVertexAttribute"],[6,4,1,"","rlSetVertexAttributeDefault"],[6,4,1,"","rlSetVertexAttributeDivisor"],[6,3,1,"","rlShaderAttributeDataType"],[6,3,1,"","rlShaderLocationIndex"],[6,3,1,"","rlShaderUniformDataType"],[6,4,1,"","rlTexCoord2f"],[6,3,1,"","rlTextureFilter"],[6,4,1,"","rlTextureParameters"],[6,3,1,"","rlTraceLogLevel"],[6,4,1,"","rlTranslatef"],[6,4,1,"","rlUnloadFramebuffer"],[6,4,1,"","rlUnloadRenderBatch"],[6,4,1,"","rlUnloadShaderBuffer"],[6,4,1,"","rlUnloadShaderProgram"],[6,4,1,"","rlUnloadTexture"],[6,4,1,"","rlUnloadVertexArray"],[6,4,1,"","rlUnloadVertexBuffer"],[6,4,1,"","rlUpdateShaderBuffer"],[6,4,1,"","rlUpdateTexture"],[6,4,1,"","rlUpdateVertexBuffer"],[6,4,1,"","rlUpdateVertexBufferElements"],[6,4,1,"","rlVertex2f"],[6,4,1,"","rlVertex2i"],[6,4,1,"","rlVertex3f"],[6,1,1,"","rlVertexBuffer"],[6,4,1,"","rlViewport"],[6,4,1,"","rlglClose"],[6,4,1,"","rlglInit"],[6,1,1,"","struct"]],"raylib.AudioStream":[[6,2,1,"","buffer"],[6,2,1,"","channels"],[6,2,1,"","processor"],[6,2,1,"","sampleRate"],[6,2,1,"","sampleSize"]],"raylib.AutomationEvent":[[6,2,1,"","frame"],[6,2,1,"","params"],[6,2,1,"","type"]],"raylib.AutomationEventList":[[6,2,1,"","capacity"],[6,2,1,"","count"],[6,2,1,"","events"]],"raylib.BoneInfo":[[6,2,1,"","name"],[6,2,1,"","parent"]],"raylib.BoundingBox":[[6,2,1,"","max"],[6,2,1,"","min"]],"raylib.Camera":[[6,2,1,"","fovy"],[6,2,1,"","position"],[6,2,1,"","projection"],[6,2,1,"","target"],[6,2,1,"","up"]],"raylib.Camera2D":[[6,2,1,"","offset"],[6,2,1,"","rotation"],[6,2,1,"","target"],[6,2,1,"","zoom"]],"raylib.Camera3D":[[6,2,1,"","fovy"],[6,2,1,"","position"],[6,2,1,"","projection"],[6,2,1,"","target"],[6,2,1,"","up"]],"raylib.Color":[[6,2,1,"","a"],[6,2,1,"","b"],[6,2,1,"","g"],[6,2,1,"","r"]],"raylib.FilePathList":[[6,2,1,"","capacity"],[6,2,1,"","count"],[6,2,1,"","paths"]],"raylib.Font":[[6,2,1,"","baseSize"],[6,2,1,"","glyphCount"],[6,2,1,"","glyphPadding"],[6,2,1,"","glyphs"],[6,2,1,"","recs"],[6,2,1,"","texture"]],"raylib.GLFWallocator":[[6,2,1,"","allocate"],[6,2,1,"","deallocate"],[6,2,1,"","reallocate"],[6,2,1,"","user"]],"raylib.GLFWgamepadstate":[[6,2,1,"","axes"],[6,2,1,"","buttons"]],"raylib.GLFWgammaramp":[[6,2,1,"","blue"],[6,2,1,"","green"],[6,2,1,"","red"],[6,2,1,"","size"]],"raylib.GLFWimage":[[6,2,1,"","height"],[6,2,1,"","pixels"],[6,2,1,"","width"]],"raylib.GLFWvidmode":[[6,2,1,"","blueBits"],[6,2,1,"","greenBits"],[6,2,1,"","height"],[6,2,1,"","redBits"],[6,2,1,"","refreshRate"],[6,2,1,"","width"]],"raylib.GlyphInfo":[[6,2,1,"","advanceX"],[6,2,1,"","image"],[6,2,1,"","offsetX"],[6,2,1,"","offsetY"],[6,2,1,"","value"]],"raylib.GuiStyleProp":[[6,2,1,"","controlId"],[6,2,1,"","propertyId"],[6,2,1,"","propertyValue"]],"raylib.Image":[[6,2,1,"","data"],[6,2,1,"","format"],[6,2,1,"","height"],[6,2,1,"","mipmaps"],[6,2,1,"","width"]],"raylib.Material":[[6,2,1,"","maps"],[6,2,1,"","params"],[6,2,1,"","shader"]],"raylib.MaterialMap":[[6,2,1,"","color"],[6,2,1,"","texture"],[6,2,1,"","value"]],"raylib.Matrix":[[6,2,1,"","m0"],[6,2,1,"","m1"],[6,2,1,"","m10"],[6,2,1,"","m11"],[6,2,1,"","m12"],[6,2,1,"","m13"],[6,2,1,"","m14"],[6,2,1,"","m15"],[6,2,1,"","m2"],[6,2,1,"","m3"],[6,2,1,"","m4"],[6,2,1,"","m5"],[6,2,1,"","m6"],[6,2,1,"","m7"],[6,2,1,"","m8"],[6,2,1,"","m9"]],"raylib.Matrix2x2":[[6,2,1,"","m00"],[6,2,1,"","m01"],[6,2,1,"","m10"],[6,2,1,"","m11"]],"raylib.Mesh":[[6,2,1,"","animNormals"],[6,2,1,"","animVertices"],[6,2,1,"","boneCount"],[6,2,1,"","boneIds"],[6,2,1,"","boneMatrices"],[6,2,1,"","boneWeights"],[6,2,1,"","colors"],[6,2,1,"","indices"],[6,2,1,"","normals"],[6,2,1,"","tangents"],[6,2,1,"","texcoords"],[6,2,1,"","texcoords2"],[6,2,1,"","triangleCount"],[6,2,1,"","vaoId"],[6,2,1,"","vboId"],[6,2,1,"","vertexCount"],[6,2,1,"","vertices"]],"raylib.Model":[[6,2,1,"","bindPose"],[6,2,1,"","boneCount"],[6,2,1,"","bones"],[6,2,1,"","materialCount"],[6,2,1,"","materials"],[6,2,1,"","meshCount"],[6,2,1,"","meshMaterial"],[6,2,1,"","meshes"],[6,2,1,"","transform"]],"raylib.ModelAnimation":[[6,2,1,"","boneCount"],[6,2,1,"","bones"],[6,2,1,"","frameCount"],[6,2,1,"","framePoses"],[6,2,1,"","name"]],"raylib.Music":[[6,2,1,"","ctxData"],[6,2,1,"","ctxType"],[6,2,1,"","frameCount"],[6,2,1,"","looping"],[6,2,1,"","stream"]],"raylib.NPatchInfo":[[6,2,1,"","bottom"],[6,2,1,"","layout"],[6,2,1,"","left"],[6,2,1,"","right"],[6,2,1,"","source"],[6,2,1,"","top"]],"raylib.PhysicsBodyData":[[6,2,1,"","angularVelocity"],[6,2,1,"","dynamicFriction"],[6,2,1,"","enabled"],[6,2,1,"","force"],[6,2,1,"","freezeOrient"],[6,2,1,"","id"],[6,2,1,"","inertia"],[6,2,1,"","inverseInertia"],[6,2,1,"","inverseMass"],[6,2,1,"","isGrounded"],[6,2,1,"","mass"],[6,2,1,"","orient"],[6,2,1,"","position"],[6,2,1,"","restitution"],[6,2,1,"","shape"],[6,2,1,"","staticFriction"],[6,2,1,"","torque"],[6,2,1,"","useGravity"],[6,2,1,"","velocity"]],"raylib.PhysicsManifoldData":[[6,2,1,"","bodyA"],[6,2,1,"","bodyB"],[6,2,1,"","contacts"],[6,2,1,"","contactsCount"],[6,2,1,"","dynamicFriction"],[6,2,1,"","id"],[6,2,1,"","normal"],[6,2,1,"","penetration"],[6,2,1,"","restitution"],[6,2,1,"","staticFriction"]],"raylib.PhysicsShape":[[6,2,1,"","body"],[6,2,1,"","radius"],[6,2,1,"","transform"],[6,2,1,"","type"],[6,2,1,"","vertexData"]],"raylib.PhysicsVertexData":[[6,2,1,"","normals"],[6,2,1,"","positions"],[6,2,1,"","vertexCount"]],"raylib.Quaternion":[[6,2,1,"","w"],[6,2,1,"","x"],[6,2,1,"","y"],[6,2,1,"","z"]],"raylib.Ray":[[6,2,1,"","direction"],[6,2,1,"","position"]],"raylib.RayCollision":[[6,2,1,"","distance"],[6,2,1,"","hit"],[6,2,1,"","normal"],[6,2,1,"","point"]],"raylib.Rectangle":[[6,2,1,"","height"],[6,2,1,"","width"],[6,2,1,"","x"],[6,2,1,"","y"]],"raylib.RenderTexture":[[6,2,1,"","depth"],[6,2,1,"","id"],[6,2,1,"","texture"]],"raylib.RenderTexture2D":[[6,2,1,"","depth"],[6,2,1,"","id"],[6,2,1,"","texture"]],"raylib.Shader":[[6,2,1,"","id"],[6,2,1,"","locs"]],"raylib.Sound":[[6,2,1,"","frameCount"],[6,2,1,"","stream"]],"raylib.Texture":[[6,2,1,"","format"],[6,2,1,"","height"],[6,2,1,"","id"],[6,2,1,"","mipmaps"],[6,2,1,"","width"]],"raylib.Texture2D":[[6,2,1,"","format"],[6,2,1,"","height"],[6,2,1,"","id"],[6,2,1,"","mipmaps"],[6,2,1,"","width"]],"raylib.TextureCubemap":[[6,2,1,"","format"],[6,2,1,"","height"],[6,2,1,"","id"],[6,2,1,"","mipmaps"],[6,2,1,"","width"]],"raylib.Transform":[[6,2,1,"","rotation"],[6,2,1,"","scale"],[6,2,1,"","translation"]],"raylib.Vector2":[[6,2,1,"","x"],[6,2,1,"","y"]],"raylib.Vector3":[[6,2,1,"","x"],[6,2,1,"","y"],[6,2,1,"","z"]],"raylib.Vector4":[[6,2,1,"","w"],[6,2,1,"","x"],[6,2,1,"","y"],[6,2,1,"","z"]],"raylib.VrDeviceInfo":[[6,2,1,"","chromaAbCorrection"],[6,2,1,"","eyeToScreenDistance"],[6,2,1,"","hResolution"],[6,2,1,"","hScreenSize"],[6,2,1,"","interpupillaryDistance"],[6,2,1,"","lensDistortionValues"],[6,2,1,"","lensSeparationDistance"],[6,2,1,"","vResolution"],[6,2,1,"","vScreenSize"]],"raylib.VrStereoConfig":[[6,2,1,"","leftLensCenter"],[6,2,1,"","leftScreenCenter"],[6,2,1,"","projection"],[6,2,1,"","rightLensCenter"],[6,2,1,"","rightScreenCenter"],[6,2,1,"","scale"],[6,2,1,"","scaleIn"],[6,2,1,"","viewOffset"]],"raylib.Wave":[[6,2,1,"","channels"],[6,2,1,"","data"],[6,2,1,"","frameCount"],[6,2,1,"","sampleRate"],[6,2,1,"","sampleSize"]],"raylib.float16":[[6,2,1,"","v"]],"raylib.float3":[[6,2,1,"","v"]],"raylib.rlDrawCall":[[6,2,1,"","mode"],[6,2,1,"","textureId"],[6,2,1,"","vertexAlignment"],[6,2,1,"","vertexCount"]],"raylib.rlRenderBatch":[[6,2,1,"","bufferCount"],[6,2,1,"","currentBuffer"],[6,2,1,"","currentDepth"],[6,2,1,"","drawCounter"],[6,2,1,"","draws"],[6,2,1,"","vertexBuffer"]],"raylib.rlVertexBuffer":[[6,2,1,"","colors"],[6,2,1,"","elementCount"],[6,2,1,"","indices"],[6,2,1,"","normals"],[6,2,1,"","texcoords"],[6,2,1,"","vaoId"],[6,2,1,"","vboId"],[6,2,1,"","vertices"]]},"objnames":{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","data","Python data"],"4":["py","function","Python function"]},"objtypes":{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:data","4":"py:function"},"terms":{"":[0,1],"0":[0,1,2,5,6],"0f":[5,6],"0x3f":[5,6],"0xrrggbbaa":[5,6],"1":[1,5,6],"10":[0,1,5],"100":[1,5,6],"101":5,"102":5,"1024":5,"103":5,"104":5,"105":5,"10500":1,"106":5,"107":5,"108":5,"109":5,"11":[1,5],"110":5,"111":5,"112":5,"113":5,"114":5,"115":5,"116":5,"117":5,"118":5,"119":5,"12":[1,5],"120":5,"121":5,"122":5,"123":5,"124":5,"125":5,"126":5,"127":5,"128":5,"129":5,"13":[1,5],"130":5,"131":5,"132":5,"133":5,"134":5,"135":5,"136":5,"137":5,"138":5,"139":5,"14":[0,1,5],"140":5,"141":5,"142":5,"143":5,"144":5,"145":5,"146":5,"147":5,"148":5,"149":5,"15":[1,5],"150":5,"151":5,"152":5,"153":5,"154":5,"155":5,"156":5,"157":5,"158":5,"159":5,"16":[5,6],"160":5,"161":5,"162":5,"163":5,"16384":5,"164":5,"165":5,"166":5,"167":5,"168":5,"168100":1,"169":5,"16bpp":[5,6],"17":5,"170":5,"171":5,"172":5,"173":5,"174":5,"175":5,"176":5,"177":5,"178":5,"179":5,"18":[5,6],"180":5,"180000":1,"181":5,"182":5,"183":5,"184":5,"185":5,"186":5,"187":5,"188":5,"189":5,"19":5,"190":[1,5,6],"191":5,"192":5,"193":5,"194":5,"195":5,"196":5,"197":5,"198":5,"199":5,"2":[1,5,6],"20":[1,5,6],"200":[1,5,6],"201":5,"202":5,"2020":1,"203":5,"204":5,"2048":5,"205":5,"206":5,"207":5,"208":5,"209":5,"21":5,"210":5,"211":5,"212":5,"213":5,"214":5,"215":5,"216":5,"217":5,"218":5,"219":5,"22":5,"220":5,"221":5,"222":5,"223":5,"224":5,"225":5,"226":5,"227":5,"228":5,"229":5,"23":5,"230":5,"231":5,"232":5,"233":5,"234":5,"235":5,"236":5,"237":5,"238":5,"239":5,"24":5,"240":5,"241":5,"242":5,"243":5,"244":5,"245":5,"246":5,"247":5,"248":5,"249":5,"25":5,"250":5,"251":5,"252":5,"253":5,"254":5,"255":[5,6],"256":5,"257":5,"258":5,"259":5,"26":5,"260":5,"261":5,"262":5,"263":5,"264":5,"265":5,"266":5,"267":5,"268":5,"269":5,"27":5,"28":5,"280":5,"281":5,"282":5,"283":5,"284":5,"29":5,"290":5,"291":5,"292":5,"293":5,"294":5,"295":5,"296":5,"297":5,"298":5,"299":5,"2d":[5,6],"3":[0,1,5,6],"30":5,"300":5,"301":5,"31":5,"32":[2,5],"320":5,"321":5,"322":5,"323":5,"324":5,"325":5,"326":5,"327":5,"32768":5,"328":5,"329":5,"32bit":[5,6],"33":5,"330":5,"331":5,"332":5,"333":5,"334":5,"335":5,"336":5,"33800":1,"34":5,"340":5,"341":5,"342":5,"343":5,"344":5,"345":5,"346":5,"347":5,"348":5,"35":5,"359":[5,6],"36":5,"360":[5,6],"37":5,"38":5,"39":5,"3d":[1,5,6],"4":[1,2,5,6],"40":5,"4096":5,"41":5,"42":5,"43":5,"44":5,"45":[5,6],"450":[1,5,6],"46":5,"47":5,"48":5,"49":5,"4x4":[5,6],"5":[0,2,4,5,6],"50":5,"500":1,"51":5,"512":5,"52":5,"53":[1,5],"54":5,"55":5,"56":5,"57":5,"58":5,"59":5,"6":[0,5],"60":[1,5,6],"61":5,"62":5,"63":5,"6300":1,"64":[2,5],"65":5,"65536":5,"66":5,"666666":[5,6],"67":5,"68":5,"69":5,"7":[0,1,5],"70":5,"71":5,"72":5,"73":5,"74":5,"75":5,"76":5,"77":5,"7700":1,"78":5,"79":5,"8":[0,1,5,6],"80":[1,5],"800":[1,5,6],"8000":1,"81":5,"8192":5,"82":5,"83":5,"84":5,"85":5,"86":5,"8600":1,"87":5,"88":5,"89":5,"9":[0,1,5],"90":5,"90deg":[5,6],"91":5,"92":5,"93":5,"94":5,"95":5,"95000":1,"96":5,"97":5,"98":5,"99":5,"A":1,"And":0,"BE":[5,6],"BY":[5,6],"But":[1,3],"For":[1,2],"If":[0,2,3,6],"It":[1,5],"NOT":[5,6],"ON":[0,2],"On":[0,1],"The":[1,3,5,6],"Then":[0,1,2,3],"There":[0,1,3,5],"These":0,"To":0,"With":1,"_cffi_backend":[5,6],"_raylib_cffi":0,"abi":3,"abpp":[5,6],"accept":0,"access":3,"accumul":[5,6],"activ":[1,5,6],"actual":[0,5,6],"ad":2,"add":[1,5,6],"addit":[2,3,5,6],"advancex":[5,6],"advantag":3,"advert":4,"again":[5,6],"algorithm":[5,6],"alia":[5,6],"alias":[5,6],"align":5,"all":[1,2,3,5,6],"alloc":[5,6],"alloi":1,"allow":6,"alpha":[5,6],"alphamask":[5,6],"alreadi":3,"also":[1,2,3,5],"altern":2,"alwai":[3,6],"amount":[5,6],"an":[3,5,6],"angl":[5,6],"angular":[5,6],"angularveloc":[5,6],"ani":[1,5,6],"anim":[5,6],"animcount":[5,6],"animnorm":[5,6],"animvertic":[5,6],"anoth":[5,6],"anyth":[3,5],"api":[3,4],"app":4,"append":[5,6],"appli":[5,6],"applic":[5,6],"approxim":[5,6],"apt":[0,1,2],"ar":[0,2,3,5,6],"area":[5,6],"arg":[5,6],"argument":2,"arm64":1,"around":5,"arrai":[5,6],"arrow_pad":[5,6],"arrows_s":[5,6],"arrows_vis":[5,6],"ask":[0,1,2,5,6],"aspect":[5,6],"assign":[5,6],"async":1,"asyncio":1,"atla":[5,6],"attach":[5,6],"attach_audio_mixed_processor":5,"attach_audio_stream_processor":5,"attachaudiomixedprocessor":6,"attachaudiostreamprocessor":6,"attachtyp":[5,6],"attempt":1,"attrib":[5,6],"attribnam":[5,6],"attribtyp":[5,6],"attribut":[5,6],"audio":[1,5,6],"audiostream":[5,6],"auto":[0,1],"autom":[5,6],"automat":[1,5,6],"automationev":[5,6],"automationeventlist":[5,6],"avail":[1,5,6],"avoid":[3,5,6],"await":1,"awar":2,"ax":6,"axi":[5,6],"b":[5,6],"back":[5,6],"backend":4,"backfac":[5,6],"background":[5,6],"background_color":[5,6],"bar":[5,6],"base":[5,6],"base64":[5,6],"base_color_dis":[5,6],"base_color_focus":[5,6],"base_color_norm":[5,6],"base_color_press":[5,6],"basepath":[5,6],"bases":[5,6],"batch":[5,6],"battl":1,"bbpp":[5,6],"bdist_wheel":0,"been":[0,2,3,5,6],"befor":[1,2,3],"begin":[5,6],"begin_blend_mod":5,"begin_draw":[1,5],"begin_mode_2d":5,"begin_mode_3d":5,"begin_scissor_mod":5,"begin_shader_mod":5,"begin_texture_mod":5,"begin_vr_stereo_mod":5,"beginblendmod":6,"begindraw":6,"beginmode2d":6,"beginmode3d":6,"beginn":1,"beginscissormod":6,"beginshadermod":6,"begintexturemod":6,"beginvrstereomod":6,"beig":[5,6],"being":[5,6],"belong":[5,6],"below":2,"best":0,"better":1,"betweeen":[5,6],"between":[5,6],"bezier":[5,6],"bicub":[5,6],"bigger":[5,6],"billboard":[5,6],"bin":1,"binari":[0,1,5,6],"bind":[0,2,4,5,6],"bindpos":[5,6],"bit":[1,2],"black":[5,6],"blank":[5,6],"blend":[5,6],"blend_add_color":[5,6],"blend_addit":[5,6],"blend_alpha":[5,6],"blend_alpha_premultipli":[5,6],"blend_custom":[5,6],"blend_custom_separ":[5,6],"blend_multipli":[5,6],"blend_subtract_color":[5,6],"blendmod":[5,6],"blit":[5,6],"blob":[0,3],"bloxel":1,"blue":[5,6],"bluebit":6,"blur":[5,6],"blursiz":[5,6],"board":1,"bodi":[5,6],"bodya":[5,6],"bodyb":[5,6],"bone":[5,6],"bonecount":[5,6],"boneid":[5,6],"boneinfo":[5,6],"bonematric":[5,6],"boneweight":[5,6],"book":1,"bookworm":2,"bool":[5,6],"border":[5,6],"border_color_dis":[5,6],"border_color_focus":[5,6],"border_color_norm":[5,6],"border_color_press":[5,6],"border_width":[5,6],"borderless":[5,6],"both":[1,2,3,5,6],"bottom":[5,6],"bottomleft":[5,6],"bottomright":[5,6],"bound":[5,6],"boundingbox":[5,6],"box":[5,6],"box1":[5,6],"box2":[5,6],"branch":2,"break":[1,2,5,6],"brew":1,"bright":[5,6],"broadcom":2,"brown":[5,6],"browser":[4,5,6],"buffer":[5,6],"buffercount":[5,6],"bufferel":[5,6],"bufferid":[5,6],"buffermask":[5,6],"bug":[0,1],"build":[1,2,4],"build_multi":0,"build_multi_linux":0,"built":[0,1],"bullsey":[1,2],"bundl":3,"bunni":1,"button":[5,6],"byte":[5,6],"c":[0,3,4,5],"c1":[5,6],"c2":[5,6],"c3":[5,6],"c4":[5,6],"c5":[5,6],"c6":[5,6],"cach":[0,2],"calcul":1,"call":[1,2,5,6],"callback":[5,6],"camel":[5,6],"camera":[5,6],"camera2d":[5,6],"camera3d":[5,6],"camera_custom":[5,6],"camera_first_person":[5,6],"camera_fre":[5,6],"camera_orbit":[5,6],"camera_orthograph":[5,6],"camera_perspect":[5,6],"camera_third_person":[5,6],"cameramod":[5,6],"cameraproject":[5,6],"can":[0,1,2,3,5,6],"canva":[5,6],"cap":[5,6],"capac":[5,6],"capsul":[5,6],"care":[5,6],"carefulli":1,"case":[1,5,6],"catmul":[5,6],"caveat":1,"cd":[0,1,2],"cell":[5,6],"cellular":[5,6],"center":[5,6],"center1":[5,6],"center2":[5,6],"centeri":[5,6],"centerpo":[5,6],"centerx":[5,6],"certain":[5,6],"cffi":[0,1,2,3,5,6],"chang":[5,6],"change_directori":5,"changedirectori":6,"channel":[5,6],"char":[5,6],"charact":[5,6],"chatroom":1,"check":[1,5,6],"check_collision_box":5,"check_collision_box_spher":5,"check_collision_circl":5,"check_collision_circle_lin":5,"check_collision_circle_rec":5,"check_collision_lin":5,"check_collision_point_circl":5,"check_collision_point_lin":5,"check_collision_point_poli":5,"check_collision_point_rec":5,"check_collision_point_triangl":5,"check_collision_rec":5,"check_collision_spher":5,"check_pad":[5,6],"checkbox":[5,6],"checkcollisionbox":6,"checkcollisionboxspher":6,"checkcollisioncircl":6,"checkcollisioncirclelin":6,"checkcollisioncirclerec":6,"checkcollisionlin":6,"checkcollisionpointcircl":6,"checkcollisionpointlin":6,"checkcollisionpointpoli":6,"checkcollisionpointrec":6,"checkcollisionpointtriangl":6,"checkcollisionrec":6,"checkcollisionspher":6,"checksi":[5,6],"checksx":[5,6],"choos":[5,6],"chromaabcorrect":[5,6],"circl":[5,6],"clamp":[5,6],"class":[5,6],"clear":[5,6],"clear_background":[1,5],"clear_window_st":5,"clearbackground":6,"clearwindowst":6,"click":[5,6],"clip":[5,6],"clipboard":[5,6],"clockwis":[5,6],"clone":[0,1,2],"close":[1,5,6],"close_audio_devic":5,"close_phys":5,"close_window":[1,5],"closeaudiodevic":6,"closephys":6,"closewindow":6,"cmake":[0,2],"code":[3,5,6],"codepoint":[5,6],"codepoint_to_utf8":5,"codepointcount":[5,6],"codepoints":[5,6],"codepointtoutf8":6,"col1":[5,6],"col2":[5,6],"collid":[5,6],"collis":[5,6],"collisionpoint":[5,6],"color":[5,6],"color1":[5,6],"color2":[5,6],"color_alpha":5,"color_alpha_blend":5,"color_bright":5,"color_contrast":5,"color_from_hsv":5,"color_from_norm":5,"color_is_equ":5,"color_lerp":5,"color_norm":5,"color_selector_s":[5,6],"color_tint":5,"color_to_hsv":5,"color_to_int":5,"coloralpha":6,"coloralphablend":6,"colorbright":6,"colorcontrast":6,"colorcount":[5,6],"colorfromhsv":6,"colorfromnorm":6,"colorhsv":[5,6],"colorisequ":6,"colorlerp":6,"colornorm":6,"colorpick":[5,6],"colortint":6,"colortohsv":6,"colortoint":6,"column":5,"com":[0,1,2,3],"combo":[5,6],"combo_button_spac":[5,6],"combo_button_width":[5,6],"combobox":[5,6],"command":0,"commerci":1,"common":0,"compat":1,"compdata":[5,6],"compdatas":[5,6],"compil":[0,1,3,5,6],"complet":[0,1,5,6],"compon":5,"compress":[5,6],"compress_data":5,"compressdata":6,"compsiz":[5,6],"comput":[5,6],"compute_crc32":5,"compute_md5":5,"compute_sha1":5,"computecrc32":6,"computemd5":6,"computesha1":6,"cone":[5,6],"config":[0,1,5,6],"configflag":[5,6],"configur":[0,5,6],"conflict":[5,6],"connect":[5,6],"consid":[5,6],"contact":[1,5,6],"contactscount":[5,6],"contain":[5,6],"content":[5,6],"context":[5,6],"contrast":[5,6],"contribut":0,"control":[1,5,6],"controlid":[5,6],"conveni":5,"convers":[5,6],"convert":[1,5,6],"convolut":[5,6],"coordin":[5,6],"copi":[0,5,6],"core":5,"correct":[0,5,6],"costli":1,"could":[0,5,6],"count":[5,6],"counter":[5,6],"cp":[0,2],"cp37":0,"cp37m":0,"cpu":[5,6],"cpython":1,"crc32":[5,6],"creat":[1,5,6],"create_physics_body_circl":5,"create_physics_body_polygon":5,"create_physics_body_rectangl":5,"createphysicsbodycircl":6,"createphysicsbodypolygon":6,"createphysicsbodyrectangl":6,"crop":[5,6],"ctxdata":[5,6],"ctxtype":[5,6],"ctype":[1,3],"cube":[5,6],"cubemap":[5,6],"cubemap_layout_auto_detect":[5,6],"cubemap_layout_cross_four_by_thre":[5,6],"cubemap_layout_cross_three_by_four":[5,6],"cubemap_layout_line_horizont":[5,6],"cubemap_layout_line_vert":[5,6],"cubemaplayout":[5,6],"cubes":[5,6],"cubic":[5,6],"cubicmap":[5,6],"cuboid":[5,6],"cull":[5,6],"current":[1,5,6],"currentbuff":[5,6],"currentdepth":[5,6],"cursor":[5,6],"custom":[5,6],"cylind":[5,6],"darkblu":[5,6],"darkbrown":[5,6],"darkgrai":[5,6],"darkgreen":[5,6],"darkpurpl":[5,6],"data":[1,5,6],"datas":[5,6],"dbuild_exampl":2,"dbuild_shared_lib":[0,2],"dcmake_build_typ":[0,2],"dcmake_install_prefix":2,"dcustomize_build":[0,2],"de":[5,6],"dealloc":[5,6],"debug":0,"decod":[5,6],"decode_data_base64":5,"decodedatabase64":6,"decompress":[5,6],"decompress_data":5,"decompressdata":6,"def":1,"default":[5,6],"defeat":1,"defin":[5,6],"deflat":[5,6],"degre":[5,6],"delet":[5,6],"delimit":[5,6],"delta":[5,6],"denom":[5,6],"densiti":[5,6],"depend":[1,5,6],"depth":[5,6],"describ":[5,6],"descript":[5,6],"desir":[5,6],"desktop":2,"dest":[5,6],"destid":[5,6],"destin":[5,6],"destoffset":[5,6],"destroi":[5,6],"destroy_physics_bodi":5,"destroyphysicsbodi":6,"detach":[5,6],"detach_audio_mixed_processor":5,"detach_audio_stream_processor":5,"detachaudiomixedprocessor":6,"detachaudiostreamprocessor":6,"detect":[0,5,6],"dev":[0,2],"develop":1,"devic":[1,5,6],"did":1,"differ":[0,1,3,5,6],"diffus":[5,6],"dimens":[5,6],"dir":[0,2,5,6],"direct":[5,6],"directori":[0,5,6],"directory_exist":5,"directoryexist":6,"dirpath":[5,6],"disabl":[1,5,6],"disable_cursor":5,"disable_event_wait":5,"disablecursor":6,"disableeventwait":6,"discord":1,"dispatch":[5,6],"displai":[5,6],"dist":0,"distanc":[5,6],"distribut":0,"dither":[5,6],"divisor":[5,6],"dll":3,"do":[1,3],"doc":[5,6],"docstr":1,"document":[1,3],"doe":[1,5,6],"doesn":[0,1,2],"doesnt":0,"don":[0,1,3],"done":[1,5],"doom":1,"dopengl_vers":2,"dot":[5,6],"doubl":[5,6],"dpi":[5,6],"dplatform":2,"drag":[5,6],"draw":[1,5,6],"draw_billboard":5,"draw_billboard_pro":5,"draw_billboard_rec":5,"draw_bounding_box":5,"draw_capsul":5,"draw_capsule_wir":5,"draw_circl":5,"draw_circle_3d":5,"draw_circle_gradi":5,"draw_circle_lin":5,"draw_circle_lines_v":5,"draw_circle_sector":5,"draw_circle_sector_lin":5,"draw_circle_v":5,"draw_cub":5,"draw_cube_v":5,"draw_cube_wir":5,"draw_cube_wires_v":5,"draw_cylind":5,"draw_cylinder_ex":5,"draw_cylinder_wir":5,"draw_cylinder_wires_ex":5,"draw_ellips":5,"draw_ellipse_lin":5,"draw_fp":5,"draw_grid":5,"draw_lin":5,"draw_line_3d":5,"draw_line_bezi":5,"draw_line_ex":5,"draw_line_strip":5,"draw_line_v":5,"draw_mesh":5,"draw_mesh_instanc":5,"draw_model":5,"draw_model_ex":5,"draw_model_point":5,"draw_model_points_ex":5,"draw_model_wir":5,"draw_model_wires_ex":5,"draw_pixel":5,"draw_pixel_v":5,"draw_plan":5,"draw_point_3d":5,"draw_poli":5,"draw_poly_lin":5,"draw_poly_lines_ex":5,"draw_r":5,"draw_rai":5,"draw_rectangl":5,"draw_rectangle_gradient_ex":5,"draw_rectangle_gradient_h":5,"draw_rectangle_gradient_v":5,"draw_rectangle_lin":5,"draw_rectangle_lines_ex":5,"draw_rectangle_pro":5,"draw_rectangle_rec":5,"draw_rectangle_round":5,"draw_rectangle_rounded_lin":5,"draw_rectangle_rounded_lines_ex":5,"draw_rectangle_v":5,"draw_ring_lin":5,"draw_spher":5,"draw_sphere_ex":5,"draw_sphere_wir":5,"draw_spline_basi":5,"draw_spline_bezier_cub":5,"draw_spline_bezier_quadrat":5,"draw_spline_catmull_rom":5,"draw_spline_linear":5,"draw_spline_segment_basi":5,"draw_spline_segment_bezier_cub":5,"draw_spline_segment_bezier_quadrat":5,"draw_spline_segment_catmull_rom":5,"draw_spline_segment_linear":5,"draw_text":[1,5],"draw_text_codepoint":5,"draw_text_ex":5,"draw_text_pro":5,"draw_textur":5,"draw_texture_ex":5,"draw_texture_n_patch":5,"draw_texture_pro":5,"draw_texture_rec":5,"draw_texture_v":5,"draw_triangl":5,"draw_triangle_3d":5,"draw_triangle_fan":5,"draw_triangle_lin":5,"draw_triangle_strip":5,"draw_triangle_strip_3d":5,"drawbillboard":6,"drawbillboardpro":6,"drawbillboardrec":6,"drawboundingbox":6,"drawcapsul":6,"drawcapsulewir":6,"drawcircl":6,"drawcircle3d":6,"drawcirclegradi":6,"drawcirclelin":6,"drawcirclelinesv":6,"drawcirclesector":6,"drawcirclesectorlin":6,"drawcirclev":6,"drawcount":[5,6],"drawcub":6,"drawcubev":6,"drawcubewir":6,"drawcubewiresv":6,"drawcylind":6,"drawcylinderex":6,"drawcylinderwir":6,"drawcylinderwiresex":6,"drawellips":6,"drawellipselin":6,"drawfp":6,"drawgrid":6,"drawlin":6,"drawline3d":6,"drawlinebezi":6,"drawlineex":6,"drawlinestrip":6,"drawlinev":6,"drawmesh":6,"drawmeshinstanc":6,"drawmodel":6,"drawmodelex":6,"drawmodelpoint":6,"drawmodelpointsex":6,"drawmodelwir":6,"drawmodelwiresex":6,"drawn":[5,6],"drawpixel":6,"drawpixelv":6,"drawplan":6,"drawpoint3d":6,"drawpoli":6,"drawpolylin":6,"drawpolylinesex":6,"drawr":6,"drawrai":6,"drawrectangl":6,"drawrectanglegradientex":6,"drawrectanglegradienth":6,"drawrectanglegradientv":6,"drawrectanglelin":6,"drawrectanglelinesex":6,"drawrectanglepro":6,"drawrectanglerec":6,"drawrectangleround":6,"drawrectangleroundedlin":6,"drawrectangleroundedlinesex":6,"drawrectanglev":6,"drawringlin":6,"drawspher":6,"drawsphereex":6,"drawspherewir":6,"drawsplinebasi":6,"drawsplinebeziercub":6,"drawsplinebezierquadrat":6,"drawsplinecatmullrom":6,"drawsplinelinear":6,"drawsplinesegmentbasi":6,"drawsplinesegmentbeziercub":6,"drawsplinesegmentbezierquadrat":6,"drawsplinesegmentcatmullrom":6,"drawsplinesegmentlinear":6,"drawtext":6,"drawtextcodepoint":6,"drawtextex":6,"drawtextpro":6,"drawtextur":6,"drawtextureex":6,"drawtexturenpatch":6,"drawtexturepro":6,"drawtexturerec":6,"drawtexturev":6,"drawtriangl":6,"drawtriangle3d":6,"drawtrianglefan":6,"drawtrianglelin":6,"drawtrianglestrip":6,"drawtrianglestrip3d":6,"driver":2,"drop":[5,6],"dropdown":[5,6],"dropdown_arrow_hidden":[5,6],"dropdown_items_spac":[5,6],"dropdown_roll_up":[5,6],"dropdownbox":[5,6],"dst":[5,6],"dstheight":[5,6],"dstptr":[5,6],"dstrec":[5,6],"dstwidth":[5,6],"dstx":[5,6],"dsty":[5,6],"dsupport_fileformat_flac":[0,2],"dsupport_fileformat_jpg":[0,2],"dummi":[5,6],"duplic":[5,6],"durat":[5,6],"dwith_pic":[0,2],"dynam":[0,4,5,6],"dynamicfrict":[5,6],"e":[1,2,5,6],"each":[5,6],"easier":1,"eclips":1,"edg":[5,6],"edit":0,"editmod":[5,6],"editor":1,"educ":1,"eidolon":1,"either":1,"elaps":[5,6],"electronstudio":[0,1,3],"element":[5,6],"elementcount":[5,6],"ellips":[5,6],"elsewher":0,"empti":[5,6],"emscripten":1,"enabl":[1,5,6],"enable_cursor":5,"enable_event_wait":5,"enablecursor":6,"enableeventwait":6,"encod":[5,6],"encode_data_base64":5,"encodedatabase64":6,"end":[5,6],"end_blend_mod":5,"end_draw":[1,5],"end_mode_2d":5,"end_mode_3d":5,"end_scissor_mod":5,"end_shader_mod":5,"end_texture_mod":5,"end_vr_stereo_mod":5,"endangl":[5,6],"endblendmod":6,"enddraw":[5,6],"endmode2d":6,"endmode3d":6,"endpo":[5,6],"endpos1":[5,6],"endpos2":[5,6],"endposi":[5,6],"endposx":[5,6],"endradiu":[5,6],"endscissormod":6,"endshadermod":6,"endtexturemod":6,"endvrstereomod":6,"ensur":0,"entir":[5,6],"environ":3,"equal":[5,6],"equat":[5,6],"equival":[1,5,6],"error":[5,6],"esc":[5,6],"etc":[1,3],"evalu":[5,6],"even":3,"event":[5,6],"ever":2,"everi":[1,5],"everyon":2,"exactli":3,"exampl":[1,3,6],"execut":[5,6],"exist":[5,6],"exit":[5,6],"explos":[5,6],"export":[5,6],"export_automation_event_list":5,"export_data_as_cod":5,"export_font_as_cod":5,"export_imag":5,"export_image_as_cod":5,"export_image_to_memori":5,"export_mesh":5,"export_mesh_as_cod":5,"export_wav":5,"export_wave_as_cod":5,"exportautomationeventlist":6,"exportdataascod":6,"exportfontascod":6,"exportimag":6,"exportimageascod":6,"exportimagetomemori":6,"exportmesh":6,"exportmeshascod":6,"exportwav":6,"exportwaveascod":6,"ext":[5,6],"extend":[5,6],"extens":[3,5,6],"extern":2,"ey":[5,6],"eyetoscreendist":[5,6],"face":[5,6],"factor":[5,6],"fade":[5,6],"failur":[3,5,6],"fallback":[5,6],"fan":[5,6],"far":[5,6],"farplan":[5,6],"faster":[1,3],"fbo":[5,6],"fboid":[5,6],"featur":1,"fewer":1,"ffi":[5,6],"figur":0,"file":[0,1,5,6],"file_exist":5,"filedata":[5,6],"fileexist":6,"filenam":[0,5,6],"filepath":[5,6],"filepathlist":[5,6],"files":[5,6],"filetyp":[5,6],"fill":[5,6],"filter":[5,6],"finalfram":[5,6],"find":[5,6],"finish":[5,6],"first":[0,5,6],"firstchar":[5,6],"fix":[0,5,6],"flag":[5,6],"flag_borderless_windowed_mod":[5,6],"flag_fullscreen_mod":[5,6],"flag_interlaced_hint":[5,6],"flag_msaa_4x_hint":[5,6],"flag_vsync_hint":[5,6],"flag_window_always_run":[5,6],"flag_window_hidden":[5,6],"flag_window_highdpi":[5,6],"flag_window_maxim":[5,6],"flag_window_minim":[5,6],"flag_window_mouse_passthrough":[5,6],"flag_window_resiz":[5,6],"flag_window_topmost":[5,6],"flag_window_transpar":[5,6],"flag_window_undecor":[5,6],"flag_window_unfocus":[5,6],"flip":[5,6],"float":[5,6],"float16":[5,6],"float3":[5,6],"float_equ":5,"floatequ":6,"floyd":[5,6],"focu":[5,6],"focus":[5,6],"folder":1,"follow":[0,5,6],"font":[5,6],"font_bitmap":[5,6],"font_default":[5,6],"font_sdf":[5,6],"fontsiz":[5,6],"fonttyp":[5,6],"forc":[0,2,5,6],"format":[5,6],"found":[5,6],"fovi":[5,6],"fp":[1,5,6],"frame":[5,6],"framebuff":[1,2,5,6],"framecount":[5,6],"framepos":[5,6],"free":[1,5,6],"freed":[5,6],"freezeori":[5,6],"friend":1,"friendli":1,"from":[1,3,4,5,6],"from_0":[5,6],"front":[5,6],"fscode":[5,6],"fsfilenam":[5,6],"fshaderid":[5,6],"full":[1,2,5,6],"fulli":1,"fullscreen":[5,6],"function":[1,3,5],"further":[5,6],"g":[1,5,6],"game":1,"gamepad":[5,6],"gamepad_axis_left_i":[5,6],"gamepad_axis_left_trigg":[5,6],"gamepad_axis_left_x":[5,6],"gamepad_axis_right_i":[5,6],"gamepad_axis_right_trigg":[5,6],"gamepad_axis_right_x":[5,6],"gamepad_button_left_face_down":[5,6],"gamepad_button_left_face_left":[5,6],"gamepad_button_left_face_right":[5,6],"gamepad_button_left_face_up":[5,6],"gamepad_button_left_thumb":[5,6],"gamepad_button_left_trigger_1":[5,6],"gamepad_button_left_trigger_2":[5,6],"gamepad_button_middl":[5,6],"gamepad_button_middle_left":[5,6],"gamepad_button_middle_right":[5,6],"gamepad_button_right_face_down":[5,6],"gamepad_button_right_face_left":[5,6],"gamepad_button_right_face_right":[5,6],"gamepad_button_right_face_up":[5,6],"gamepad_button_right_thumb":[5,6],"gamepad_button_right_trigger_1":[5,6],"gamepad_button_right_trigger_2":[5,6],"gamepad_button_unknown":[5,6],"gamepadaxi":[5,6],"gamepadbutton":[5,6],"gamma":[5,6],"gaussian":[5,6],"gbpp":[5,6],"gen_image_cellular":5,"gen_image_check":5,"gen_image_color":5,"gen_image_font_atla":5,"gen_image_gradient_linear":5,"gen_image_gradient_radi":5,"gen_image_gradient_squar":5,"gen_image_perlin_nois":5,"gen_image_text":5,"gen_image_white_nois":5,"gen_mesh_con":5,"gen_mesh_cub":5,"gen_mesh_cubicmap":5,"gen_mesh_cylind":5,"gen_mesh_heightmap":5,"gen_mesh_hemi_spher":5,"gen_mesh_knot":5,"gen_mesh_plan":5,"gen_mesh_poli":5,"gen_mesh_spher":5,"gen_mesh_tang":5,"gen_mesh_toru":5,"gen_texture_mipmap":5,"gener":[1,5,6],"genimagecellular":6,"genimagecheck":6,"genimagecolor":6,"genimagefontatla":6,"genimagegradientlinear":6,"genimagegradientradi":6,"genimagegradientsquar":6,"genimageperlinnois":6,"genimagetext":6,"genimagewhitenois":6,"genmeshcon":6,"genmeshcub":6,"genmeshcubicmap":6,"genmeshcylind":6,"genmeshheightmap":6,"genmeshhemispher":6,"genmeshknot":6,"genmeshplan":6,"genmeshpoli":6,"genmeshspher":6,"genmeshtang":6,"genmeshtoru":6,"gentexturemipmap":6,"geometri":[5,6],"gestur":[5,6],"gesture_doubletap":[5,6],"gesture_drag":[5,6],"gesture_hold":[5,6],"gesture_non":[5,6],"gesture_pinch_in":[5,6],"gesture_pinch_out":[5,6],"gesture_swipe_down":[5,6],"gesture_swipe_left":[5,6],"gesture_swipe_right":[5,6],"gesture_swipe_up":[5,6],"gesture_tap":[5,6],"get":[0,3,5,6],"get_application_directori":5,"get_camera_matrix":5,"get_camera_matrix_2d":5,"get_char_press":5,"get_clipboard_imag":5,"get_clipboard_text":5,"get_codepoint":5,"get_codepoint_count":5,"get_codepoint_next":5,"get_codepoint_previ":5,"get_collision_rec":5,"get_color":5,"get_current_monitor":5,"get_directory_path":5,"get_file_extens":5,"get_file_length":5,"get_file_mod_tim":5,"get_file_nam":5,"get_file_name_without_ext":5,"get_font_default":5,"get_fp":5,"get_frame_tim":5,"get_gamepad_axis_count":5,"get_gamepad_axis_mov":5,"get_gamepad_button_press":5,"get_gamepad_nam":5,"get_gesture_detect":5,"get_gesture_drag_angl":5,"get_gesture_drag_vector":5,"get_gesture_hold_dur":5,"get_gesture_pinch_angl":5,"get_gesture_pinch_vector":5,"get_glyph_atlas_rec":5,"get_glyph_index":5,"get_glyph_info":5,"get_image_alpha_bord":5,"get_image_color":5,"get_key_press":5,"get_master_volum":5,"get_mesh_bounding_box":5,"get_model_bounding_box":5,"get_monitor_count":5,"get_monitor_height":5,"get_monitor_nam":5,"get_monitor_physical_height":5,"get_monitor_physical_width":5,"get_monitor_posit":5,"get_monitor_refresh_r":5,"get_monitor_width":5,"get_mouse_delta":5,"get_mouse_i":5,"get_mouse_posit":5,"get_mouse_wheel_mov":5,"get_mouse_wheel_move_v":5,"get_mouse_x":5,"get_music_time_length":5,"get_music_time_plai":5,"get_physics_bodi":5,"get_physics_bodies_count":5,"get_physics_shape_typ":5,"get_physics_shape_vertex":5,"get_physics_shape_vertices_count":5,"get_pixel_color":5,"get_pixel_data_s":5,"get_prev_directory_path":5,"get_random_valu":5,"get_ray_collision_box":5,"get_ray_collision_mesh":5,"get_ray_collision_quad":5,"get_ray_collision_spher":5,"get_ray_collision_triangl":5,"get_render_height":5,"get_render_width":5,"get_screen_height":5,"get_screen_to_world_2d":5,"get_screen_to_world_rai":5,"get_screen_to_world_ray_ex":5,"get_screen_width":5,"get_shader_loc":5,"get_shader_location_attrib":5,"get_shapes_textur":5,"get_shapes_texture_rectangl":5,"get_spline_point_basi":5,"get_spline_point_bezier_cub":5,"get_spline_point_bezier_quad":5,"get_spline_point_catmull_rom":5,"get_spline_point_linear":5,"get_tim":5,"get_touch_i":5,"get_touch_point_count":5,"get_touch_point_id":5,"get_touch_posit":5,"get_touch_x":5,"get_window_handl":5,"get_window_posit":5,"get_window_scale_dpi":5,"get_working_directori":5,"get_world_to_screen":5,"get_world_to_screen_2d":5,"get_world_to_screen_ex":5,"getapplicationdirectori":6,"getcameramatrix":6,"getcameramatrix2d":6,"getcharpress":6,"getclipboardimag":6,"getclipboardtext":6,"getcodepoint":6,"getcodepointcount":6,"getcodepointnext":6,"getcodepointprevi":6,"getcollisionrec":6,"getcolor":6,"getcurrentmonitor":6,"getdirectorypath":6,"getfileextens":6,"getfilelength":6,"getfilemodtim":6,"getfilenam":6,"getfilenamewithoutext":6,"getfiles":[5,6],"getfontdefault":6,"getfp":6,"getframetim":6,"getgamepadaxiscount":6,"getgamepadaxismov":6,"getgamepadbuttonpress":6,"getgamepadnam":6,"getgesturedetect":6,"getgesturedragangl":6,"getgesturedragvector":6,"getgestureholddur":6,"getgesturepinchangl":6,"getgesturepinchvector":6,"getglyphatlasrec":6,"getglyphindex":6,"getglyphinfo":6,"getimagealphabord":6,"getimagecolor":6,"getkeypress":6,"getmastervolum":6,"getmeshboundingbox":6,"getmodelboundingbox":6,"getmonitorcount":6,"getmonitorheight":6,"getmonitornam":6,"getmonitorphysicalheight":6,"getmonitorphysicalwidth":6,"getmonitorposit":6,"getmonitorrefreshr":6,"getmonitorwidth":6,"getmousedelta":6,"getmousei":6,"getmouseposit":6,"getmousewheelmov":6,"getmousewheelmovev":6,"getmousex":6,"getmusictimelength":6,"getmusictimeplai":6,"getphysicsbodi":6,"getphysicsbodiescount":6,"getphysicsshapetyp":6,"getphysicsshapevertex":6,"getphysicsshapeverticescount":6,"getpixelcolor":6,"getpixeldatas":6,"getprevdirectorypath":6,"getrandomvalu":6,"getraycollisionbox":6,"getraycollisionmesh":6,"getraycollisionquad":6,"getraycollisionspher":6,"getraycollisiontriangl":6,"getrenderheight":6,"getrenderwidth":6,"getscreenheight":6,"getscreentoworld2d":6,"getscreentoworldrai":6,"getscreentoworldrayex":6,"getscreenwidth":6,"getshaderloc":6,"getshaderlocationattrib":6,"getshapestextur":6,"getshapestexturerectangl":6,"getsplinepointbasi":6,"getsplinepointbeziercub":6,"getsplinepointbezierquad":6,"getsplinepointcatmullrom":6,"getsplinepointlinear":6,"gettim":6,"gettouchi":6,"gettouchpointcount":6,"gettouchpointid":6,"gettouchposit":6,"gettouchx":6,"getwindowhandl":6,"getwindowposit":6,"getwindowscaledpi":6,"getworkingdirectori":6,"getworldtoscreen":6,"getworldtoscreen2d":6,"getworldtoscreenex":6,"git":[0,1,2],"github":[0,1,2,3],"given":[5,6],"gl":[2,5,6],"gldstalpha":[5,6],"gldstfactor":[5,6],"gldstrgb":[5,6],"gleqalpha":[5,6],"gleqrgb":[5,6],"glequat":[5,6],"glformat":[5,6],"glfw":2,"glfw_create_cursor":5,"glfw_create_standard_cursor":5,"glfw_create_window":5,"glfw_default_window_hint":5,"glfw_destroy_cursor":5,"glfw_destroy_window":5,"glfw_extension_support":5,"glfw_focus_window":5,"glfw_get_clipboard_str":5,"glfw_get_current_context":5,"glfw_get_cursor_po":5,"glfw_get_error":5,"glfw_get_framebuffer_s":5,"glfw_get_gamepad_nam":5,"glfw_get_gamepad_st":5,"glfw_get_gamma_ramp":5,"glfw_get_input_mod":5,"glfw_get_joystick_ax":5,"glfw_get_joystick_button":5,"glfw_get_joystick_guid":5,"glfw_get_joystick_hat":5,"glfw_get_joystick_nam":5,"glfw_get_joystick_user_point":5,"glfw_get_kei":5,"glfw_get_key_nam":5,"glfw_get_key_scancod":5,"glfw_get_monitor":5,"glfw_get_monitor_content_scal":5,"glfw_get_monitor_nam":5,"glfw_get_monitor_physical_s":5,"glfw_get_monitor_po":5,"glfw_get_monitor_user_point":5,"glfw_get_monitor_workarea":5,"glfw_get_mouse_button":5,"glfw_get_platform":5,"glfw_get_primary_monitor":5,"glfw_get_proc_address":5,"glfw_get_required_instance_extens":5,"glfw_get_tim":5,"glfw_get_timer_frequ":5,"glfw_get_timer_valu":5,"glfw_get_vers":5,"glfw_get_version_str":5,"glfw_get_video_mod":5,"glfw_get_window_attrib":5,"glfw_get_window_content_scal":5,"glfw_get_window_frame_s":5,"glfw_get_window_monitor":5,"glfw_get_window_opac":5,"glfw_get_window_po":5,"glfw_get_window_s":5,"glfw_get_window_titl":5,"glfw_get_window_user_point":5,"glfw_hide_window":5,"glfw_iconify_window":5,"glfw_init":5,"glfw_init_alloc":5,"glfw_init_hint":5,"glfw_joystick_is_gamepad":5,"glfw_joystick_pres":5,"glfw_make_context_curr":5,"glfw_maximize_window":5,"glfw_platform_support":5,"glfw_poll_ev":5,"glfw_post_empty_ev":5,"glfw_raw_mouse_motion_support":5,"glfw_request_window_attent":5,"glfw_restore_window":5,"glfw_set_char_callback":5,"glfw_set_char_mods_callback":5,"glfw_set_clipboard_str":5,"glfw_set_cursor":5,"glfw_set_cursor_enter_callback":5,"glfw_set_cursor_po":5,"glfw_set_cursor_pos_callback":5,"glfw_set_drop_callback":5,"glfw_set_error_callback":5,"glfw_set_framebuffer_size_callback":5,"glfw_set_gamma":5,"glfw_set_gamma_ramp":5,"glfw_set_input_mod":5,"glfw_set_joystick_callback":5,"glfw_set_joystick_user_point":5,"glfw_set_key_callback":5,"glfw_set_monitor_callback":5,"glfw_set_monitor_user_point":5,"glfw_set_mouse_button_callback":5,"glfw_set_scroll_callback":5,"glfw_set_tim":5,"glfw_set_window_aspect_ratio":5,"glfw_set_window_attrib":5,"glfw_set_window_close_callback":5,"glfw_set_window_content_scale_callback":5,"glfw_set_window_focus_callback":5,"glfw_set_window_icon":5,"glfw_set_window_iconify_callback":5,"glfw_set_window_maximize_callback":5,"glfw_set_window_monitor":5,"glfw_set_window_opac":5,"glfw_set_window_po":5,"glfw_set_window_pos_callback":5,"glfw_set_window_refresh_callback":5,"glfw_set_window_s":5,"glfw_set_window_should_clos":5,"glfw_set_window_size_callback":5,"glfw_set_window_size_limit":5,"glfw_set_window_titl":5,"glfw_set_window_user_point":5,"glfw_show_window":5,"glfw_swap_buff":5,"glfw_swap_interv":5,"glfw_termin":5,"glfw_update_gamepad_map":5,"glfw_vulkan_support":5,"glfw_wait_ev":5,"glfw_wait_events_timeout":5,"glfw_window_hint":5,"glfw_window_hint_str":5,"glfw_window_should_clos":5,"glfwalloc":6,"glfwcreatecursor":6,"glfwcreatestandardcursor":6,"glfwcreatewindow":6,"glfwcursor":6,"glfwdefaultwindowhint":6,"glfwdestroycursor":6,"glfwdestroywindow":6,"glfwextensionsupport":6,"glfwfocuswindow":6,"glfwgamepadst":6,"glfwgammaramp":6,"glfwgetclipboardstr":6,"glfwgetcurrentcontext":6,"glfwgetcursorpo":6,"glfwgeterror":6,"glfwgetframebuffers":6,"glfwgetgamepadnam":6,"glfwgetgamepadst":6,"glfwgetgammaramp":6,"glfwgetinputmod":6,"glfwgetjoystickax":6,"glfwgetjoystickbutton":6,"glfwgetjoystickguid":6,"glfwgetjoystickhat":6,"glfwgetjoysticknam":6,"glfwgetjoystickuserpoint":6,"glfwgetkei":6,"glfwgetkeynam":6,"glfwgetkeyscancod":6,"glfwgetmonitor":6,"glfwgetmonitorcontentscal":6,"glfwgetmonitornam":6,"glfwgetmonitorphysicals":6,"glfwgetmonitorpo":6,"glfwgetmonitoruserpoint":6,"glfwgetmonitorworkarea":6,"glfwgetmousebutton":6,"glfwgetplatform":6,"glfwgetprimarymonitor":6,"glfwgetprocaddress":6,"glfwgetrequiredinstanceextens":6,"glfwgettim":6,"glfwgettimerfrequ":6,"glfwgettimervalu":6,"glfwgetvers":6,"glfwgetversionstr":6,"glfwgetvideomod":6,"glfwgetwindowattrib":6,"glfwgetwindowcontentscal":6,"glfwgetwindowframes":6,"glfwgetwindowmonitor":6,"glfwgetwindowopac":6,"glfwgetwindowpo":6,"glfwgetwindows":6,"glfwgetwindowtitl":6,"glfwgetwindowuserpoint":6,"glfwhidewindow":6,"glfwiconifywindow":6,"glfwimag":6,"glfwinit":6,"glfwinitalloc":6,"glfwinithint":6,"glfwjoystickisgamepad":6,"glfwjoystickpres":6,"glfwmakecontextcurr":6,"glfwmaximizewindow":6,"glfwmonitor":6,"glfwplatformsupport":6,"glfwpollev":6,"glfwpostemptyev":6,"glfwrawmousemotionsupport":6,"glfwrequestwindowattent":6,"glfwrestorewindow":6,"glfwsetcharcallback":6,"glfwsetcharmodscallback":6,"glfwsetclipboardstr":6,"glfwsetcursor":6,"glfwsetcursorentercallback":6,"glfwsetcursorpo":6,"glfwsetcursorposcallback":6,"glfwsetdropcallback":6,"glfwseterrorcallback":6,"glfwsetframebuffersizecallback":6,"glfwsetgamma":6,"glfwsetgammaramp":6,"glfwsetinputmod":6,"glfwsetjoystickcallback":6,"glfwsetjoystickuserpoint":6,"glfwsetkeycallback":6,"glfwsetmonitorcallback":6,"glfwsetmonitoruserpoint":6,"glfwsetmousebuttoncallback":6,"glfwsetscrollcallback":6,"glfwsettim":6,"glfwsetwindowaspectratio":6,"glfwsetwindowattrib":6,"glfwsetwindowclosecallback":6,"glfwsetwindowcontentscalecallback":6,"glfwsetwindowfocuscallback":6,"glfwsetwindowicon":6,"glfwsetwindowiconifycallback":6,"glfwsetwindowmaximizecallback":6,"glfwsetwindowmonitor":6,"glfwsetwindowopac":6,"glfwsetwindowpo":6,"glfwsetwindowposcallback":6,"glfwsetwindowrefreshcallback":6,"glfwsetwindows":6,"glfwsetwindowshouldclos":6,"glfwsetwindowsizecallback":6,"glfwsetwindowsizelimit":6,"glfwsetwindowtitl":6,"glfwsetwindowuserpoint":6,"glfwshowwindow":6,"glfwswapbuff":6,"glfwswapinterv":6,"glfwtermin":6,"glfwupdategamepadmap":6,"glfwvidmod":6,"glfwvulkansupport":6,"glfwwaitev":6,"glfwwaiteventstimeout":6,"glfwwindow":6,"glfwwindowhint":6,"glfwwindowhintstr":6,"glfwwindowshouldclos":6,"glinternalformat":[5,6],"global":[5,6],"glsrcalpha":[5,6],"glsrcfactor":[5,6],"glsrcrgb":[5,6],"gltype":[5,6],"glyph":[5,6],"glyphcount":[5,6],"glyphinfo":[5,6],"glyphpad":[5,6],"glyphrec":[5,6],"gnu":0,"goal":6,"goe":[5,6],"gold":[5,6],"gone":3,"gpu":[5,6],"graalpi":1,"gradient":[5,6],"grai":[5,6],"graphic":[5,6],"graviti":[5,6],"grayscal":[5,6],"green":[5,6],"greenbit":6,"grid":[5,6],"group":[5,6],"group_pad":[5,6],"groupi":[5,6],"groupx":[5,6],"groupz":[5,6],"gui":[5,6],"gui_button":5,"gui_check_box":5,"gui_color_bar_alpha":5,"gui_color_bar_hu":5,"gui_color_panel":5,"gui_color_panel_hsv":5,"gui_color_pick":5,"gui_color_picker_hsv":5,"gui_combo_box":5,"gui_dis":5,"gui_disable_tooltip":5,"gui_draw_icon":5,"gui_dropdown_box":5,"gui_dummy_rec":5,"gui_en":5,"gui_enable_tooltip":5,"gui_get_font":5,"gui_get_icon":5,"gui_get_st":5,"gui_get_styl":5,"gui_grid":5,"gui_group_box":5,"gui_icon_text":5,"gui_is_lock":5,"gui_label":5,"gui_label_button":5,"gui_lin":5,"gui_list_view":5,"gui_list_view_ex":5,"gui_load_icon":5,"gui_load_styl":5,"gui_load_style_default":5,"gui_lock":5,"gui_message_box":5,"gui_panel":5,"gui_progress_bar":5,"gui_scroll_panel":5,"gui_set_alpha":5,"gui_set_font":5,"gui_set_icon_scal":5,"gui_set_st":5,"gui_set_styl":5,"gui_set_tooltip":5,"gui_slid":5,"gui_slider_bar":5,"gui_spinn":5,"gui_status_bar":5,"gui_tab_bar":5,"gui_text_box":5,"gui_text_input_box":5,"gui_toggl":5,"gui_toggle_group":5,"gui_toggle_slid":5,"gui_unlock":5,"gui_value_box":5,"gui_value_box_float":5,"gui_window_box":5,"guibutton":6,"guicheckbox":6,"guicheckboxproperti":[5,6],"guicolorbaralpha":6,"guicolorbarhu":6,"guicolorpanel":6,"guicolorpanelhsv":6,"guicolorpick":6,"guicolorpickerhsv":[5,6],"guicolorpickerproperti":[5,6],"guicombobox":6,"guicomboboxproperti":[5,6],"guicontrol":[5,6],"guicontrolproperti":[5,6],"guidefaultproperti":[5,6],"guidis":6,"guidisabletooltip":6,"guidrawicon":6,"guidropdownbox":6,"guidropdownboxproperti":[5,6],"guidummyrec":6,"guienabl":6,"guienabletooltip":6,"guigetfont":6,"guigeticon":6,"guigetst":6,"guigetstyl":6,"guigrid":6,"guigroupbox":6,"guiiconnam":[5,6],"guiicontext":6,"guiislock":6,"guilabel":6,"guilabelbutton":6,"guilin":6,"guilistview":6,"guilistviewex":6,"guilistviewproperti":[5,6],"guiloadicon":6,"guiloadstyl":6,"guiloadstyledefault":6,"guilock":6,"guimessagebox":6,"guipanel":6,"guiprogressbar":6,"guiprogressbarproperti":[5,6],"guiscrollbarproperti":[5,6],"guiscrollpanel":6,"guisetalpha":6,"guisetfont":6,"guiseticonscal":6,"guisetst":6,"guisetstyl":6,"guisettooltip":6,"guislid":6,"guisliderbar":6,"guisliderproperti":[5,6],"guispinn":6,"guispinnerproperti":[5,6],"guistat":[5,6],"guistatusbar":6,"guistyleprop":[5,6],"guitabbar":6,"guitextalign":[5,6],"guitextalignmentvert":[5,6],"guitextbox":6,"guitextboxproperti":[5,6],"guitextinputbox":6,"guitextwrapmod":[5,6],"guitoggl":6,"guitogglegroup":6,"guitoggleproperti":[5,6],"guitoggleslid":6,"guiunlock":6,"guivaluebox":6,"guivalueboxfloat":6,"guiwindowbox":6,"h":[0,5,6],"ha":[1,3,5,6],"half":[5,6],"halt":[5,6],"hand":5,"handl":[5,6],"happen":5,"hardcod":0,"hash":[5,6],"hasn":3,"have":[1,2,3,5,6],"head":5,"header":[0,5,6],"headers":[5,6],"height":[5,6],"heightmap":[5,6],"heightmm":[5,6],"hello":[1,5,6],"hellow":6,"help":[2,4],"helper":5,"here":[0,1,3,5,6],"hexadecim":[5,6],"hexvalu":[5,6],"hidden":[5,6],"hide":[5,6],"hide_cursor":5,"hidecursor":6,"hidpi":[5,6],"hint":[5,6],"hit":[5,6],"hold":[5,6],"homebrew":1,"horizont":[5,6],"how":[0,4,5,6],"howev":[1,6],"hresolut":[5,6],"hscreensiz":[5,6],"hsv":[5,6],"http":[0,1,2,3,6],"hue":[5,6],"huebar_pad":[5,6],"huebar_selector_height":[5,6],"huebar_selector_overflow":[5,6],"huebar_width":[5,6],"human":[5,6],"i":[0,1,2,3,5,6],"icon":[1,5,6],"icon_1up":[5,6],"icon_229":[5,6],"icon_230":[5,6],"icon_231":[5,6],"icon_232":[5,6],"icon_233":[5,6],"icon_234":[5,6],"icon_235":[5,6],"icon_236":[5,6],"icon_237":[5,6],"icon_238":[5,6],"icon_239":[5,6],"icon_240":[5,6],"icon_241":[5,6],"icon_242":[5,6],"icon_243":[5,6],"icon_244":[5,6],"icon_245":[5,6],"icon_246":[5,6],"icon_247":[5,6],"icon_248":[5,6],"icon_249":[5,6],"icon_250":[5,6],"icon_251":[5,6],"icon_252":[5,6],"icon_253":[5,6],"icon_254":[5,6],"icon_255":[5,6],"icon_alarm":[5,6],"icon_alpha_clear":[5,6],"icon_alpha_multipli":[5,6],"icon_arrow_down":[5,6],"icon_arrow_down_fil":[5,6],"icon_arrow_left":[5,6],"icon_arrow_left_fil":[5,6],"icon_arrow_right":[5,6],"icon_arrow_right_fil":[5,6],"icon_arrow_up":[5,6],"icon_arrow_up_fil":[5,6],"icon_audio":[5,6],"icon_bin":[5,6],"icon_box":[5,6],"icon_box_bottom":[5,6],"icon_box_bottom_left":[5,6],"icon_box_bottom_right":[5,6],"icon_box_cent":[5,6],"icon_box_circle_mask":[5,6],"icon_box_concentr":[5,6],"icon_box_corners_big":[5,6],"icon_box_corners_smal":[5,6],"icon_box_dots_big":[5,6],"icon_box_dots_smal":[5,6],"icon_box_grid":[5,6],"icon_box_grid_big":[5,6],"icon_box_left":[5,6],"icon_box_multis":[5,6],"icon_box_right":[5,6],"icon_box_top":[5,6],"icon_box_top_left":[5,6],"icon_box_top_right":[5,6],"icon_breakpoint_off":[5,6],"icon_breakpoint_on":[5,6],"icon_brush_class":[5,6],"icon_brush_paint":[5,6],"icon_burger_menu":[5,6],"icon_camera":[5,6],"icon_case_sensit":[5,6],"icon_clock":[5,6],"icon_coin":[5,6],"icon_color_bucket":[5,6],"icon_color_pick":[5,6],"icon_corn":[5,6],"icon_cpu":[5,6],"icon_crack":[5,6],"icon_crack_point":[5,6],"icon_crop":[5,6],"icon_crop_alpha":[5,6],"icon_cross":[5,6],"icon_cross_smal":[5,6],"icon_crosslin":[5,6],"icon_cub":[5,6],"icon_cube_face_back":[5,6],"icon_cube_face_bottom":[5,6],"icon_cube_face_front":[5,6],"icon_cube_face_left":[5,6],"icon_cube_face_right":[5,6],"icon_cube_face_top":[5,6],"icon_cursor_class":[5,6],"icon_cursor_hand":[5,6],"icon_cursor_mov":[5,6],"icon_cursor_move_fil":[5,6],"icon_cursor_point":[5,6],"icon_cursor_scal":[5,6],"icon_cursor_scale_fil":[5,6],"icon_cursor_scale_left":[5,6],"icon_cursor_scale_left_fil":[5,6],"icon_cursor_scale_right":[5,6],"icon_cursor_scale_right_fil":[5,6],"icon_demon":[5,6],"icon_dith":[5,6],"icon_door":[5,6],"icon_emptybox":[5,6],"icon_emptybox_smal":[5,6],"icon_exit":[5,6],"icon_explos":[5,6],"icon_eye_off":[5,6],"icon_eye_on":[5,6],"icon_fil":[5,6],"icon_file_add":[5,6],"icon_file_copi":[5,6],"icon_file_cut":[5,6],"icon_file_delet":[5,6],"icon_file_export":[5,6],"icon_file_new":[5,6],"icon_file_open":[5,6],"icon_file_past":[5,6],"icon_file_sav":[5,6],"icon_file_save_class":[5,6],"icon_filetype_alpha":[5,6],"icon_filetype_audio":[5,6],"icon_filetype_binari":[5,6],"icon_filetype_hom":[5,6],"icon_filetype_imag":[5,6],"icon_filetype_info":[5,6],"icon_filetype_plai":[5,6],"icon_filetype_text":[5,6],"icon_filetype_video":[5,6],"icon_filt":[5,6],"icon_filter_bilinear":[5,6],"icon_filter_point":[5,6],"icon_filter_top":[5,6],"icon_fold":[5,6],"icon_folder_add":[5,6],"icon_folder_file_open":[5,6],"icon_folder_open":[5,6],"icon_folder_sav":[5,6],"icon_four_box":[5,6],"icon_fx":[5,6],"icon_gear":[5,6],"icon_gear_big":[5,6],"icon_gear_ex":[5,6],"icon_grid":[5,6],"icon_grid_fil":[5,6],"icon_hand_point":[5,6],"icon_heart":[5,6],"icon_help":[5,6],"icon_help_box":[5,6],"icon_hex":[5,6],"icon_hidpi":[5,6],"icon_hot":[5,6],"icon_hous":[5,6],"icon_info":[5,6],"icon_info_box":[5,6],"icon_kei":[5,6],"icon_las":[5,6],"icon_lay":[5,6],"icon_layers2":[5,6],"icon_layers_iso":[5,6],"icon_layers_vis":[5,6],"icon_len":[5,6],"icon_lens_big":[5,6],"icon_life_bar":[5,6],"icon_link":[5,6],"icon_link_box":[5,6],"icon_link_brok":[5,6],"icon_link_multi":[5,6],"icon_link_net":[5,6],"icon_lock_clos":[5,6],"icon_lock_open":[5,6],"icon_magnet":[5,6],"icon_mailbox":[5,6],"icon_map":[5,6],"icon_mipmap":[5,6],"icon_mlay":[5,6],"icon_mode_2d":[5,6],"icon_mode_3d":[5,6],"icon_monitor":[5,6],"icon_mut":[5,6],"icon_mutate_fil":[5,6],"icon_non":[5,6],"icon_notebook":[5,6],"icon_ok_tick":[5,6],"icon_pencil":[5,6],"icon_pencil_big":[5,6],"icon_photo_camera":[5,6],"icon_photo_camera_flash":[5,6],"icon_play":[5,6],"icon_player_jump":[5,6],"icon_player_next":[5,6],"icon_player_paus":[5,6],"icon_player_plai":[5,6],"icon_player_play_back":[5,6],"icon_player_previ":[5,6],"icon_player_record":[5,6],"icon_player_stop":[5,6],"icon_pot":[5,6],"icon_print":[5,6],"icon_prior":[5,6],"icon_redo":[5,6],"icon_redo_fil":[5,6],"icon_reg_exp":[5,6],"icon_repeat":[5,6],"icon_repeat_fil":[5,6],"icon_reredo":[5,6],"icon_reredo_fil":[5,6],"icon_res":[5,6],"icon_restart":[5,6],"icon_rom":[5,6],"icon_rot":[5,6],"icon_rotate_fil":[5,6],"icon_rubb":[5,6],"icon_sand_tim":[5,6],"icon_scal":[5,6],"icon_shield":[5,6],"icon_shuffl":[5,6],"icon_shuffle_fil":[5,6],"icon_speci":[5,6],"icon_square_toggl":[5,6],"icon_star":[5,6],"icon_step_into":[5,6],"icon_step_out":[5,6],"icon_step_ov":[5,6],"icon_suitcas":[5,6],"icon_suitcase_zip":[5,6],"icon_symmetri":[5,6],"icon_symmetry_horizont":[5,6],"icon_symmetry_vert":[5,6],"icon_target":[5,6],"icon_target_big":[5,6],"icon_target_big_fil":[5,6],"icon_target_mov":[5,6],"icon_target_move_fil":[5,6],"icon_target_point":[5,6],"icon_target_smal":[5,6],"icon_target_small_fil":[5,6],"icon_text_a":[5,6],"icon_text_not":[5,6],"icon_text_popup":[5,6],"icon_text_t":[5,6],"icon_tool":[5,6],"icon_undo":[5,6],"icon_undo_fil":[5,6],"icon_vertical_bar":[5,6],"icon_vertical_bars_fil":[5,6],"icon_warn":[5,6],"icon_water_drop":[5,6],"icon_wav":[5,6],"icon_wave_sinu":[5,6],"icon_wave_squar":[5,6],"icon_wave_triangular":[5,6],"icon_window":[5,6],"icon_zoom_al":[5,6],"icon_zoom_big":[5,6],"icon_zoom_cent":[5,6],"icon_zoom_medium":[5,6],"icon_zoom_smal":[5,6],"iconid":[5,6],"id":[5,6],"ident":[5,6],"identifi":[5,6],"imag":[5,6],"image_alpha_clear":5,"image_alpha_crop":5,"image_alpha_mask":5,"image_alpha_premultipli":5,"image_blur_gaussian":5,"image_clear_background":5,"image_color_bright":5,"image_color_contrast":5,"image_color_grayscal":5,"image_color_invert":5,"image_color_replac":5,"image_color_tint":5,"image_copi":5,"image_crop":5,"image_dith":5,"image_draw":5,"image_draw_circl":5,"image_draw_circle_lin":5,"image_draw_circle_lines_v":5,"image_draw_circle_v":5,"image_draw_lin":5,"image_draw_line_ex":5,"image_draw_line_v":5,"image_draw_pixel":5,"image_draw_pixel_v":5,"image_draw_rectangl":5,"image_draw_rectangle_lin":5,"image_draw_rectangle_rec":5,"image_draw_rectangle_v":5,"image_draw_text":5,"image_draw_text_ex":5,"image_draw_triangl":5,"image_draw_triangle_ex":5,"image_draw_triangle_fan":5,"image_draw_triangle_lin":5,"image_draw_triangle_strip":5,"image_flip_horizont":5,"image_flip_vert":5,"image_format":5,"image_from_channel":5,"image_from_imag":5,"image_kernel_convolut":5,"image_mipmap":5,"image_res":5,"image_resize_canva":5,"image_resize_nn":5,"image_rot":5,"image_rotate_ccw":5,"image_rotate_cw":5,"image_text":5,"image_text_ex":5,"image_to_pot":5,"imagealphaclear":6,"imagealphacrop":6,"imagealphamask":6,"imagealphapremultipli":6,"imageblurgaussian":6,"imageclearbackground":6,"imagecolorbright":6,"imagecolorcontrast":6,"imagecolorgrayscal":6,"imagecolorinvert":6,"imagecolorreplac":6,"imagecolortint":6,"imagecopi":6,"imagecrop":6,"imagedith":6,"imagedraw":6,"imagedrawcircl":6,"imagedrawcirclelin":6,"imagedrawcirclelinesv":6,"imagedrawcirclev":6,"imagedrawlin":6,"imagedrawlineex":6,"imagedrawlinev":6,"imagedrawpixel":6,"imagedrawpixelv":6,"imagedrawrectangl":6,"imagedrawrectanglelin":6,"imagedrawrectanglerec":6,"imagedrawrectanglev":6,"imagedrawtext":6,"imagedrawtextex":6,"imagedrawtriangl":6,"imagedrawtriangleex":6,"imagedrawtrianglefan":6,"imagedrawtrianglelin":6,"imagedrawtrianglestrip":6,"imagefliphorizont":6,"imageflipvert":6,"imageformat":6,"imagefromchannel":6,"imagefromimag":6,"imagekernelconvolut":6,"imagemipmap":6,"imageres":6,"imageresizecanva":6,"imageresizenn":6,"imagerot":6,"imagerotateccw":6,"imagerotatecw":6,"imagetext":6,"imagetextex":6,"imagetopot":6,"implement":1,"import":[1,3,5,6],"includ":[0,2,3,5,6],"index":[5,6],"indic":[5,6],"inertia":[5,6],"info":[5,6],"inform":5,"init":[5,6],"init_audio_devic":[1,5],"init_phys":5,"init_window":[1,5],"initaudiodevic":6,"initfram":[5,6],"initi":[5,6],"initphys":6,"initwindow":[5,6],"inner":[1,5,6],"innerradiu":[5,6],"input":[5,6],"inputend":[5,6],"inputstart":[5,6],"insert":[5,6],"insid":[5,6],"inspir":1,"instal":[0,2,3,4],"instanc":[5,6],"instead":[0,2,3,5],"instruct":[0,2],"int":[5,6],"intangent2":[5,6],"integ":[5,6],"intend":2,"intern":[5,6],"interpol":[5,6],"interpupillarydist":[5,6],"interv":[5,6],"inverseinertia":[5,6],"inversemass":[5,6],"invert":[5,6],"io":6,"is_audio_device_readi":5,"is_audio_stream_plai":5,"is_audio_stream_process":5,"is_audio_stream_valid":5,"is_cursor_hidden":5,"is_cursor_on_screen":5,"is_file_drop":5,"is_file_extens":5,"is_file_name_valid":5,"is_font_valid":5,"is_gamepad_avail":5,"is_gamepad_button_down":5,"is_gamepad_button_press":5,"is_gamepad_button_releas":5,"is_gamepad_button_up":5,"is_gesture_detect":5,"is_image_valid":5,"is_key_down":5,"is_key_press":5,"is_key_pressed_repeat":5,"is_key_releas":5,"is_key_up":5,"is_material_valid":5,"is_model_animation_valid":5,"is_model_valid":5,"is_mouse_button_down":5,"is_mouse_button_press":5,"is_mouse_button_releas":5,"is_mouse_button_up":5,"is_music_stream_plai":5,"is_music_valid":5,"is_path_fil":5,"is_render_texture_valid":5,"is_shader_valid":5,"is_sound_plai":5,"is_sound_valid":5,"is_texture_valid":5,"is_wave_valid":5,"is_window_focus":5,"is_window_fullscreen":5,"is_window_hidden":5,"is_window_maxim":5,"is_window_minim":5,"is_window_readi":5,"is_window_res":5,"is_window_st":5,"isaudiodevicereadi":6,"isaudiostreamplai":6,"isaudiostreamprocess":6,"isaudiostreamvalid":6,"iscursorhidden":6,"iscursoronscreen":6,"isfiledrop":6,"isfileextens":6,"isfilenamevalid":6,"isfontvalid":6,"isgamepadavail":6,"isgamepadbuttondown":6,"isgamepadbuttonpress":6,"isgamepadbuttonreleas":6,"isgamepadbuttonup":6,"isgesturedetect":6,"isground":[5,6],"isimagevalid":6,"iskeydown":6,"iskeypress":6,"iskeypressedrepeat":6,"iskeyreleas":6,"iskeyup":6,"ismaterialvalid":6,"ismodelanimationvalid":6,"ismodelvalid":6,"ismousebuttondown":6,"ismousebuttonpress":6,"ismousebuttonreleas":6,"ismousebuttonup":6,"ismusicstreamplai":6,"ismusicvalid":6,"isn":1,"ispathfil":6,"isrendertexturevalid":6,"isshadervalid":6,"issoundplai":6,"issoundvalid":6,"issu":1,"istexturevalid":6,"iswavevalid":6,"iswindowfocus":6,"iswindowfullscreen":6,"iswindowhidden":6,"iswindowmaxim":6,"iswindowminim":6,"iswindowreadi":6,"iswindowres":6,"iswindowst":6,"its":[5,6],"itself":1,"java":1,"jaylib":1,"jid":[5,6],"join":[5,6],"just":3,"karabinerkeyboard":1,"kei":[5,6],"kernel":[5,6],"kernels":[5,6],"key_":[5,6],"key_a":[5,6],"key_apostroph":[5,6],"key_b":[5,6],"key_back":[5,6],"key_backslash":[5,6],"key_backspac":[5,6],"key_c":[5,6],"key_caps_lock":[5,6],"key_comma":[5,6],"key_d":[5,6],"key_delet":[5,6],"key_down":[5,6],"key_eight":[5,6],"key_end":[5,6],"key_ent":[5,6],"key_equ":[5,6],"key_escap":[5,6],"key_f":[5,6],"key_f1":[5,6],"key_f10":[5,6],"key_f11":[5,6],"key_f12":[5,6],"key_f2":[5,6],"key_f3":[5,6],"key_f4":[5,6],"key_f5":[5,6],"key_f6":[5,6],"key_f7":[5,6],"key_f8":[5,6],"key_f9":[5,6],"key_fiv":[5,6],"key_four":[5,6],"key_g":[5,6],"key_grav":[5,6],"key_h":[5,6],"key_hom":[5,6],"key_i":[5,6],"key_insert":[5,6],"key_j":[5,6],"key_k":[5,6],"key_kb_menu":[5,6],"key_kp_0":[5,6],"key_kp_1":[5,6],"key_kp_2":[5,6],"key_kp_3":[5,6],"key_kp_4":[5,6],"key_kp_5":[5,6],"key_kp_6":[5,6],"key_kp_7":[5,6],"key_kp_8":[5,6],"key_kp_9":[5,6],"key_kp_add":[5,6],"key_kp_decim":[5,6],"key_kp_divid":[5,6],"key_kp_ent":[5,6],"key_kp_equ":[5,6],"key_kp_multipli":[5,6],"key_kp_subtract":[5,6],"key_l":[5,6],"key_left":[5,6],"key_left_alt":[5,6],"key_left_bracket":[5,6],"key_left_control":[5,6],"key_left_shift":[5,6],"key_left_sup":[5,6],"key_m":[5,6],"key_menu":[5,6],"key_minu":[5,6],"key_n":[5,6],"key_nin":[5,6],"key_nul":[5,6],"key_num_lock":[5,6],"key_o":[5,6],"key_on":[5,6],"key_p":[5,6],"key_page_down":[5,6],"key_page_up":[5,6],"key_paus":[5,6],"key_period":[5,6],"key_print_screen":[5,6],"key_q":[5,6],"key_r":[5,6],"key_right":[5,6],"key_right_alt":[5,6],"key_right_bracket":[5,6],"key_right_control":[5,6],"key_right_shift":[5,6],"key_right_sup":[5,6],"key_scroll_lock":[5,6],"key_semicolon":[5,6],"key_seven":[5,6],"key_six":[5,6],"key_slash":[5,6],"key_spac":[5,6],"key_t":[5,6],"key_tab":[5,6],"key_thre":[5,6],"key_two":[5,6],"key_u":[5,6],"key_up":[5,6],"key_v":[5,6],"key_volume_down":[5,6],"key_volume_up":[5,6],"key_w":[5,6],"key_x":[5,6],"key_z":[5,6],"key_zero":[5,6],"keyboard":5,"keyboardkei":[5,6],"keycod":[5,6],"knot":[5,6],"know":[1,3],"label":[5,6],"larg":1,"larger":[5,6],"last":[5,6],"latest":[1,5,6],"launch":1,"layout":[5,6],"left":[5,6],"leftlenscent":[5,6],"leftmotor":[5,6],"leftscreencent":[5,6],"length":[5,6],"lensdistortionvalu":[5,6],"lensseparationdist":[5,6],"lerp":[5,6],"let":1,"level":[5,6],"lib":[0,1,2,6],"libasound2":0,"libdrm":2,"libegl1":2,"libgbm":2,"libgl1":0,"libgles2":2,"libglfw3":2,"libglu1":0,"librari":[0,3],"libraylib":[0,2],"libx11":0,"libxi":0,"libxrandr":0,"licens":4,"lightgrai":[5,6],"like":[1,3,6],"lime":[5,6],"limit":[5,6],"line":[1,5,6],"line_color":[5,6],"linear":[5,6],"linethick":[5,6],"link":1,"linker":2,"list":[5,6],"list_0":[5,6],"list_items_border_width":[5,6],"list_items_height":[5,6],"list_items_spac":[5,6],"listen":[5,6],"listview":[5,6],"littl":[5,6],"load":[5,6],"load_audio_stream":5,"load_automation_event_list":5,"load_codepoint":5,"load_directory_fil":5,"load_directory_files_ex":5,"load_dropped_fil":5,"load_file_data":5,"load_file_text":5,"load_font":5,"load_font_data":5,"load_font_ex":5,"load_font_from_imag":5,"load_font_from_memori":5,"load_imag":5,"load_image_anim":5,"load_image_anim_from_memori":5,"load_image_color":5,"load_image_from_memori":5,"load_image_from_screen":5,"load_image_from_textur":5,"load_image_palett":5,"load_image_raw":5,"load_materi":5,"load_material_default":5,"load_model":5,"load_model_anim":5,"load_model_from_mesh":5,"load_music_stream":5,"load_music_stream_from_memori":5,"load_random_sequ":5,"load_render_textur":5,"load_shad":5,"load_shader_from_memori":5,"load_sound":5,"load_sound_alia":5,"load_sound_from_wav":5,"load_textur":5,"load_texture_cubemap":5,"load_texture_from_imag":5,"load_utf8":5,"load_vr_stereo_config":5,"load_wav":5,"load_wave_from_memori":5,"load_wave_sampl":5,"loadaudiostream":6,"loadautomationeventlist":6,"loadcodepoint":6,"loaddirectoryfil":6,"loaddirectoryfilesex":6,"loaddroppedfil":6,"loader":[5,6],"loadfiledata":[5,6],"loadfiletext":[5,6],"loadfont":6,"loadfontdata":6,"loadfontex":6,"loadfontfromimag":6,"loadfontfrommemori":6,"loadiconsnam":[5,6],"loadimag":6,"loadimageanim":6,"loadimageanimfrommemori":6,"loadimagecolor":[5,6],"loadimagefrommemori":6,"loadimagefromscreen":6,"loadimagefromtextur":6,"loadimagepalett":[5,6],"loadimageraw":6,"loadmateri":6,"loadmaterialdefault":6,"loadmodel":6,"loadmodelanim":6,"loadmodelfrommesh":6,"loadmusicstream":6,"loadmusicstreamfrommemori":6,"loadrandomsequ":6,"loadrendertextur":6,"loadshad":6,"loadshaderfrommemori":6,"loadsound":6,"loadsoundalia":6,"loadsoundfromwav":6,"loadtextur":6,"loadtexturecubemap":6,"loadtexturefromimag":6,"loadutf8":6,"loadvrstereoconfig":6,"loadwav":6,"loadwavefrommemori":6,"loadwavesampl":[5,6],"loc":[5,6],"local":[0,2],"localhost":1,"locat":[5,6],"locindex":[5,6],"lock":[5,6],"log":[5,6],"log_al":[5,6],"log_debug":[5,6],"log_error":[5,6],"log_fat":[5,6],"log_info":[5,6],"log_non":[5,6],"log_trac":[5,6],"log_warn":[5,6],"loglevel":[5,6],"longer":5,"loop":[1,5,6],"lower":[5,6],"m":[1,2,3],"m0":[5,6],"m00":[5,6],"m01":[5,6],"m1":[5,6],"m10":[5,6],"m11":[5,6],"m12":[5,6],"m13":[5,6],"m14":[5,6],"m15":[5,6],"m2":[5,6],"m3":[5,6],"m4":[5,6],"m5":[5,6],"m6":[5,6],"m7":[5,6],"m8":[5,6],"m9":[5,6],"mac":0,"magenta":[5,6],"mai":[1,5,6],"main":[1,5,6],"maintain":1,"major":[5,6],"make":[0,1,2,6],"make_directori":5,"makedirectori":6,"manual":1,"manylinux2014_x86_64":0,"map":[5,6],"maptyp":[5,6],"margin":[5,6],"maroon":[5,6],"mask":[5,6],"mass":[5,6],"master":[0,1,3,5,6],"mat":[5,6],"match":[5,6],"materi":[5,6],"material_map_albedo":[5,6],"material_map_brdf":[5,6],"material_map_cubemap":[5,6],"material_map_diffus":[5,6],"material_map_emiss":[5,6],"material_map_height":[5,6],"material_map_irradi":[5,6],"material_map_met":[5,6],"material_map_norm":[5,6],"material_map_occlus":[5,6],"material_map_prefilt":[5,6],"material_map_rough":[5,6],"material_map_specular":[5,6],"materialcount":[5,6],"materialid":[5,6],"materialmap":[5,6],"materialmapindex":[5,6],"matf":[5,6],"matric":[5,6],"matrix":[5,6],"matrix2x2":[5,6],"matrix_add":5,"matrix_decompos":5,"matrix_determin":5,"matrix_frustum":5,"matrix_ident":5,"matrix_invert":5,"matrix_look_at":5,"matrix_multipli":5,"matrix_ortho":5,"matrix_perspect":5,"matrix_rot":5,"matrix_rotate_i":5,"matrix_rotate_x":5,"matrix_rotate_xyz":5,"matrix_rotate_z":5,"matrix_rotate_zyx":5,"matrix_scal":5,"matrix_subtract":5,"matrix_to_float_v":5,"matrix_trac":5,"matrix_transl":5,"matrix_transpos":5,"matrixadd":6,"matrixdecompos":6,"matrixdetermin":6,"matrixfrustum":6,"matrixident":6,"matrixinvert":6,"matrixlookat":6,"matrixmultipli":6,"matrixortho":6,"matrixperspect":6,"matrixrot":6,"matrixrotatei":6,"matrixrotatex":6,"matrixrotatexyz":6,"matrixrotatez":6,"matrixrotatezyx":6,"matrixscal":6,"matrixsubtract":6,"matrixtofloatv":6,"matrixtrac":6,"matrixtransl":6,"matrixtranspos":6,"max":[5,6],"max_1":[5,6],"max_2":[5,6],"max_automation_ev":[5,6],"maxdist":[5,6],"maxheight":[5,6],"maxim":[5,6],"maximize_window":5,"maximizewindow":6,"maximum":[5,6],"maxpalettes":[5,6],"maxvalu":[5,6],"maxwidth":[5,6],"md5":[5,6],"me":1,"mean":[5,6],"measur":[5,6],"measure_text":5,"measure_text_ex":5,"measuretext":6,"measuretextex":6,"megabunni":1,"mem_alloc":5,"mem_fre":5,"mem_realloc":5,"memalloc":6,"memfre":[5,6],"memori":[5,6],"memrealloc":6,"mesa":[0,2],"mesh":[5,6],"meshcount":[5,6],"meshid":[5,6],"meshmateri":[5,6],"messag":[5,6],"method":5,"might":1,"millimetr":[5,6],"millisecond":[5,6],"min":[5,6],"min_0":[5,6],"min_1":[5,6],"minheight":[5,6],"mini":1,"minim":[5,6],"minimize_window":5,"minimizewindow":6,"minimum":[5,6],"minor":[5,6],"minvalu":[5,6],"minwidth":[5,6],"miplevel":[5,6],"mipmap":[5,6],"mipmapcount":[5,6],"mkdir":[0,2],"mode":[5,6],"model":[5,6],"modelanim":[5,6],"modelview":[5,6],"modern":1,"modif":[5,6],"modifi":[5,6],"modul":[0,1,3,5],"monitor":[5,6],"more":6,"most":1,"motor":[5,6],"mount":5,"mous":[5,6],"mouse_button_back":[5,6],"mouse_button_extra":[5,6],"mouse_button_forward":[5,6],"mouse_button_left":[5,6],"mouse_button_middl":[5,6],"mouse_button_right":[5,6],"mouse_button_sid":[5,6],"mouse_cursor_arrow":[5,6],"mouse_cursor_crosshair":[5,6],"mouse_cursor_default":[5,6],"mouse_cursor_ibeam":[5,6],"mouse_cursor_not_allow":[5,6],"mouse_cursor_pointing_hand":[5,6],"mouse_cursor_resize_al":[5,6],"mouse_cursor_resize_ew":[5,6],"mouse_cursor_resize_n":[5,6],"mouse_cursor_resize_nesw":[5,6],"mouse_cursor_resize_nws":[5,6],"mousebutton":[5,6],"mousecel":[5,6],"mousecursor":[5,6],"move":[3,5,6],"movement":[5,6],"msbuild":0,"msy":1,"much":[1,3],"mul":[5,6],"multipl":[1,5,6],"multipli":[5,6],"music":[5,6],"must":[0,1,2,5,6],"my_project":1,"mypi":1,"n":[5,6],"name":[0,5,6],"nativ":[5,6],"nearest":[5,6],"nearplan":[5,6],"need":[0,1,2,3,6],"neg":[5,6],"neighbor":[5,6],"new":[5,6],"newer":[0,1],"newformat":[5,6],"newheight":[5,6],"newwidth":[5,6],"next":[5,6],"nice":[5,6],"noctx":1,"nois":[5,6],"non":1,"none":[5,6],"normal":[5,6],"notat":[5,6],"note":[0,2,5,6],"now":[1,3,5],"npatch_nine_patch":[5,6],"npatch_three_patch_horizont":[5,6],"npatch_three_patch_vert":[5,6],"npatchinfo":[5,6],"npatchlayout":[5,6],"nuitka":1,"null":[5,6],"number":[5,6],"numbuff":[5,6],"numer":[5,6],"o":[1,2,5,6],"object":[5,6],"occurr":[5,6],"off":2,"offici":1,"offset":[5,6],"offseti":[5,6],"offsetx":[5,6],"often":3,"older":[1,2],"onc":[1,2,3,5,6],"one":[0,3,5,6],"onefil":1,"ones":[2,3],"onli":[1,3],"opac":[5,6],"open":[0,2,5,6],"open_url":5,"opengl":[1,5,6],"openurl":6,"opt":2,"optimis":1,"option":0,"orang":[5,6],"order":[1,5,6],"organ":[5,6],"orient":[5,6],"origin":[1,5,6],"orthograph":[5,6],"os":2,"other":[0,1],"otherwis":1,"our":1,"out":[0,1,5,6],"outangl":[5,6],"outaxi":[5,6],"outdat":0,"outer":[5,6],"outerradiu":[5,6],"outlin":[5,6],"outputend":[5,6],"outputs":[5,6],"outputstart":[5,6],"outtangent1":[5,6],"over":[5,6],"overflow":[5,6],"own":[2,5,6],"p":[0,5,6],"p1":[5,6],"p2":[5,6],"p3":[5,6],"p4":[5,6],"packag":[0,2,4],"packmethod":[5,6],"pad":[5,6],"page":4,"palett":[5,6],"pan":[5,6],"panel":[5,6],"param":[5,6],"paramet":[5,6],"parent":[5,6],"part":[5,6],"parti":1,"pascal":[5,6],"patch":5,"path":[0,2,5,6],"paus":[5,6],"pause_audio_stream":5,"pause_music_stream":5,"pause_sound":5,"pauseaudiostream":6,"pausemusicstream":6,"pausesound":6,"pc":2,"pcm":[5,6],"penetr":[5,6],"percentag":1,"perform":4,"perlin":[5,6],"person":3,"physac":3,"physic":[5,6],"physics_add_forc":5,"physics_add_torqu":5,"physics_circl":[5,6],"physics_polygon":[5,6],"physics_shatt":5,"physicsaddforc":6,"physicsaddtorqu":6,"physicsbodydata":[5,6],"physicsmanifolddata":[5,6],"physicsshap":[5,6],"physicsshapetyp":[5,6],"physicsshatt":6,"physicsvertexdata":[5,6],"pi":4,"picker":[5,6],"piec":[5,6],"pinch":[5,6],"pink":[5,6],"pip":[1,2,3],"pip3":[0,1],"pipelin":[5,6],"pitch":[5,6],"pixel":[5,6],"pixelformat":[5,6],"pixelformat_compressed_astc_4x4_rgba":[5,6],"pixelformat_compressed_astc_8x8_rgba":[5,6],"pixelformat_compressed_dxt1_rgb":[5,6],"pixelformat_compressed_dxt1_rgba":[5,6],"pixelformat_compressed_dxt3_rgba":[5,6],"pixelformat_compressed_dxt5_rgba":[5,6],"pixelformat_compressed_etc1_rgb":[5,6],"pixelformat_compressed_etc2_eac_rgba":[5,6],"pixelformat_compressed_etc2_rgb":[5,6],"pixelformat_compressed_pvrt_rgb":[5,6],"pixelformat_compressed_pvrt_rgba":[5,6],"pixelformat_uncompressed_gray_alpha":[5,6],"pixelformat_uncompressed_grayscal":[5,6],"pixelformat_uncompressed_r16":[5,6],"pixelformat_uncompressed_r16g16b16":[5,6],"pixelformat_uncompressed_r16g16b16a16":[5,6],"pixelformat_uncompressed_r32":[5,6],"pixelformat_uncompressed_r32g32b32":[5,6],"pixelformat_uncompressed_r32g32b32a32":[5,6],"pixelformat_uncompressed_r4g4b4a4":[5,6],"pixelformat_uncompressed_r5g5b5a1":[5,6],"pixelformat_uncompressed_r5g6b5":[5,6],"pixelformat_uncompressed_r8g8b8":[5,6],"pixelformat_uncompressed_r8g8b8a8":[5,6],"pixels":[5,6],"pkg":[0,1],"pkgconfig":2,"place":[5,6],"placehold":[5,6],"plai":[5,6],"plain":[5,6],"plan":0,"plane":[5,6],"plat":0,"platform":[0,5,6],"platform_drm":2,"platform_rpi":2,"play_audio_stream":5,"play_automation_ev":5,"play_music_stream":5,"play_sound":5,"playaudiostream":6,"playautomationev":6,"playmusicstream":6,"playsound":6,"pleas":[0,2],"png":[1,5,6],"po":[5,6],"point":[1,5,6],"pointcount":[5,6],"pointer":[5,6],"poll":[5,6],"poll_input_ev":5,"pollinputev":6,"polygon":[5,6],"pool":[5,6],"pop":[5,6],"portabl":6,"pose":[5,6],"posi":[5,6],"posit":[5,6],"possibl":1,"post":1,"post9":5,"posx":[5,6],"pot":[5,6],"potenti":1,"power":[5,6],"pr":[0,5],"pre":5,"prefix":[3,5,6],"premultipli":[5,6],"prepar":0,"prepend":[5,6],"press":[5,6],"previou":[5,6],"primari":6,"pro":[5,6],"probabl":[0,1,2],"processor":[5,6],"procnam":[5,6],"program":[2,5,6],"progress":[1,5,6],"progress_pad":[5,6],"progressbar":[5,6],"proj":[5,6],"project":[0,1,5,6],"proper":3,"properti":[0,5,6],"propertyid":[5,6],"propertyvalu":[5,6],"proprietari":[1,2],"provid":[5,6],"ptr":[5,6],"public":1,"publish":2,"purpl":[5,6],"push":[5,6],"py":[0,1,2,3],"pybuild":1,"pygam":1,"pygbag":1,"pypi":[0,1],"pyrai":[1,3,5],"pyramid":[5,6],"pytaiko":1,"python":[0,2,3,6],"python3":[0,1,2,3],"q":[0,5,6],"q1":[5,6],"q2":[5,6],"quad":[5,6],"quadrat":[5,6],"quaternion":6,"quaternion_add":5,"quaternion_add_valu":5,"quaternion_cubic_hermite_splin":5,"quaternion_divid":5,"quaternion_equ":5,"quaternion_from_axis_angl":5,"quaternion_from_eul":5,"quaternion_from_matrix":5,"quaternion_from_vector3_to_vector3":5,"quaternion_ident":5,"quaternion_invert":5,"quaternion_length":5,"quaternion_lerp":5,"quaternion_multipli":5,"quaternion_nlerp":5,"quaternion_norm":5,"quaternion_scal":5,"quaternion_slerp":5,"quaternion_subtract":5,"quaternion_subtract_valu":5,"quaternion_to_axis_angl":5,"quaternion_to_eul":5,"quaternion_to_matrix":5,"quaternion_transform":5,"quaternionadd":6,"quaternionaddvalu":6,"quaternioncubichermitesplin":6,"quaterniondivid":6,"quaternionequ":6,"quaternionfromaxisangl":6,"quaternionfromeul":6,"quaternionfrommatrix":6,"quaternionfromvector3tovector3":6,"quaternionident":6,"quaternioninvert":6,"quaternionlength":6,"quaternionlerp":6,"quaternionmultipli":6,"quaternionnlerp":6,"quaternionnorm":6,"quaternionscal":6,"quaternionslerp":6,"quaternionsubtract":6,"quaternionsubtractvalu":6,"quaterniontoaxisangl":6,"quaterniontoeul":6,"quaterniontomatrix":6,"quaterniontransform":6,"queu":[5,6],"queue":[5,6],"quickstart":4,"r":[2,5,6],"r8g8b8a8":5,"radial":[5,6],"radian":[5,6],"radiu":[5,6],"radius1":[5,6],"radius2":[5,6],"radiusbottom":[5,6],"radiush":[5,6],"radiustop":[5,6],"radiusv":[5,6],"radseg":[5,6],"rai":[5,6],"ram":[5,6],"ramp":[5,6],"random":[5,6],"rang":[5,6],"raspberri":4,"raspbian":2,"rasperri":1,"rate":[5,6],"rather":1,"raudiobuff":6,"raudioprocessor":6,"raw":[5,6],"raycast":5,"raycollis":[5,6],"raygui":[3,5,6],"raylib":[0,3,5,6],"raylib_drm":[1,2],"raylib_dynam":[0,1,3],"raylib_sdl":1,"raysan5":[0,2],"raywhit":[5,6],"rbpp":[5,6],"re":2,"read":[1,5,6],"readabl":[5,6],"readonli":[5,6],"readthedoc":6,"realloc":[5,6],"rec":[5,6],"rec1":[5,6],"rec2":[5,6],"receiv":[5,6],"recommend":[1,3],"record":[5,6],"rectangl":[5,6],"recurs":[0,5,6],"red":[5,6],"redbit":6,"redesign":5,"refil":[5,6],"refresh":[5,6],"refreshr":[5,6],"regist":[5,6],"regular":[5,6],"reinstal":[0,2],"rel":[5,6],"relat":1,"releas":[0,1,2,5,6],"remap":[5,6],"remov":2,"render":[5,6],"renderbuff":[5,6],"rendertextur":[5,6],"rendertexture2d":6,"repeat":[5,6],"replac":[5,6],"repli":5,"repo":0,"request":[5,6],"requir":[0,1,2,5,6],"reset":[5,6],"reset_phys":5,"resetphys":6,"resiz":[5,6],"resolut":[5,6],"resourc":1,"restitut":[5,6],"restore_window":5,"restorewindow":6,"result":[5,6],"resum":[5,6],"resume_audio_stream":5,"resume_music_stream":5,"resume_sound":5,"resumeaudiostream":6,"resumemusicstream":6,"resumesound":6,"resx":[5,6],"resz":[5,6],"retro":1,"retrowar":1,"return":[5,6],"rev":[5,6],"rf":[0,2],"rg":[5,6],"rgb":[5,6],"rgba":[5,6],"rgi":[5,6],"right":[5,6],"rightlenscent":[5,6],"rightmotor":[5,6],"rightscreencent":[5,6],"ring":[5,6],"rl":[3,6],"rl_active_draw_buff":5,"rl_active_texture_slot":5,"rl_attachment_color_channel0":[5,6],"rl_attachment_color_channel1":[5,6],"rl_attachment_color_channel2":[5,6],"rl_attachment_color_channel3":[5,6],"rl_attachment_color_channel4":[5,6],"rl_attachment_color_channel5":[5,6],"rl_attachment_color_channel6":[5,6],"rl_attachment_color_channel7":[5,6],"rl_attachment_cubemap_negative_i":[5,6],"rl_attachment_cubemap_negative_x":[5,6],"rl_attachment_cubemap_negative_z":[5,6],"rl_attachment_cubemap_positive_i":[5,6],"rl_attachment_cubemap_positive_x":[5,6],"rl_attachment_cubemap_positive_z":[5,6],"rl_attachment_depth":[5,6],"rl_attachment_renderbuff":[5,6],"rl_attachment_stencil":[5,6],"rl_attachment_texture2d":[5,6],"rl_begin":5,"rl_bind_framebuff":5,"rl_bind_image_textur":5,"rl_bind_shader_buff":5,"rl_blend_add_color":[5,6],"rl_blend_addit":[5,6],"rl_blend_alpha":[5,6],"rl_blend_alpha_premultipli":[5,6],"rl_blend_custom":[5,6],"rl_blend_custom_separ":[5,6],"rl_blend_multipli":[5,6],"rl_blend_subtract_color":[5,6],"rl_blit_framebuff":5,"rl_check_error":5,"rl_check_render_batch_limit":5,"rl_clear_color":5,"rl_clear_screen_buff":5,"rl_color3f":5,"rl_color4f":5,"rl_color4ub":5,"rl_color_mask":5,"rl_compile_shad":5,"rl_compute_shad":[5,6],"rl_compute_shader_dispatch":5,"rl_copy_shader_buff":5,"rl_cubemap_paramet":5,"rl_cull_face_back":[5,6],"rl_cull_face_front":[5,6],"rl_disable_backface_cul":5,"rl_disable_color_blend":5,"rl_disable_depth_mask":5,"rl_disable_depth_test":5,"rl_disable_framebuff":5,"rl_disable_scissor_test":5,"rl_disable_shad":5,"rl_disable_smooth_lin":5,"rl_disable_stereo_rend":5,"rl_disable_textur":5,"rl_disable_texture_cubemap":5,"rl_disable_vertex_arrai":5,"rl_disable_vertex_attribut":5,"rl_disable_vertex_buff":5,"rl_disable_vertex_buffer_el":5,"rl_disable_wire_mod":5,"rl_draw_render_batch":5,"rl_draw_render_batch_act":5,"rl_draw_vertex_arrai":5,"rl_draw_vertex_array_el":5,"rl_draw_vertex_array_elements_instanc":5,"rl_draw_vertex_array_instanc":5,"rl_enable_backface_cul":5,"rl_enable_color_blend":5,"rl_enable_depth_mask":5,"rl_enable_depth_test":5,"rl_enable_framebuff":5,"rl_enable_point_mod":5,"rl_enable_scissor_test":5,"rl_enable_shad":5,"rl_enable_smooth_lin":5,"rl_enable_stereo_rend":5,"rl_enable_textur":5,"rl_enable_texture_cubemap":5,"rl_enable_vertex_arrai":5,"rl_enable_vertex_attribut":5,"rl_enable_vertex_buff":5,"rl_enable_vertex_buffer_el":5,"rl_enable_wire_mod":5,"rl_end":5,"rl_fragment_shad":[5,6],"rl_framebuffer_attach":5,"rl_framebuffer_complet":5,"rl_frustum":5,"rl_gen_texture_mipmap":5,"rl_get_active_framebuff":5,"rl_get_cull_distance_far":5,"rl_get_cull_distance_near":5,"rl_get_framebuffer_height":5,"rl_get_framebuffer_width":5,"rl_get_gl_texture_format":5,"rl_get_line_width":5,"rl_get_location_attrib":5,"rl_get_location_uniform":5,"rl_get_matrix_modelview":5,"rl_get_matrix_project":5,"rl_get_matrix_projection_stereo":5,"rl_get_matrix_transform":5,"rl_get_matrix_view_offset_stereo":5,"rl_get_pixel_format_nam":5,"rl_get_shader_buffer_s":5,"rl_get_shader_id_default":5,"rl_get_shader_locs_default":5,"rl_get_texture_id_default":5,"rl_get_vers":5,"rl_is_stereo_render_en":5,"rl_load_compute_shader_program":5,"rl_load_draw_cub":5,"rl_load_draw_quad":5,"rl_load_extens":5,"rl_load_framebuff":5,"rl_load_ident":5,"rl_load_render_batch":5,"rl_load_shader_buff":5,"rl_load_shader_cod":5,"rl_load_shader_program":5,"rl_load_textur":5,"rl_load_texture_cubemap":5,"rl_load_texture_depth":5,"rl_load_vertex_arrai":5,"rl_load_vertex_buff":5,"rl_load_vertex_buffer_el":5,"rl_log_al":[5,6],"rl_log_debug":[5,6],"rl_log_error":[5,6],"rl_log_fat":[5,6],"rl_log_info":[5,6],"rl_log_non":[5,6],"rl_log_trac":[5,6],"rl_log_warn":[5,6],"rl_matrix_mod":5,"rl_mult_matrixf":5,"rl_normal3f":5,"rl_opengl_11":[5,6],"rl_opengl_21":[5,6],"rl_opengl_33":[5,6],"rl_opengl_43":[5,6],"rl_opengl_es_20":[5,6],"rl_opengl_es_30":[5,6],"rl_ortho":5,"rl_pixelformat_compressed_astc_4x4_rgba":[5,6],"rl_pixelformat_compressed_astc_8x8_rgba":[5,6],"rl_pixelformat_compressed_dxt1_rgb":[5,6],"rl_pixelformat_compressed_dxt1_rgba":[5,6],"rl_pixelformat_compressed_dxt3_rgba":[5,6],"rl_pixelformat_compressed_dxt5_rgba":[5,6],"rl_pixelformat_compressed_etc1_rgb":[5,6],"rl_pixelformat_compressed_etc2_eac_rgba":[5,6],"rl_pixelformat_compressed_etc2_rgb":[5,6],"rl_pixelformat_compressed_pvrt_rgb":[5,6],"rl_pixelformat_compressed_pvrt_rgba":[5,6],"rl_pixelformat_uncompressed_gray_alpha":[5,6],"rl_pixelformat_uncompressed_grayscal":[5,6],"rl_pixelformat_uncompressed_r16":[5,6],"rl_pixelformat_uncompressed_r16g16b16":[5,6],"rl_pixelformat_uncompressed_r16g16b16a16":[5,6],"rl_pixelformat_uncompressed_r32":[5,6],"rl_pixelformat_uncompressed_r32g32b32":[5,6],"rl_pixelformat_uncompressed_r32g32b32a32":[5,6],"rl_pixelformat_uncompressed_r4g4b4a4":[5,6],"rl_pixelformat_uncompressed_r5g5b5a1":[5,6],"rl_pixelformat_uncompressed_r5g6b5":[5,6],"rl_pixelformat_uncompressed_r8g8b8":[5,6],"rl_pixelformat_uncompressed_r8g8b8a8":[5,6],"rl_pop_matrix":5,"rl_push_matrix":5,"rl_read_screen_pixel":5,"rl_read_shader_buff":5,"rl_read_texture_pixel":5,"rl_rotatef":5,"rl_scalef":5,"rl_scissor":5,"rl_set_blend_factor":5,"rl_set_blend_factors_separ":5,"rl_set_blend_mod":5,"rl_set_clip_plan":5,"rl_set_cull_fac":5,"rl_set_framebuffer_height":5,"rl_set_framebuffer_width":5,"rl_set_line_width":5,"rl_set_matrix_modelview":5,"rl_set_matrix_project":5,"rl_set_matrix_projection_stereo":5,"rl_set_matrix_view_offset_stereo":5,"rl_set_render_batch_act":5,"rl_set_shad":5,"rl_set_textur":5,"rl_set_uniform":5,"rl_set_uniform_matric":5,"rl_set_uniform_matrix":5,"rl_set_uniform_sampl":5,"rl_set_vertex_attribut":5,"rl_set_vertex_attribute_default":5,"rl_set_vertex_attribute_divisor":5,"rl_shader_attrib_float":[5,6],"rl_shader_attrib_vec2":[5,6],"rl_shader_attrib_vec3":[5,6],"rl_shader_attrib_vec4":[5,6],"rl_shader_loc_color_ambi":[5,6],"rl_shader_loc_color_diffus":[5,6],"rl_shader_loc_color_specular":[5,6],"rl_shader_loc_map_albedo":[5,6],"rl_shader_loc_map_brdf":[5,6],"rl_shader_loc_map_cubemap":[5,6],"rl_shader_loc_map_emiss":[5,6],"rl_shader_loc_map_height":[5,6],"rl_shader_loc_map_irradi":[5,6],"rl_shader_loc_map_met":[5,6],"rl_shader_loc_map_norm":[5,6],"rl_shader_loc_map_occlus":[5,6],"rl_shader_loc_map_prefilt":[5,6],"rl_shader_loc_map_rough":[5,6],"rl_shader_loc_matrix_model":[5,6],"rl_shader_loc_matrix_mvp":[5,6],"rl_shader_loc_matrix_norm":[5,6],"rl_shader_loc_matrix_project":[5,6],"rl_shader_loc_matrix_view":[5,6],"rl_shader_loc_vector_view":[5,6],"rl_shader_loc_vertex_color":[5,6],"rl_shader_loc_vertex_norm":[5,6],"rl_shader_loc_vertex_posit":[5,6],"rl_shader_loc_vertex_tang":[5,6],"rl_shader_loc_vertex_texcoord01":[5,6],"rl_shader_loc_vertex_texcoord02":[5,6],"rl_shader_uniform_float":[5,6],"rl_shader_uniform_int":[5,6],"rl_shader_uniform_ivec2":[5,6],"rl_shader_uniform_ivec3":[5,6],"rl_shader_uniform_ivec4":[5,6],"rl_shader_uniform_sampler2d":[5,6],"rl_shader_uniform_uint":[5,6],"rl_shader_uniform_uivec2":[5,6],"rl_shader_uniform_uivec3":[5,6],"rl_shader_uniform_uivec4":[5,6],"rl_shader_uniform_vec2":[5,6],"rl_shader_uniform_vec3":[5,6],"rl_shader_uniform_vec4":[5,6],"rl_tex_coord2f":5,"rl_texture_filter_anisotropic_16x":[5,6],"rl_texture_filter_anisotropic_4x":[5,6],"rl_texture_filter_anisotropic_8x":[5,6],"rl_texture_filter_bilinear":[5,6],"rl_texture_filter_point":[5,6],"rl_texture_filter_trilinear":[5,6],"rl_texture_paramet":5,"rl_translatef":5,"rl_unload_framebuff":5,"rl_unload_render_batch":5,"rl_unload_shader_buff":5,"rl_unload_shader_program":5,"rl_unload_textur":5,"rl_unload_vertex_arrai":5,"rl_unload_vertex_buff":5,"rl_update_shader_buff":5,"rl_update_textur":5,"rl_update_vertex_buff":5,"rl_update_vertex_buffer_el":5,"rl_vertex2f":5,"rl_vertex2i":5,"rl_vertex3f":5,"rl_vertex_shad":[5,6],"rl_viewport":5,"rlactivedrawbuff":6,"rlactivetextureslot":6,"rlbegin":6,"rlbindframebuff":6,"rlbindimagetextur":6,"rlbindshaderbuff":6,"rlblendmod":[5,6],"rlblitframebuff":6,"rlcheckerror":6,"rlcheckrenderbatchlimit":6,"rlclearcolor":6,"rlclearscreenbuff":6,"rlcolor3f":6,"rlcolor4f":6,"rlcolor4ub":6,"rlcolormask":6,"rlcompileshad":6,"rlcomputeshaderdispatch":6,"rlcopyshaderbuff":6,"rlcubemapparamet":6,"rlcullmod":[5,6],"rldisablebackfacecul":6,"rldisablecolorblend":6,"rldisabledepthmask":6,"rldisabledepthtest":6,"rldisableframebuff":6,"rldisablescissortest":6,"rldisableshad":6,"rldisablesmoothlin":6,"rldisablestereorend":6,"rldisabletextur":6,"rldisabletexturecubemap":6,"rldisablevertexarrai":6,"rldisablevertexattribut":6,"rldisablevertexbuff":6,"rldisablevertexbufferel":6,"rldisablewiremod":6,"rldrawcal":[5,6],"rldrawrenderbatch":6,"rldrawrenderbatchact":6,"rldrawvertexarrai":6,"rldrawvertexarrayel":6,"rldrawvertexarrayelementsinstanc":6,"rldrawvertexarrayinstanc":6,"rlenablebackfacecul":6,"rlenablecolorblend":6,"rlenabledepthmask":6,"rlenabledepthtest":6,"rlenableframebuff":6,"rlenablepointmod":6,"rlenablescissortest":6,"rlenableshad":6,"rlenablesmoothlin":6,"rlenablestereorend":6,"rlenabletextur":6,"rlenabletexturecubemap":6,"rlenablevertexarrai":6,"rlenablevertexattribut":6,"rlenablevertexbuff":6,"rlenablevertexbufferel":6,"rlenablewiremod":6,"rlend":6,"rlframebufferattach":6,"rlframebufferattachtexturetyp":[5,6],"rlframebufferattachtyp":[5,6],"rlframebuffercomplet":6,"rlfrustum":6,"rlgentexturemipmap":6,"rlgetactiveframebuff":6,"rlgetculldistancefar":6,"rlgetculldistancenear":6,"rlgetframebufferheight":6,"rlgetframebufferwidth":6,"rlgetgltextureformat":6,"rlgetlinewidth":6,"rlgetlocationattrib":6,"rlgetlocationuniform":6,"rlgetmatrixmodelview":6,"rlgetmatrixproject":6,"rlgetmatrixprojectionstereo":6,"rlgetmatrixtransform":6,"rlgetmatrixviewoffsetstereo":6,"rlgetpixelformatnam":6,"rlgetshaderbuffers":6,"rlgetshaderiddefault":6,"rlgetshaderlocsdefault":6,"rlgettextureiddefault":6,"rlgetvers":6,"rlgl":[5,6],"rlgl_close":5,"rlgl_init":5,"rlglclose":6,"rlglinit":6,"rlglversion":[5,6],"rlisstereorenderen":6,"rlloadcomputeshaderprogram":6,"rlloaddrawcub":6,"rlloaddrawquad":6,"rlloadextens":6,"rlloadframebuff":6,"rlloadident":6,"rlloadrenderbatch":6,"rlloadshaderbuff":6,"rlloadshadercod":6,"rlloadshaderprogram":6,"rlloadtextur":6,"rlloadtexturecubemap":6,"rlloadtexturedepth":6,"rlloadvertexarrai":6,"rlloadvertexbuff":6,"rlloadvertexbufferel":6,"rlmatrixmod":6,"rlmultmatrixf":6,"rlnormal3f":6,"rlortho":6,"rlpixelformat":[5,6],"rlpopmatrix":6,"rlpushmatrix":6,"rlreadscreenpixel":6,"rlreadshaderbuff":6,"rlreadtexturepixel":6,"rlrenderbatch":[5,6],"rlrotatef":6,"rlscalef":6,"rlscissor":6,"rlsetblendfactor":6,"rlsetblendfactorssepar":6,"rlsetblendmod":6,"rlsetclipplan":6,"rlsetcullfac":6,"rlsetframebufferheight":6,"rlsetframebufferwidth":6,"rlsetlinewidth":6,"rlsetmatrixmodelview":6,"rlsetmatrixproject":6,"rlsetmatrixprojectionstereo":6,"rlsetmatrixviewoffsetstereo":6,"rlsetrenderbatchact":6,"rlsetshad":6,"rlsettextur":6,"rlsetuniform":6,"rlsetuniformmatric":6,"rlsetuniformmatrix":6,"rlsetuniformsampl":6,"rlsetvertexattribut":6,"rlsetvertexattributedefault":6,"rlsetvertexattributedivisor":6,"rlshaderattributedatatyp":[5,6],"rlshaderlocationindex":[5,6],"rlshaderuniformdatatyp":[5,6],"rltexcoord2f":6,"rltexturefilt":[5,6],"rltextureparamet":6,"rltraceloglevel":[5,6],"rltranslatef":6,"rlunloadframebuff":6,"rlunloadrenderbatch":6,"rlunloadshaderbuff":6,"rlunloadshaderprogram":6,"rlunloadtextur":6,"rlunloadvertexarrai":6,"rlunloadvertexbuff":6,"rlupdateshaderbuff":6,"rlupdatetextur":6,"rlupdatevertexbuff":6,"rlupdatevertexbufferel":6,"rlvertex2f":6,"rlvertex2i":6,"rlvertex3f":6,"rlvertexbuff":[5,6],"rlviewport":6,"rlzero":4,"rm":[0,2],"rmdir":0,"roll":[5,6],"rom":[5,6],"rotat":[5,6],"rotationangl":[5,6],"rotationaxi":[5,6],"round":[5,6],"run":[0,2,4,5,6],"same":[3,5,6],"sampl":[5,6],"samplecount":[5,6],"sampler":[5,6],"sampler2d":[5,6],"samples":[5,6],"satur":[5,6],"save":[5,6],"save_file_data":5,"save_file_text":5,"savefiledata":6,"savefiletext":6,"saver":[5,6],"scalar":[5,6],"scale":[5,6],"scalei":[5,6],"scalein":[5,6],"scalex":[5,6],"scan":[5,6],"scancod":[5,6],"scansubdir":[5,6],"scissor":[5,6],"screen":[5,6],"screenshot":[5,6],"script":1,"scroll":[5,6],"scroll_pad":[5,6],"scroll_slider_pad":[5,6],"scroll_slider_s":[5,6],"scroll_spe":[5,6],"scrollbar":[5,6],"scrollbar_sid":[5,6],"scrollbar_width":[5,6],"scrollindex":[5,6],"sdl_gamecontrollerdb":[5,6],"search":4,"second":[5,6],"secret":[5,6],"secretviewact":[5,6],"sector":[5,6],"see":[0,1,2,3,5,6],"seed":[5,6],"seek":[5,6],"seek_music_stream":5,"seekmusicstream":6,"seem":2,"segment":[5,6],"select":[5,6],"selectedchannel":[5,6],"separ":[0,1,3,5,6],"sequenc":[5,6],"server":1,"set":[0,3,5,6],"set_audio_stream_buffer_size_default":5,"set_audio_stream_callback":5,"set_audio_stream_pan":5,"set_audio_stream_pitch":5,"set_audio_stream_volum":5,"set_automation_event_base_fram":5,"set_automation_event_list":5,"set_clipboard_text":5,"set_config_flag":5,"set_exit_kei":5,"set_gamepad_map":5,"set_gamepad_vibr":5,"set_gestures_en":5,"set_load_file_data_callback":5,"set_load_file_text_callback":5,"set_master_volum":5,"set_material_textur":5,"set_model_mesh_materi":5,"set_mouse_cursor":5,"set_mouse_offset":5,"set_mouse_posit":5,"set_mouse_scal":5,"set_music_pan":5,"set_music_pitch":5,"set_music_volum":5,"set_physics_body_rot":5,"set_physics_grav":5,"set_physics_time_step":5,"set_pixel_color":5,"set_random_se":5,"set_save_file_data_callback":5,"set_save_file_text_callback":5,"set_shader_valu":5,"set_shader_value_matrix":5,"set_shader_value_textur":5,"set_shader_value_v":5,"set_shapes_textur":5,"set_sound_pan":5,"set_sound_pitch":5,"set_sound_volum":5,"set_target_fp":5,"set_text_line_spac":5,"set_texture_filt":5,"set_texture_wrap":5,"set_trace_log_callback":5,"set_trace_log_level":5,"set_window_focus":5,"set_window_icon":5,"set_window_max_s":5,"set_window_min_s":5,"set_window_monitor":5,"set_window_opac":5,"set_window_posit":5,"set_window_s":5,"set_window_st":5,"set_window_titl":5,"setaudiostreambuffersizedefault":6,"setaudiostreamcallback":6,"setaudiostreampan":6,"setaudiostreampitch":6,"setaudiostreamvolum":6,"setautomationeventbasefram":6,"setautomationeventlist":6,"setclipboardtext":6,"setconfigflag":6,"setexitkei":6,"setgamepadmap":6,"setgamepadvibr":6,"setgesturesen":6,"setloadfiledatacallback":6,"setloadfiletextcallback":6,"setmastervolum":6,"setmaterialtextur":6,"setmodelmeshmateri":6,"setmousecursor":6,"setmouseoffset":6,"setmouseposit":6,"setmousescal":6,"setmusicpan":6,"setmusicpitch":6,"setmusicvolum":6,"setphysicsbodyrot":6,"setphysicsgrav":6,"setphysicstimestep":6,"setpixelcolor":6,"setrandomse":6,"setsavefiledatacallback":6,"setsavefiletextcallback":6,"setshadervalu":6,"setshadervaluematrix":6,"setshadervaluetextur":6,"setshadervaluev":6,"setshapestextur":6,"setsoundpan":6,"setsoundpitch":6,"setsoundvolum":6,"settargetfp":6,"settextlinespac":6,"settexturefilt":6,"settexturewrap":6,"settracelogcallback":6,"settraceloglevel":6,"setup":[0,5,6],"setuptool":[1,2],"setwindowfocus":6,"setwindowicon":6,"setwindowmaxs":6,"setwindowmins":6,"setwindowmonitor":6,"setwindowopac":6,"setwindowposit":6,"setwindows":6,"setwindowst":6,"setwindowtitl":6,"sh":0,"sha1":[5,6],"shader":[5,6],"shader_attrib_float":[5,6],"shader_attrib_vec2":[5,6],"shader_attrib_vec3":[5,6],"shader_attrib_vec4":[5,6],"shader_loc_bone_matric":[5,6],"shader_loc_color_ambi":[5,6],"shader_loc_color_diffus":[5,6],"shader_loc_color_specular":[5,6],"shader_loc_map_albedo":[5,6],"shader_loc_map_brdf":[5,6],"shader_loc_map_cubemap":[5,6],"shader_loc_map_emiss":[5,6],"shader_loc_map_height":[5,6],"shader_loc_map_irradi":[5,6],"shader_loc_map_met":[5,6],"shader_loc_map_norm":[5,6],"shader_loc_map_occlus":[5,6],"shader_loc_map_prefilt":[5,6],"shader_loc_map_rough":[5,6],"shader_loc_matrix_model":[5,6],"shader_loc_matrix_mvp":[5,6],"shader_loc_matrix_norm":[5,6],"shader_loc_matrix_project":[5,6],"shader_loc_matrix_view":[5,6],"shader_loc_vector_view":[5,6],"shader_loc_vertex_boneid":[5,6],"shader_loc_vertex_boneweight":[5,6],"shader_loc_vertex_color":[5,6],"shader_loc_vertex_norm":[5,6],"shader_loc_vertex_posit":[5,6],"shader_loc_vertex_tang":[5,6],"shader_loc_vertex_texcoord01":[5,6],"shader_loc_vertex_texcoord02":[5,6],"shader_uniform_float":[5,6],"shader_uniform_int":[5,6],"shader_uniform_ivec2":[5,6],"shader_uniform_ivec3":[5,6],"shader_uniform_ivec4":[5,6],"shader_uniform_sampler2d":[5,6],"shader_uniform_vec2":[5,6],"shader_uniform_vec3":[5,6],"shader_uniform_vec4":[5,6],"shaderattributedatatyp":[5,6],"shadercod":[5,6],"shaderid":[5,6],"shaderlocationindex":[5,6],"shaderuniformdatatyp":[5,6],"shape":[5,6],"share":[0,2,5,6],"shatter":[5,6],"shell":0,"should":[0,1,2,5,6],"show":[5,6],"show_cursor":5,"showcas":4,"showcursor":6,"shrink":[5,6],"side":[5,6],"silent":3,"similar":6,"simpl":1,"simplifi":1,"simul":[5,6],"sinc":[5,6],"singl":[2,5,6],"size":[5,6],"skelet":5,"skeleton":[5,6],"skin":[5,6],"skyblu":[5,6],"sleep":1,"slice":[5,6],"slider":[5,6],"slider_pad":[5,6],"slider_width":[5,6],"sliderbar":5,"slightli":1,"sln":0,"slot":[5,6],"slow":[5,6],"small":[5,6],"snake":[5,6],"snake_cas":5,"so":[0,1,3,5,6],"some":[0,1,3,5,6],"someth":3,"sound":[5,6],"sourc":[1,4,5,6],"space":[5,6],"specif":[1,5,6],"specifi":[5,6],"specular":[5,6],"sphere":[5,6],"spin_button_spac":[5,6],"spin_button_width":[5,6],"spinner":[5,6],"spline":[5,6],"split":[5,6],"sprite":[5,6],"squar":[5,6],"src":[0,2,5,6],"srcheight":[5,6],"srcid":[5,6],"srcoffset":[5,6],"srcptr":[5,6],"srcrec":[5,6],"srcwidth":[5,6],"srcx":[5,6],"srcy":[5,6],"ssbo":[5,6],"ssboid":[5,6],"stack":[5,6],"stacktrac":3,"standalon":1,"standard":[1,3,5,6],"start":[5,6],"start_automation_event_record":5,"startangl":[5,6],"startautomationeventrecord":6,"startpo":[5,6],"startpos1":[5,6],"startpos2":[5,6],"startposi":[5,6],"startposx":[5,6],"startradiu":[5,6],"state":[5,6],"state_dis":[5,6],"state_focus":[5,6],"state_norm":[5,6],"state_press":[5,6],"static":[0,1,3,5,6],"staticfrict":[5,6],"statu":[5,6],"statusbar":[5,6],"steinberg":[5,6],"step":[5,6],"stereo":[5,6],"still":[0,1,5],"stop":[5,6],"stop_audio_stream":5,"stop_automation_event_record":5,"stop_music_stream":5,"stop_sound":5,"stopaudiostream":6,"stopautomationeventrecord":6,"stopmusicstream":6,"stopsound":6,"storag":[5,6],"store":5,"str":5,"stream":[5,6],"stretch":[5,6],"stride":[5,6],"string":[5,6],"strip":[5,6],"struct":6,"structur":[1,5,6],"stuff":6,"style":[5,6],"sub":[5,6],"subdiv":[5,6],"subdivis":[5,6],"submit":[0,1],"submodul":0,"subtract":[5,6],"success":[5,6],"successfulli":[5,6],"sudo":[0,2],"sugar":5,"suggest":2,"support":[1,5,6],"sure":[0,1],"swap":[5,6],"swap_screen_buff":5,"swapscreenbuff":6,"switch":1,"symlink":0,"syntact":5,"system":[0,1,2,3,5,6],"t":[0,1,2,3,5,6],"tab":[5,6],"take":[5,6],"take_screenshot":5,"takescreenshot":6,"tangent":[5,6],"tangent1":[5,6],"tangent2":[5,6],"tanki":1,"target":[0,5,6],"tempest":1,"templat":1,"termin":[5,6],"test":[0,1,2,3,5,6],"test_dynam":3,"tex":5,"texcoord":[5,6],"texcoords2":[5,6],"texid":[5,6],"text":[5,6],"text1":[5,6],"text2":[5,6],"text_align":[5,6],"text_align_bottom":[5,6],"text_align_cent":[5,6],"text_align_left":[5,6],"text_align_middl":[5,6],"text_align_right":[5,6],"text_align_top":[5,6],"text_alignment_vert":[5,6],"text_append":5,"text_color_dis":[5,6],"text_color_focus":[5,6],"text_color_norm":[5,6],"text_color_press":[5,6],"text_copi":5,"text_find_index":5,"text_format":5,"text_insert":5,"text_is_equ":5,"text_join":5,"text_length":5,"text_line_spac":[5,6],"text_pad":[5,6],"text_readonli":[5,6],"text_replac":5,"text_siz":[5,6],"text_spac":[5,6],"text_split":5,"text_subtext":5,"text_to_camel":5,"text_to_float":5,"text_to_integ":5,"text_to_low":5,"text_to_pasc":5,"text_to_snak":5,"text_to_upp":5,"text_wrap_char":[5,6],"text_wrap_mod":[5,6],"text_wrap_non":[5,6],"text_wrap_word":[5,6],"textappend":6,"textbox":[5,6],"textboxmulti":5,"textcopi":6,"textfindindex":6,"textformat":6,"textinsert":6,"textisequ":6,"textjoin":6,"textleft":[5,6],"textlength":6,"textlist":[5,6],"textmaxs":[5,6],"textreplac":6,"textright":[5,6],"textsiz":[5,6],"textsplit":6,"textsubtext":6,"texttocamel":6,"texttofloat":6,"texttointeg":6,"texttolow":6,"texttopasc":6,"texttosnak":6,"texttoupp":6,"textur":[1,5,6],"texture2d":[5,6],"texture_filter_anisotropic_16x":[5,6],"texture_filter_anisotropic_4x":[5,6],"texture_filter_anisotropic_8x":[5,6],"texture_filter_bilinear":[5,6],"texture_filter_point":[5,6],"texture_filter_trilinear":[5,6],"texture_wrap_clamp":[5,6],"texture_wrap_mirror_clamp":[5,6],"texture_wrap_mirror_repeat":[5,6],"texture_wrap_repeat":[5,6],"texturecubemap":6,"texturefilt":[5,6],"textureid":[5,6],"textures_bunnymark":1,"texturewrap":[5,6],"textvalu":[5,6],"textyp":[5,6],"than":[0,1,5],"thei":[0,1,2,3],"them":1,"therefor":3,"thi":[0,1,2,3,5,6],"thick":[5,6],"those":5,"thread":[5,6],"threshold":[5,6],"tiles":[5,6],"time":[5,6],"timeout":[5,6],"tini":1,"tint":[5,6],"titl":[5,6],"tmpl":1,"tofloat":5,"toggl":[5,6],"toggle_borderless_window":5,"toggle_fullscreen":5,"toggleborderlesswindow":6,"togglefullscreen":6,"togglegroup":5,"tooltip":[5,6],"top":[5,6],"topleft":[5,6],"topright":[5,6],"torqu":[5,6],"toru":[5,6],"total":[5,6],"touch":[5,6],"tournament":1,"trace":[2,5,6],"trace_log":5,"tracelog":6,"traceloglevel":[5,6],"transform":[5,6],"translat":[5,6],"tree":1,"trefoil":[5,6],"triangl":[5,6],"trianglecount":[5,6],"true":[5,6],"try":[1,2],"ttf":[5,6],"tupl":[5,6],"two":[1,5,6],"type":[1,5,6],"u":[1,5],"ubuntu":1,"ume_block":1,"unicod":[5,6],"uniform":[5,6],"uniformnam":[5,6],"uniformtyp":[5,6],"uninstal":1,"unless":0,"unload":[5,6],"unload_audio_stream":5,"unload_automation_event_list":5,"unload_codepoint":5,"unload_directory_fil":5,"unload_dropped_fil":5,"unload_file_data":5,"unload_file_text":5,"unload_font":5,"unload_font_data":5,"unload_imag":5,"unload_image_color":5,"unload_image_palett":5,"unload_materi":5,"unload_mesh":5,"unload_model":5,"unload_model_anim":5,"unload_music_stream":5,"unload_random_sequ":5,"unload_render_textur":5,"unload_shad":5,"unload_sound":5,"unload_sound_alia":5,"unload_textur":5,"unload_utf8":5,"unload_vr_stereo_config":5,"unload_wav":5,"unload_wave_sampl":5,"unloadaudiostream":6,"unloadautomationeventlist":6,"unloadcodepoint":6,"unloaddirectoryfil":6,"unloaddroppedfil":6,"unloadfiledata":6,"unloadfiletext":6,"unloadfont":6,"unloadfontdata":6,"unloadimag":6,"unloadimagecolor":6,"unloadimagepalett":6,"unloadmateri":6,"unloadmesh":6,"unloadmodel":6,"unloadmodelanim":6,"unloadmusicstream":6,"unloadrandomsequ":6,"unloadrendertextur":6,"unloadshad":6,"unloadsound":6,"unloadsoundalia":6,"unloadtextur":6,"unloadutf8":6,"unloadvrstereoconfig":6,"unloadwav":6,"unloadwavesampl":6,"unlock":[5,6],"up":[1,5,6],"updat":[0,1,2,5,6],"update_audio_stream":5,"update_camera":5,"update_camera_pro":5,"update_mesh_buff":5,"update_model_anim":5,"update_model_animation_bon":5,"update_music_stream":5,"update_phys":5,"update_sound":5,"update_textur":5,"update_texture_rec":5,"updateaudiostream":6,"updatecamera":6,"updatecamerapro":6,"updatemeshbuff":6,"updatemodelanim":6,"updatemodelanimationbon":6,"updatemusicstream":6,"updatephys":6,"updatesound":6,"updatetextur":6,"updatetexturerec":6,"upgrad":[0,1,2],"upload":[5,6],"upload_mesh":5,"uploadmesh":6,"upper":[5,6],"url":[5,6],"us":[0,2,3,4,5,6],"usag":6,"usagehint":[5,6],"use_external_raylib":3,"usegrav":[5,6],"user":[0,1,5,6],"userenderbuff":[5,6],"usr":[0,2],"usual":1,"utf":[5,6],"utf8siz":[5,6],"v":[5,6],"v1":[5,6],"v2":[5,6],"v3":[5,6],"valid":[5,6],"valu":[5,6],"valuebox":[5,6],"vao":[5,6],"vaoid":[5,6],"vararg":[5,6],"variabl":[3,5,6],"vbo":[5,6],"vboid":[5,6],"vc":2,"vcount":[5,6],"vector":[5,6],"vector2":[5,6],"vector2_add":5,"vector2_add_valu":5,"vector2_angl":5,"vector2_clamp":5,"vector2_clamp_valu":5,"vector2_dist":5,"vector2_distance_sqr":5,"vector2_divid":5,"vector2_dot_product":5,"vector2_equ":5,"vector2_invert":5,"vector2_length":5,"vector2_length_sqr":5,"vector2_lerp":5,"vector2_line_angl":5,"vector2_max":5,"vector2_min":5,"vector2_move_toward":5,"vector2_multipli":5,"vector2_neg":5,"vector2_norm":5,"vector2_on":5,"vector2_reflect":5,"vector2_refract":5,"vector2_rot":5,"vector2_scal":5,"vector2_subtract":5,"vector2_subtract_valu":5,"vector2_transform":5,"vector2_zero":5,"vector2add":6,"vector2addvalu":6,"vector2angl":6,"vector2clamp":6,"vector2clampvalu":6,"vector2dist":6,"vector2distancesqr":6,"vector2divid":6,"vector2dotproduct":6,"vector2equ":6,"vector2invert":6,"vector2length":6,"vector2lengthsqr":6,"vector2lerp":6,"vector2lineangl":6,"vector2max":6,"vector2min":6,"vector2movetoward":6,"vector2multipli":6,"vector2neg":6,"vector2norm":6,"vector2on":6,"vector2reflect":6,"vector2refract":6,"vector2rot":6,"vector2scal":6,"vector2subtract":6,"vector2subtractvalu":6,"vector2transform":6,"vector2zero":6,"vector3":[5,6],"vector3_add":5,"vector3_add_valu":5,"vector3_angl":5,"vector3_barycent":5,"vector3_clamp":5,"vector3_clamp_valu":5,"vector3_cross_product":5,"vector3_cubic_hermit":5,"vector3_dist":5,"vector3_distance_sqr":5,"vector3_divid":5,"vector3_dot_product":5,"vector3_equ":5,"vector3_invert":5,"vector3_length":5,"vector3_length_sqr":5,"vector3_lerp":5,"vector3_max":5,"vector3_min":5,"vector3_move_toward":5,"vector3_multipli":5,"vector3_neg":5,"vector3_norm":5,"vector3_on":5,"vector3_ortho_norm":5,"vector3_perpendicular":5,"vector3_project":5,"vector3_reflect":5,"vector3_refract":5,"vector3_reject":5,"vector3_rotate_by_axis_angl":5,"vector3_rotate_by_quaternion":5,"vector3_scal":5,"vector3_subtract":5,"vector3_subtract_valu":5,"vector3_to_float_v":5,"vector3_transform":5,"vector3_unproject":5,"vector3_zero":5,"vector3add":6,"vector3addvalu":6,"vector3angl":6,"vector3barycent":6,"vector3clamp":6,"vector3clampvalu":6,"vector3crossproduct":6,"vector3cubichermit":6,"vector3dist":6,"vector3distancesqr":6,"vector3divid":6,"vector3dotproduct":6,"vector3equ":6,"vector3invert":6,"vector3length":6,"vector3lengthsqr":6,"vector3lerp":6,"vector3max":6,"vector3min":6,"vector3movetoward":6,"vector3multipli":6,"vector3neg":6,"vector3norm":6,"vector3on":6,"vector3orthonorm":6,"vector3perpendicular":6,"vector3project":6,"vector3reflect":6,"vector3refract":6,"vector3reject":6,"vector3rotatebyaxisangl":6,"vector3rotatebyquaternion":6,"vector3scal":6,"vector3subtract":6,"vector3subtractvalu":6,"vector3tofloatv":6,"vector3transform":6,"vector3unproject":6,"vector3zero":6,"vector4":[5,6],"vector4_add":5,"vector4_add_valu":5,"vector4_dist":5,"vector4_distance_sqr":5,"vector4_divid":5,"vector4_dot_product":5,"vector4_equ":5,"vector4_invert":5,"vector4_length":5,"vector4_length_sqr":5,"vector4_lerp":5,"vector4_max":5,"vector4_min":5,"vector4_move_toward":5,"vector4_multipli":5,"vector4_neg":5,"vector4_norm":5,"vector4_on":5,"vector4_scal":5,"vector4_subtract":5,"vector4_subtract_valu":5,"vector4_zero":5,"vector4add":6,"vector4addvalu":6,"vector4dist":6,"vector4distancesqr":6,"vector4divid":6,"vector4dotproduct":6,"vector4equ":6,"vector4invert":6,"vector4length":6,"vector4lengthsqr":6,"vector4lerp":6,"vector4max":6,"vector4min":6,"vector4movetoward":6,"vector4multipli":6,"vector4neg":6,"vector4norm":6,"vector4on":6,"vector4scal":6,"vector4subtract":6,"vector4subtractvalu":6,"vector4zero":6,"veloc":[5,6],"venv":1,"veri":6,"verifi":[5,6],"version":[0,2,5,6],"vertex":[5,6],"vertexalign":[5,6],"vertexbuff":[5,6],"vertexcount":[5,6],"vertexdata":[5,6],"vertic":[5,6],"via":3,"vibrat":[5,6],"video":[5,6],"view":[5,6],"viewoffset":[5,6],"viewport":[5,6],"violet":[1,5,6],"visibl":[5,6],"visual":0,"volum":[5,6],"vr":[5,6],"vram":[5,6],"vrdeviceinfo":[5,6],"vresolut":[5,6],"vrstereoconfig":[5,6],"vscode":[5,6],"vscreensiz":[5,6],"vsfilenam":[5,6],"vshaderid":[5,6],"w":[5,6],"wabbit_alpha":1,"wai":[0,1],"wait":[5,6],"wait_tim":5,"waittim":6,"want":[0,4,6],"warn":[3,5,6],"wav":[5,6],"wave":[5,6],"wave_copi":5,"wave_crop":5,"wave_format":5,"wavecopi":6,"wavecrop":6,"waveformat":6,"wayland":1,"we":[0,2],"web":4,"weird":3,"well":1,"what":1,"wheel":[0,1,5,6],"when":[1,2,5,6],"whenev":6,"where":[1,5,6],"which":1,"whichev":[5,6],"while":[1,5,6],"white":[1,5,6],"whl":0,"width":[5,6],"widthmm":[5,6],"wiki":[0,2],"win_amd64":0,"window":[5,6],"window_res":1,"window_should_clos":[1,5],"windowshouldclos":6,"wire":[5,6],"wirefram":[5,6],"within":[5,6],"without":[2,5,6],"won":3,"wont":0,"work":[0,1,2,3,5,6],"workflow":0,"world":[1,5,6],"would":0,"wrap":[5,6],"wrapper":5,"write":[1,5,6],"wrong":3,"wsl":1,"x":[5,6],"x11":1,"x64":1,"x86":1,"xhot":[5,6],"xna":[5,6],"xorg":0,"xpo":[5,6],"xscale":[5,6],"xy":[5,6],"xz":[5,6],"y":[5,6],"yaw":[5,6],"yellow":[5,6],"yhot":[5,6],"yml":0,"you":[0,2,3,5,6],"your":[0,2,3,4,6],"ypo":[5,6],"yscale":[5,6],"z":[5,6],"zero":1,"zfar":[5,6],"znear":[5,6],"zoom":[5,6]},"titles":["Building from source","Python Bindings for Raylib 5.5","Raspberry Pi","Dynamic Bindings","Raylib Python","Python API","C API"],"titleterms":{"1":2,"2":2,"3":2,"5":1,"If":1,"Or":0,"advert":1,"an":1,"api":[1,5,6],"app":1,"ar":1,"backend":1,"binari":2,"bind":[1,3],"browser":1,"build":0,"bunnymark":1,"c":[1,6],"code":1,"compil":2,"content":4,"copi":1,"desktop":1,"drm":[1,2],"dynam":[1,3],"exact":1,"exampl":5,"familiar":1,"from":[0,2],"function":6,"glfw":1,"have":0,"help":1,"how":1,"instal":1,"librari":1,"licens":1,"linux":[0,1],"mac":1,"maco":[0,1],"manual":0,"mode":2,"more":1,"option":2,"packag":1,"perform":1,"physac":1,"pi":[1,2],"pip":0,"platform":1,"prefer":1,"problem":1,"python":[1,4,5],"pythonist":1,"quickstart":1,"raspberri":[1,2],"raygui":1,"raylib":[1,2,4],"raymath":1,"refer":[5,6],"rlgl":1,"rlzero":1,"run":1,"sdl":1,"showcas":1,"sourc":[0,2],"todo":0,"us":1,"version":1,"want":1,"web":1,"wheel":2,"window":[0,1],"x11":2,"you":1,"your":1}})
\ No newline at end of file
diff --git a/dynamic/MANIFEST.in b/dynamic/MANIFEST.in
new file mode 100644
index 0000000..a22ebe4
--- /dev/null
+++ b/dynamic/MANIFEST.in
@@ -0,0 +1,13 @@
+include pyray/*.pyi
+include raylib/*.dll
+include raylib/*.dylib
+include raylib/*.h
+include raylib/*.pyd
+include raylib/*.pyi
+include raylib/*.so
+include version.py
+exclude raylib/*.a
+exclude raylib/*.c
+exclude raylib/*.o
+include raylib/py.typed
+include pyray/py.typed
\ No newline at end of file
diff --git a/dynamic/README.rst b/dynamic/README.rst
new file mode 100644
index 0000000..e2877bf
--- /dev/null
+++ b/dynamic/README.rst
@@ -0,0 +1,41 @@
+Dynamic Bindings
+================
+
+CFFI ABI dynamic bindings avoid the need to compile a C extension module. They now been moved to a separate module::
+
+ python3 -m pip install raylib_dynamic
+
+.. warning::
+
+ There have been some weird failures with dynamic bindings and ctypes bindings before and often the
+ failures are silent
+ so you don't even know something has gone wrong and you don't get proper stacktraces. Also the static bindings are faster.
+ Therefore I personally recommend the static ones.
+ But the dynamic bindings have the advantage that you don't need to compile anything to install. You just need a Raylib DLL.
+
+The API is exactly the same as the static one documented here. (Therefore you can't have both modules installed at once.) The only difference is you can't do::
+
+ from raylib import *
+
+Instead you have to do::
+
+ from raylib import rl
+
+Then you access the functions with ``rl.`` prefix.
+
+See https://github.com/electronstudio/raylib-python-cffi/blob/master/dynamic/test_dynamic.py for an example.
+
+If you use the ``rl.`` prefix then code will work on both static and dynamic bindings.
+
+.. tip::
+
+ If you access functions via ``import pyray`` then there is no difference at all, but be warned this hasn't been tested much.
+
+.. note::
+
+ Standard Raylib DLLs do not include additional libraries like Raygui, Physac, etc. So these functions won't work.
+
+.. important::
+
+ If your system already has the Raylib library installed, you can set the environment variable ``USE_EXTERNAL_RAYLIB`` and it will
+ always be used instead of the bundled DLLs.
diff --git a/dynamic/examples b/dynamic/examples
new file mode 120000
index 0000000..a6573af
--- /dev/null
+++ b/dynamic/examples
@@ -0,0 +1 @@
+../examples
\ No newline at end of file
diff --git a/dynamic/pyray b/dynamic/pyray
new file mode 120000
index 0000000..1c38922
--- /dev/null
+++ b/dynamic/pyray
@@ -0,0 +1 @@
+../pyray
\ No newline at end of file
diff --git a/dynamic/raylib/__init__.py b/dynamic/raylib/__init__.py
new file mode 100644
index 0000000..75ab2d6
--- /dev/null
+++ b/dynamic/raylib/__init__.py
@@ -0,0 +1,87 @@
+"""
+This is an attempt at a CFFI dynamic (ABI) binding. It was failing in the exactly same place the ctypes binding fails, accessing
+materials of a model. But now it __seems__ to work
+"""
+
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+from cffi import FFI
+import itertools
+import os
+import pathlib
+import platform
+import logging
+from .version import __version__
+
+logger = logging.getLogger(__name__)
+MODULE = pathlib.Path(__file__).parent
+
+def raylib_library_path():
+ '''Return the full path of the raylib shared library
+ If the environment variable "USE_EXTERNAL_RAYLIB" is set (no value required)
+ then the library will be loaded from the system library paths.
+ '''
+ def so_path():
+ return str(MODULE) if not 'USE_EXTERNAL_RAYLIB' in os.environ else ''
+ def so_name():
+ '''Returns the appropriate for the library on the current platform.'''
+ lib_filenames = {
+ 'Windows': 'raylib.dll',
+ 'Linux': 'libraylib.so',
+ 'Darwin': 'libraylib.dylib',
+ }
+ if platform.system() not in lib_filenames:
+ raise ValueError('Unrecognised system "{}"'.format(platform.system()))
+ return lib_filenames.get(platform.system())
+
+ return os.path.join(so_path(), so_name())
+
+
+ffi = FFI()
+ffi.cdef(open(MODULE / "raylib_modified.h").read().replace('RLAPI ', ''))
+
+try:
+ raylib_fname = raylib_library_path()
+ rl = ffi.dlopen(raylib_fname)
+ logger.warning('LOADED DYNAMICALLY SHARED LIB {} {}'.format(__version__, raylib_fname))
+except Exception as e:
+ logger.exception(e)
+
+LIGHTGRAY =( 200, 200, 200, 255 )
+GRAY =( 130, 130, 130, 255 )
+DARKGRAY =( 80, 80, 80, 255 )
+YELLOW =( 253, 249, 0, 255 )
+GOLD =( 255, 203, 0, 255 )
+ORANGE =( 255, 161, 0, 255 )
+PINK =( 255, 109, 194, 255 )
+RED =( 230, 41, 55, 255 )
+MAROON =( 190, 33, 55, 255 )
+GREEN =( 0, 228, 48, 255 )
+LIME =( 0, 158, 47, 255 )
+DARKGREEN =( 0, 117, 44, 255 )
+SKYBLUE =( 102, 191, 255, 255 )
+BLUE =( 0, 121, 241, 255 )
+DARKBLUE =( 0, 82, 172, 255 )
+PURPLE =( 200, 122, 255, 255 )
+VIOLET =( 135, 60, 190, 255 )
+DARKPURPLE =( 112, 31, 126, 255 )
+BEIGE =( 211, 176, 131, 255 )
+BROWN =( 127, 106, 79, 255 )
+DARKBROWN =( 76, 63, 47, 255 )
+WHITE =( 255, 255, 255, 255 )
+BLACK =( 0, 0, 0, 255 )
+BLANK =( 0, 0, 0, 0 )
+MAGENTA =( 255, 0, 255, 255 )
+RAYWHITE =( 245, 245, 245, 255 )
diff --git a/dynamic/raylib/__init__.pyi b/dynamic/raylib/__init__.pyi
new file mode 100644
index 0000000..c1b492f
--- /dev/null
+++ b/dynamic/raylib/__init__.pyi
@@ -0,0 +1,4423 @@
+from typing import Any
+from warnings import deprecated
+import _cffi_backend # type: ignore
+
+ffi: _cffi_backend.FFI
+rl: _cffi_backend.Lib
+PhysicsShapeType = int
+
+class struct: ...
+
+
+ARROWS_SIZE: int
+ARROWS_VISIBLE: int
+ARROW_PADDING: int
+def AttachAudioMixedProcessor(processor: Any,) -> None:
+ """Attach audio stream processor to the entire audio pipeline, receives the samples as 'float'."""
+ ...
+def AttachAudioStreamProcessor(stream: AudioStream|list|tuple,processor: Any,) -> None:
+ """Attach audio stream processor to stream, receives the samples as 'float'."""
+ ...
+BACKGROUND_COLOR: int
+BASE_COLOR_DISABLED: int
+BASE_COLOR_FOCUSED: int
+BASE_COLOR_NORMAL: int
+BASE_COLOR_PRESSED: int
+BLEND_ADDITIVE: int
+BLEND_ADD_COLORS: int
+BLEND_ALPHA: int
+BLEND_ALPHA_PREMULTIPLY: int
+BLEND_CUSTOM: int
+BLEND_CUSTOM_SEPARATE: int
+BLEND_MULTIPLIED: int
+BLEND_SUBTRACT_COLORS: int
+BORDER_COLOR_DISABLED: int
+BORDER_COLOR_FOCUSED: int
+BORDER_COLOR_NORMAL: int
+BORDER_COLOR_PRESSED: int
+BORDER_WIDTH: int
+BUTTON: int
+def BeginBlendMode(mode: int,) -> None:
+ """Begin blending mode (alpha, additive, multiplied, subtract, custom)."""
+ ...
+def BeginDrawing() -> None:
+ """Setup canvas (framebuffer) to start drawing."""
+ ...
+def BeginMode2D(camera: Camera2D|list|tuple,) -> None:
+ """Begin 2D mode with custom camera (2D)."""
+ ...
+def BeginMode3D(camera: Camera3D|list|tuple,) -> None:
+ """Begin 3D mode with custom camera (3D)."""
+ ...
+def BeginScissorMode(x: int,y: int,width: int,height: int,) -> None:
+ """Begin scissor mode (define screen area for following drawing)."""
+ ...
+def BeginShaderMode(shader: Shader|list|tuple,) -> None:
+ """Begin custom shader drawing."""
+ ...
+def BeginTextureMode(target: RenderTexture|list|tuple,) -> None:
+ """Begin drawing to render texture."""
+ ...
+def BeginVrStereoMode(config: VrStereoConfig|list|tuple,) -> None:
+ """Begin stereo rendering (requires VR simulator)."""
+ ...
+CAMERA_CUSTOM: int
+CAMERA_FIRST_PERSON: int
+CAMERA_FREE: int
+CAMERA_ORBITAL: int
+CAMERA_ORTHOGRAPHIC: int
+CAMERA_PERSPECTIVE: int
+CAMERA_THIRD_PERSON: int
+CHECKBOX: int
+CHECK_PADDING: int
+COLORPICKER: int
+COLOR_SELECTOR_SIZE: int
+COMBOBOX: int
+COMBO_BUTTON_SPACING: int
+COMBO_BUTTON_WIDTH: int
+CUBEMAP_LAYOUT_AUTO_DETECT: int
+CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE: int
+CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR: int
+CUBEMAP_LAYOUT_LINE_HORIZONTAL: int
+CUBEMAP_LAYOUT_LINE_VERTICAL: int
+def ChangeDirectory(dir: bytes,) -> bool:
+ """Change working directory, return true on success."""
+ ...
+def CheckCollisionBoxSphere(box: BoundingBox|list|tuple,center: Vector3|list|tuple,radius: float,) -> bool:
+ """Check collision between box and sphere."""
+ ...
+def CheckCollisionBoxes(box1: BoundingBox|list|tuple,box2: BoundingBox|list|tuple,) -> bool:
+ """Check collision between two bounding boxes."""
+ ...
+def CheckCollisionCircleLine(center: Vector2|list|tuple,radius: float,p1: Vector2|list|tuple,p2: Vector2|list|tuple,) -> bool:
+ """Check if circle collides with a line created betweeen two points [p1] and [p2]."""
+ ...
+def CheckCollisionCircleRec(center: Vector2|list|tuple,radius: float,rec: Rectangle|list|tuple,) -> bool:
+ """Check collision between circle and rectangle."""
+ ...
+def CheckCollisionCircles(center1: Vector2|list|tuple,radius1: float,center2: Vector2|list|tuple,radius2: float,) -> bool:
+ """Check collision between two circles."""
+ ...
+def CheckCollisionLines(startPos1: Vector2|list|tuple,endPos1: Vector2|list|tuple,startPos2: Vector2|list|tuple,endPos2: Vector2|list|tuple,collisionPoint: Any|list|tuple,) -> bool:
+ """Check the collision between two lines defined by two points each, returns collision point by reference."""
+ ...
+def CheckCollisionPointCircle(point: Vector2|list|tuple,center: Vector2|list|tuple,radius: float,) -> bool:
+ """Check if point is inside circle."""
+ ...
+def CheckCollisionPointLine(point: Vector2|list|tuple,p1: Vector2|list|tuple,p2: Vector2|list|tuple,threshold: int,) -> bool:
+ """Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]."""
+ ...
+def CheckCollisionPointPoly(point: Vector2|list|tuple,points: Any|list|tuple,pointCount: int,) -> bool:
+ """Check if point is within a polygon described by array of vertices."""
+ ...
+def CheckCollisionPointRec(point: Vector2|list|tuple,rec: Rectangle|list|tuple,) -> bool:
+ """Check if point is inside rectangle."""
+ ...
+def CheckCollisionPointTriangle(point: Vector2|list|tuple,p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,) -> bool:
+ """Check if point is inside a triangle."""
+ ...
+def CheckCollisionRecs(rec1: Rectangle|list|tuple,rec2: Rectangle|list|tuple,) -> bool:
+ """Check collision between two rectangles."""
+ ...
+def CheckCollisionSpheres(center1: Vector3|list|tuple,radius1: float,center2: Vector3|list|tuple,radius2: float,) -> bool:
+ """Check collision between two spheres."""
+ ...
+def Clamp(value: float,min_1: float,max_2: float,) -> float:
+ """."""
+ ...
+def ClearBackground(color: Color|list|tuple,) -> None:
+ """Set background color (framebuffer clear color)."""
+ ...
+def ClearWindowState(flags: int,) -> None:
+ """Clear window configuration state flags."""
+ ...
+def CloseAudioDevice() -> None:
+ """Close the audio device and context."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def ClosePhysics() -> None:
+ """Unitializes physics pointers and closes physics loop thread."""
+ ...
+def CloseWindow() -> None:
+ """Close window and unload OpenGL context."""
+ ...
+def CodepointToUTF8(codepoint: int,utf8Size: Any,) -> bytes:
+ """Encode one codepoint into UTF-8 byte array (array length returned as parameter)."""
+ ...
+def ColorAlpha(color: Color|list|tuple,alpha: float,) -> Color:
+ """Get color with alpha applied, alpha goes from 0.0f to 1.0f."""
+ ...
+def ColorAlphaBlend(dst: Color|list|tuple,src: Color|list|tuple,tint: Color|list|tuple,) -> Color:
+ """Get src alpha-blended into dst color with tint."""
+ ...
+def ColorBrightness(color: Color|list|tuple,factor: float,) -> Color:
+ """Get color with brightness correction, brightness factor goes from -1.0f to 1.0f."""
+ ...
+def ColorContrast(color: Color|list|tuple,contrast: float,) -> Color:
+ """Get color with contrast correction, contrast values between -1.0f and 1.0f."""
+ ...
+def ColorFromHSV(hue: float,saturation: float,value: float,) -> Color:
+ """Get a Color from HSV values, hue [0..360], saturation/value [0..1]."""
+ ...
+def ColorFromNormalized(normalized: Vector4|list|tuple,) -> Color:
+ """Get Color from normalized values [0..1]."""
+ ...
+def ColorIsEqual(col1: Color|list|tuple,col2: Color|list|tuple,) -> bool:
+ """Check if two colors are equal."""
+ ...
+def ColorLerp(color1: Color|list|tuple,color2: Color|list|tuple,factor: float,) -> Color:
+ """Get color lerp interpolation between two colors, factor [0.0f..1.0f]."""
+ ...
+def ColorNormalize(color: Color|list|tuple,) -> Vector4:
+ """Get Color normalized as float [0..1]."""
+ ...
+def ColorTint(color: Color|list|tuple,tint: Color|list|tuple,) -> Color:
+ """Get color multiplied with another color."""
+ ...
+def ColorToHSV(color: Color|list|tuple,) -> Vector3:
+ """Get HSV values for a Color, hue [0..360], saturation/value [0..1]."""
+ ...
+def ColorToInt(color: Color|list|tuple,) -> int:
+ """Get hexadecimal value for a Color (0xRRGGBBAA)."""
+ ...
+def CompressData(data: bytes,dataSize: int,compDataSize: Any,) -> bytes:
+ """Compress data (DEFLATE algorithm), memory must be MemFree()."""
+ ...
+def ComputeCRC32(data: bytes,dataSize: int,) -> int:
+ """Compute CRC32 hash code."""
+ ...
+def ComputeMD5(data: bytes,dataSize: int,) -> Any:
+ """Compute MD5 hash code, returns static int[4] (16 bytes)."""
+ ...
+def ComputeSHA1(data: bytes,dataSize: int,) -> Any:
+ """Compute SHA1 hash code, returns static int[5] (20 bytes)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def CreatePhysicsBodyCircle(pos: Vector2|list|tuple,radius: float,density: float,) -> Any:
+ """Creates a new circle physics body with generic parameters."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def CreatePhysicsBodyPolygon(pos: Vector2|list|tuple,radius: float,sides: int,density: float,) -> Any:
+ """Creates a new polygon physics body with generic parameters."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def CreatePhysicsBodyRectangle(pos: Vector2|list|tuple,width: float,height: float,density: float,) -> Any:
+ """Creates a new rectangle physics body with generic parameters."""
+ ...
+DEFAULT: int
+DROPDOWNBOX: int
+DROPDOWN_ARROW_HIDDEN: int
+DROPDOWN_ITEMS_SPACING: int
+DROPDOWN_ROLL_UP: int
+def DecodeDataBase64(data: bytes,outputSize: Any,) -> bytes:
+ """Decode Base64 string data, memory must be MemFree()."""
+ ...
+def DecompressData(compData: bytes,compDataSize: int,dataSize: Any,) -> bytes:
+ """Decompress data (DEFLATE algorithm), memory must be MemFree()."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def DestroyPhysicsBody(body: Any|list|tuple,) -> None:
+ """Unitializes and destroy a physics body."""
+ ...
+def DetachAudioMixedProcessor(processor: Any,) -> None:
+ """Detach audio stream processor from the entire audio pipeline."""
+ ...
+def DetachAudioStreamProcessor(stream: AudioStream|list|tuple,processor: Any,) -> None:
+ """Detach audio stream processor from stream."""
+ ...
+def DirectoryExists(dirPath: bytes,) -> bool:
+ """Check if a directory path exists."""
+ ...
+def DisableCursor() -> None:
+ """Disables cursor (lock cursor)."""
+ ...
+def DisableEventWaiting() -> None:
+ """Disable waiting for events on EndDrawing(), automatic events polling."""
+ ...
+def DrawBillboard(camera: Camera3D|list|tuple,texture: Texture|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a billboard texture."""
+ ...
+def DrawBillboardPro(camera: Camera3D|list|tuple,texture: Texture|list|tuple,source: Rectangle|list|tuple,position: Vector3|list|tuple,up: Vector3|list|tuple,size: Vector2|list|tuple,origin: Vector2|list|tuple,rotation: float,tint: Color|list|tuple,) -> None:
+ """Draw a billboard texture defined by source and rotation."""
+ ...
+def DrawBillboardRec(camera: Camera3D|list|tuple,texture: Texture|list|tuple,source: Rectangle|list|tuple,position: Vector3|list|tuple,size: Vector2|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a billboard texture defined by source."""
+ ...
+def DrawBoundingBox(box: BoundingBox|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw bounding box (wires)."""
+ ...
+def DrawCapsule(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,radius: float,slices: int,rings: int,color: Color|list|tuple,) -> None:
+ """Draw a capsule with the center of its sphere caps at startPos and endPos."""
+ ...
+def DrawCapsuleWires(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,radius: float,slices: int,rings: int,color: Color|list|tuple,) -> None:
+ """Draw capsule wireframe with the center of its sphere caps at startPos and endPos."""
+ ...
+def DrawCircle(centerX: int,centerY: int,radius: float,color: Color|list|tuple,) -> None:
+ """Draw a color-filled circle."""
+ ...
+def DrawCircle3D(center: Vector3|list|tuple,radius: float,rotationAxis: Vector3|list|tuple,rotationAngle: float,color: Color|list|tuple,) -> None:
+ """Draw a circle in 3D world space."""
+ ...
+def DrawCircleGradient(centerX: int,centerY: int,radius: float,inner: Color|list|tuple,outer: Color|list|tuple,) -> None:
+ """Draw a gradient-filled circle."""
+ ...
+def DrawCircleLines(centerX: int,centerY: int,radius: float,color: Color|list|tuple,) -> None:
+ """Draw circle outline."""
+ ...
+def DrawCircleLinesV(center: Vector2|list|tuple,radius: float,color: Color|list|tuple,) -> None:
+ """Draw circle outline (Vector version)."""
+ ...
+def DrawCircleSector(center: Vector2|list|tuple,radius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw a piece of a circle."""
+ ...
+def DrawCircleSectorLines(center: Vector2|list|tuple,radius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw circle sector outline."""
+ ...
+def DrawCircleV(center: Vector2|list|tuple,radius: float,color: Color|list|tuple,) -> None:
+ """Draw a color-filled circle (Vector version)."""
+ ...
+def DrawCube(position: Vector3|list|tuple,width: float,height: float,length: float,color: Color|list|tuple,) -> None:
+ """Draw cube."""
+ ...
+def DrawCubeV(position: Vector3|list|tuple,size: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw cube (Vector version)."""
+ ...
+def DrawCubeWires(position: Vector3|list|tuple,width: float,height: float,length: float,color: Color|list|tuple,) -> None:
+ """Draw cube wires."""
+ ...
+def DrawCubeWiresV(position: Vector3|list|tuple,size: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw cube wires (Vector version)."""
+ ...
+def DrawCylinder(position: Vector3|list|tuple,radiusTop: float,radiusBottom: float,height: float,slices: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder/cone."""
+ ...
+def DrawCylinderEx(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,startRadius: float,endRadius: float,sides: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder with base at startPos and top at endPos."""
+ ...
+def DrawCylinderWires(position: Vector3|list|tuple,radiusTop: float,radiusBottom: float,height: float,slices: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder/cone wires."""
+ ...
+def DrawCylinderWiresEx(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,startRadius: float,endRadius: float,sides: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder wires with base at startPos and top at endPos."""
+ ...
+def DrawEllipse(centerX: int,centerY: int,radiusH: float,radiusV: float,color: Color|list|tuple,) -> None:
+ """Draw ellipse."""
+ ...
+def DrawEllipseLines(centerX: int,centerY: int,radiusH: float,radiusV: float,color: Color|list|tuple,) -> None:
+ """Draw ellipse outline."""
+ ...
+def DrawFPS(posX: int,posY: int,) -> None:
+ """Draw current FPS."""
+ ...
+def DrawGrid(slices: int,spacing: float,) -> None:
+ """Draw a grid (centered at (0, 0, 0))."""
+ ...
+def DrawLine(startPosX: int,startPosY: int,endPosX: int,endPosY: int,color: Color|list|tuple,) -> None:
+ """Draw a line."""
+ ...
+def DrawLine3D(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a line in 3D world space."""
+ ...
+def DrawLineBezier(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw line segment cubic-bezier in-out interpolation."""
+ ...
+def DrawLineEx(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw a line (using triangles/quads)."""
+ ...
+def DrawLineStrip(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw lines sequence (using gl lines)."""
+ ...
+def DrawLineV(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a line (using gl lines)."""
+ ...
+def DrawMesh(mesh: Mesh|list|tuple,material: Material|list|tuple,transform: Matrix|list|tuple,) -> None:
+ """Draw a 3d mesh with material and transform."""
+ ...
+def DrawMeshInstanced(mesh: Mesh|list|tuple,material: Material|list|tuple,transforms: Any|list|tuple,instances: int,) -> None:
+ """Draw multiple mesh instances with material and different transforms."""
+ ...
+def DrawModel(model: Model|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a model (with texture if set)."""
+ ...
+def DrawModelEx(model: Model|list|tuple,position: Vector3|list|tuple,rotationAxis: Vector3|list|tuple,rotationAngle: float,scale: Vector3|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a model with extended parameters."""
+ ...
+def DrawModelPoints(model: Model|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a model as points."""
+ ...
+def DrawModelPointsEx(model: Model|list|tuple,position: Vector3|list|tuple,rotationAxis: Vector3|list|tuple,rotationAngle: float,scale: Vector3|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a model as points with extended parameters."""
+ ...
+def DrawModelWires(model: Model|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a model wires (with texture if set)."""
+ ...
+def DrawModelWiresEx(model: Model|list|tuple,position: Vector3|list|tuple,rotationAxis: Vector3|list|tuple,rotationAngle: float,scale: Vector3|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a model wires (with texture if set) with extended parameters."""
+ ...
+def DrawPixel(posX: int,posY: int,color: Color|list|tuple,) -> None:
+ """Draw a pixel using geometry [Can be slow, use with care]."""
+ ...
+def DrawPixelV(position: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a pixel using geometry (Vector version) [Can be slow, use with care]."""
+ ...
+def DrawPlane(centerPos: Vector3|list|tuple,size: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a plane XZ."""
+ ...
+def DrawPoint3D(position: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a point in 3D space, actually a small line."""
+ ...
+def DrawPoly(center: Vector2|list|tuple,sides: int,radius: float,rotation: float,color: Color|list|tuple,) -> None:
+ """Draw a regular polygon (Vector version)."""
+ ...
+def DrawPolyLines(center: Vector2|list|tuple,sides: int,radius: float,rotation: float,color: Color|list|tuple,) -> None:
+ """Draw a polygon outline of n sides."""
+ ...
+def DrawPolyLinesEx(center: Vector2|list|tuple,sides: int,radius: float,rotation: float,lineThick: float,color: Color|list|tuple,) -> None:
+ """Draw a polygon outline of n sides with extended parameters."""
+ ...
+def DrawRay(ray: Ray|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a ray line."""
+ ...
+def DrawRectangle(posX: int,posY: int,width: int,height: int,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle."""
+ ...
+def DrawRectangleGradientEx(rec: Rectangle|list|tuple,topLeft: Color|list|tuple,bottomLeft: Color|list|tuple,topRight: Color|list|tuple,bottomRight: Color|list|tuple,) -> None:
+ """Draw a gradient-filled rectangle with custom vertex colors."""
+ ...
+def DrawRectangleGradientH(posX: int,posY: int,width: int,height: int,left: Color|list|tuple,right: Color|list|tuple,) -> None:
+ """Draw a horizontal-gradient-filled rectangle."""
+ ...
+def DrawRectangleGradientV(posX: int,posY: int,width: int,height: int,top: Color|list|tuple,bottom: Color|list|tuple,) -> None:
+ """Draw a vertical-gradient-filled rectangle."""
+ ...
+def DrawRectangleLines(posX: int,posY: int,width: int,height: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle outline."""
+ ...
+def DrawRectangleLinesEx(rec: Rectangle|list|tuple,lineThick: float,color: Color|list|tuple,) -> None:
+ """Draw rectangle outline with extended parameters."""
+ ...
+def DrawRectanglePro(rec: Rectangle|list|tuple,origin: Vector2|list|tuple,rotation: float,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle with pro parameters."""
+ ...
+def DrawRectangleRec(rec: Rectangle|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle."""
+ ...
+def DrawRectangleRounded(rec: Rectangle|list|tuple,roundness: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle with rounded edges."""
+ ...
+def DrawRectangleRoundedLines(rec: Rectangle|list|tuple,roundness: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle lines with rounded edges."""
+ ...
+def DrawRectangleRoundedLinesEx(rec: Rectangle|list|tuple,roundness: float,segments: int,lineThick: float,color: Color|list|tuple,) -> None:
+ """Draw rectangle with rounded edges outline."""
+ ...
+def DrawRectangleV(position: Vector2|list|tuple,size: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle (Vector version)."""
+ ...
+def DrawRing(center: Vector2|list|tuple,innerRadius: float,outerRadius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw ring."""
+ ...
+def DrawRingLines(center: Vector2|list|tuple,innerRadius: float,outerRadius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw ring outline."""
+ ...
+def DrawSphere(centerPos: Vector3|list|tuple,radius: float,color: Color|list|tuple,) -> None:
+ """Draw sphere."""
+ ...
+def DrawSphereEx(centerPos: Vector3|list|tuple,radius: float,rings: int,slices: int,color: Color|list|tuple,) -> None:
+ """Draw sphere with extended parameters."""
+ ...
+def DrawSphereWires(centerPos: Vector3|list|tuple,radius: float,rings: int,slices: int,color: Color|list|tuple,) -> None:
+ """Draw sphere wires."""
+ ...
+def DrawSplineBasis(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: B-Spline, minimum 4 points."""
+ ...
+def DrawSplineBezierCubic(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]."""
+ ...
+def DrawSplineBezierQuadratic(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]."""
+ ...
+def DrawSplineCatmullRom(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Catmull-Rom, minimum 4 points."""
+ ...
+def DrawSplineLinear(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Linear, minimum 2 points."""
+ ...
+def DrawSplineSegmentBasis(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: B-Spline, 4 points."""
+ ...
+def DrawSplineSegmentBezierCubic(p1: Vector2|list|tuple,c2: Vector2|list|tuple,c3: Vector2|list|tuple,p4: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Cubic Bezier, 2 points, 2 control points."""
+ ...
+def DrawSplineSegmentBezierQuadratic(p1: Vector2|list|tuple,c2: Vector2|list|tuple,p3: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Quadratic Bezier, 2 points, 1 control point."""
+ ...
+def DrawSplineSegmentCatmullRom(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Catmull-Rom, 4 points."""
+ ...
+def DrawSplineSegmentLinear(p1: Vector2|list|tuple,p2: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Linear, 2 points."""
+ ...
+def DrawText(text: bytes,posX: int,posY: int,fontSize: int,color: Color|list|tuple,) -> None:
+ """Draw text (using default font)."""
+ ...
+def DrawTextCodepoint(font: Font|list|tuple,codepoint: int,position: Vector2|list|tuple,fontSize: float,tint: Color|list|tuple,) -> None:
+ """Draw one character (codepoint)."""
+ ...
+def DrawTextCodepoints(font: Font|list|tuple,codepoints: Any,codepointCount: int,position: Vector2|list|tuple,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw multiple character (codepoint)."""
+ ...
+def DrawTextEx(font: Font|list|tuple,text: bytes,position: Vector2|list|tuple,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw text using font and additional parameters."""
+ ...
+def DrawTextPro(font: Font|list|tuple,text: bytes,position: Vector2|list|tuple,origin: Vector2|list|tuple,rotation: float,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw text using Font and pro parameters (rotation)."""
+ ...
+def DrawTexture(texture: Texture|list|tuple,posX: int,posY: int,tint: Color|list|tuple,) -> None:
+ """Draw a Texture2D."""
+ ...
+def DrawTextureEx(texture: Texture|list|tuple,position: Vector2|list|tuple,rotation: float,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a Texture2D with extended parameters."""
+ ...
+def DrawTextureNPatch(texture: Texture|list|tuple,nPatchInfo: NPatchInfo|list|tuple,dest: Rectangle|list|tuple,origin: Vector2|list|tuple,rotation: float,tint: Color|list|tuple,) -> None:
+ """Draws a texture (or part of it) that stretches or shrinks nicely."""
+ ...
+def DrawTexturePro(texture: Texture|list|tuple,source: Rectangle|list|tuple,dest: Rectangle|list|tuple,origin: Vector2|list|tuple,rotation: float,tint: Color|list|tuple,) -> None:
+ """Draw a part of a texture defined by a rectangle with 'pro' parameters."""
+ ...
+def DrawTextureRec(texture: Texture|list|tuple,source: Rectangle|list|tuple,position: Vector2|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a part of a texture defined by a rectangle."""
+ ...
+def DrawTextureV(texture: Texture|list|tuple,position: Vector2|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a Texture2D with position defined as Vector2."""
+ ...
+def DrawTriangle(v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled triangle (vertex in counter-clockwise order!)."""
+ ...
+def DrawTriangle3D(v1: Vector3|list|tuple,v2: Vector3|list|tuple,v3: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled triangle (vertex in counter-clockwise order!)."""
+ ...
+def DrawTriangleFan(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle fan defined by points (first vertex is the center)."""
+ ...
+def DrawTriangleLines(v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw triangle outline (vertex in counter-clockwise order!)."""
+ ...
+def DrawTriangleStrip(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle strip defined by points."""
+ ...
+def DrawTriangleStrip3D(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle strip defined by points."""
+ ...
+def EnableCursor() -> None:
+ """Enables cursor (unlock cursor)."""
+ ...
+def EnableEventWaiting() -> None:
+ """Enable waiting for events on EndDrawing(), no automatic event polling."""
+ ...
+def EncodeDataBase64(data: bytes,dataSize: int,outputSize: Any,) -> bytes:
+ """Encode data to Base64 string, memory must be MemFree()."""
+ ...
+def EndBlendMode() -> None:
+ """End blending mode (reset to default: alpha blending)."""
+ ...
+def EndDrawing() -> None:
+ """End canvas drawing and swap buffers (double buffering)."""
+ ...
+def EndMode2D() -> None:
+ """Ends 2D mode with custom camera."""
+ ...
+def EndMode3D() -> None:
+ """Ends 3D mode and returns to default 2D orthographic mode."""
+ ...
+def EndScissorMode() -> None:
+ """End scissor mode."""
+ ...
+def EndShaderMode() -> None:
+ """End custom shader drawing (use default shader)."""
+ ...
+def EndTextureMode() -> None:
+ """Ends drawing to render texture."""
+ ...
+def EndVrStereoMode() -> None:
+ """End stereo rendering (requires VR simulator)."""
+ ...
+def ExportAutomationEventList(list_0: AutomationEventList|list|tuple,fileName: bytes,) -> bool:
+ """Export automation events list as text file."""
+ ...
+def ExportDataAsCode(data: bytes,dataSize: int,fileName: bytes,) -> bool:
+ """Export data to code (.h), returns true on success."""
+ ...
+def ExportFontAsCode(font: Font|list|tuple,fileName: bytes,) -> bool:
+ """Export font as code file, returns true on success."""
+ ...
+def ExportImage(image: Image|list|tuple,fileName: bytes,) -> bool:
+ """Export image data to file, returns true on success."""
+ ...
+def ExportImageAsCode(image: Image|list|tuple,fileName: bytes,) -> bool:
+ """Export image as code file defining an array of bytes, returns true on success."""
+ ...
+def ExportImageToMemory(image: Image|list|tuple,fileType: bytes,fileSize: Any,) -> bytes:
+ """Export image to memory buffer."""
+ ...
+def ExportMesh(mesh: Mesh|list|tuple,fileName: bytes,) -> bool:
+ """Export mesh data to file, returns true on success."""
+ ...
+def ExportMeshAsCode(mesh: Mesh|list|tuple,fileName: bytes,) -> bool:
+ """Export mesh as code file (.h) defining multiple arrays of vertex attributes."""
+ ...
+def ExportWave(wave: Wave|list|tuple,fileName: bytes,) -> bool:
+ """Export wave data to file, returns true on success."""
+ ...
+def ExportWaveAsCode(wave: Wave|list|tuple,fileName: bytes,) -> bool:
+ """Export wave sample data to code (.h), returns true on success."""
+ ...
+FLAG_BORDERLESS_WINDOWED_MODE: int
+FLAG_FULLSCREEN_MODE: int
+FLAG_INTERLACED_HINT: int
+FLAG_MSAA_4X_HINT: int
+FLAG_VSYNC_HINT: int
+FLAG_WINDOW_ALWAYS_RUN: int
+FLAG_WINDOW_HIDDEN: int
+FLAG_WINDOW_HIGHDPI: int
+FLAG_WINDOW_MAXIMIZED: int
+FLAG_WINDOW_MINIMIZED: int
+FLAG_WINDOW_MOUSE_PASSTHROUGH: int
+FLAG_WINDOW_RESIZABLE: int
+FLAG_WINDOW_TOPMOST: int
+FLAG_WINDOW_TRANSPARENT: int
+FLAG_WINDOW_UNDECORATED: int
+FLAG_WINDOW_UNFOCUSED: int
+FONT_BITMAP: int
+FONT_DEFAULT: int
+FONT_SDF: int
+def Fade(color: Color|list|tuple,alpha: float,) -> Color:
+ """Get color with alpha applied, alpha goes from 0.0f to 1.0f."""
+ ...
+def FileExists(fileName: bytes,) -> bool:
+ """Check if file exists."""
+ ...
+def FloatEquals(x: float,y: float,) -> int:
+ """."""
+ ...
+GAMEPAD_AXIS_LEFT_TRIGGER: int
+GAMEPAD_AXIS_LEFT_X: int
+GAMEPAD_AXIS_LEFT_Y: int
+GAMEPAD_AXIS_RIGHT_TRIGGER: int
+GAMEPAD_AXIS_RIGHT_X: int
+GAMEPAD_AXIS_RIGHT_Y: int
+GAMEPAD_BUTTON_LEFT_FACE_DOWN: int
+GAMEPAD_BUTTON_LEFT_FACE_LEFT: int
+GAMEPAD_BUTTON_LEFT_FACE_RIGHT: int
+GAMEPAD_BUTTON_LEFT_FACE_UP: int
+GAMEPAD_BUTTON_LEFT_THUMB: int
+GAMEPAD_BUTTON_LEFT_TRIGGER_1: int
+GAMEPAD_BUTTON_LEFT_TRIGGER_2: int
+GAMEPAD_BUTTON_MIDDLE: int
+GAMEPAD_BUTTON_MIDDLE_LEFT: int
+GAMEPAD_BUTTON_MIDDLE_RIGHT: int
+GAMEPAD_BUTTON_RIGHT_FACE_DOWN: int
+GAMEPAD_BUTTON_RIGHT_FACE_LEFT: int
+GAMEPAD_BUTTON_RIGHT_FACE_RIGHT: int
+GAMEPAD_BUTTON_RIGHT_FACE_UP: int
+GAMEPAD_BUTTON_RIGHT_THUMB: int
+GAMEPAD_BUTTON_RIGHT_TRIGGER_1: int
+GAMEPAD_BUTTON_RIGHT_TRIGGER_2: int
+GAMEPAD_BUTTON_UNKNOWN: int
+GESTURE_DOUBLETAP: int
+GESTURE_DRAG: int
+GESTURE_HOLD: int
+GESTURE_NONE: int
+GESTURE_PINCH_IN: int
+GESTURE_PINCH_OUT: int
+GESTURE_SWIPE_DOWN: int
+GESTURE_SWIPE_LEFT: int
+GESTURE_SWIPE_RIGHT: int
+GESTURE_SWIPE_UP: int
+GESTURE_TAP: int
+GROUP_PADDING: int
+def GenImageCellular(width: int,height: int,tileSize: int,) -> Image:
+ """Generate image: cellular algorithm, bigger tileSize means bigger cells."""
+ ...
+def GenImageChecked(width: int,height: int,checksX: int,checksY: int,col1: Color|list|tuple,col2: Color|list|tuple,) -> Image:
+ """Generate image: checked."""
+ ...
+def GenImageColor(width: int,height: int,color: Color|list|tuple,) -> Image:
+ """Generate image: plain color."""
+ ...
+def GenImageFontAtlas(glyphs: Any|list|tuple,glyphRecs: Any|list|tuple,glyphCount: int,fontSize: int,padding: int,packMethod: int,) -> Image:
+ """Generate image font atlas using chars info."""
+ ...
+def GenImageGradientLinear(width: int,height: int,direction: int,start: Color|list|tuple,end: Color|list|tuple,) -> Image:
+ """Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient."""
+ ...
+def GenImageGradientRadial(width: int,height: int,density: float,inner: Color|list|tuple,outer: Color|list|tuple,) -> Image:
+ """Generate image: radial gradient."""
+ ...
+def GenImageGradientSquare(width: int,height: int,density: float,inner: Color|list|tuple,outer: Color|list|tuple,) -> Image:
+ """Generate image: square gradient."""
+ ...
+def GenImagePerlinNoise(width: int,height: int,offsetX: int,offsetY: int,scale: float,) -> Image:
+ """Generate image: perlin noise."""
+ ...
+def GenImageText(width: int,height: int,text: bytes,) -> Image:
+ """Generate image: grayscale image from text data."""
+ ...
+def GenImageWhiteNoise(width: int,height: int,factor: float,) -> Image:
+ """Generate image: white noise."""
+ ...
+def GenMeshCone(radius: float,height: float,slices: int,) -> Mesh:
+ """Generate cone/pyramid mesh."""
+ ...
+def GenMeshCube(width: float,height: float,length: float,) -> Mesh:
+ """Generate cuboid mesh."""
+ ...
+def GenMeshCubicmap(cubicmap: Image|list|tuple,cubeSize: Vector3|list|tuple,) -> Mesh:
+ """Generate cubes-based map mesh from image data."""
+ ...
+def GenMeshCylinder(radius: float,height: float,slices: int,) -> Mesh:
+ """Generate cylinder mesh."""
+ ...
+def GenMeshHeightmap(heightmap: Image|list|tuple,size: Vector3|list|tuple,) -> Mesh:
+ """Generate heightmap mesh from image data."""
+ ...
+def GenMeshHemiSphere(radius: float,rings: int,slices: int,) -> Mesh:
+ """Generate half-sphere mesh (no bottom cap)."""
+ ...
+def GenMeshKnot(radius: float,size: float,radSeg: int,sides: int,) -> Mesh:
+ """Generate trefoil knot mesh."""
+ ...
+def GenMeshPlane(width: float,length: float,resX: int,resZ: int,) -> Mesh:
+ """Generate plane mesh (with subdivisions)."""
+ ...
+def GenMeshPoly(sides: int,radius: float,) -> Mesh:
+ """Generate polygonal mesh."""
+ ...
+def GenMeshSphere(radius: float,rings: int,slices: int,) -> Mesh:
+ """Generate sphere mesh (standard sphere)."""
+ ...
+def GenMeshTangents(mesh: Any|list|tuple,) -> None:
+ """Compute mesh tangents."""
+ ...
+def GenMeshTorus(radius: float,size: float,radSeg: int,sides: int,) -> Mesh:
+ """Generate torus mesh."""
+ ...
+def GenTextureMipmaps(texture: Any|list|tuple,) -> None:
+ """Generate GPU mipmaps for a texture."""
+ ...
+def GetApplicationDirectory() -> bytes:
+ """Get the directory of the running application (uses static string)."""
+ ...
+def GetCameraMatrix(camera: Camera3D|list|tuple,) -> Matrix:
+ """Get camera transform matrix (view matrix)."""
+ ...
+def GetCameraMatrix2D(camera: Camera2D|list|tuple,) -> Matrix:
+ """Get camera 2d transform matrix."""
+ ...
+def GetCharPressed() -> int:
+ """Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty."""
+ ...
+def GetClipboardImage() -> Image:
+ """Get clipboard image content."""
+ ...
+def GetClipboardText() -> bytes:
+ """Get clipboard text content."""
+ ...
+def GetCodepoint(text: bytes,codepointSize: Any,) -> int:
+ """Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure."""
+ ...
+def GetCodepointCount(text: bytes,) -> int:
+ """Get total number of codepoints in a UTF-8 encoded string."""
+ ...
+def GetCodepointNext(text: bytes,codepointSize: Any,) -> int:
+ """Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure."""
+ ...
+def GetCodepointPrevious(text: bytes,codepointSize: Any,) -> int:
+ """Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure."""
+ ...
+def GetCollisionRec(rec1: Rectangle|list|tuple,rec2: Rectangle|list|tuple,) -> Rectangle:
+ """Get collision rectangle for two rectangles collision."""
+ ...
+def GetColor(hexValue: int,) -> Color:
+ """Get Color structure from hexadecimal value."""
+ ...
+def GetCurrentMonitor() -> int:
+ """Get current monitor where window is placed."""
+ ...
+def GetDirectoryPath(filePath: bytes,) -> bytes:
+ """Get full path for a given fileName with path (uses static string)."""
+ ...
+def GetFPS() -> int:
+ """Get current FPS."""
+ ...
+def GetFileExtension(fileName: bytes,) -> bytes:
+ """Get pointer to extension for a filename string (includes dot: '.png')."""
+ ...
+def GetFileLength(fileName: bytes,) -> int:
+ """Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)."""
+ ...
+def GetFileModTime(fileName: bytes,) -> int:
+ """Get file modification time (last write time)."""
+ ...
+def GetFileName(filePath: bytes,) -> bytes:
+ """Get pointer to filename for a path string."""
+ ...
+def GetFileNameWithoutExt(filePath: bytes,) -> bytes:
+ """Get filename string without extension (uses static string)."""
+ ...
+def GetFontDefault() -> Font:
+ """Get the default Font."""
+ ...
+def GetFrameTime() -> float:
+ """Get time in seconds for last frame drawn (delta time)."""
+ ...
+def GetGamepadAxisCount(gamepad: int,) -> int:
+ """Get gamepad axis count for a gamepad."""
+ ...
+def GetGamepadAxisMovement(gamepad: int,axis: int,) -> float:
+ """Get axis movement value for a gamepad axis."""
+ ...
+def GetGamepadButtonPressed() -> int:
+ """Get the last gamepad button pressed."""
+ ...
+def GetGamepadName(gamepad: int,) -> bytes:
+ """Get gamepad internal name id."""
+ ...
+def GetGestureDetected() -> int:
+ """Get latest detected gesture."""
+ ...
+def GetGestureDragAngle() -> float:
+ """Get gesture drag angle."""
+ ...
+def GetGestureDragVector() -> Vector2:
+ """Get gesture drag vector."""
+ ...
+def GetGestureHoldDuration() -> float:
+ """Get gesture hold time in seconds."""
+ ...
+def GetGesturePinchAngle() -> float:
+ """Get gesture pinch angle."""
+ ...
+def GetGesturePinchVector() -> Vector2:
+ """Get gesture pinch delta."""
+ ...
+def GetGlyphAtlasRec(font: Font|list|tuple,codepoint: int,) -> Rectangle:
+ """Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found."""
+ ...
+def GetGlyphIndex(font: Font|list|tuple,codepoint: int,) -> int:
+ """Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found."""
+ ...
+def GetGlyphInfo(font: Font|list|tuple,codepoint: int,) -> GlyphInfo:
+ """Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found."""
+ ...
+def GetImageAlphaBorder(image: Image|list|tuple,threshold: float,) -> Rectangle:
+ """Get image alpha border rectangle."""
+ ...
+def GetImageColor(image: Image|list|tuple,x: int,y: int,) -> Color:
+ """Get image pixel color at (x, y) position."""
+ ...
+def GetKeyPressed() -> int:
+ """Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty."""
+ ...
+def GetMasterVolume() -> float:
+ """Get master volume (listener)."""
+ ...
+def GetMeshBoundingBox(mesh: Mesh|list|tuple,) -> BoundingBox:
+ """Compute mesh bounding box limits."""
+ ...
+def GetModelBoundingBox(model: Model|list|tuple,) -> BoundingBox:
+ """Compute model bounding box limits (considers all meshes)."""
+ ...
+def GetMonitorCount() -> int:
+ """Get number of connected monitors."""
+ ...
+def GetMonitorHeight(monitor: int,) -> int:
+ """Get specified monitor height (current video mode used by monitor)."""
+ ...
+def GetMonitorName(monitor: int,) -> bytes:
+ """Get the human-readable, UTF-8 encoded name of the specified monitor."""
+ ...
+def GetMonitorPhysicalHeight(monitor: int,) -> int:
+ """Get specified monitor physical height in millimetres."""
+ ...
+def GetMonitorPhysicalWidth(monitor: int,) -> int:
+ """Get specified monitor physical width in millimetres."""
+ ...
+def GetMonitorPosition(monitor: int,) -> Vector2:
+ """Get specified monitor position."""
+ ...
+def GetMonitorRefreshRate(monitor: int,) -> int:
+ """Get specified monitor refresh rate."""
+ ...
+def GetMonitorWidth(monitor: int,) -> int:
+ """Get specified monitor width (current video mode used by monitor)."""
+ ...
+def GetMouseDelta() -> Vector2:
+ """Get mouse delta between frames."""
+ ...
+def GetMousePosition() -> Vector2:
+ """Get mouse position XY."""
+ ...
+def GetMouseWheelMove() -> float:
+ """Get mouse wheel movement for X or Y, whichever is larger."""
+ ...
+def GetMouseWheelMoveV() -> Vector2:
+ """Get mouse wheel movement for both X and Y."""
+ ...
+def GetMouseX() -> int:
+ """Get mouse position X."""
+ ...
+def GetMouseY() -> int:
+ """Get mouse position Y."""
+ ...
+def GetMusicTimeLength(music: Music|list|tuple,) -> float:
+ """Get music time length (in seconds)."""
+ ...
+def GetMusicTimePlayed(music: Music|list|tuple,) -> float:
+ """Get current music time played (in seconds)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsBodiesCount() -> int:
+ """Returns the current amount of created physics bodies."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsBody(index: int,) -> Any:
+ """Returns a physics body of the bodies pool at a specific index."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsShapeType(index: int,) -> int:
+ """Returns the physics body shape type (PHYSICS_CIRCLE or PHYSICS_POLYGON)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsShapeVertex(body: Any|list|tuple,vertex: int,) -> Vector2:
+ """Returns transformed position of a body shape (body position + vertex transformed position)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsShapeVerticesCount(index: int,) -> int:
+ """Returns the amount of vertices of a physics body shape."""
+ ...
+def GetPixelColor(srcPtr: Any,format: int,) -> Color:
+ """Get Color from a source pixel pointer of certain format."""
+ ...
+def GetPixelDataSize(width: int,height: int,format: int,) -> int:
+ """Get pixel data size in bytes for certain format."""
+ ...
+def GetPrevDirectoryPath(dirPath: bytes,) -> bytes:
+ """Get previous directory path for a given path (uses static string)."""
+ ...
+def GetRandomValue(min_0: int,max_1: int,) -> int:
+ """Get a random value between min and max (both included)."""
+ ...
+def GetRayCollisionBox(ray: Ray|list|tuple,box: BoundingBox|list|tuple,) -> RayCollision:
+ """Get collision info between ray and box."""
+ ...
+def GetRayCollisionMesh(ray: Ray|list|tuple,mesh: Mesh|list|tuple,transform: Matrix|list|tuple,) -> RayCollision:
+ """Get collision info between ray and mesh."""
+ ...
+def GetRayCollisionQuad(ray: Ray|list|tuple,p1: Vector3|list|tuple,p2: Vector3|list|tuple,p3: Vector3|list|tuple,p4: Vector3|list|tuple,) -> RayCollision:
+ """Get collision info between ray and quad."""
+ ...
+def GetRayCollisionSphere(ray: Ray|list|tuple,center: Vector3|list|tuple,radius: float,) -> RayCollision:
+ """Get collision info between ray and sphere."""
+ ...
+def GetRayCollisionTriangle(ray: Ray|list|tuple,p1: Vector3|list|tuple,p2: Vector3|list|tuple,p3: Vector3|list|tuple,) -> RayCollision:
+ """Get collision info between ray and triangle."""
+ ...
+def GetRenderHeight() -> int:
+ """Get current render height (it considers HiDPI)."""
+ ...
+def GetRenderWidth() -> int:
+ """Get current render width (it considers HiDPI)."""
+ ...
+def GetScreenHeight() -> int:
+ """Get current screen height."""
+ ...
+def GetScreenToWorld2D(position: Vector2|list|tuple,camera: Camera2D|list|tuple,) -> Vector2:
+ """Get the world space position for a 2d camera screen space position."""
+ ...
+def GetScreenToWorldRay(position: Vector2|list|tuple,camera: Camera3D|list|tuple,) -> Ray:
+ """Get a ray trace from screen position (i.e mouse)."""
+ ...
+def GetScreenToWorldRayEx(position: Vector2|list|tuple,camera: Camera3D|list|tuple,width: int,height: int,) -> Ray:
+ """Get a ray trace from screen position (i.e mouse) in a viewport."""
+ ...
+def GetScreenWidth() -> int:
+ """Get current screen width."""
+ ...
+def GetShaderLocation(shader: Shader|list|tuple,uniformName: bytes,) -> int:
+ """Get shader uniform location."""
+ ...
+def GetShaderLocationAttrib(shader: Shader|list|tuple,attribName: bytes,) -> int:
+ """Get shader attribute location."""
+ ...
+def GetShapesTexture() -> Texture:
+ """Get texture that is used for shapes drawing."""
+ ...
+def GetShapesTextureRectangle() -> Rectangle:
+ """Get texture source rectangle that is used for shapes drawing."""
+ ...
+def GetSplinePointBasis(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: B-Spline."""
+ ...
+def GetSplinePointBezierCubic(p1: Vector2|list|tuple,c2: Vector2|list|tuple,c3: Vector2|list|tuple,p4: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Cubic Bezier."""
+ ...
+def GetSplinePointBezierQuad(p1: Vector2|list|tuple,c2: Vector2|list|tuple,p3: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Quadratic Bezier."""
+ ...
+def GetSplinePointCatmullRom(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Catmull-Rom."""
+ ...
+def GetSplinePointLinear(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Linear."""
+ ...
+def GetTime() -> float:
+ """Get elapsed time in seconds since InitWindow()."""
+ ...
+def GetTouchPointCount() -> int:
+ """Get number of touch points."""
+ ...
+def GetTouchPointId(index: int,) -> int:
+ """Get touch point identifier for given index."""
+ ...
+def GetTouchPosition(index: int,) -> Vector2:
+ """Get touch position XY for a touch point index (relative to screen size)."""
+ ...
+def GetTouchX() -> int:
+ """Get touch position X for touch point 0 (relative to screen size)."""
+ ...
+def GetTouchY() -> int:
+ """Get touch position Y for touch point 0 (relative to screen size)."""
+ ...
+def GetWindowHandle() -> Any:
+ """Get native window handle."""
+ ...
+def GetWindowPosition() -> Vector2:
+ """Get window position XY on monitor."""
+ ...
+def GetWindowScaleDPI() -> Vector2:
+ """Get window scale DPI factor."""
+ ...
+def GetWorkingDirectory() -> bytes:
+ """Get current working directory (uses static string)."""
+ ...
+def GetWorldToScreen(position: Vector3|list|tuple,camera: Camera3D|list|tuple,) -> Vector2:
+ """Get the screen space position for a 3d world space position."""
+ ...
+def GetWorldToScreen2D(position: Vector2|list|tuple,camera: Camera2D|list|tuple,) -> Vector2:
+ """Get the screen space position for a 2d camera world space position."""
+ ...
+def GetWorldToScreenEx(position: Vector3|list|tuple,camera: Camera3D|list|tuple,width: int,height: int,) -> Vector2:
+ """Get size position for a 3d world space position."""
+ ...
+def GuiButton(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Button control, returns true when clicked."""
+ ...
+def GuiCheckBox(bounds: Rectangle|list|tuple,text: bytes,checked: Any,) -> int:
+ """Check Box control, returns true when active."""
+ ...
+def GuiColorBarAlpha(bounds: Rectangle|list|tuple,text: bytes,alpha: Any,) -> int:
+ """Color Bar Alpha control."""
+ ...
+def GuiColorBarHue(bounds: Rectangle|list|tuple,text: bytes,value: Any,) -> int:
+ """Color Bar Hue control."""
+ ...
+def GuiColorPanel(bounds: Rectangle|list|tuple,text: bytes,color: Any|list|tuple,) -> int:
+ """Color Panel control."""
+ ...
+def GuiColorPanelHSV(bounds: Rectangle|list|tuple,text: bytes,colorHsv: Any|list|tuple,) -> int:
+ """Color Panel control that updates Hue-Saturation-Value color value, used by GuiColorPickerHSV()."""
+ ...
+def GuiColorPicker(bounds: Rectangle|list|tuple,text: bytes,color: Any|list|tuple,) -> int:
+ """Color Picker control (multiple color controls)."""
+ ...
+def GuiColorPickerHSV(bounds: Rectangle|list|tuple,text: bytes,colorHsv: Any|list|tuple,) -> int:
+ """Color Picker control that avoids conversion to RGB on each call (multiple color controls)."""
+ ...
+def GuiComboBox(bounds: Rectangle|list|tuple,text: bytes,active: Any,) -> int:
+ """Combo Box control."""
+ ...
+def GuiDisable() -> None:
+ """Disable gui controls (global state)."""
+ ...
+def GuiDisableTooltip() -> None:
+ """Disable gui tooltips (global state)."""
+ ...
+def GuiDrawIcon(iconId: int,posX: int,posY: int,pixelSize: int,color: Color|list|tuple,) -> None:
+ """Draw icon using pixel size at specified position."""
+ ...
+def GuiDropdownBox(bounds: Rectangle|list|tuple,text: bytes,active: Any,editMode: bool,) -> int:
+ """Dropdown Box control."""
+ ...
+def GuiDummyRec(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Dummy control for placeholders."""
+ ...
+def GuiEnable() -> None:
+ """Enable gui controls (global state)."""
+ ...
+def GuiEnableTooltip() -> None:
+ """Enable gui tooltips (global state)."""
+ ...
+def GuiGetFont() -> Font:
+ """Get gui custom font (global state)."""
+ ...
+def GuiGetIcons() -> Any:
+ """Get raygui icons data pointer."""
+ ...
+def GuiGetState() -> int:
+ """Get gui state (global state)."""
+ ...
+def GuiGetStyle(control: int,property: int,) -> int:
+ """Get one style property."""
+ ...
+def GuiGrid(bounds: Rectangle|list|tuple,text: bytes,spacing: float,subdivs: int,mouseCell: Any|list|tuple,) -> int:
+ """Grid control."""
+ ...
+def GuiGroupBox(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Group Box control with text name."""
+ ...
+def GuiIconText(iconId: int,text: bytes,) -> bytes:
+ """Get text with icon id prepended (if supported)."""
+ ...
+def GuiIsLocked() -> bool:
+ """Check if gui is locked (global state)."""
+ ...
+def GuiLabel(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Label control."""
+ ...
+def GuiLabelButton(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Label button control, returns true when clicked."""
+ ...
+def GuiLine(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Line separator control, could contain text."""
+ ...
+def GuiListView(bounds: Rectangle|list|tuple,text: bytes,scrollIndex: Any,active: Any,) -> int:
+ """List View control."""
+ ...
+def GuiListViewEx(bounds: Rectangle|list|tuple,text: list[bytes],count: int,scrollIndex: Any,active: Any,focus: Any,) -> int:
+ """List View with extended parameters."""
+ ...
+def GuiLoadIcons(fileName: bytes,loadIconsName: bool,) -> list[bytes]:
+ """Load raygui icons file (.rgi) into internal icons data."""
+ ...
+def GuiLoadStyle(fileName: bytes,) -> None:
+ """Load style file over global style variable (.rgs)."""
+ ...
+def GuiLoadStyleDefault() -> None:
+ """Load style default over global style."""
+ ...
+def GuiLock() -> None:
+ """Lock gui controls (global state)."""
+ ...
+def GuiMessageBox(bounds: Rectangle|list|tuple,title: bytes,message: bytes,buttons: bytes,) -> int:
+ """Message Box control, displays a message."""
+ ...
+def GuiPanel(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Panel control, useful to group controls."""
+ ...
+def GuiProgressBar(bounds: Rectangle|list|tuple,textLeft: bytes,textRight: bytes,value: Any,minValue: float,maxValue: float,) -> int:
+ """Progress Bar control."""
+ ...
+def GuiScrollPanel(bounds: Rectangle|list|tuple,text: bytes,content: Rectangle|list|tuple,scroll: Any|list|tuple,view: Any|list|tuple,) -> int:
+ """Scroll Panel control."""
+ ...
+def GuiSetAlpha(alpha: float,) -> None:
+ """Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f."""
+ ...
+def GuiSetFont(font: Font|list|tuple,) -> None:
+ """Set gui custom font (global state)."""
+ ...
+def GuiSetIconScale(scale: int,) -> None:
+ """Set default icon drawing size."""
+ ...
+def GuiSetState(state: int,) -> None:
+ """Set gui state (global state)."""
+ ...
+def GuiSetStyle(control: int,property: int,value: int,) -> None:
+ """Set one style property."""
+ ...
+def GuiSetTooltip(tooltip: bytes,) -> None:
+ """Set tooltip string."""
+ ...
+def GuiSlider(bounds: Rectangle|list|tuple,textLeft: bytes,textRight: bytes,value: Any,minValue: float,maxValue: float,) -> int:
+ """Slider control."""
+ ...
+def GuiSliderBar(bounds: Rectangle|list|tuple,textLeft: bytes,textRight: bytes,value: Any,minValue: float,maxValue: float,) -> int:
+ """Slider Bar control."""
+ ...
+def GuiSpinner(bounds: Rectangle|list|tuple,text: bytes,value: Any,minValue: int,maxValue: int,editMode: bool,) -> int:
+ """Spinner control."""
+ ...
+def GuiStatusBar(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Status Bar control, shows info text."""
+ ...
+def GuiTabBar(bounds: Rectangle|list|tuple,text: list[bytes],count: int,active: Any,) -> int:
+ """Tab Bar control, returns TAB to be closed or -1."""
+ ...
+def GuiTextBox(bounds: Rectangle|list|tuple,text: bytes,textSize: int,editMode: bool,) -> int:
+ """Text Box control, updates input text."""
+ ...
+def GuiTextInputBox(bounds: Rectangle|list|tuple,title: bytes,message: bytes,buttons: bytes,text: bytes,textMaxSize: int,secretViewActive: Any,) -> int:
+ """Text Input Box control, ask for text, supports secret."""
+ ...
+def GuiToggle(bounds: Rectangle|list|tuple,text: bytes,active: Any,) -> int:
+ """Toggle Button control."""
+ ...
+def GuiToggleGroup(bounds: Rectangle|list|tuple,text: bytes,active: Any,) -> int:
+ """Toggle Group control."""
+ ...
+def GuiToggleSlider(bounds: Rectangle|list|tuple,text: bytes,active: Any,) -> int:
+ """Toggle Slider control."""
+ ...
+def GuiUnlock() -> None:
+ """Unlock gui controls (global state)."""
+ ...
+def GuiValueBox(bounds: Rectangle|list|tuple,text: bytes,value: Any,minValue: int,maxValue: int,editMode: bool,) -> int:
+ """Value Box control, updates input text with numbers."""
+ ...
+def GuiValueBoxFloat(bounds: Rectangle|list|tuple,text: bytes,textValue: bytes,value: Any,editMode: bool,) -> int:
+ """Value box control for float values."""
+ ...
+def GuiWindowBox(bounds: Rectangle|list|tuple,title: bytes,) -> int:
+ """Window Box control, shows a window that can be closed."""
+ ...
+HUEBAR_PADDING: int
+HUEBAR_SELECTOR_HEIGHT: int
+HUEBAR_SELECTOR_OVERFLOW: int
+HUEBAR_WIDTH: int
+def HideCursor() -> None:
+ """Hides cursor."""
+ ...
+ICON_1UP: int
+ICON_229: int
+ICON_230: int
+ICON_231: int
+ICON_232: int
+ICON_233: int
+ICON_234: int
+ICON_235: int
+ICON_236: int
+ICON_237: int
+ICON_238: int
+ICON_239: int
+ICON_240: int
+ICON_241: int
+ICON_242: int
+ICON_243: int
+ICON_244: int
+ICON_245: int
+ICON_246: int
+ICON_247: int
+ICON_248: int
+ICON_249: int
+ICON_250: int
+ICON_251: int
+ICON_252: int
+ICON_253: int
+ICON_254: int
+ICON_255: int
+ICON_ALARM: int
+ICON_ALPHA_CLEAR: int
+ICON_ALPHA_MULTIPLY: int
+ICON_ARROW_DOWN: int
+ICON_ARROW_DOWN_FILL: int
+ICON_ARROW_LEFT: int
+ICON_ARROW_LEFT_FILL: int
+ICON_ARROW_RIGHT: int
+ICON_ARROW_RIGHT_FILL: int
+ICON_ARROW_UP: int
+ICON_ARROW_UP_FILL: int
+ICON_AUDIO: int
+ICON_BIN: int
+ICON_BOX: int
+ICON_BOX_BOTTOM: int
+ICON_BOX_BOTTOM_LEFT: int
+ICON_BOX_BOTTOM_RIGHT: int
+ICON_BOX_CENTER: int
+ICON_BOX_CIRCLE_MASK: int
+ICON_BOX_CONCENTRIC: int
+ICON_BOX_CORNERS_BIG: int
+ICON_BOX_CORNERS_SMALL: int
+ICON_BOX_DOTS_BIG: int
+ICON_BOX_DOTS_SMALL: int
+ICON_BOX_GRID: int
+ICON_BOX_GRID_BIG: int
+ICON_BOX_LEFT: int
+ICON_BOX_MULTISIZE: int
+ICON_BOX_RIGHT: int
+ICON_BOX_TOP: int
+ICON_BOX_TOP_LEFT: int
+ICON_BOX_TOP_RIGHT: int
+ICON_BREAKPOINT_OFF: int
+ICON_BREAKPOINT_ON: int
+ICON_BRUSH_CLASSIC: int
+ICON_BRUSH_PAINTER: int
+ICON_BURGER_MENU: int
+ICON_CAMERA: int
+ICON_CASE_SENSITIVE: int
+ICON_CLOCK: int
+ICON_COIN: int
+ICON_COLOR_BUCKET: int
+ICON_COLOR_PICKER: int
+ICON_CORNER: int
+ICON_CPU: int
+ICON_CRACK: int
+ICON_CRACK_POINTS: int
+ICON_CROP: int
+ICON_CROP_ALPHA: int
+ICON_CROSS: int
+ICON_CROSSLINE: int
+ICON_CROSS_SMALL: int
+ICON_CUBE: int
+ICON_CUBE_FACE_BACK: int
+ICON_CUBE_FACE_BOTTOM: int
+ICON_CUBE_FACE_FRONT: int
+ICON_CUBE_FACE_LEFT: int
+ICON_CUBE_FACE_RIGHT: int
+ICON_CUBE_FACE_TOP: int
+ICON_CURSOR_CLASSIC: int
+ICON_CURSOR_HAND: int
+ICON_CURSOR_MOVE: int
+ICON_CURSOR_MOVE_FILL: int
+ICON_CURSOR_POINTER: int
+ICON_CURSOR_SCALE: int
+ICON_CURSOR_SCALE_FILL: int
+ICON_CURSOR_SCALE_LEFT: int
+ICON_CURSOR_SCALE_LEFT_FILL: int
+ICON_CURSOR_SCALE_RIGHT: int
+ICON_CURSOR_SCALE_RIGHT_FILL: int
+ICON_DEMON: int
+ICON_DITHERING: int
+ICON_DOOR: int
+ICON_EMPTYBOX: int
+ICON_EMPTYBOX_SMALL: int
+ICON_EXIT: int
+ICON_EXPLOSION: int
+ICON_EYE_OFF: int
+ICON_EYE_ON: int
+ICON_FILE: int
+ICON_FILETYPE_ALPHA: int
+ICON_FILETYPE_AUDIO: int
+ICON_FILETYPE_BINARY: int
+ICON_FILETYPE_HOME: int
+ICON_FILETYPE_IMAGE: int
+ICON_FILETYPE_INFO: int
+ICON_FILETYPE_PLAY: int
+ICON_FILETYPE_TEXT: int
+ICON_FILETYPE_VIDEO: int
+ICON_FILE_ADD: int
+ICON_FILE_COPY: int
+ICON_FILE_CUT: int
+ICON_FILE_DELETE: int
+ICON_FILE_EXPORT: int
+ICON_FILE_NEW: int
+ICON_FILE_OPEN: int
+ICON_FILE_PASTE: int
+ICON_FILE_SAVE: int
+ICON_FILE_SAVE_CLASSIC: int
+ICON_FILTER: int
+ICON_FILTER_BILINEAR: int
+ICON_FILTER_POINT: int
+ICON_FILTER_TOP: int
+ICON_FOLDER: int
+ICON_FOLDER_ADD: int
+ICON_FOLDER_FILE_OPEN: int
+ICON_FOLDER_OPEN: int
+ICON_FOLDER_SAVE: int
+ICON_FOUR_BOXES: int
+ICON_FX: int
+ICON_GEAR: int
+ICON_GEAR_BIG: int
+ICON_GEAR_EX: int
+ICON_GRID: int
+ICON_GRID_FILL: int
+ICON_HAND_POINTER: int
+ICON_HEART: int
+ICON_HELP: int
+ICON_HELP_BOX: int
+ICON_HEX: int
+ICON_HIDPI: int
+ICON_HOT: int
+ICON_HOUSE: int
+ICON_INFO: int
+ICON_INFO_BOX: int
+ICON_KEY: int
+ICON_LASER: int
+ICON_LAYERS: int
+ICON_LAYERS2: int
+ICON_LAYERS_ISO: int
+ICON_LAYERS_VISIBLE: int
+ICON_LENS: int
+ICON_LENS_BIG: int
+ICON_LIFE_BARS: int
+ICON_LINK: int
+ICON_LINK_BOXES: int
+ICON_LINK_BROKE: int
+ICON_LINK_MULTI: int
+ICON_LINK_NET: int
+ICON_LOCK_CLOSE: int
+ICON_LOCK_OPEN: int
+ICON_MAGNET: int
+ICON_MAILBOX: int
+ICON_MAPS: int
+ICON_MIPMAPS: int
+ICON_MLAYERS: int
+ICON_MODE_2D: int
+ICON_MODE_3D: int
+ICON_MONITOR: int
+ICON_MUTATE: int
+ICON_MUTATE_FILL: int
+ICON_NONE: int
+ICON_NOTEBOOK: int
+ICON_OK_TICK: int
+ICON_PENCIL: int
+ICON_PENCIL_BIG: int
+ICON_PHOTO_CAMERA: int
+ICON_PHOTO_CAMERA_FLASH: int
+ICON_PLAYER: int
+ICON_PLAYER_JUMP: int
+ICON_PLAYER_NEXT: int
+ICON_PLAYER_PAUSE: int
+ICON_PLAYER_PLAY: int
+ICON_PLAYER_PLAY_BACK: int
+ICON_PLAYER_PREVIOUS: int
+ICON_PLAYER_RECORD: int
+ICON_PLAYER_STOP: int
+ICON_POT: int
+ICON_PRINTER: int
+ICON_PRIORITY: int
+ICON_REDO: int
+ICON_REDO_FILL: int
+ICON_REG_EXP: int
+ICON_REPEAT: int
+ICON_REPEAT_FILL: int
+ICON_REREDO: int
+ICON_REREDO_FILL: int
+ICON_RESIZE: int
+ICON_RESTART: int
+ICON_ROM: int
+ICON_ROTATE: int
+ICON_ROTATE_FILL: int
+ICON_RUBBER: int
+ICON_SAND_TIMER: int
+ICON_SCALE: int
+ICON_SHIELD: int
+ICON_SHUFFLE: int
+ICON_SHUFFLE_FILL: int
+ICON_SPECIAL: int
+ICON_SQUARE_TOGGLE: int
+ICON_STAR: int
+ICON_STEP_INTO: int
+ICON_STEP_OUT: int
+ICON_STEP_OVER: int
+ICON_SUITCASE: int
+ICON_SUITCASE_ZIP: int
+ICON_SYMMETRY: int
+ICON_SYMMETRY_HORIZONTAL: int
+ICON_SYMMETRY_VERTICAL: int
+ICON_TARGET: int
+ICON_TARGET_BIG: int
+ICON_TARGET_BIG_FILL: int
+ICON_TARGET_MOVE: int
+ICON_TARGET_MOVE_FILL: int
+ICON_TARGET_POINT: int
+ICON_TARGET_SMALL: int
+ICON_TARGET_SMALL_FILL: int
+ICON_TEXT_A: int
+ICON_TEXT_NOTES: int
+ICON_TEXT_POPUP: int
+ICON_TEXT_T: int
+ICON_TOOLS: int
+ICON_UNDO: int
+ICON_UNDO_FILL: int
+ICON_VERTICAL_BARS: int
+ICON_VERTICAL_BARS_FILL: int
+ICON_WARNING: int
+ICON_WATER_DROP: int
+ICON_WAVE: int
+ICON_WAVE_SINUS: int
+ICON_WAVE_SQUARE: int
+ICON_WAVE_TRIANGULAR: int
+ICON_WINDOW: int
+ICON_ZOOM_ALL: int
+ICON_ZOOM_BIG: int
+ICON_ZOOM_CENTER: int
+ICON_ZOOM_MEDIUM: int
+ICON_ZOOM_SMALL: int
+def ImageAlphaClear(image: Any|list|tuple,color: Color|list|tuple,threshold: float,) -> None:
+ """Clear alpha channel to desired color."""
+ ...
+def ImageAlphaCrop(image: Any|list|tuple,threshold: float,) -> None:
+ """Crop image depending on alpha value."""
+ ...
+def ImageAlphaMask(image: Any|list|tuple,alphaMask: Image|list|tuple,) -> None:
+ """Apply alpha mask to image."""
+ ...
+def ImageAlphaPremultiply(image: Any|list|tuple,) -> None:
+ """Premultiply alpha channel."""
+ ...
+def ImageBlurGaussian(image: Any|list|tuple,blurSize: int,) -> None:
+ """Apply Gaussian blur using a box blur approximation."""
+ ...
+def ImageClearBackground(dst: Any|list|tuple,color: Color|list|tuple,) -> None:
+ """Clear image background with given color."""
+ ...
+def ImageColorBrightness(image: Any|list|tuple,brightness: int,) -> None:
+ """Modify image color: brightness (-255 to 255)."""
+ ...
+def ImageColorContrast(image: Any|list|tuple,contrast: float,) -> None:
+ """Modify image color: contrast (-100 to 100)."""
+ ...
+def ImageColorGrayscale(image: Any|list|tuple,) -> None:
+ """Modify image color: grayscale."""
+ ...
+def ImageColorInvert(image: Any|list|tuple,) -> None:
+ """Modify image color: invert."""
+ ...
+def ImageColorReplace(image: Any|list|tuple,color: Color|list|tuple,replace: Color|list|tuple,) -> None:
+ """Modify image color: replace color."""
+ ...
+def ImageColorTint(image: Any|list|tuple,color: Color|list|tuple,) -> None:
+ """Modify image color: tint."""
+ ...
+def ImageCopy(image: Image|list|tuple,) -> Image:
+ """Create an image duplicate (useful for transformations)."""
+ ...
+def ImageCrop(image: Any|list|tuple,crop: Rectangle|list|tuple,) -> None:
+ """Crop an image to a defined rectangle."""
+ ...
+def ImageDither(image: Any|list|tuple,rBpp: int,gBpp: int,bBpp: int,aBpp: int,) -> None:
+ """Dither image data to 16bpp or lower (Floyd-Steinberg dithering)."""
+ ...
+def ImageDraw(dst: Any|list|tuple,src: Image|list|tuple,srcRec: Rectangle|list|tuple,dstRec: Rectangle|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a source image within a destination image (tint applied to source)."""
+ ...
+def ImageDrawCircle(dst: Any|list|tuple,centerX: int,centerY: int,radius: int,color: Color|list|tuple,) -> None:
+ """Draw a filled circle within an image."""
+ ...
+def ImageDrawCircleLines(dst: Any|list|tuple,centerX: int,centerY: int,radius: int,color: Color|list|tuple,) -> None:
+ """Draw circle outline within an image."""
+ ...
+def ImageDrawCircleLinesV(dst: Any|list|tuple,center: Vector2|list|tuple,radius: int,color: Color|list|tuple,) -> None:
+ """Draw circle outline within an image (Vector version)."""
+ ...
+def ImageDrawCircleV(dst: Any|list|tuple,center: Vector2|list|tuple,radius: int,color: Color|list|tuple,) -> None:
+ """Draw a filled circle within an image (Vector version)."""
+ ...
+def ImageDrawLine(dst: Any|list|tuple,startPosX: int,startPosY: int,endPosX: int,endPosY: int,color: Color|list|tuple,) -> None:
+ """Draw line within an image."""
+ ...
+def ImageDrawLineEx(dst: Any|list|tuple,start: Vector2|list|tuple,end: Vector2|list|tuple,thick: int,color: Color|list|tuple,) -> None:
+ """Draw a line defining thickness within an image."""
+ ...
+def ImageDrawLineV(dst: Any|list|tuple,start: Vector2|list|tuple,end: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw line within an image (Vector version)."""
+ ...
+def ImageDrawPixel(dst: Any|list|tuple,posX: int,posY: int,color: Color|list|tuple,) -> None:
+ """Draw pixel within an image."""
+ ...
+def ImageDrawPixelV(dst: Any|list|tuple,position: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw pixel within an image (Vector version)."""
+ ...
+def ImageDrawRectangle(dst: Any|list|tuple,posX: int,posY: int,width: int,height: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle within an image."""
+ ...
+def ImageDrawRectangleLines(dst: Any|list|tuple,rec: Rectangle|list|tuple,thick: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle lines within an image."""
+ ...
+def ImageDrawRectangleRec(dst: Any|list|tuple,rec: Rectangle|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw rectangle within an image."""
+ ...
+def ImageDrawRectangleV(dst: Any|list|tuple,position: Vector2|list|tuple,size: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw rectangle within an image (Vector version)."""
+ ...
+def ImageDrawText(dst: Any|list|tuple,text: bytes,posX: int,posY: int,fontSize: int,color: Color|list|tuple,) -> None:
+ """Draw text (using default font) within an image (destination)."""
+ ...
+def ImageDrawTextEx(dst: Any|list|tuple,font: Font|list|tuple,text: bytes,position: Vector2|list|tuple,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw text (custom sprite font) within an image (destination)."""
+ ...
+def ImageDrawTriangle(dst: Any|list|tuple,v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw triangle within an image."""
+ ...
+def ImageDrawTriangleEx(dst: Any|list|tuple,v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,c1: Color|list|tuple,c2: Color|list|tuple,c3: Color|list|tuple,) -> None:
+ """Draw triangle with interpolated colors within an image."""
+ ...
+def ImageDrawTriangleFan(dst: Any|list|tuple,points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle fan defined by points within an image (first vertex is the center)."""
+ ...
+def ImageDrawTriangleLines(dst: Any|list|tuple,v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw triangle outline within an image."""
+ ...
+def ImageDrawTriangleStrip(dst: Any|list|tuple,points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle strip defined by points within an image."""
+ ...
+def ImageFlipHorizontal(image: Any|list|tuple,) -> None:
+ """Flip image horizontally."""
+ ...
+def ImageFlipVertical(image: Any|list|tuple,) -> None:
+ """Flip image vertically."""
+ ...
+def ImageFormat(image: Any|list|tuple,newFormat: int,) -> None:
+ """Convert image data to desired format."""
+ ...
+def ImageFromChannel(image: Image|list|tuple,selectedChannel: int,) -> Image:
+ """Create an image from a selected channel of another image (GRAYSCALE)."""
+ ...
+def ImageFromImage(image: Image|list|tuple,rec: Rectangle|list|tuple,) -> Image:
+ """Create an image from another image piece."""
+ ...
+def ImageKernelConvolution(image: Any|list|tuple,kernel: Any,kernelSize: int,) -> None:
+ """Apply custom square convolution kernel to image."""
+ ...
+def ImageMipmaps(image: Any|list|tuple,) -> None:
+ """Compute all mipmap levels for a provided image."""
+ ...
+def ImageResize(image: Any|list|tuple,newWidth: int,newHeight: int,) -> None:
+ """Resize image (Bicubic scaling algorithm)."""
+ ...
+def ImageResizeCanvas(image: Any|list|tuple,newWidth: int,newHeight: int,offsetX: int,offsetY: int,fill: Color|list|tuple,) -> None:
+ """Resize canvas and fill with color."""
+ ...
+def ImageResizeNN(image: Any|list|tuple,newWidth: int,newHeight: int,) -> None:
+ """Resize image (Nearest-Neighbor scaling algorithm)."""
+ ...
+def ImageRotate(image: Any|list|tuple,degrees: int,) -> None:
+ """Rotate image by input angle in degrees (-359 to 359)."""
+ ...
+def ImageRotateCCW(image: Any|list|tuple,) -> None:
+ """Rotate image counter-clockwise 90deg."""
+ ...
+def ImageRotateCW(image: Any|list|tuple,) -> None:
+ """Rotate image clockwise 90deg."""
+ ...
+def ImageText(text: bytes,fontSize: int,color: Color|list|tuple,) -> Image:
+ """Create an image from text (default font)."""
+ ...
+def ImageTextEx(font: Font|list|tuple,text: bytes,fontSize: float,spacing: float,tint: Color|list|tuple,) -> Image:
+ """Create an image from text (custom sprite font)."""
+ ...
+def ImageToPOT(image: Any|list|tuple,fill: Color|list|tuple,) -> None:
+ """Convert image to POT (power-of-two)."""
+ ...
+def InitAudioDevice() -> None:
+ """Initialize audio device and context."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def InitPhysics() -> None:
+ """Initializes physics values, pointers and creates physics loop thread."""
+ ...
+def InitWindow(width: int,height: int,title: bytes,) -> None:
+ """Initialize window and OpenGL context."""
+ ...
+def IsAudioDeviceReady() -> bool:
+ """Check if audio device has been initialized successfully."""
+ ...
+def IsAudioStreamPlaying(stream: AudioStream|list|tuple,) -> bool:
+ """Check if audio stream is playing."""
+ ...
+def IsAudioStreamProcessed(stream: AudioStream|list|tuple,) -> bool:
+ """Check if any audio stream buffers requires refill."""
+ ...
+def IsAudioStreamValid(stream: AudioStream|list|tuple,) -> bool:
+ """Checks if an audio stream is valid (buffers initialized)."""
+ ...
+def IsCursorHidden() -> bool:
+ """Check if cursor is not visible."""
+ ...
+def IsCursorOnScreen() -> bool:
+ """Check if cursor is on the screen."""
+ ...
+def IsFileDropped() -> bool:
+ """Check if a file has been dropped into window."""
+ ...
+def IsFileExtension(fileName: bytes,ext: bytes,) -> bool:
+ """Check file extension (including point: .png, .wav)."""
+ ...
+def IsFileNameValid(fileName: bytes,) -> bool:
+ """Check if fileName is valid for the platform/OS."""
+ ...
+def IsFontValid(font: Font|list|tuple,) -> bool:
+ """Check if a font is valid (font data loaded, WARNING: GPU texture not checked)."""
+ ...
+def IsGamepadAvailable(gamepad: int,) -> bool:
+ """Check if a gamepad is available."""
+ ...
+def IsGamepadButtonDown(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button is being pressed."""
+ ...
+def IsGamepadButtonPressed(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button has been pressed once."""
+ ...
+def IsGamepadButtonReleased(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button has been released once."""
+ ...
+def IsGamepadButtonUp(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button is NOT being pressed."""
+ ...
+def IsGestureDetected(gesture: int,) -> bool:
+ """Check if a gesture have been detected."""
+ ...
+def IsImageValid(image: Image|list|tuple,) -> bool:
+ """Check if an image is valid (data and parameters)."""
+ ...
+def IsKeyDown(key: int,) -> bool:
+ """Check if a key is being pressed."""
+ ...
+def IsKeyPressed(key: int,) -> bool:
+ """Check if a key has been pressed once."""
+ ...
+def IsKeyPressedRepeat(key: int,) -> bool:
+ """Check if a key has been pressed again."""
+ ...
+def IsKeyReleased(key: int,) -> bool:
+ """Check if a key has been released once."""
+ ...
+def IsKeyUp(key: int,) -> bool:
+ """Check if a key is NOT being pressed."""
+ ...
+def IsMaterialValid(material: Material|list|tuple,) -> bool:
+ """Check if a material is valid (shader assigned, map textures loaded in GPU)."""
+ ...
+def IsModelAnimationValid(model: Model|list|tuple,anim: ModelAnimation|list|tuple,) -> bool:
+ """Check model animation skeleton match."""
+ ...
+def IsModelValid(model: Model|list|tuple,) -> bool:
+ """Check if a model is valid (loaded in GPU, VAO/VBOs)."""
+ ...
+def IsMouseButtonDown(button: int,) -> bool:
+ """Check if a mouse button is being pressed."""
+ ...
+def IsMouseButtonPressed(button: int,) -> bool:
+ """Check if a mouse button has been pressed once."""
+ ...
+def IsMouseButtonReleased(button: int,) -> bool:
+ """Check if a mouse button has been released once."""
+ ...
+def IsMouseButtonUp(button: int,) -> bool:
+ """Check if a mouse button is NOT being pressed."""
+ ...
+def IsMusicStreamPlaying(music: Music|list|tuple,) -> bool:
+ """Check if music is playing."""
+ ...
+def IsMusicValid(music: Music|list|tuple,) -> bool:
+ """Checks if a music stream is valid (context and buffers initialized)."""
+ ...
+def IsPathFile(path: bytes,) -> bool:
+ """Check if a given path is a file or a directory."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def IsPhysicsEnabled() -> bool:
+ """Returns true if physics thread is currently enabled."""
+ ...
+def IsRenderTextureValid(target: RenderTexture|list|tuple,) -> bool:
+ """Check if a render texture is valid (loaded in GPU)."""
+ ...
+def IsShaderValid(shader: Shader|list|tuple,) -> bool:
+ """Check if a shader is valid (loaded on GPU)."""
+ ...
+def IsSoundPlaying(sound: Sound|list|tuple,) -> bool:
+ """Check if a sound is currently playing."""
+ ...
+def IsSoundValid(sound: Sound|list|tuple,) -> bool:
+ """Checks if a sound is valid (data loaded and buffers initialized)."""
+ ...
+def IsTextureValid(texture: Texture|list|tuple,) -> bool:
+ """Check if a texture is valid (loaded in GPU)."""
+ ...
+def IsWaveValid(wave: Wave|list|tuple,) -> bool:
+ """Checks if wave data is valid (data loaded and parameters)."""
+ ...
+def IsWindowFocused() -> bool:
+ """Check if window is currently focused."""
+ ...
+def IsWindowFullscreen() -> bool:
+ """Check if window is currently fullscreen."""
+ ...
+def IsWindowHidden() -> bool:
+ """Check if window is currently hidden."""
+ ...
+def IsWindowMaximized() -> bool:
+ """Check if window is currently maximized."""
+ ...
+def IsWindowMinimized() -> bool:
+ """Check if window is currently minimized."""
+ ...
+def IsWindowReady() -> bool:
+ """Check if window has been initialized successfully."""
+ ...
+def IsWindowResized() -> bool:
+ """Check if window has been resized last frame."""
+ ...
+def IsWindowState(flag: int,) -> bool:
+ """Check if one specific window flag is enabled."""
+ ...
+KEY_A: int
+KEY_APOSTROPHE: int
+KEY_B: int
+KEY_BACK: int
+KEY_BACKSLASH: int
+KEY_BACKSPACE: int
+KEY_C: int
+KEY_CAPS_LOCK: int
+KEY_COMMA: int
+KEY_D: int
+KEY_DELETE: int
+KEY_DOWN: int
+KEY_E: int
+KEY_EIGHT: int
+KEY_END: int
+KEY_ENTER: int
+KEY_EQUAL: int
+KEY_ESCAPE: int
+KEY_F: int
+KEY_F1: int
+KEY_F10: int
+KEY_F11: int
+KEY_F12: int
+KEY_F2: int
+KEY_F3: int
+KEY_F4: int
+KEY_F5: int
+KEY_F6: int
+KEY_F7: int
+KEY_F8: int
+KEY_F9: int
+KEY_FIVE: int
+KEY_FOUR: int
+KEY_G: int
+KEY_GRAVE: int
+KEY_H: int
+KEY_HOME: int
+KEY_I: int
+KEY_INSERT: int
+KEY_J: int
+KEY_K: int
+KEY_KB_MENU: int
+KEY_KP_0: int
+KEY_KP_1: int
+KEY_KP_2: int
+KEY_KP_3: int
+KEY_KP_4: int
+KEY_KP_5: int
+KEY_KP_6: int
+KEY_KP_7: int
+KEY_KP_8: int
+KEY_KP_9: int
+KEY_KP_ADD: int
+KEY_KP_DECIMAL: int
+KEY_KP_DIVIDE: int
+KEY_KP_ENTER: int
+KEY_KP_EQUAL: int
+KEY_KP_MULTIPLY: int
+KEY_KP_SUBTRACT: int
+KEY_L: int
+KEY_LEFT: int
+KEY_LEFT_ALT: int
+KEY_LEFT_BRACKET: int
+KEY_LEFT_CONTROL: int
+KEY_LEFT_SHIFT: int
+KEY_LEFT_SUPER: int
+KEY_M: int
+KEY_MENU: int
+KEY_MINUS: int
+KEY_N: int
+KEY_NINE: int
+KEY_NULL: int
+KEY_NUM_LOCK: int
+KEY_O: int
+KEY_ONE: int
+KEY_P: int
+KEY_PAGE_DOWN: int
+KEY_PAGE_UP: int
+KEY_PAUSE: int
+KEY_PERIOD: int
+KEY_PRINT_SCREEN: int
+KEY_Q: int
+KEY_R: int
+KEY_RIGHT: int
+KEY_RIGHT_ALT: int
+KEY_RIGHT_BRACKET: int
+KEY_RIGHT_CONTROL: int
+KEY_RIGHT_SHIFT: int
+KEY_RIGHT_SUPER: int
+KEY_S: int
+KEY_SCROLL_LOCK: int
+KEY_SEMICOLON: int
+KEY_SEVEN: int
+KEY_SIX: int
+KEY_SLASH: int
+KEY_SPACE: int
+KEY_T: int
+KEY_TAB: int
+KEY_THREE: int
+KEY_TWO: int
+KEY_U: int
+KEY_UP: int
+KEY_V: int
+KEY_VOLUME_DOWN: int
+KEY_VOLUME_UP: int
+KEY_W: int
+KEY_X: int
+KEY_Y: int
+KEY_Z: int
+KEY_ZERO: int
+LABEL: int
+LINE_COLOR: int
+LISTVIEW: int
+LIST_ITEMS_BORDER_WIDTH: int
+LIST_ITEMS_HEIGHT: int
+LIST_ITEMS_SPACING: int
+LOG_ALL: int
+LOG_DEBUG: int
+LOG_ERROR: int
+LOG_FATAL: int
+LOG_INFO: int
+LOG_NONE: int
+LOG_TRACE: int
+LOG_WARNING: int
+def Lerp(start: float,end: float,amount: float,) -> float:
+ """."""
+ ...
+def LoadAudioStream(sampleRate: int,sampleSize: int,channels: int,) -> AudioStream:
+ """Load audio stream (to stream raw audio pcm data)."""
+ ...
+def LoadAutomationEventList(fileName: bytes,) -> AutomationEventList:
+ """Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS."""
+ ...
+def LoadCodepoints(text: bytes,count: Any,) -> Any:
+ """Load all codepoints from a UTF-8 text string, codepoints count returned by parameter."""
+ ...
+def LoadDirectoryFiles(dirPath: bytes,) -> FilePathList:
+ """Load directory filepaths."""
+ ...
+def LoadDirectoryFilesEx(basePath: bytes,filter: bytes,scanSubdirs: bool,) -> FilePathList:
+ """Load directory filepaths with extension filtering and recursive directory scan. Use 'DIR' in the filter string to include directories in the result."""
+ ...
+def LoadDroppedFiles() -> FilePathList:
+ """Load dropped filepaths."""
+ ...
+def LoadFileData(fileName: bytes,dataSize: Any,) -> bytes:
+ """Load file data as byte array (read)."""
+ ...
+def LoadFileText(fileName: bytes,) -> bytes:
+ """Load text data from file (read), returns a '\0' terminated string."""
+ ...
+def LoadFont(fileName: bytes,) -> Font:
+ """Load font from file into GPU memory (VRAM)."""
+ ...
+def LoadFontData(fileData: bytes,dataSize: int,fontSize: int,codepoints: Any,codepointCount: int,type: int,) -> Any:
+ """Load font data for further use."""
+ ...
+def LoadFontEx(fileName: bytes,fontSize: int,codepoints: Any,codepointCount: int,) -> Font:
+ """Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set, font size is provided in pixels height."""
+ ...
+def LoadFontFromImage(image: Image|list|tuple,key: Color|list|tuple,firstChar: int,) -> Font:
+ """Load font from Image (XNA style)."""
+ ...
+def LoadFontFromMemory(fileType: bytes,fileData: bytes,dataSize: int,fontSize: int,codepoints: Any,codepointCount: int,) -> Font:
+ """Load font from memory buffer, fileType refers to extension: i.e. '.ttf'."""
+ ...
+def LoadImage(fileName: bytes,) -> Image:
+ """Load image from file into CPU memory (RAM)."""
+ ...
+def LoadImageAnim(fileName: bytes,frames: Any,) -> Image:
+ """Load image sequence from file (frames appended to image.data)."""
+ ...
+def LoadImageAnimFromMemory(fileType: bytes,fileData: bytes,dataSize: int,frames: Any,) -> Image:
+ """Load image sequence from memory buffer."""
+ ...
+def LoadImageColors(image: Image|list|tuple,) -> Any:
+ """Load color data from image as a Color array (RGBA - 32bit)."""
+ ...
+def LoadImageFromMemory(fileType: bytes,fileData: bytes,dataSize: int,) -> Image:
+ """Load image from memory buffer, fileType refers to extension: i.e. '.png'."""
+ ...
+def LoadImageFromScreen() -> Image:
+ """Load image from screen buffer and (screenshot)."""
+ ...
+def LoadImageFromTexture(texture: Texture|list|tuple,) -> Image:
+ """Load image from GPU texture data."""
+ ...
+def LoadImagePalette(image: Image|list|tuple,maxPaletteSize: int,colorCount: Any,) -> Any:
+ """Load colors palette from image as a Color array (RGBA - 32bit)."""
+ ...
+def LoadImageRaw(fileName: bytes,width: int,height: int,format: int,headerSize: int,) -> Image:
+ """Load image from RAW file data."""
+ ...
+def LoadMaterialDefault() -> Material:
+ """Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)."""
+ ...
+def LoadMaterials(fileName: bytes,materialCount: Any,) -> Any:
+ """Load materials from model file."""
+ ...
+def LoadModel(fileName: bytes,) -> Model:
+ """Load model from files (meshes and materials)."""
+ ...
+def LoadModelAnimations(fileName: bytes,animCount: Any,) -> Any:
+ """Load model animations from file."""
+ ...
+def LoadModelFromMesh(mesh: Mesh|list|tuple,) -> Model:
+ """Load model from generated mesh (default material)."""
+ ...
+def LoadMusicStream(fileName: bytes,) -> Music:
+ """Load music stream from file."""
+ ...
+def LoadMusicStreamFromMemory(fileType: bytes,data: bytes,dataSize: int,) -> Music:
+ """Load music stream from data."""
+ ...
+def LoadRandomSequence(count: int,min_1: int,max_2: int,) -> Any:
+ """Load random values sequence, no values repeated."""
+ ...
+def LoadRenderTexture(width: int,height: int,) -> RenderTexture:
+ """Load texture for rendering (framebuffer)."""
+ ...
+def LoadShader(vsFileName: bytes,fsFileName: bytes,) -> Shader:
+ """Load shader from files and bind default locations."""
+ ...
+def LoadShaderFromMemory(vsCode: bytes,fsCode: bytes,) -> Shader:
+ """Load shader from code strings and bind default locations."""
+ ...
+def LoadSound(fileName: bytes,) -> Sound:
+ """Load sound from file."""
+ ...
+def LoadSoundAlias(source: Sound|list|tuple,) -> Sound:
+ """Create a new sound that shares the same sample data as the source sound, does not own the sound data."""
+ ...
+def LoadSoundFromWave(wave: Wave|list|tuple,) -> Sound:
+ """Load sound from wave data."""
+ ...
+def LoadTexture(fileName: bytes,) -> Texture:
+ """Load texture from file into GPU memory (VRAM)."""
+ ...
+def LoadTextureCubemap(image: Image|list|tuple,layout: int,) -> Texture:
+ """Load cubemap from image, multiple image cubemap layouts supported."""
+ ...
+def LoadTextureFromImage(image: Image|list|tuple,) -> Texture:
+ """Load texture from image data."""
+ ...
+def LoadUTF8(codepoints: Any,length: int,) -> bytes:
+ """Load UTF-8 text encoded from codepoints array."""
+ ...
+def LoadVrStereoConfig(device: VrDeviceInfo|list|tuple,) -> VrStereoConfig:
+ """Load VR stereo config for VR simulator device parameters."""
+ ...
+def LoadWave(fileName: bytes,) -> Wave:
+ """Load wave data from file."""
+ ...
+def LoadWaveFromMemory(fileType: bytes,fileData: bytes,dataSize: int,) -> Wave:
+ """Load wave from memory buffer, fileType refers to extension: i.e. '.wav'."""
+ ...
+def LoadWaveSamples(wave: Wave|list|tuple,) -> Any:
+ """Load samples data from wave as a 32bit float data array."""
+ ...
+MATERIAL_MAP_ALBEDO: int
+MATERIAL_MAP_BRDF: int
+MATERIAL_MAP_CUBEMAP: int
+MATERIAL_MAP_EMISSION: int
+MATERIAL_MAP_HEIGHT: int
+MATERIAL_MAP_IRRADIANCE: int
+MATERIAL_MAP_METALNESS: int
+MATERIAL_MAP_NORMAL: int
+MATERIAL_MAP_OCCLUSION: int
+MATERIAL_MAP_PREFILTER: int
+MATERIAL_MAP_ROUGHNESS: int
+MOUSE_BUTTON_BACK: int
+MOUSE_BUTTON_EXTRA: int
+MOUSE_BUTTON_FORWARD: int
+MOUSE_BUTTON_LEFT: int
+MOUSE_BUTTON_MIDDLE: int
+MOUSE_BUTTON_RIGHT: int
+MOUSE_BUTTON_SIDE: int
+MOUSE_CURSOR_ARROW: int
+MOUSE_CURSOR_CROSSHAIR: int
+MOUSE_CURSOR_DEFAULT: int
+MOUSE_CURSOR_IBEAM: int
+MOUSE_CURSOR_NOT_ALLOWED: int
+MOUSE_CURSOR_POINTING_HAND: int
+MOUSE_CURSOR_RESIZE_ALL: int
+MOUSE_CURSOR_RESIZE_EW: int
+MOUSE_CURSOR_RESIZE_NESW: int
+MOUSE_CURSOR_RESIZE_NS: int
+MOUSE_CURSOR_RESIZE_NWSE: int
+def MakeDirectory(dirPath: bytes,) -> int:
+ """Create directories (including full path requested), returns 0 on success."""
+ ...
+def MatrixAdd(left: Matrix|list|tuple,right: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixDecompose(mat: Matrix|list|tuple,translation: Any|list|tuple,rotation: Any|list|tuple,scale: Any|list|tuple,) -> None:
+ """."""
+ ...
+def MatrixDeterminant(mat: Matrix|list|tuple,) -> float:
+ """."""
+ ...
+def MatrixFrustum(left: float,right: float,bottom: float,top: float,nearPlane: float,farPlane: float,) -> Matrix:
+ """."""
+ ...
+def MatrixIdentity() -> Matrix:
+ """."""
+ ...
+def MatrixInvert(mat: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixLookAt(eye: Vector3|list|tuple,target: Vector3|list|tuple,up: Vector3|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixMultiply(left: Matrix|list|tuple,right: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixOrtho(left: float,right: float,bottom: float,top: float,nearPlane: float,farPlane: float,) -> Matrix:
+ """."""
+ ...
+def MatrixPerspective(fovY: float,aspect: float,nearPlane: float,farPlane: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotate(axis: Vector3|list|tuple,angle: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateX(angle: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateXYZ(angle: Vector3|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateY(angle: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateZ(angle: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateZYX(angle: Vector3|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixScale(x: float,y: float,z: float,) -> Matrix:
+ """."""
+ ...
+def MatrixSubtract(left: Matrix|list|tuple,right: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixToFloatV(mat: Matrix|list|tuple,) -> float16:
+ """."""
+ ...
+def MatrixTrace(mat: Matrix|list|tuple,) -> float:
+ """."""
+ ...
+def MatrixTranslate(x: float,y: float,z: float,) -> Matrix:
+ """."""
+ ...
+def MatrixTranspose(mat: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MaximizeWindow() -> None:
+ """Set window state: maximized, if resizable."""
+ ...
+def MeasureText(text: bytes,fontSize: int,) -> int:
+ """Measure string width for default font."""
+ ...
+def MeasureTextEx(font: Font|list|tuple,text: bytes,fontSize: float,spacing: float,) -> Vector2:
+ """Measure string size for Font."""
+ ...
+def MemAlloc(size: int,) -> Any:
+ """Internal memory allocator."""
+ ...
+def MemFree(ptr: Any,) -> None:
+ """Internal memory free."""
+ ...
+def MemRealloc(ptr: Any,size: int,) -> Any:
+ """Internal memory reallocator."""
+ ...
+def MinimizeWindow() -> None:
+ """Set window state: minimized, if resizable."""
+ ...
+NPATCH_NINE_PATCH: int
+NPATCH_THREE_PATCH_HORIZONTAL: int
+NPATCH_THREE_PATCH_VERTICAL: int
+def Normalize(value: float,start: float,end: float,) -> float:
+ """."""
+ ...
+def OpenURL(url: bytes,) -> None:
+ """Open URL with default system browser (if available)."""
+ ...
+PHYSICS_CIRCLE: int
+PHYSICS_POLYGON: int
+PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: int
+PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: int
+PIXELFORMAT_COMPRESSED_DXT1_RGB: int
+PIXELFORMAT_COMPRESSED_DXT1_RGBA: int
+PIXELFORMAT_COMPRESSED_DXT3_RGBA: int
+PIXELFORMAT_COMPRESSED_DXT5_RGBA: int
+PIXELFORMAT_COMPRESSED_ETC1_RGB: int
+PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: int
+PIXELFORMAT_COMPRESSED_ETC2_RGB: int
+PIXELFORMAT_COMPRESSED_PVRT_RGB: int
+PIXELFORMAT_COMPRESSED_PVRT_RGBA: int
+PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: int
+PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: int
+PIXELFORMAT_UNCOMPRESSED_R16: int
+PIXELFORMAT_UNCOMPRESSED_R16G16B16: int
+PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: int
+PIXELFORMAT_UNCOMPRESSED_R32: int
+PIXELFORMAT_UNCOMPRESSED_R32G32B32: int
+PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: int
+PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: int
+PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: int
+PIXELFORMAT_UNCOMPRESSED_R5G6B5: int
+PIXELFORMAT_UNCOMPRESSED_R8G8B8: int
+PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: int
+PROGRESSBAR: int
+PROGRESS_PADDING: int
+def PauseAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Pause audio stream."""
+ ...
+def PauseMusicStream(music: Music|list|tuple,) -> None:
+ """Pause music playing."""
+ ...
+def PauseSound(sound: Sound|list|tuple,) -> None:
+ """Pause a sound."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def PhysicsAddForce(body: Any|list|tuple,force: Vector2|list|tuple,) -> None:
+ """Adds a force to a physics body."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def PhysicsAddTorque(body: Any|list|tuple,amount: float,) -> None:
+ """Adds an angular force to a physics body."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def PhysicsShatter(body: Any|list|tuple,position: Vector2|list|tuple,force: float,) -> None:
+ """Shatters a polygon shape physics body to little physics bodies with explosion force."""
+ ...
+def PlayAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Play audio stream."""
+ ...
+def PlayAutomationEvent(event: AutomationEvent|list|tuple,) -> None:
+ """Play a recorded automation event."""
+ ...
+def PlayMusicStream(music: Music|list|tuple,) -> None:
+ """Start music playing."""
+ ...
+def PlaySound(sound: Sound|list|tuple,) -> None:
+ """Play a sound."""
+ ...
+def PollInputEvents() -> None:
+ """Register all input events."""
+ ...
+def QuaternionAdd(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionAddValue(q: Vector4|list|tuple,add: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionCubicHermiteSpline(q1: Vector4|list|tuple,outTangent1: Vector4|list|tuple,q2: Vector4|list|tuple,inTangent2: Vector4|list|tuple,t: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionDivide(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionEquals(p: Vector4|list|tuple,q: Vector4|list|tuple,) -> int:
+ """."""
+ ...
+def QuaternionFromAxisAngle(axis: Vector3|list|tuple,angle: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionFromEuler(pitch: float,yaw: float,roll: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionFromMatrix(mat: Matrix|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionFromVector3ToVector3(from_0: Vector3|list|tuple,to: Vector3|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionIdentity() -> Vector4:
+ """."""
+ ...
+def QuaternionInvert(q: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionLength(q: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def QuaternionLerp(q1: Vector4|list|tuple,q2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionMultiply(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionNlerp(q1: Vector4|list|tuple,q2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionNormalize(q: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionScale(q: Vector4|list|tuple,mul: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionSlerp(q1: Vector4|list|tuple,q2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionSubtract(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionSubtractValue(q: Vector4|list|tuple,sub: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionToAxisAngle(q: Vector4|list|tuple,outAxis: Any|list|tuple,outAngle: Any,) -> None:
+ """."""
+ ...
+def QuaternionToEuler(q: Vector4|list|tuple,) -> Vector3:
+ """."""
+ ...
+def QuaternionToMatrix(q: Vector4|list|tuple,) -> Matrix:
+ """."""
+ ...
+def QuaternionTransform(q: Vector4|list|tuple,mat: Matrix|list|tuple,) -> Vector4:
+ """."""
+ ...
+RL_ATTACHMENT_COLOR_CHANNEL0: int
+RL_ATTACHMENT_COLOR_CHANNEL1: int
+RL_ATTACHMENT_COLOR_CHANNEL2: int
+RL_ATTACHMENT_COLOR_CHANNEL3: int
+RL_ATTACHMENT_COLOR_CHANNEL4: int
+RL_ATTACHMENT_COLOR_CHANNEL5: int
+RL_ATTACHMENT_COLOR_CHANNEL6: int
+RL_ATTACHMENT_COLOR_CHANNEL7: int
+RL_ATTACHMENT_CUBEMAP_NEGATIVE_X: int
+RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y: int
+RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z: int
+RL_ATTACHMENT_CUBEMAP_POSITIVE_X: int
+RL_ATTACHMENT_CUBEMAP_POSITIVE_Y: int
+RL_ATTACHMENT_CUBEMAP_POSITIVE_Z: int
+RL_ATTACHMENT_DEPTH: int
+RL_ATTACHMENT_RENDERBUFFER: int
+RL_ATTACHMENT_STENCIL: int
+RL_ATTACHMENT_TEXTURE2D: int
+RL_BLEND_ADDITIVE: int
+RL_BLEND_ADD_COLORS: int
+RL_BLEND_ALPHA: int
+RL_BLEND_ALPHA_PREMULTIPLY: int
+RL_BLEND_CUSTOM: int
+RL_BLEND_CUSTOM_SEPARATE: int
+RL_BLEND_MULTIPLIED: int
+RL_BLEND_SUBTRACT_COLORS: int
+RL_CULL_FACE_BACK: int
+RL_CULL_FACE_FRONT: int
+RL_LOG_ALL: int
+RL_LOG_DEBUG: int
+RL_LOG_ERROR: int
+RL_LOG_FATAL: int
+RL_LOG_INFO: int
+RL_LOG_NONE: int
+RL_LOG_TRACE: int
+RL_LOG_WARNING: int
+RL_OPENGL_11: int
+RL_OPENGL_21: int
+RL_OPENGL_33: int
+RL_OPENGL_43: int
+RL_OPENGL_ES_20: int
+RL_OPENGL_ES_30: int
+RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_DXT1_RGB: int
+RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_ETC1_RGB: int
+RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_ETC2_RGB: int
+RL_PIXELFORMAT_COMPRESSED_PVRT_RGB: int
+RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA: int
+RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: int
+RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: int
+RL_PIXELFORMAT_UNCOMPRESSED_R16: int
+RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: int
+RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: int
+RL_PIXELFORMAT_UNCOMPRESSED_R32: int
+RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: int
+RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: int
+RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: int
+RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: int
+RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5: int
+RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8: int
+RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: int
+RL_SHADER_ATTRIB_FLOAT: int
+RL_SHADER_ATTRIB_VEC2: int
+RL_SHADER_ATTRIB_VEC3: int
+RL_SHADER_ATTRIB_VEC4: int
+RL_SHADER_LOC_COLOR_AMBIENT: int
+RL_SHADER_LOC_COLOR_DIFFUSE: int
+RL_SHADER_LOC_COLOR_SPECULAR: int
+RL_SHADER_LOC_MAP_ALBEDO: int
+RL_SHADER_LOC_MAP_BRDF: int
+RL_SHADER_LOC_MAP_CUBEMAP: int
+RL_SHADER_LOC_MAP_EMISSION: int
+RL_SHADER_LOC_MAP_HEIGHT: int
+RL_SHADER_LOC_MAP_IRRADIANCE: int
+RL_SHADER_LOC_MAP_METALNESS: int
+RL_SHADER_LOC_MAP_NORMAL: int
+RL_SHADER_LOC_MAP_OCCLUSION: int
+RL_SHADER_LOC_MAP_PREFILTER: int
+RL_SHADER_LOC_MAP_ROUGHNESS: int
+RL_SHADER_LOC_MATRIX_MODEL: int
+RL_SHADER_LOC_MATRIX_MVP: int
+RL_SHADER_LOC_MATRIX_NORMAL: int
+RL_SHADER_LOC_MATRIX_PROJECTION: int
+RL_SHADER_LOC_MATRIX_VIEW: int
+RL_SHADER_LOC_VECTOR_VIEW: int
+RL_SHADER_LOC_VERTEX_COLOR: int
+RL_SHADER_LOC_VERTEX_NORMAL: int
+RL_SHADER_LOC_VERTEX_POSITION: int
+RL_SHADER_LOC_VERTEX_TANGENT: int
+RL_SHADER_LOC_VERTEX_TEXCOORD01: int
+RL_SHADER_LOC_VERTEX_TEXCOORD02: int
+RL_SHADER_UNIFORM_FLOAT: int
+RL_SHADER_UNIFORM_INT: int
+RL_SHADER_UNIFORM_IVEC2: int
+RL_SHADER_UNIFORM_IVEC3: int
+RL_SHADER_UNIFORM_IVEC4: int
+RL_SHADER_UNIFORM_SAMPLER2D: int
+RL_SHADER_UNIFORM_UINT: int
+RL_SHADER_UNIFORM_UIVEC2: int
+RL_SHADER_UNIFORM_UIVEC3: int
+RL_SHADER_UNIFORM_UIVEC4: int
+RL_SHADER_UNIFORM_VEC2: int
+RL_SHADER_UNIFORM_VEC3: int
+RL_SHADER_UNIFORM_VEC4: int
+RL_TEXTURE_FILTER_ANISOTROPIC_16X: int
+RL_TEXTURE_FILTER_ANISOTROPIC_4X: int
+RL_TEXTURE_FILTER_ANISOTROPIC_8X: int
+RL_TEXTURE_FILTER_BILINEAR: int
+RL_TEXTURE_FILTER_POINT: int
+RL_TEXTURE_FILTER_TRILINEAR: int
+def Remap(value: float,inputStart: float,inputEnd: float,outputStart: float,outputEnd: float,) -> float:
+ """."""
+ ...
+def RestoreWindow() -> None:
+ """Set window state: not minimized/maximized."""
+ ...
+def ResumeAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Resume audio stream."""
+ ...
+def ResumeMusicStream(music: Music|list|tuple,) -> None:
+ """Resume playing paused music."""
+ ...
+def ResumeSound(sound: Sound|list|tuple,) -> None:
+ """Resume a paused sound."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def RunPhysicsStep() -> None:
+ """Run physics step, to be used if PHYSICS_NO_THREADS is set in your main loop."""
+ ...
+SCROLLBAR: int
+SCROLLBAR_SIDE: int
+SCROLLBAR_WIDTH: int
+SCROLL_PADDING: int
+SCROLL_SLIDER_PADDING: int
+SCROLL_SLIDER_SIZE: int
+SCROLL_SPEED: int
+SHADER_ATTRIB_FLOAT: int
+SHADER_ATTRIB_VEC2: int
+SHADER_ATTRIB_VEC3: int
+SHADER_ATTRIB_VEC4: int
+SHADER_LOC_BONE_MATRICES: int
+SHADER_LOC_COLOR_AMBIENT: int
+SHADER_LOC_COLOR_DIFFUSE: int
+SHADER_LOC_COLOR_SPECULAR: int
+SHADER_LOC_MAP_ALBEDO: int
+SHADER_LOC_MAP_BRDF: int
+SHADER_LOC_MAP_CUBEMAP: int
+SHADER_LOC_MAP_EMISSION: int
+SHADER_LOC_MAP_HEIGHT: int
+SHADER_LOC_MAP_IRRADIANCE: int
+SHADER_LOC_MAP_METALNESS: int
+SHADER_LOC_MAP_NORMAL: int
+SHADER_LOC_MAP_OCCLUSION: int
+SHADER_LOC_MAP_PREFILTER: int
+SHADER_LOC_MAP_ROUGHNESS: int
+SHADER_LOC_MATRIX_MODEL: int
+SHADER_LOC_MATRIX_MVP: int
+SHADER_LOC_MATRIX_NORMAL: int
+SHADER_LOC_MATRIX_PROJECTION: int
+SHADER_LOC_MATRIX_VIEW: int
+SHADER_LOC_VECTOR_VIEW: int
+SHADER_LOC_VERTEX_BONEIDS: int
+SHADER_LOC_VERTEX_BONEWEIGHTS: int
+SHADER_LOC_VERTEX_COLOR: int
+SHADER_LOC_VERTEX_NORMAL: int
+SHADER_LOC_VERTEX_POSITION: int
+SHADER_LOC_VERTEX_TANGENT: int
+SHADER_LOC_VERTEX_TEXCOORD01: int
+SHADER_LOC_VERTEX_TEXCOORD02: int
+SHADER_UNIFORM_FLOAT: int
+SHADER_UNIFORM_INT: int
+SHADER_UNIFORM_IVEC2: int
+SHADER_UNIFORM_IVEC3: int
+SHADER_UNIFORM_IVEC4: int
+SHADER_UNIFORM_SAMPLER2D: int
+SHADER_UNIFORM_VEC2: int
+SHADER_UNIFORM_VEC3: int
+SHADER_UNIFORM_VEC4: int
+SLIDER: int
+SLIDER_PADDING: int
+SLIDER_WIDTH: int
+SPINNER: int
+SPIN_BUTTON_SPACING: int
+SPIN_BUTTON_WIDTH: int
+STATE_DISABLED: int
+STATE_FOCUSED: int
+STATE_NORMAL: int
+STATE_PRESSED: int
+STATUSBAR: int
+def SaveFileData(fileName: bytes,data: Any,dataSize: int,) -> bool:
+ """Save data to file from byte array (write), returns true on success."""
+ ...
+def SaveFileText(fileName: bytes,text: bytes,) -> bool:
+ """Save text data to file (write), string must be '\0' terminated, returns true on success."""
+ ...
+def SeekMusicStream(music: Music|list|tuple,position: float,) -> None:
+ """Seek music to a position (in seconds)."""
+ ...
+def SetAudioStreamBufferSizeDefault(size: int,) -> None:
+ """Default size for new audio streams."""
+ ...
+def SetAudioStreamCallback(stream: AudioStream|list|tuple,callback: Any,) -> None:
+ """Audio thread callback to request new data."""
+ ...
+def SetAudioStreamPan(stream: AudioStream|list|tuple,pan: float,) -> None:
+ """Set pan for audio stream (0.5 is centered)."""
+ ...
+def SetAudioStreamPitch(stream: AudioStream|list|tuple,pitch: float,) -> None:
+ """Set pitch for audio stream (1.0 is base level)."""
+ ...
+def SetAudioStreamVolume(stream: AudioStream|list|tuple,volume: float,) -> None:
+ """Set volume for audio stream (1.0 is max level)."""
+ ...
+def SetAutomationEventBaseFrame(frame: int,) -> None:
+ """Set automation event internal base frame to start recording."""
+ ...
+def SetAutomationEventList(list_0: Any|list|tuple,) -> None:
+ """Set automation event list to record to."""
+ ...
+def SetClipboardText(text: bytes,) -> None:
+ """Set clipboard text content."""
+ ...
+def SetConfigFlags(flags: int,) -> None:
+ """Setup init configuration flags (view FLAGS)."""
+ ...
+def SetExitKey(key: int,) -> None:
+ """Set a custom key to exit program (default is ESC)."""
+ ...
+def SetGamepadMappings(mappings: bytes,) -> int:
+ """Set internal gamepad mappings (SDL_GameControllerDB)."""
+ ...
+def SetGamepadVibration(gamepad: int,leftMotor: float,rightMotor: float,duration: float,) -> None:
+ """Set gamepad vibration for both motors (duration in seconds)."""
+ ...
+def SetGesturesEnabled(flags: int,) -> None:
+ """Enable a set of gestures using flags."""
+ ...
+def SetLoadFileDataCallback(callback: bytes,) -> None:
+ """Set custom file binary data loader."""
+ ...
+def SetLoadFileTextCallback(callback: bytes,) -> None:
+ """Set custom file text data loader."""
+ ...
+def SetMasterVolume(volume: float,) -> None:
+ """Set master volume (listener)."""
+ ...
+def SetMaterialTexture(material: Any|list|tuple,mapType: int,texture: Texture|list|tuple,) -> None:
+ """Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)."""
+ ...
+def SetModelMeshMaterial(model: Any|list|tuple,meshId: int,materialId: int,) -> None:
+ """Set material for a mesh."""
+ ...
+def SetMouseCursor(cursor: int,) -> None:
+ """Set mouse cursor."""
+ ...
+def SetMouseOffset(offsetX: int,offsetY: int,) -> None:
+ """Set mouse offset."""
+ ...
+def SetMousePosition(x: int,y: int,) -> None:
+ """Set mouse position XY."""
+ ...
+def SetMouseScale(scaleX: float,scaleY: float,) -> None:
+ """Set mouse scaling."""
+ ...
+def SetMusicPan(music: Music|list|tuple,pan: float,) -> None:
+ """Set pan for a music (0.5 is center)."""
+ ...
+def SetMusicPitch(music: Music|list|tuple,pitch: float,) -> None:
+ """Set pitch for a music (1.0 is base level)."""
+ ...
+def SetMusicVolume(music: Music|list|tuple,volume: float,) -> None:
+ """Set volume for music (1.0 is max level)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def SetPhysicsBodyRotation(body: Any|list|tuple,radians: float,) -> None:
+ """Sets physics body shape transform based on radians parameter."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def SetPhysicsGravity(x: float,y: float,) -> None:
+ """Sets physics global gravity force."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def SetPhysicsTimeStep(delta: float,) -> None:
+ """Sets physics fixed time step in milliseconds. 1.666666 by default."""
+ ...
+def SetPixelColor(dstPtr: Any,color: Color|list|tuple,format: int,) -> None:
+ """Set color formatted into destination pixel pointer."""
+ ...
+def SetRandomSeed(seed: int,) -> None:
+ """Set the seed for the random number generator."""
+ ...
+def SetSaveFileDataCallback(callback: bytes,) -> None:
+ """Set custom file binary data saver."""
+ ...
+def SetSaveFileTextCallback(callback: bytes,) -> None:
+ """Set custom file text data saver."""
+ ...
+def SetShaderValue(shader: Shader|list|tuple,locIndex: int,value: Any,uniformType: int,) -> None:
+ """Set shader uniform value."""
+ ...
+def SetShaderValueMatrix(shader: Shader|list|tuple,locIndex: int,mat: Matrix|list|tuple,) -> None:
+ """Set shader uniform value (matrix 4x4)."""
+ ...
+def SetShaderValueTexture(shader: Shader|list|tuple,locIndex: int,texture: Texture|list|tuple,) -> None:
+ """Set shader uniform value for texture (sampler2d)."""
+ ...
+def SetShaderValueV(shader: Shader|list|tuple,locIndex: int,value: Any,uniformType: int,count: int,) -> None:
+ """Set shader uniform value vector."""
+ ...
+def SetShapesTexture(texture: Texture|list|tuple,source: Rectangle|list|tuple,) -> None:
+ """Set texture and rectangle to be used on shapes drawing."""
+ ...
+def SetSoundPan(sound: Sound|list|tuple,pan: float,) -> None:
+ """Set pan for a sound (0.5 is center)."""
+ ...
+def SetSoundPitch(sound: Sound|list|tuple,pitch: float,) -> None:
+ """Set pitch for a sound (1.0 is base level)."""
+ ...
+def SetSoundVolume(sound: Sound|list|tuple,volume: float,) -> None:
+ """Set volume for a sound (1.0 is max level)."""
+ ...
+def SetTargetFPS(fps: int,) -> None:
+ """Set target FPS (maximum)."""
+ ...
+def SetTextLineSpacing(spacing: int,) -> None:
+ """Set vertical line spacing when drawing with line-breaks."""
+ ...
+def SetTextureFilter(texture: Texture|list|tuple,filter: int,) -> None:
+ """Set texture scaling filter mode."""
+ ...
+def SetTextureWrap(texture: Texture|list|tuple,wrap: int,) -> None:
+ """Set texture wrapping mode."""
+ ...
+def SetTraceLogCallback(callback: bytes,) -> None:
+ """Set custom trace log."""
+ ...
+def SetTraceLogLevel(logLevel: int,) -> None:
+ """Set the current threshold (minimum) log level."""
+ ...
+def SetWindowFocused() -> None:
+ """Set window focused."""
+ ...
+def SetWindowIcon(image: Image|list|tuple,) -> None:
+ """Set icon for window (single image, RGBA 32bit)."""
+ ...
+def SetWindowIcons(images: Any|list|tuple,count: int,) -> None:
+ """Set icon for window (multiple images, RGBA 32bit)."""
+ ...
+def SetWindowMaxSize(width: int,height: int,) -> None:
+ """Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)."""
+ ...
+def SetWindowMinSize(width: int,height: int,) -> None:
+ """Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)."""
+ ...
+def SetWindowMonitor(monitor: int,) -> None:
+ """Set monitor for the current window."""
+ ...
+def SetWindowOpacity(opacity: float,) -> None:
+ """Set window opacity [0.0f..1.0f]."""
+ ...
+def SetWindowPosition(x: int,y: int,) -> None:
+ """Set window position on screen."""
+ ...
+def SetWindowSize(width: int,height: int,) -> None:
+ """Set window dimensions."""
+ ...
+def SetWindowState(flags: int,) -> None:
+ """Set window configuration state using flags."""
+ ...
+def SetWindowTitle(title: bytes,) -> None:
+ """Set title for window."""
+ ...
+def ShowCursor() -> None:
+ """Shows cursor."""
+ ...
+def StartAutomationEventRecording() -> None:
+ """Start recording automation events (AutomationEventList must be set)."""
+ ...
+def StopAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Stop audio stream."""
+ ...
+def StopAutomationEventRecording() -> None:
+ """Stop recording automation events."""
+ ...
+def StopMusicStream(music: Music|list|tuple,) -> None:
+ """Stop music playing."""
+ ...
+def StopSound(sound: Sound|list|tuple,) -> None:
+ """Stop playing a sound."""
+ ...
+def SwapScreenBuffer() -> None:
+ """Swap back buffer with front buffer (screen drawing)."""
+ ...
+TEXTBOX: int
+TEXTURE_FILTER_ANISOTROPIC_16X: int
+TEXTURE_FILTER_ANISOTROPIC_4X: int
+TEXTURE_FILTER_ANISOTROPIC_8X: int
+TEXTURE_FILTER_BILINEAR: int
+TEXTURE_FILTER_POINT: int
+TEXTURE_FILTER_TRILINEAR: int
+TEXTURE_WRAP_CLAMP: int
+TEXTURE_WRAP_MIRROR_CLAMP: int
+TEXTURE_WRAP_MIRROR_REPEAT: int
+TEXTURE_WRAP_REPEAT: int
+TEXT_ALIGNMENT: int
+TEXT_ALIGNMENT_VERTICAL: int
+TEXT_ALIGN_BOTTOM: int
+TEXT_ALIGN_CENTER: int
+TEXT_ALIGN_LEFT: int
+TEXT_ALIGN_MIDDLE: int
+TEXT_ALIGN_RIGHT: int
+TEXT_ALIGN_TOP: int
+TEXT_COLOR_DISABLED: int
+TEXT_COLOR_FOCUSED: int
+TEXT_COLOR_NORMAL: int
+TEXT_COLOR_PRESSED: int
+TEXT_LINE_SPACING: int
+TEXT_PADDING: int
+TEXT_READONLY: int
+TEXT_SIZE: int
+TEXT_SPACING: int
+TEXT_WRAP_CHAR: int
+TEXT_WRAP_MODE: int
+TEXT_WRAP_NONE: int
+TEXT_WRAP_WORD: int
+TOGGLE: int
+def TakeScreenshot(fileName: bytes,) -> None:
+ """Takes a screenshot of current screen (filename extension defines format)."""
+ ...
+def TextAppend(text: bytes,append: bytes,position: Any,) -> None:
+ """Append text at specific position and move cursor!."""
+ ...
+def TextCopy(dst: bytes,src: bytes,) -> int:
+ """Copy one string to another, returns bytes copied."""
+ ...
+def TextFindIndex(text: bytes,find: bytes,) -> int:
+ """Find first text occurrence within a string."""
+ ...
+def TextFormat(*args) -> bytes:
+ """VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI"""
+ ...
+def TextInsert(text: bytes,insert: bytes,position: int,) -> bytes:
+ """Insert text in a position (WARNING: memory must be freed!)."""
+ ...
+def TextIsEqual(text1: bytes,text2: bytes,) -> bool:
+ """Check if two text string are equal."""
+ ...
+def TextJoin(textList: list[bytes],count: int,delimiter: bytes,) -> bytes:
+ """Join text strings with delimiter."""
+ ...
+def TextLength(text: bytes,) -> int:
+ """Get text length, checks for '\0' ending."""
+ ...
+def TextReplace(text: bytes,replace: bytes,by: bytes,) -> bytes:
+ """Replace text string (WARNING: memory must be freed!)."""
+ ...
+def TextSplit(text: bytes,delimiter: bytes,count: Any,) -> list[bytes]:
+ """Split text into multiple strings."""
+ ...
+def TextSubtext(text: bytes,position: int,length: int,) -> bytes:
+ """Get a piece of a text string."""
+ ...
+def TextToCamel(text: bytes,) -> bytes:
+ """Get Camel case notation version of provided string."""
+ ...
+def TextToFloat(text: bytes,) -> float:
+ """Get float value from text (negative values not supported)."""
+ ...
+def TextToInteger(text: bytes,) -> int:
+ """Get integer value from text (negative values not supported)."""
+ ...
+def TextToLower(text: bytes,) -> bytes:
+ """Get lower case version of provided string."""
+ ...
+def TextToPascal(text: bytes,) -> bytes:
+ """Get Pascal case notation version of provided string."""
+ ...
+def TextToSnake(text: bytes,) -> bytes:
+ """Get Snake case notation version of provided string."""
+ ...
+def TextToUpper(text: bytes,) -> bytes:
+ """Get upper case version of provided string."""
+ ...
+def ToggleBorderlessWindowed() -> None:
+ """Toggle window state: borderless windowed, resizes window to match monitor resolution."""
+ ...
+def ToggleFullscreen() -> None:
+ """Toggle window state: fullscreen/windowed, resizes monitor to match window resolution."""
+ ...
+def TraceLog(*args) -> None:
+ """VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI"""
+ ...
+def UnloadAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Unload audio stream and free memory."""
+ ...
+def UnloadAutomationEventList(list_0: AutomationEventList|list|tuple,) -> None:
+ """Unload automation events list from file."""
+ ...
+def UnloadCodepoints(codepoints: Any,) -> None:
+ """Unload codepoints data from memory."""
+ ...
+def UnloadDirectoryFiles(files: FilePathList|list|tuple,) -> None:
+ """Unload filepaths."""
+ ...
+def UnloadDroppedFiles(files: FilePathList|list|tuple,) -> None:
+ """Unload dropped filepaths."""
+ ...
+def UnloadFileData(data: bytes,) -> None:
+ """Unload file data allocated by LoadFileData()."""
+ ...
+def UnloadFileText(text: bytes,) -> None:
+ """Unload file text data allocated by LoadFileText()."""
+ ...
+def UnloadFont(font: Font|list|tuple,) -> None:
+ """Unload font from GPU memory (VRAM)."""
+ ...
+def UnloadFontData(glyphs: Any|list|tuple,glyphCount: int,) -> None:
+ """Unload font chars info data (RAM)."""
+ ...
+def UnloadImage(image: Image|list|tuple,) -> None:
+ """Unload image from CPU memory (RAM)."""
+ ...
+def UnloadImageColors(colors: Any|list|tuple,) -> None:
+ """Unload color data loaded with LoadImageColors()."""
+ ...
+def UnloadImagePalette(colors: Any|list|tuple,) -> None:
+ """Unload colors palette loaded with LoadImagePalette()."""
+ ...
+def UnloadMaterial(material: Material|list|tuple,) -> None:
+ """Unload material from GPU memory (VRAM)."""
+ ...
+def UnloadMesh(mesh: Mesh|list|tuple,) -> None:
+ """Unload mesh data from CPU and GPU."""
+ ...
+def UnloadModel(model: Model|list|tuple,) -> None:
+ """Unload model (including meshes) from memory (RAM and/or VRAM)."""
+ ...
+def UnloadModelAnimation(anim: ModelAnimation|list|tuple,) -> None:
+ """Unload animation data."""
+ ...
+def UnloadModelAnimations(animations: Any|list|tuple,animCount: int,) -> None:
+ """Unload animation array data."""
+ ...
+def UnloadMusicStream(music: Music|list|tuple,) -> None:
+ """Unload music stream."""
+ ...
+def UnloadRandomSequence(sequence: Any,) -> None:
+ """Unload random values sequence."""
+ ...
+def UnloadRenderTexture(target: RenderTexture|list|tuple,) -> None:
+ """Unload render texture from GPU memory (VRAM)."""
+ ...
+def UnloadShader(shader: Shader|list|tuple,) -> None:
+ """Unload shader from GPU memory (VRAM)."""
+ ...
+def UnloadSound(sound: Sound|list|tuple,) -> None:
+ """Unload sound."""
+ ...
+def UnloadSoundAlias(alias: Sound|list|tuple,) -> None:
+ """Unload a sound alias (does not deallocate sample data)."""
+ ...
+def UnloadTexture(texture: Texture|list|tuple,) -> None:
+ """Unload texture from GPU memory (VRAM)."""
+ ...
+def UnloadUTF8(text: bytes,) -> None:
+ """Unload UTF-8 text encoded from codepoints array."""
+ ...
+def UnloadVrStereoConfig(config: VrStereoConfig|list|tuple,) -> None:
+ """Unload VR stereo config."""
+ ...
+def UnloadWave(wave: Wave|list|tuple,) -> None:
+ """Unload wave data."""
+ ...
+def UnloadWaveSamples(samples: Any,) -> None:
+ """Unload samples data loaded with LoadWaveSamples()."""
+ ...
+def UpdateAudioStream(stream: AudioStream|list|tuple,data: Any,frameCount: int,) -> None:
+ """Update audio stream buffers with data."""
+ ...
+def UpdateCamera(camera: Any|list|tuple,mode: int,) -> None:
+ """Update camera position for selected mode."""
+ ...
+def UpdateCameraPro(camera: Any|list|tuple,movement: Vector3|list|tuple,rotation: Vector3|list|tuple,zoom: float,) -> None:
+ """Update camera movement/rotation."""
+ ...
+def UpdateMeshBuffer(mesh: Mesh|list|tuple,index: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update mesh vertex data in GPU for a specific buffer index."""
+ ...
+def UpdateModelAnimation(model: Model|list|tuple,anim: ModelAnimation|list|tuple,frame: int,) -> None:
+ """Update model animation pose (CPU)."""
+ ...
+def UpdateModelAnimationBones(model: Model|list|tuple,anim: ModelAnimation|list|tuple,frame: int,) -> None:
+ """Update model animation mesh bone matrices (GPU skinning)."""
+ ...
+def UpdateMusicStream(music: Music|list|tuple,) -> None:
+ """Updates buffers for music streaming."""
+ ...
+def UpdateSound(sound: Sound|list|tuple,data: Any,sampleCount: int,) -> None:
+ """Update sound buffer with new data."""
+ ...
+def UpdateTexture(texture: Texture|list|tuple,pixels: Any,) -> None:
+ """Update GPU texture with new data."""
+ ...
+def UpdateTextureRec(texture: Texture|list|tuple,rec: Rectangle|list|tuple,pixels: Any,) -> None:
+ """Update GPU texture rectangle with new data."""
+ ...
+def UploadMesh(mesh: Any|list|tuple,dynamic: bool,) -> None:
+ """Upload mesh vertex data in GPU and provide VAO/VBO ids."""
+ ...
+VALUEBOX: int
+def Vector2Add(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2AddValue(v: Vector2|list|tuple,add: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Angle(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Clamp(v: Vector2|list|tuple,min_1: Vector2|list|tuple,max_2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2ClampValue(v: Vector2|list|tuple,min_1: float,max_2: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Distance(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2DistanceSqr(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Divide(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2DotProduct(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Equals(p: Vector2|list|tuple,q: Vector2|list|tuple,) -> int:
+ """."""
+ ...
+def Vector2Invert(v: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Length(v: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2LengthSqr(v: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Lerp(v1: Vector2|list|tuple,v2: Vector2|list|tuple,amount: float,) -> Vector2:
+ """."""
+ ...
+def Vector2LineAngle(start: Vector2|list|tuple,end: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Max(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Min(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2MoveTowards(v: Vector2|list|tuple,target: Vector2|list|tuple,maxDistance: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Multiply(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Negate(v: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Normalize(v: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2One() -> Vector2:
+ """."""
+ ...
+def Vector2Reflect(v: Vector2|list|tuple,normal: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Refract(v: Vector2|list|tuple,n: Vector2|list|tuple,r: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Rotate(v: Vector2|list|tuple,angle: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Scale(v: Vector2|list|tuple,scale: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Subtract(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2SubtractValue(v: Vector2|list|tuple,sub: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Transform(v: Vector2|list|tuple,mat: Matrix|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Zero() -> Vector2:
+ """."""
+ ...
+def Vector3Add(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3AddValue(v: Vector3|list|tuple,add: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Angle(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3Barycenter(p: Vector3|list|tuple,a: Vector3|list|tuple,b: Vector3|list|tuple,c: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Clamp(v: Vector3|list|tuple,min_1: Vector3|list|tuple,max_2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3ClampValue(v: Vector3|list|tuple,min_1: float,max_2: float,) -> Vector3:
+ """."""
+ ...
+def Vector3CrossProduct(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3CubicHermite(v1: Vector3|list|tuple,tangent1: Vector3|list|tuple,v2: Vector3|list|tuple,tangent2: Vector3|list|tuple,amount: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Distance(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3DistanceSqr(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3Divide(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3DotProduct(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3Equals(p: Vector3|list|tuple,q: Vector3|list|tuple,) -> int:
+ """."""
+ ...
+def Vector3Invert(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Length(v: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3LengthSqr(v: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3Lerp(v1: Vector3|list|tuple,v2: Vector3|list|tuple,amount: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Max(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Min(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3MoveTowards(v: Vector3|list|tuple,target: Vector3|list|tuple,maxDistance: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Multiply(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Negate(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Normalize(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3One() -> Vector3:
+ """."""
+ ...
+def Vector3OrthoNormalize(v1: Any|list|tuple,v2: Any|list|tuple,) -> None:
+ """."""
+ ...
+def Vector3Perpendicular(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Project(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Reflect(v: Vector3|list|tuple,normal: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Refract(v: Vector3|list|tuple,n: Vector3|list|tuple,r: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Reject(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3RotateByAxisAngle(v: Vector3|list|tuple,axis: Vector3|list|tuple,angle: float,) -> Vector3:
+ """."""
+ ...
+def Vector3RotateByQuaternion(v: Vector3|list|tuple,q: Vector4|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Scale(v: Vector3|list|tuple,scalar: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Subtract(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3SubtractValue(v: Vector3|list|tuple,sub: float,) -> Vector3:
+ """."""
+ ...
+def Vector3ToFloatV(v: Vector3|list|tuple,) -> float3:
+ """."""
+ ...
+def Vector3Transform(v: Vector3|list|tuple,mat: Matrix|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Unproject(source: Vector3|list|tuple,projection: Matrix|list|tuple,view: Matrix|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Zero() -> Vector3:
+ """."""
+ ...
+def Vector4Add(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4AddValue(v: Vector4|list|tuple,add: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Distance(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4DistanceSqr(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4Divide(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4DotProduct(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4Equals(p: Vector4|list|tuple,q: Vector4|list|tuple,) -> int:
+ """."""
+ ...
+def Vector4Invert(v: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4Length(v: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4LengthSqr(v: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4Lerp(v1: Vector4|list|tuple,v2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Max(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4Min(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4MoveTowards(v: Vector4|list|tuple,target: Vector4|list|tuple,maxDistance: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Multiply(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4Negate(v: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4Normalize(v: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4One() -> Vector4:
+ """."""
+ ...
+def Vector4Scale(v: Vector4|list|tuple,scale: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Subtract(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4SubtractValue(v: Vector4|list|tuple,add: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Zero() -> Vector4:
+ """."""
+ ...
+def WaitTime(seconds: float,) -> None:
+ """Wait for some time (halt program execution)."""
+ ...
+def WaveCopy(wave: Wave|list|tuple,) -> Wave:
+ """Copy a wave to a new wave."""
+ ...
+def WaveCrop(wave: Any|list|tuple,initFrame: int,finalFrame: int,) -> None:
+ """Crop a wave to defined frames range."""
+ ...
+def WaveFormat(wave: Any|list|tuple,sampleRate: int,sampleSize: int,channels: int,) -> None:
+ """Convert wave data to desired format."""
+ ...
+def WindowShouldClose() -> bool:
+ """Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)."""
+ ...
+def Wrap(value: float,min_1: float,max_2: float,) -> float:
+ """."""
+ ...
+def glfwCreateCursor(image: Any|list|tuple,xhot: int,yhot: int,) -> Any:
+ """."""
+ ...
+def glfwCreateStandardCursor(shape: int,) -> Any:
+ """."""
+ ...
+def glfwCreateWindow(width: int,height: int,title: bytes,monitor: Any|list|tuple,share: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwDefaultWindowHints() -> None:
+ """."""
+ ...
+def glfwDestroyCursor(cursor: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwDestroyWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwExtensionSupported(extension: bytes,) -> int:
+ """."""
+ ...
+def glfwFocusWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwGetClipboardString(window: Any|list|tuple,) -> bytes:
+ """."""
+ ...
+def glfwGetCurrentContext() -> Any:
+ """."""
+ ...
+def glfwGetCursorPos(window: Any|list|tuple,xpos: Any,ypos: Any,) -> None:
+ """."""
+ ...
+def glfwGetError(description: list[bytes],) -> int:
+ """."""
+ ...
+def glfwGetFramebufferSize(window: Any|list|tuple,width: Any,height: Any,) -> None:
+ """."""
+ ...
+def glfwGetGamepadName(jid: int,) -> bytes:
+ """."""
+ ...
+def glfwGetGamepadState(jid: int,state: Any|list|tuple,) -> int:
+ """."""
+ ...
+def glfwGetGammaRamp(monitor: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwGetInputMode(window: Any|list|tuple,mode: int,) -> int:
+ """."""
+ ...
+def glfwGetJoystickAxes(jid: int,count: Any,) -> Any:
+ """."""
+ ...
+def glfwGetJoystickButtons(jid: int,count: Any,) -> bytes:
+ """."""
+ ...
+def glfwGetJoystickGUID(jid: int,) -> bytes:
+ """."""
+ ...
+def glfwGetJoystickHats(jid: int,count: Any,) -> bytes:
+ """."""
+ ...
+def glfwGetJoystickName(jid: int,) -> bytes:
+ """."""
+ ...
+def glfwGetJoystickUserPointer(jid: int,) -> Any:
+ """."""
+ ...
+def glfwGetKey(window: Any|list|tuple,key: int,) -> int:
+ """."""
+ ...
+def glfwGetKeyName(key: int,scancode: int,) -> bytes:
+ """."""
+ ...
+def glfwGetKeyScancode(key: int,) -> int:
+ """."""
+ ...
+def glfwGetMonitorContentScale(monitor: Any|list|tuple,xscale: Any,yscale: Any,) -> None:
+ """."""
+ ...
+def glfwGetMonitorName(monitor: Any|list|tuple,) -> bytes:
+ """."""
+ ...
+def glfwGetMonitorPhysicalSize(monitor: Any|list|tuple,widthMM: Any,heightMM: Any,) -> None:
+ """."""
+ ...
+def glfwGetMonitorPos(monitor: Any|list|tuple,xpos: Any,ypos: Any,) -> None:
+ """."""
+ ...
+def glfwGetMonitorUserPointer(monitor: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwGetMonitorWorkarea(monitor: Any|list|tuple,xpos: Any,ypos: Any,width: Any,height: Any,) -> None:
+ """."""
+ ...
+def glfwGetMonitors(count: Any,) -> Any:
+ """."""
+ ...
+def glfwGetMouseButton(window: Any|list|tuple,button: int,) -> int:
+ """."""
+ ...
+def glfwGetPlatform() -> int:
+ """."""
+ ...
+def glfwGetPrimaryMonitor() -> Any:
+ """."""
+ ...
+def glfwGetProcAddress(procname: bytes,) -> Any:
+ """."""
+ ...
+def glfwGetRequiredInstanceExtensions(count: Any,) -> list[bytes]:
+ """."""
+ ...
+def glfwGetTime() -> float:
+ """."""
+ ...
+def glfwGetTimerFrequency() -> int:
+ """."""
+ ...
+def glfwGetTimerValue() -> int:
+ """."""
+ ...
+def glfwGetVersion(major: Any,minor: Any,rev: Any,) -> None:
+ """."""
+ ...
+def glfwGetVersionString() -> bytes:
+ """."""
+ ...
+def glfwGetVideoMode(monitor: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwGetVideoModes(monitor: Any|list|tuple,count: Any,) -> Any:
+ """."""
+ ...
+def glfwGetWindowAttrib(window: Any|list|tuple,attrib: int,) -> int:
+ """."""
+ ...
+def glfwGetWindowContentScale(window: Any|list|tuple,xscale: Any,yscale: Any,) -> None:
+ """."""
+ ...
+def glfwGetWindowFrameSize(window: Any|list|tuple,left: Any,top: Any,right: Any,bottom: Any,) -> None:
+ """."""
+ ...
+def glfwGetWindowMonitor(window: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwGetWindowOpacity(window: Any|list|tuple,) -> float:
+ """."""
+ ...
+def glfwGetWindowPos(window: Any|list|tuple,xpos: Any,ypos: Any,) -> None:
+ """."""
+ ...
+def glfwGetWindowSize(window: Any|list|tuple,width: Any,height: Any,) -> None:
+ """."""
+ ...
+def glfwGetWindowTitle(window: Any|list|tuple,) -> bytes:
+ """."""
+ ...
+def glfwGetWindowUserPointer(window: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwHideWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwIconifyWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwInit() -> int:
+ """."""
+ ...
+def glfwInitAllocator(allocator: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwInitHint(hint: int,value: int,) -> None:
+ """."""
+ ...
+def glfwJoystickIsGamepad(jid: int,) -> int:
+ """."""
+ ...
+def glfwJoystickPresent(jid: int,) -> int:
+ """."""
+ ...
+def glfwMakeContextCurrent(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwMaximizeWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwPlatformSupported(platform: int,) -> int:
+ """."""
+ ...
+def glfwPollEvents() -> None:
+ """."""
+ ...
+def glfwPostEmptyEvent() -> None:
+ """."""
+ ...
+def glfwRawMouseMotionSupported() -> int:
+ """."""
+ ...
+def glfwRequestWindowAttention(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwRestoreWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSetCharCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetCharModsCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetClipboardString(window: Any|list|tuple,string: bytes,) -> None:
+ """."""
+ ...
+def glfwSetCursor(window: Any|list|tuple,cursor: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSetCursorEnterCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetCursorPos(window: Any|list|tuple,xpos: float,ypos: float,) -> None:
+ """."""
+ ...
+def glfwSetCursorPosCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetDropCallback(window: Any|list|tuple,callback: list[bytes]|list|tuple,) -> list[bytes]:
+ """."""
+ ...
+def glfwSetErrorCallback(callback: bytes,) -> bytes:
+ """."""
+ ...
+def glfwSetFramebufferSizeCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetGamma(monitor: Any|list|tuple,gamma: float,) -> None:
+ """."""
+ ...
+def glfwSetGammaRamp(monitor: Any|list|tuple,ramp: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSetInputMode(window: Any|list|tuple,mode: int,value: int,) -> None:
+ """."""
+ ...
+def glfwSetJoystickCallback(callback: Any,) -> Any:
+ """."""
+ ...
+def glfwSetJoystickUserPointer(jid: int,pointer: Any,) -> None:
+ """."""
+ ...
+def glfwSetKeyCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetMonitorCallback(callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetMonitorUserPointer(monitor: Any|list|tuple,pointer: Any,) -> None:
+ """."""
+ ...
+def glfwSetMouseButtonCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetScrollCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetTime(time: float,) -> None:
+ """."""
+ ...
+def glfwSetWindowAspectRatio(window: Any|list|tuple,numer: int,denom: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowAttrib(window: Any|list|tuple,attrib: int,value: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowCloseCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowContentScaleCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowFocusCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowIcon(window: Any|list|tuple,count: int,images: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSetWindowIconifyCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowMaximizeCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowMonitor(window: Any|list|tuple,monitor: Any|list|tuple,xpos: int,ypos: int,width: int,height: int,refreshRate: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowOpacity(window: Any|list|tuple,opacity: float,) -> None:
+ """."""
+ ...
+def glfwSetWindowPos(window: Any|list|tuple,xpos: int,ypos: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowPosCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowRefreshCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowShouldClose(window: Any|list|tuple,value: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowSize(window: Any|list|tuple,width: int,height: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowSizeCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowSizeLimits(window: Any|list|tuple,minwidth: int,minheight: int,maxwidth: int,maxheight: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowTitle(window: Any|list|tuple,title: bytes,) -> None:
+ """."""
+ ...
+def glfwSetWindowUserPointer(window: Any|list|tuple,pointer: Any,) -> None:
+ """."""
+ ...
+def glfwShowWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSwapBuffers(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSwapInterval(interval: int,) -> None:
+ """."""
+ ...
+def glfwTerminate() -> None:
+ """."""
+ ...
+def glfwUpdateGamepadMappings(string: bytes,) -> int:
+ """."""
+ ...
+def glfwVulkanSupported() -> int:
+ """."""
+ ...
+def glfwWaitEvents() -> None:
+ """."""
+ ...
+def glfwWaitEventsTimeout(timeout: float,) -> None:
+ """."""
+ ...
+def glfwWindowHint(hint: int,value: int,) -> None:
+ """."""
+ ...
+def glfwWindowHintString(hint: int,value: bytes,) -> None:
+ """."""
+ ...
+def glfwWindowShouldClose(window: Any|list|tuple,) -> int:
+ """."""
+ ...
+def rlActiveDrawBuffers(count: int,) -> None:
+ """Activate multiple draw color buffers."""
+ ...
+def rlActiveTextureSlot(slot: int,) -> None:
+ """Select and active a texture slot."""
+ ...
+def rlBegin(mode: int,) -> None:
+ """Initialize drawing mode (how to organize vertex)."""
+ ...
+def rlBindFramebuffer(target: int,framebuffer: int,) -> None:
+ """Bind framebuffer (FBO)."""
+ ...
+def rlBindImageTexture(id: int,index: int,format: int,readonly: bool,) -> None:
+ """Bind image texture."""
+ ...
+def rlBindShaderBuffer(id: int,index: int,) -> None:
+ """Bind SSBO buffer."""
+ ...
+def rlBlitFramebuffer(srcX: int,srcY: int,srcWidth: int,srcHeight: int,dstX: int,dstY: int,dstWidth: int,dstHeight: int,bufferMask: int,) -> None:
+ """Blit active framebuffer to main framebuffer."""
+ ...
+def rlCheckErrors() -> None:
+ """Check and log OpenGL error codes."""
+ ...
+def rlCheckRenderBatchLimit(vCount: int,) -> bool:
+ """Check internal buffer overflow for a given number of vertex."""
+ ...
+def rlClearColor(r: bytes,g: bytes,b: bytes,a: bytes,) -> None:
+ """Clear color buffer with color."""
+ ...
+def rlClearScreenBuffers() -> None:
+ """Clear used screen buffers (color and depth)."""
+ ...
+def rlColor3f(x: float,y: float,z: float,) -> None:
+ """Define one vertex (color) - 3 float."""
+ ...
+def rlColor4f(x: float,y: float,z: float,w: float,) -> None:
+ """Define one vertex (color) - 4 float."""
+ ...
+def rlColor4ub(r: bytes,g: bytes,b: bytes,a: bytes,) -> None:
+ """Define one vertex (color) - 4 byte."""
+ ...
+def rlColorMask(r: bool,g: bool,b: bool,a: bool,) -> None:
+ """Color mask control."""
+ ...
+def rlCompileShader(shaderCode: bytes,type: int,) -> int:
+ """Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)."""
+ ...
+def rlComputeShaderDispatch(groupX: int,groupY: int,groupZ: int,) -> None:
+ """Dispatch compute shader (equivalent to *draw* for graphics pipeline)."""
+ ...
+def rlCopyShaderBuffer(destId: int,srcId: int,destOffset: int,srcOffset: int,count: int,) -> None:
+ """Copy SSBO data between buffers."""
+ ...
+def rlCubemapParameters(id: int,param: int,value: int,) -> None:
+ """Set cubemap parameters (filter, wrap)."""
+ ...
+def rlDisableBackfaceCulling() -> None:
+ """Disable backface culling."""
+ ...
+def rlDisableColorBlend() -> None:
+ """Disable color blending."""
+ ...
+def rlDisableDepthMask() -> None:
+ """Disable depth write."""
+ ...
+def rlDisableDepthTest() -> None:
+ """Disable depth test."""
+ ...
+def rlDisableFramebuffer() -> None:
+ """Disable render texture (fbo), return to default framebuffer."""
+ ...
+def rlDisableScissorTest() -> None:
+ """Disable scissor test."""
+ ...
+def rlDisableShader() -> None:
+ """Disable shader program."""
+ ...
+def rlDisableSmoothLines() -> None:
+ """Disable line aliasing."""
+ ...
+def rlDisableStereoRender() -> None:
+ """Disable stereo rendering."""
+ ...
+def rlDisableTexture() -> None:
+ """Disable texture."""
+ ...
+def rlDisableTextureCubemap() -> None:
+ """Disable texture cubemap."""
+ ...
+def rlDisableVertexArray() -> None:
+ """Disable vertex array (VAO, if supported)."""
+ ...
+def rlDisableVertexAttribute(index: int,) -> None:
+ """Disable vertex attribute index."""
+ ...
+def rlDisableVertexBuffer() -> None:
+ """Disable vertex buffer (VBO)."""
+ ...
+def rlDisableVertexBufferElement() -> None:
+ """Disable vertex buffer element (VBO element)."""
+ ...
+def rlDisableWireMode() -> None:
+ """Disable wire (and point) mode."""
+ ...
+def rlDrawRenderBatch(batch: Any|list|tuple,) -> None:
+ """Draw render batch data (Update->Draw->Reset)."""
+ ...
+def rlDrawRenderBatchActive() -> None:
+ """Update and draw internal render batch."""
+ ...
+def rlDrawVertexArray(offset: int,count: int,) -> None:
+ """Draw vertex array (currently active vao)."""
+ ...
+def rlDrawVertexArrayElements(offset: int,count: int,buffer: Any,) -> None:
+ """Draw vertex array elements."""
+ ...
+def rlDrawVertexArrayElementsInstanced(offset: int,count: int,buffer: Any,instances: int,) -> None:
+ """Draw vertex array elements with instancing."""
+ ...
+def rlDrawVertexArrayInstanced(offset: int,count: int,instances: int,) -> None:
+ """Draw vertex array (currently active vao) with instancing."""
+ ...
+def rlEnableBackfaceCulling() -> None:
+ """Enable backface culling."""
+ ...
+def rlEnableColorBlend() -> None:
+ """Enable color blending."""
+ ...
+def rlEnableDepthMask() -> None:
+ """Enable depth write."""
+ ...
+def rlEnableDepthTest() -> None:
+ """Enable depth test."""
+ ...
+def rlEnableFramebuffer(id: int,) -> None:
+ """Enable render texture (fbo)."""
+ ...
+def rlEnablePointMode() -> None:
+ """Enable point mode."""
+ ...
+def rlEnableScissorTest() -> None:
+ """Enable scissor test."""
+ ...
+def rlEnableShader(id: int,) -> None:
+ """Enable shader program."""
+ ...
+def rlEnableSmoothLines() -> None:
+ """Enable line aliasing."""
+ ...
+def rlEnableStereoRender() -> None:
+ """Enable stereo rendering."""
+ ...
+def rlEnableTexture(id: int,) -> None:
+ """Enable texture."""
+ ...
+def rlEnableTextureCubemap(id: int,) -> None:
+ """Enable texture cubemap."""
+ ...
+def rlEnableVertexArray(vaoId: int,) -> bool:
+ """Enable vertex array (VAO, if supported)."""
+ ...
+def rlEnableVertexAttribute(index: int,) -> None:
+ """Enable vertex attribute index."""
+ ...
+def rlEnableVertexBuffer(id: int,) -> None:
+ """Enable vertex buffer (VBO)."""
+ ...
+def rlEnableVertexBufferElement(id: int,) -> None:
+ """Enable vertex buffer element (VBO element)."""
+ ...
+def rlEnableWireMode() -> None:
+ """Enable wire mode."""
+ ...
+def rlEnd() -> None:
+ """Finish vertex providing."""
+ ...
+def rlFramebufferAttach(fboId: int,texId: int,attachType: int,texType: int,mipLevel: int,) -> None:
+ """Attach texture/renderbuffer to a framebuffer."""
+ ...
+def rlFramebufferComplete(id: int,) -> bool:
+ """Verify framebuffer is complete."""
+ ...
+def rlFrustum(left: float,right: float,bottom: float,top: float,znear: float,zfar: float,) -> None:
+ """."""
+ ...
+def rlGenTextureMipmaps(id: int,width: int,height: int,format: int,mipmaps: Any,) -> None:
+ """Generate mipmap data for selected texture."""
+ ...
+def rlGetActiveFramebuffer() -> int:
+ """Get the currently active render texture (fbo), 0 for default framebuffer."""
+ ...
+def rlGetCullDistanceFar() -> float:
+ """Get cull plane distance far."""
+ ...
+def rlGetCullDistanceNear() -> float:
+ """Get cull plane distance near."""
+ ...
+def rlGetFramebufferHeight() -> int:
+ """Get default framebuffer height."""
+ ...
+def rlGetFramebufferWidth() -> int:
+ """Get default framebuffer width."""
+ ...
+def rlGetGlTextureFormats(format: int,glInternalFormat: Any,glFormat: Any,glType: Any,) -> None:
+ """Get OpenGL internal formats."""
+ ...
+def rlGetLineWidth() -> float:
+ """Get the line drawing width."""
+ ...
+def rlGetLocationAttrib(shaderId: int,attribName: bytes,) -> int:
+ """Get shader location attribute."""
+ ...
+def rlGetLocationUniform(shaderId: int,uniformName: bytes,) -> int:
+ """Get shader location uniform."""
+ ...
+def rlGetMatrixModelview() -> Matrix:
+ """Get internal modelview matrix."""
+ ...
+def rlGetMatrixProjection() -> Matrix:
+ """Get internal projection matrix."""
+ ...
+def rlGetMatrixProjectionStereo(eye: int,) -> Matrix:
+ """Get internal projection matrix for stereo render (selected eye)."""
+ ...
+def rlGetMatrixTransform() -> Matrix:
+ """Get internal accumulated transform matrix."""
+ ...
+def rlGetMatrixViewOffsetStereo(eye: int,) -> Matrix:
+ """Get internal view offset matrix for stereo render (selected eye)."""
+ ...
+def rlGetPixelFormatName(format: int,) -> bytes:
+ """Get name string for pixel format."""
+ ...
+def rlGetShaderBufferSize(id: int,) -> int:
+ """Get SSBO buffer size."""
+ ...
+def rlGetShaderIdDefault() -> int:
+ """Get default shader id."""
+ ...
+def rlGetShaderLocsDefault() -> Any:
+ """Get default shader locations."""
+ ...
+def rlGetTextureIdDefault() -> int:
+ """Get default texture id."""
+ ...
+def rlGetVersion() -> int:
+ """Get current OpenGL version."""
+ ...
+def rlIsStereoRenderEnabled() -> bool:
+ """Check if stereo render is enabled."""
+ ...
+def rlLoadComputeShaderProgram(shaderId: int,) -> int:
+ """Load compute shader program."""
+ ...
+def rlLoadDrawCube() -> None:
+ """Load and draw a cube."""
+ ...
+def rlLoadDrawQuad() -> None:
+ """Load and draw a quad."""
+ ...
+def rlLoadExtensions(loader: Any,) -> None:
+ """Load OpenGL extensions (loader function required)."""
+ ...
+def rlLoadFramebuffer() -> int:
+ """Load an empty framebuffer."""
+ ...
+def rlLoadIdentity() -> None:
+ """Reset current matrix to identity matrix."""
+ ...
+def rlLoadRenderBatch(numBuffers: int,bufferElements: int,) -> rlRenderBatch:
+ """Load a render batch system."""
+ ...
+def rlLoadShaderBuffer(size: int,data: Any,usageHint: int,) -> int:
+ """Load shader storage buffer object (SSBO)."""
+ ...
+def rlLoadShaderCode(vsCode: bytes,fsCode: bytes,) -> int:
+ """Load shader from code strings."""
+ ...
+def rlLoadShaderProgram(vShaderId: int,fShaderId: int,) -> int:
+ """Load custom shader program."""
+ ...
+def rlLoadTexture(data: Any,width: int,height: int,format: int,mipmapCount: int,) -> int:
+ """Load texture data."""
+ ...
+def rlLoadTextureCubemap(data: Any,size: int,format: int,mipmapCount: int,) -> int:
+ """Load texture cubemap data."""
+ ...
+def rlLoadTextureDepth(width: int,height: int,useRenderBuffer: bool,) -> int:
+ """Load depth texture/renderbuffer (to be attached to fbo)."""
+ ...
+def rlLoadVertexArray() -> int:
+ """Load vertex array (vao) if supported."""
+ ...
+def rlLoadVertexBuffer(buffer: Any,size: int,dynamic: bool,) -> int:
+ """Load a vertex buffer object."""
+ ...
+def rlLoadVertexBufferElement(buffer: Any,size: int,dynamic: bool,) -> int:
+ """Load vertex buffer elements object."""
+ ...
+def rlMatrixMode(mode: int,) -> None:
+ """Choose the current matrix to be transformed."""
+ ...
+def rlMultMatrixf(matf: Any,) -> None:
+ """Multiply the current matrix by another matrix."""
+ ...
+def rlNormal3f(x: float,y: float,z: float,) -> None:
+ """Define one vertex (normal) - 3 float."""
+ ...
+def rlOrtho(left: float,right: float,bottom: float,top: float,znear: float,zfar: float,) -> None:
+ """."""
+ ...
+def rlPopMatrix() -> None:
+ """Pop latest inserted matrix from stack."""
+ ...
+def rlPushMatrix() -> None:
+ """Push the current matrix to stack."""
+ ...
+def rlReadScreenPixels(width: int,height: int,) -> bytes:
+ """Read screen pixel data (color buffer)."""
+ ...
+def rlReadShaderBuffer(id: int,dest: Any,count: int,offset: int,) -> None:
+ """Read SSBO buffer data (GPU->CPU)."""
+ ...
+def rlReadTexturePixels(id: int,width: int,height: int,format: int,) -> Any:
+ """Read texture pixel data."""
+ ...
+def rlRotatef(angle: float,x: float,y: float,z: float,) -> None:
+ """Multiply the current matrix by a rotation matrix."""
+ ...
+def rlScalef(x: float,y: float,z: float,) -> None:
+ """Multiply the current matrix by a scaling matrix."""
+ ...
+def rlScissor(x: int,y: int,width: int,height: int,) -> None:
+ """Scissor test."""
+ ...
+def rlSetBlendFactors(glSrcFactor: int,glDstFactor: int,glEquation: int,) -> None:
+ """Set blending mode factor and equation (using OpenGL factors)."""
+ ...
+def rlSetBlendFactorsSeparate(glSrcRGB: int,glDstRGB: int,glSrcAlpha: int,glDstAlpha: int,glEqRGB: int,glEqAlpha: int,) -> None:
+ """Set blending mode factors and equations separately (using OpenGL factors)."""
+ ...
+def rlSetBlendMode(mode: int,) -> None:
+ """Set blending mode."""
+ ...
+def rlSetClipPlanes(nearPlane: float,farPlane: float,) -> None:
+ """Set clip planes distances."""
+ ...
+def rlSetCullFace(mode: int,) -> None:
+ """Set face culling mode."""
+ ...
+def rlSetFramebufferHeight(height: int,) -> None:
+ """Set current framebuffer height."""
+ ...
+def rlSetFramebufferWidth(width: int,) -> None:
+ """Set current framebuffer width."""
+ ...
+def rlSetLineWidth(width: float,) -> None:
+ """Set the line drawing width."""
+ ...
+def rlSetMatrixModelview(view: Matrix|list|tuple,) -> None:
+ """Set a custom modelview matrix (replaces internal modelview matrix)."""
+ ...
+def rlSetMatrixProjection(proj: Matrix|list|tuple,) -> None:
+ """Set a custom projection matrix (replaces internal projection matrix)."""
+ ...
+def rlSetMatrixProjectionStereo(right: Matrix|list|tuple,left: Matrix|list|tuple,) -> None:
+ """Set eyes projection matrices for stereo rendering."""
+ ...
+def rlSetMatrixViewOffsetStereo(right: Matrix|list|tuple,left: Matrix|list|tuple,) -> None:
+ """Set eyes view offsets matrices for stereo rendering."""
+ ...
+def rlSetRenderBatchActive(batch: Any|list|tuple,) -> None:
+ """Set the active render batch for rlgl (NULL for default internal)."""
+ ...
+def rlSetShader(id: int,locs: Any,) -> None:
+ """Set shader currently active (id and locations)."""
+ ...
+def rlSetTexture(id: int,) -> None:
+ """Set current texture for render batch and check buffers limits."""
+ ...
+def rlSetUniform(locIndex: int,value: Any,uniformType: int,count: int,) -> None:
+ """Set shader value uniform."""
+ ...
+def rlSetUniformMatrices(locIndex: int,mat: Any|list|tuple,count: int,) -> None:
+ """Set shader value matrices."""
+ ...
+def rlSetUniformMatrix(locIndex: int,mat: Matrix|list|tuple,) -> None:
+ """Set shader value matrix."""
+ ...
+def rlSetUniformSampler(locIndex: int,textureId: int,) -> None:
+ """Set shader value sampler."""
+ ...
+def rlSetVertexAttribute(index: int,compSize: int,type: int,normalized: bool,stride: int,offset: int,) -> None:
+ """Set vertex attribute data configuration."""
+ ...
+def rlSetVertexAttributeDefault(locIndex: int,value: Any,attribType: int,count: int,) -> None:
+ """Set vertex attribute default value, when attribute to provided."""
+ ...
+def rlSetVertexAttributeDivisor(index: int,divisor: int,) -> None:
+ """Set vertex attribute data divisor."""
+ ...
+def rlTexCoord2f(x: float,y: float,) -> None:
+ """Define one vertex (texture coordinate) - 2 float."""
+ ...
+def rlTextureParameters(id: int,param: int,value: int,) -> None:
+ """Set texture parameters (filter, wrap)."""
+ ...
+def rlTranslatef(x: float,y: float,z: float,) -> None:
+ """Multiply the current matrix by a translation matrix."""
+ ...
+def rlUnloadFramebuffer(id: int,) -> None:
+ """Delete framebuffer from GPU."""
+ ...
+def rlUnloadRenderBatch(batch: rlRenderBatch|list|tuple,) -> None:
+ """Unload render batch system."""
+ ...
+def rlUnloadShaderBuffer(ssboId: int,) -> None:
+ """Unload shader storage buffer object (SSBO)."""
+ ...
+def rlUnloadShaderProgram(id: int,) -> None:
+ """Unload shader program."""
+ ...
+def rlUnloadTexture(id: int,) -> None:
+ """Unload texture from GPU memory."""
+ ...
+def rlUnloadVertexArray(vaoId: int,) -> None:
+ """Unload vertex array (vao)."""
+ ...
+def rlUnloadVertexBuffer(vboId: int,) -> None:
+ """Unload vertex buffer object."""
+ ...
+def rlUpdateShaderBuffer(id: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update SSBO buffer data."""
+ ...
+def rlUpdateTexture(id: int,offsetX: int,offsetY: int,width: int,height: int,format: int,data: Any,) -> None:
+ """Update texture with new data on GPU."""
+ ...
+def rlUpdateVertexBuffer(bufferId: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update vertex buffer object data on GPU buffer."""
+ ...
+def rlUpdateVertexBufferElements(id: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update vertex buffer elements data on GPU buffer."""
+ ...
+def rlVertex2f(x: float,y: float,) -> None:
+ """Define one vertex (position) - 2 float."""
+ ...
+def rlVertex2i(x: int,y: int,) -> None:
+ """Define one vertex (position) - 2 int."""
+ ...
+def rlVertex3f(x: float,y: float,z: float,) -> None:
+ """Define one vertex (position) - 3 float."""
+ ...
+def rlViewport(x: int,y: int,width: int,height: int,) -> None:
+ """Set the viewport area."""
+ ...
+def rlglClose() -> None:
+ """De-initialize rlgl (buffers, shaders, textures)."""
+ ...
+def rlglInit(width: int,height: int,) -> None:
+ """Initialize rlgl (buffers, shaders, textures, states)."""
+ ...
+class AudioStream:
+ buffer: Any
+ processor: Any
+ sampleRate: int
+ sampleSize: int
+ channels: int
+class AutomationEvent:
+ frame: int
+ type: int
+ params: list
+class AutomationEventList:
+ capacity: int
+ count: int
+ events: Any
+BlendMode = int
+class BoneInfo:
+ name: bytes
+ parent: int
+class BoundingBox:
+ min: Vector3
+ max: Vector3
+class Camera:
+ position: Vector3
+ target: Vector3
+ up: Vector3
+ fovy: float
+ projection: int
+class Camera2D:
+ offset: Vector2
+ target: Vector2
+ rotation: float
+ zoom: float
+class Camera3D:
+ position: Vector3
+ target: Vector3
+ up: Vector3
+ fovy: float
+ projection: int
+CameraMode = int
+CameraProjection = int
+class Color:
+ r: bytes
+ g: bytes
+ b: bytes
+ a: bytes
+ConfigFlags = int
+CubemapLayout = int
+class FilePathList:
+ capacity: int
+ count: int
+ paths: list[bytes]
+class Font:
+ baseSize: int
+ glyphCount: int
+ glyphPadding: int
+ texture: Texture
+ recs: Any
+ glyphs: Any
+FontType = int
+class GLFWallocator:
+ allocate: Any
+ reallocate: Any
+ deallocate: Any
+ user: Any
+class GLFWcursor:
+ ...
+class GLFWgamepadstate:
+ buttons: bytes
+ axes: list
+class GLFWgammaramp:
+ red: Any
+ green: Any
+ blue: Any
+ size: int
+class GLFWimage:
+ width: int
+ height: int
+ pixels: bytes
+class GLFWmonitor:
+ ...
+class GLFWvidmode:
+ width: int
+ height: int
+ redBits: int
+ greenBits: int
+ blueBits: int
+ refreshRate: int
+class GLFWwindow:
+ ...
+GamepadAxis = int
+GamepadButton = int
+Gesture = int
+class GlyphInfo:
+ value: int
+ offsetX: int
+ offsetY: int
+ advanceX: int
+ image: Image
+GuiCheckBoxProperty = int
+GuiColorPickerProperty = int
+GuiComboBoxProperty = int
+GuiControl = int
+GuiControlProperty = int
+GuiDefaultProperty = int
+GuiDropdownBoxProperty = int
+GuiIconName = int
+GuiListViewProperty = int
+GuiProgressBarProperty = int
+GuiScrollBarProperty = int
+GuiSliderProperty = int
+GuiSpinnerProperty = int
+GuiState = int
+class GuiStyleProp:
+ controlId: int
+ propertyId: int
+ propertyValue: int
+GuiTextAlignment = int
+GuiTextAlignmentVertical = int
+GuiTextBoxProperty = int
+GuiTextWrapMode = int
+GuiToggleProperty = int
+class Image:
+ data: Any
+ width: int
+ height: int
+ mipmaps: int
+ format: int
+KeyboardKey = int
+class Mat2:
+ m00: float
+ m01: float
+ m10: float
+ m11: float
+class Material:
+ shader: Shader
+ maps: Any
+ params: list
+class MaterialMap:
+ texture: Texture
+ color: Color
+ value: float
+MaterialMapIndex = int
+class Matrix:
+ m0: float
+ m4: float
+ m8: float
+ m12: float
+ m1: float
+ m5: float
+ m9: float
+ m13: float
+ m2: float
+ m6: float
+ m10: float
+ m14: float
+ m3: float
+ m7: float
+ m11: float
+ m15: float
+class Mesh:
+ vertexCount: int
+ triangleCount: int
+ vertices: Any
+ texcoords: Any
+ texcoords2: Any
+ normals: Any
+ tangents: Any
+ colors: bytes
+ indices: Any
+ animVertices: Any
+ animNormals: Any
+ boneIds: bytes
+ boneWeights: Any
+ boneMatrices: Any
+ boneCount: int
+ vaoId: int
+ vboId: Any
+class Model:
+ transform: Matrix
+ meshCount: int
+ materialCount: int
+ meshes: Any
+ materials: Any
+ meshMaterial: Any
+ boneCount: int
+ bones: Any
+ bindPose: Any
+class ModelAnimation:
+ boneCount: int
+ frameCount: int
+ bones: Any
+ framePoses: Any
+ name: bytes
+MouseButton = int
+MouseCursor = int
+class Music:
+ stream: AudioStream
+ frameCount: int
+ looping: bool
+ ctxType: int
+ ctxData: Any
+class NPatchInfo:
+ source: Rectangle
+ left: int
+ top: int
+ right: int
+ bottom: int
+ layout: int
+NPatchLayout = int
+class PhysicsBodyData:
+ id: int
+ enabled: bool
+ position: Vector2
+ velocity: Vector2
+ force: Vector2
+ angularVelocity: float
+ torque: float
+ orient: float
+ inertia: float
+ inverseInertia: float
+ mass: float
+ inverseMass: float
+ staticFriction: float
+ dynamicFriction: float
+ restitution: float
+ useGravity: bool
+ isGrounded: bool
+ freezeOrient: bool
+ shape: PhysicsShape
+class PhysicsManifoldData:
+ id: int
+ bodyA: Any
+ bodyB: Any
+ penetration: float
+ normal: Vector2
+ contacts: list
+ contactsCount: int
+ restitution: float
+ dynamicFriction: float
+ staticFriction: float
+class PhysicsShape:
+ type: PhysicsShapeType
+ body: Any
+ radius: float
+ transform: Mat2
+ vertexData: PolygonData
+PhysicsShapeType = int
+PixelFormat = int
+class PolygonData:
+ vertexCount: int
+ positions: list
+ normals: list
+class Quaternion:
+ x: float
+ y: float
+ z: float
+ w: float
+class Ray:
+ position: Vector3
+ direction: Vector3
+class RayCollision:
+ hit: bool
+ distance: float
+ point: Vector3
+ normal: Vector3
+class Rectangle:
+ x: float
+ y: float
+ width: float
+ height: float
+class RenderTexture:
+ id: int
+ texture: Texture
+ depth: Texture
+class RenderTexture2D:
+ id: int
+ texture: Texture
+ depth: Texture
+class Shader:
+ id: int
+ locs: Any
+ShaderAttributeDataType = int
+ShaderLocationIndex = int
+ShaderUniformDataType = int
+class Sound:
+ stream: AudioStream
+ frameCount: int
+class Texture:
+ id: int
+ width: int
+ height: int
+ mipmaps: int
+ format: int
+class Texture2D:
+ id: int
+ width: int
+ height: int
+ mipmaps: int
+ format: int
+class TextureCubemap:
+ id: int
+ width: int
+ height: int
+ mipmaps: int
+ format: int
+TextureFilter = int
+TextureWrap = int
+TraceLogLevel = int
+class Transform:
+ translation: Vector3
+ rotation: Vector4
+ scale: Vector3
+class Vector2:
+ x: float
+ y: float
+class Vector3:
+ x: float
+ y: float
+ z: float
+class Vector4:
+ x: float
+ y: float
+ z: float
+ w: float
+class VrDeviceInfo:
+ hResolution: int
+ vResolution: int
+ hScreenSize: float
+ vScreenSize: float
+ eyeToScreenDistance: float
+ lensSeparationDistance: float
+ interpupillaryDistance: float
+ lensDistortionValues: list
+ chromaAbCorrection: list
+class VrStereoConfig:
+ projection: list
+ viewOffset: list
+ leftLensCenter: list
+ rightLensCenter: list
+ leftScreenCenter: list
+ rightScreenCenter: list
+ scale: list
+ scaleIn: list
+class Wave:
+ frameCount: int
+ sampleRate: int
+ sampleSize: int
+ channels: int
+ data: Any
+class float16:
+ v: list
+class float3:
+ v: list
+class rAudioBuffer:
+ ...
+class rAudioProcessor:
+ ...
+rlBlendMode = int
+rlCullMode = int
+class rlDrawCall:
+ mode: int
+ vertexCount: int
+ vertexAlignment: int
+ textureId: int
+rlFramebufferAttachTextureType = int
+rlFramebufferAttachType = int
+rlGlVersion = int
+rlPixelFormat = int
+class rlRenderBatch:
+ bufferCount: int
+ currentBuffer: int
+ vertexBuffer: Any
+ draws: Any
+ drawCounter: int
+ currentDepth: float
+rlShaderAttributeDataType = int
+rlShaderLocationIndex = int
+rlShaderUniformDataType = int
+rlTextureFilter = int
+rlTraceLogLevel = int
+class rlVertexBuffer:
+ elementCount: int
+ vertices: Any
+ texcoords: Any
+ normals: Any
+ colors: bytes
+ indices: Any
+ vaoId: int
+ vboId: list
+
+LIGHTGRAY : Color
+GRAY : Color
+DARKGRAY : Color
+YELLOW : Color
+GOLD : Color
+ORANGE : Color
+PINK : Color
+RED : Color
+MAROON : Color
+GREEN : Color
+LIME : Color
+DARKGREEN : Color
+SKYBLUE : Color
+BLUE : Color
+DARKBLUE : Color
+PURPLE : Color
+VIOLET : Color
+DARKPURPLE : Color
+BEIGE : Color
+BROWN : Color
+DARKBROWN : Color
+WHITE : Color
+BLACK : Color
+BLANK : Color
+MAGENTA : Color
+RAYWHITE : Color
+
diff --git a/dynamic/raylib/colors.py b/dynamic/raylib/colors.py
new file mode 100644
index 0000000..468e7ef
--- /dev/null
+++ b/dynamic/raylib/colors.py
@@ -0,0 +1,40 @@
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+LIGHTGRAY =( 200, 200, 200, 255 )
+GRAY =( 130, 130, 130, 255 )
+DARKGRAY =( 80, 80, 80, 255 )
+YELLOW =( 253, 249, 0, 255 )
+GOLD =( 255, 203, 0, 255 )
+ORANGE =( 255, 161, 0, 255 )
+PINK =( 255, 109, 194, 255 )
+RED =( 230, 41, 55, 255 )
+MAROON =( 190, 33, 55, 255 )
+GREEN =( 0, 228, 48, 255 )
+LIME =( 0, 158, 47, 255 )
+DARKGREEN =( 0, 117, 44, 255 )
+SKYBLUE =( 102, 191, 255, 255 )
+BLUE =( 0, 121, 241, 255 )
+DARKBLUE =( 0, 82, 172, 255 )
+PURPLE =( 200, 122, 255, 255 )
+VIOLET =( 135, 60, 190, 255 )
+DARKPURPLE =( 112, 31, 126, 255 )
+BEIGE =( 211, 176, 131, 255 )
+BROWN =( 127, 106, 79, 255 )
+DARKBROWN =( 76, 63, 47, 255 )
+WHITE =( 255, 255, 255, 255 )
+BLACK =( 0, 0, 0, 255 )
+BLANK =( 0, 0, 0, 0 )
+MAGENTA =( 255, 0, 255, 255 )
+RAYWHITE =( 245, 245, 245, 255 )
\ No newline at end of file
diff --git a/dynamic/raylib/defines.py b/dynamic/raylib/defines.py
new file mode 100644
index 0000000..fe706d3
--- /dev/null
+++ b/dynamic/raylib/defines.py
@@ -0,0 +1,508 @@
+import raylib
+
+RAYLIB_VERSION_MAJOR: int = 5
+RAYLIB_VERSION_MINOR: int = 5
+RAYLIB_VERSION_PATCH: int = 0
+RAYLIB_VERSION: str = "5.5"
+PI: float = 3.141592653589793
+DEG2RAD = PI / 180.0
+RAD2DEG = 180.0 / PI
+MOUSE_LEFT_BUTTON = raylib.MOUSE_BUTTON_LEFT
+MOUSE_RIGHT_BUTTON = raylib.MOUSE_BUTTON_RIGHT
+MOUSE_MIDDLE_BUTTON = raylib.MOUSE_BUTTON_MIDDLE
+MATERIAL_MAP_DIFFUSE = raylib.MATERIAL_MAP_ALBEDO
+MATERIAL_MAP_SPECULAR = raylib.MATERIAL_MAP_METALNESS
+SHADER_LOC_MAP_DIFFUSE = raylib.SHADER_LOC_MAP_ALBEDO
+SHADER_LOC_MAP_SPECULAR = raylib.SHADER_LOC_MAP_METALNESS
+EPSILON: float = 1e-06
+RLGL_VERSION: str = "5.0"
+RL_DEFAULT_BATCH_BUFFER_ELEMENTS: int = 8192
+RL_DEFAULT_BATCH_BUFFERS: int = 1
+RL_DEFAULT_BATCH_DRAWCALLS: int = 256
+RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS: int = 4
+RL_MAX_MATRIX_STACK_SIZE: int = 32
+RL_MAX_SHADER_LOCATIONS: int = 32
+RL_TEXTURE_WRAP_S: int = 10242
+RL_TEXTURE_WRAP_T: int = 10243
+RL_TEXTURE_MAG_FILTER: int = 10240
+RL_TEXTURE_MIN_FILTER: int = 10241
+RL_TEXTURE_FILTER_NEAREST: int = 9728
+RL_TEXTURE_FILTER_LINEAR: int = 9729
+RL_TEXTURE_FILTER_MIP_NEAREST: int = 9984
+RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR: int = 9986
+RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST: int = 9985
+RL_TEXTURE_FILTER_MIP_LINEAR: int = 9987
+RL_TEXTURE_FILTER_ANISOTROPIC: int = 12288
+RL_TEXTURE_MIPMAP_BIAS_RATIO: int = 16384
+RL_TEXTURE_WRAP_REPEAT: int = 10497
+RL_TEXTURE_WRAP_CLAMP: int = 33071
+RL_TEXTURE_WRAP_MIRROR_REPEAT: int = 33648
+RL_TEXTURE_WRAP_MIRROR_CLAMP: int = 34626
+RL_MODELVIEW: int = 5888
+RL_PROJECTION: int = 5889
+RL_TEXTURE: int = 5890
+RL_LINES: int = 1
+RL_TRIANGLES: int = 4
+RL_QUADS: int = 7
+RL_UNSIGNED_BYTE: int = 5121
+RL_FLOAT: int = 5126
+RL_STREAM_DRAW: int = 35040
+RL_STREAM_READ: int = 35041
+RL_STREAM_COPY: int = 35042
+RL_STATIC_DRAW: int = 35044
+RL_STATIC_READ: int = 35045
+RL_STATIC_COPY: int = 35046
+RL_DYNAMIC_DRAW: int = 35048
+RL_DYNAMIC_READ: int = 35049
+RL_DYNAMIC_COPY: int = 35050
+RL_FRAGMENT_SHADER: int = 35632
+RL_VERTEX_SHADER: int = 35633
+RL_COMPUTE_SHADER: int = 37305
+RL_ZERO: int = 0
+RL_ONE: int = 1
+RL_SRC_COLOR: int = 768
+RL_ONE_MINUS_SRC_COLOR: int = 769
+RL_SRC_ALPHA: int = 770
+RL_ONE_MINUS_SRC_ALPHA: int = 771
+RL_DST_ALPHA: int = 772
+RL_ONE_MINUS_DST_ALPHA: int = 773
+RL_DST_COLOR: int = 774
+RL_ONE_MINUS_DST_COLOR: int = 775
+RL_SRC_ALPHA_SATURATE: int = 776
+RL_CONSTANT_COLOR: int = 32769
+RL_ONE_MINUS_CONSTANT_COLOR: int = 32770
+RL_CONSTANT_ALPHA: int = 32771
+RL_ONE_MINUS_CONSTANT_ALPHA: int = 32772
+RL_FUNC_ADD: int = 32774
+RL_MIN: int = 32775
+RL_MAX: int = 32776
+RL_FUNC_SUBTRACT: int = 32778
+RL_FUNC_REVERSE_SUBTRACT: int = 32779
+RL_BLEND_EQUATION: int = 32777
+RL_BLEND_EQUATION_RGB: int = 32777
+RL_BLEND_EQUATION_ALPHA: int = 34877
+RL_BLEND_DST_RGB: int = 32968
+RL_BLEND_SRC_RGB: int = 32969
+RL_BLEND_DST_ALPHA: int = 32970
+RL_BLEND_SRC_ALPHA: int = 32971
+RL_BLEND_COLOR: int = 32773
+RL_READ_FRAMEBUFFER: int = 36008
+RL_DRAW_FRAMEBUFFER: int = 36009
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION: int = 0
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD: int = 1
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL: int = 2
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR: int = 3
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT: int = 4
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2: int = 5
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES: int = 6
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS: int = 7
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS: int = 8
+RL_SHADER_LOC_MAP_DIFFUSE = raylib.RL_SHADER_LOC_MAP_ALBEDO
+RL_SHADER_LOC_MAP_SPECULAR = raylib.RL_SHADER_LOC_MAP_METALNESS
+GL_SHADING_LANGUAGE_VERSION: int = 35724
+GL_COMPRESSED_RGB_S3TC_DXT1_EXT: int = 33776
+GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: int = 33777
+GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: int = 33778
+GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: int = 33779
+GL_ETC1_RGB8_OES: int = 36196
+GL_COMPRESSED_RGB8_ETC2: int = 37492
+GL_COMPRESSED_RGBA8_ETC2_EAC: int = 37496
+GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG: int = 35840
+GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: int = 35842
+GL_COMPRESSED_RGBA_ASTC_4x4_KHR: int = 37808
+GL_COMPRESSED_RGBA_ASTC_8x8_KHR: int = 37815
+GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: int = 34047
+GL_TEXTURE_MAX_ANISOTROPY_EXT: int = 34046
+GL_PROGRAM_POINT_SIZE: int = 34370
+GL_LINE_WIDTH: int = 2849
+GL_UNSIGNED_SHORT_5_6_5: int = 33635
+GL_UNSIGNED_SHORT_5_5_5_1: int = 32820
+GL_UNSIGNED_SHORT_4_4_4_4: int = 32819
+GL_LUMINANCE: int = 6409
+GL_LUMINANCE_ALPHA: int = 6410
+RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION: str = "vertexPosition"
+RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD: str = "vertexTexCoord"
+RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL: str = "vertexNormal"
+RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR: str = "vertexColor"
+RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT: str = "vertexTangent"
+RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2: str = "vertexTexCoord2"
+RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS: str = "vertexBoneIds"
+RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS: str = "vertexBoneWeights"
+RL_DEFAULT_SHADER_UNIFORM_NAME_MVP: str = "mvp"
+RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW: str = "matView"
+RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION: str = "matProjection"
+RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL: str = "matModel"
+RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL: str = "matNormal"
+RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR: str = "colDiffuse"
+RL_DEFAULT_SHADER_UNIFORM_NAME_BONE_MATRICES: str = "boneMatrices"
+RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0: str = "texture0"
+RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1: str = "texture1"
+RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2: str = "texture2"
+RAYGUI_VERSION_MAJOR: int = 4
+RAYGUI_VERSION_MINOR: int = 5
+RAYGUI_VERSION_PATCH: int = 0
+RAYGUI_VERSION: str = "4.5-dev"
+SCROLLBAR_LEFT_SIDE: int = 0
+SCROLLBAR_RIGHT_SIDE: int = 1
+RAYGUI_ICON_SIZE: int = 16
+RAYGUI_ICON_MAX_ICONS: int = 256
+RAYGUI_ICON_MAX_NAME_LENGTH: int = 32
+RAYGUI_MAX_CONTROLS: int = 16
+RAYGUI_MAX_PROPS_BASE: int = 16
+RAYGUI_MAX_PROPS_EXTENDED: int = 8
+KEY_RIGHT: int = 262
+KEY_LEFT: int = 263
+KEY_DOWN: int = 264
+KEY_UP: int = 265
+KEY_BACKSPACE: int = 259
+KEY_ENTER: int = 257
+MOUSE_LEFT_BUTTON: int = 0
+RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT: int = 24
+RAYGUI_GROUPBOX_LINE_THICK: int = 1
+RAYGUI_LINE_MARGIN_TEXT: int = 12
+RAYGUI_LINE_TEXT_PADDING: int = 4
+RAYGUI_PANEL_BORDER_WIDTH: int = 1
+RAYGUI_TABBAR_ITEM_WIDTH: int = 160
+RAYGUI_MIN_SCROLLBAR_WIDTH: int = 40
+RAYGUI_MIN_SCROLLBAR_HEIGHT: int = 40
+RAYGUI_MIN_MOUSE_WHEEL_SPEED: int = 20
+RAYGUI_TOGGLEGROUP_MAX_ITEMS: int = 32
+RAYGUI_TEXTBOX_AUTO_CURSOR_COOLDOWN: int = 40
+RAYGUI_TEXTBOX_AUTO_CURSOR_DELAY: int = 1
+RAYGUI_VALUEBOX_MAX_CHARS: int = 32
+RAYGUI_COLORBARALPHA_CHECKED_SIZE: int = 10
+RAYGUI_MESSAGEBOX_BUTTON_HEIGHT: int = 24
+RAYGUI_MESSAGEBOX_BUTTON_PADDING: int = 12
+RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT: int = 24
+RAYGUI_TEXTINPUTBOX_BUTTON_PADDING: int = 12
+RAYGUI_TEXTINPUTBOX_HEIGHT: int = 26
+RAYGUI_GRID_ALPHA: float = 0.15
+MAX_LINE_BUFFER_SIZE: int = 256
+ICON_TEXT_PADDING: int = 4
+RAYGUI_MAX_TEXT_LINES: int = 128
+RAYGUI_TEXTSPLIT_MAX_ITEMS: int = 128
+RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE: int = 1024
+RAYGUI_TEXTFORMAT_MAX_SIZE: int = 256
+PHYSAC_MAX_BODIES: int = 64
+PHYSAC_MAX_MANIFOLDS: int = 4096
+PHYSAC_MAX_VERTICES: int = 24
+PHYSAC_CIRCLE_VERTICES: int = 24
+PHYSAC_COLLISION_ITERATIONS: int = 20
+PHYSAC_PENETRATION_ALLOWANCE: float = 0.05
+PHYSAC_PENETRATION_CORRECTION: float = 0.4
+PHYSAC_FLT_MAX: float = 3.402823466e+38
+PHYSAC_EPSILON: float = 1e-06
+GLFW_VERSION_MAJOR: int = 3
+GLFW_VERSION_MINOR: int = 4
+GLFW_VERSION_REVISION: int = 0
+GLFW_TRUE: int = 1
+GLFW_FALSE: int = 0
+GLFW_RELEASE: int = 0
+GLFW_PRESS: int = 1
+GLFW_REPEAT: int = 2
+GLFW_HAT_CENTERED: int = 0
+GLFW_HAT_UP: int = 1
+GLFW_HAT_RIGHT: int = 2
+GLFW_HAT_DOWN: int = 4
+GLFW_HAT_LEFT: int = 8
+GLFW_HAT_RIGHT_UP = GLFW_HAT_RIGHT | GLFW_HAT_UP
+GLFW_HAT_RIGHT_DOWN = GLFW_HAT_RIGHT | GLFW_HAT_DOWN
+GLFW_HAT_LEFT_UP = GLFW_HAT_LEFT | GLFW_HAT_UP
+GLFW_HAT_LEFT_DOWN = GLFW_HAT_LEFT | GLFW_HAT_DOWN
+GLFW_KEY_SPACE: int = 32
+GLFW_KEY_APOSTROPHE: int = 39
+GLFW_KEY_COMMA: int = 44
+GLFW_KEY_MINUS: int = 45
+GLFW_KEY_PERIOD: int = 46
+GLFW_KEY_SLASH: int = 47
+GLFW_KEY_0: int = 48
+GLFW_KEY_1: int = 49
+GLFW_KEY_2: int = 50
+GLFW_KEY_3: int = 51
+GLFW_KEY_4: int = 52
+GLFW_KEY_5: int = 53
+GLFW_KEY_6: int = 54
+GLFW_KEY_7: int = 55
+GLFW_KEY_8: int = 56
+GLFW_KEY_9: int = 57
+GLFW_KEY_SEMICOLON: int = 59
+GLFW_KEY_EQUAL: int = 61
+GLFW_KEY_A: int = 65
+GLFW_KEY_B: int = 66
+GLFW_KEY_C: int = 67
+GLFW_KEY_D: int = 68
+GLFW_KEY_E: int = 69
+GLFW_KEY_F: int = 70
+GLFW_KEY_G: int = 71
+GLFW_KEY_H: int = 72
+GLFW_KEY_I: int = 73
+GLFW_KEY_J: int = 74
+GLFW_KEY_K: int = 75
+GLFW_KEY_L: int = 76
+GLFW_KEY_M: int = 77
+GLFW_KEY_N: int = 78
+GLFW_KEY_O: int = 79
+GLFW_KEY_P: int = 80
+GLFW_KEY_Q: int = 81
+GLFW_KEY_R: int = 82
+GLFW_KEY_S: int = 83
+GLFW_KEY_T: int = 84
+GLFW_KEY_U: int = 85
+GLFW_KEY_V: int = 86
+GLFW_KEY_W: int = 87
+GLFW_KEY_X: int = 88
+GLFW_KEY_Y: int = 89
+GLFW_KEY_Z: int = 90
+GLFW_KEY_LEFT_BRACKET: int = 91
+GLFW_KEY_BACKSLASH: int = 92
+GLFW_KEY_RIGHT_BRACKET: int = 93
+GLFW_KEY_GRAVE_ACCENT: int = 96
+GLFW_KEY_WORLD_1: int = 161
+GLFW_KEY_WORLD_2: int = 162
+GLFW_KEY_ESCAPE: int = 256
+GLFW_KEY_ENTER: int = 257
+GLFW_KEY_TAB: int = 258
+GLFW_KEY_BACKSPACE: int = 259
+GLFW_KEY_INSERT: int = 260
+GLFW_KEY_DELETE: int = 261
+GLFW_KEY_RIGHT: int = 262
+GLFW_KEY_LEFT: int = 263
+GLFW_KEY_DOWN: int = 264
+GLFW_KEY_UP: int = 265
+GLFW_KEY_PAGE_UP: int = 266
+GLFW_KEY_PAGE_DOWN: int = 267
+GLFW_KEY_HOME: int = 268
+GLFW_KEY_END: int = 269
+GLFW_KEY_CAPS_LOCK: int = 280
+GLFW_KEY_SCROLL_LOCK: int = 281
+GLFW_KEY_NUM_LOCK: int = 282
+GLFW_KEY_PRINT_SCREEN: int = 283
+GLFW_KEY_PAUSE: int = 284
+GLFW_KEY_F1: int = 290
+GLFW_KEY_F2: int = 291
+GLFW_KEY_F3: int = 292
+GLFW_KEY_F4: int = 293
+GLFW_KEY_F5: int = 294
+GLFW_KEY_F6: int = 295
+GLFW_KEY_F7: int = 296
+GLFW_KEY_F8: int = 297
+GLFW_KEY_F9: int = 298
+GLFW_KEY_F10: int = 299
+GLFW_KEY_F11: int = 300
+GLFW_KEY_F12: int = 301
+GLFW_KEY_F13: int = 302
+GLFW_KEY_F14: int = 303
+GLFW_KEY_F15: int = 304
+GLFW_KEY_F16: int = 305
+GLFW_KEY_F17: int = 306
+GLFW_KEY_F18: int = 307
+GLFW_KEY_F19: int = 308
+GLFW_KEY_F20: int = 309
+GLFW_KEY_F21: int = 310
+GLFW_KEY_F22: int = 311
+GLFW_KEY_F23: int = 312
+GLFW_KEY_F24: int = 313
+GLFW_KEY_F25: int = 314
+GLFW_KEY_KP_0: int = 320
+GLFW_KEY_KP_1: int = 321
+GLFW_KEY_KP_2: int = 322
+GLFW_KEY_KP_3: int = 323
+GLFW_KEY_KP_4: int = 324
+GLFW_KEY_KP_5: int = 325
+GLFW_KEY_KP_6: int = 326
+GLFW_KEY_KP_7: int = 327
+GLFW_KEY_KP_8: int = 328
+GLFW_KEY_KP_9: int = 329
+GLFW_KEY_KP_DECIMAL: int = 330
+GLFW_KEY_KP_DIVIDE: int = 331
+GLFW_KEY_KP_MULTIPLY: int = 332
+GLFW_KEY_KP_SUBTRACT: int = 333
+GLFW_KEY_KP_ADD: int = 334
+GLFW_KEY_KP_ENTER: int = 335
+GLFW_KEY_KP_EQUAL: int = 336
+GLFW_KEY_LEFT_SHIFT: int = 340
+GLFW_KEY_LEFT_CONTROL: int = 341
+GLFW_KEY_LEFT_ALT: int = 342
+GLFW_KEY_LEFT_SUPER: int = 343
+GLFW_KEY_RIGHT_SHIFT: int = 344
+GLFW_KEY_RIGHT_CONTROL: int = 345
+GLFW_KEY_RIGHT_ALT: int = 346
+GLFW_KEY_RIGHT_SUPER: int = 347
+GLFW_KEY_MENU: int = 348
+GLFW_MOD_SHIFT: int = 1
+GLFW_MOD_CONTROL: int = 2
+GLFW_MOD_ALT: int = 4
+GLFW_MOD_SUPER: int = 8
+GLFW_MOD_CAPS_LOCK: int = 16
+GLFW_MOD_NUM_LOCK: int = 32
+GLFW_MOUSE_BUTTON_1: int = 0
+GLFW_MOUSE_BUTTON_2: int = 1
+GLFW_MOUSE_BUTTON_3: int = 2
+GLFW_MOUSE_BUTTON_4: int = 3
+GLFW_MOUSE_BUTTON_5: int = 4
+GLFW_MOUSE_BUTTON_6: int = 5
+GLFW_MOUSE_BUTTON_7: int = 6
+GLFW_MOUSE_BUTTON_8: int = 7
+GLFW_JOYSTICK_1: int = 0
+GLFW_JOYSTICK_2: int = 1
+GLFW_JOYSTICK_3: int = 2
+GLFW_JOYSTICK_4: int = 3
+GLFW_JOYSTICK_5: int = 4
+GLFW_JOYSTICK_6: int = 5
+GLFW_JOYSTICK_7: int = 6
+GLFW_JOYSTICK_8: int = 7
+GLFW_JOYSTICK_9: int = 8
+GLFW_JOYSTICK_10: int = 9
+GLFW_JOYSTICK_11: int = 10
+GLFW_JOYSTICK_12: int = 11
+GLFW_JOYSTICK_13: int = 12
+GLFW_JOYSTICK_14: int = 13
+GLFW_JOYSTICK_15: int = 14
+GLFW_JOYSTICK_16: int = 15
+GLFW_GAMEPAD_BUTTON_A: int = 0
+GLFW_GAMEPAD_BUTTON_B: int = 1
+GLFW_GAMEPAD_BUTTON_X: int = 2
+GLFW_GAMEPAD_BUTTON_Y: int = 3
+GLFW_GAMEPAD_BUTTON_LEFT_BUMPER: int = 4
+GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER: int = 5
+GLFW_GAMEPAD_BUTTON_BACK: int = 6
+GLFW_GAMEPAD_BUTTON_START: int = 7
+GLFW_GAMEPAD_BUTTON_GUIDE: int = 8
+GLFW_GAMEPAD_BUTTON_LEFT_THUMB: int = 9
+GLFW_GAMEPAD_BUTTON_RIGHT_THUMB: int = 10
+GLFW_GAMEPAD_BUTTON_DPAD_UP: int = 11
+GLFW_GAMEPAD_BUTTON_DPAD_RIGHT: int = 12
+GLFW_GAMEPAD_BUTTON_DPAD_DOWN: int = 13
+GLFW_GAMEPAD_BUTTON_DPAD_LEFT: int = 14
+GLFW_GAMEPAD_AXIS_LEFT_X: int = 0
+GLFW_GAMEPAD_AXIS_LEFT_Y: int = 1
+GLFW_GAMEPAD_AXIS_RIGHT_X: int = 2
+GLFW_GAMEPAD_AXIS_RIGHT_Y: int = 3
+GLFW_GAMEPAD_AXIS_LEFT_TRIGGER: int = 4
+GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER: int = 5
+GLFW_NO_ERROR: int = 0
+GLFW_NOT_INITIALIZED: int = 65537
+GLFW_NO_CURRENT_CONTEXT: int = 65538
+GLFW_INVALID_ENUM: int = 65539
+GLFW_INVALID_VALUE: int = 65540
+GLFW_OUT_OF_MEMORY: int = 65541
+GLFW_API_UNAVAILABLE: int = 65542
+GLFW_VERSION_UNAVAILABLE: int = 65543
+GLFW_PLATFORM_ERROR: int = 65544
+GLFW_FORMAT_UNAVAILABLE: int = 65545
+GLFW_NO_WINDOW_CONTEXT: int = 65546
+GLFW_CURSOR_UNAVAILABLE: int = 65547
+GLFW_FEATURE_UNAVAILABLE: int = 65548
+GLFW_FEATURE_UNIMPLEMENTED: int = 65549
+GLFW_PLATFORM_UNAVAILABLE: int = 65550
+GLFW_FOCUSED: int = 131073
+GLFW_ICONIFIED: int = 131074
+GLFW_RESIZABLE: int = 131075
+GLFW_VISIBLE: int = 131076
+GLFW_DECORATED: int = 131077
+GLFW_AUTO_ICONIFY: int = 131078
+GLFW_FLOATING: int = 131079
+GLFW_MAXIMIZED: int = 131080
+GLFW_CENTER_CURSOR: int = 131081
+GLFW_TRANSPARENT_FRAMEBUFFER: int = 131082
+GLFW_HOVERED: int = 131083
+GLFW_FOCUS_ON_SHOW: int = 131084
+GLFW_MOUSE_PASSTHROUGH: int = 131085
+GLFW_POSITION_X: int = 131086
+GLFW_POSITION_Y: int = 131087
+GLFW_RED_BITS: int = 135169
+GLFW_GREEN_BITS: int = 135170
+GLFW_BLUE_BITS: int = 135171
+GLFW_ALPHA_BITS: int = 135172
+GLFW_DEPTH_BITS: int = 135173
+GLFW_STENCIL_BITS: int = 135174
+GLFW_ACCUM_RED_BITS: int = 135175
+GLFW_ACCUM_GREEN_BITS: int = 135176
+GLFW_ACCUM_BLUE_BITS: int = 135177
+GLFW_ACCUM_ALPHA_BITS: int = 135178
+GLFW_AUX_BUFFERS: int = 135179
+GLFW_STEREO: int = 135180
+GLFW_SAMPLES: int = 135181
+GLFW_SRGB_CAPABLE: int = 135182
+GLFW_REFRESH_RATE: int = 135183
+GLFW_DOUBLEBUFFER: int = 135184
+GLFW_CLIENT_API: int = 139265
+GLFW_CONTEXT_VERSION_MAJOR: int = 139266
+GLFW_CONTEXT_VERSION_MINOR: int = 139267
+GLFW_CONTEXT_REVISION: int = 139268
+GLFW_CONTEXT_ROBUSTNESS: int = 139269
+GLFW_OPENGL_FORWARD_COMPAT: int = 139270
+GLFW_CONTEXT_DEBUG: int = 139271
+GLFW_OPENGL_PROFILE: int = 139272
+GLFW_CONTEXT_RELEASE_BEHAVIOR: int = 139273
+GLFW_CONTEXT_NO_ERROR: int = 139274
+GLFW_CONTEXT_CREATION_API: int = 139275
+GLFW_SCALE_TO_MONITOR: int = 139276
+GLFW_SCALE_FRAMEBUFFER: int = 139277
+GLFW_COCOA_RETINA_FRAMEBUFFER: int = 143361
+GLFW_COCOA_FRAME_NAME: int = 143362
+GLFW_COCOA_GRAPHICS_SWITCHING: int = 143363
+GLFW_X11_CLASS_NAME: int = 147457
+GLFW_X11_INSTANCE_NAME: int = 147458
+GLFW_WIN32_KEYBOARD_MENU: int = 151553
+GLFW_WIN32_SHOWDEFAULT: int = 151554
+GLFW_WAYLAND_APP_ID: int = 155649
+GLFW_NO_API: int = 0
+GLFW_OPENGL_API: int = 196609
+GLFW_OPENGL_ES_API: int = 196610
+GLFW_NO_ROBUSTNESS: int = 0
+GLFW_NO_RESET_NOTIFICATION: int = 200705
+GLFW_LOSE_CONTEXT_ON_RESET: int = 200706
+GLFW_OPENGL_ANY_PROFILE: int = 0
+GLFW_OPENGL_CORE_PROFILE: int = 204801
+GLFW_OPENGL_COMPAT_PROFILE: int = 204802
+GLFW_CURSOR: int = 208897
+GLFW_STICKY_KEYS: int = 208898
+GLFW_STICKY_MOUSE_BUTTONS: int = 208899
+GLFW_LOCK_KEY_MODS: int = 208900
+GLFW_RAW_MOUSE_MOTION: int = 208901
+GLFW_CURSOR_NORMAL: int = 212993
+GLFW_CURSOR_HIDDEN: int = 212994
+GLFW_CURSOR_DISABLED: int = 212995
+GLFW_CURSOR_CAPTURED: int = 212996
+GLFW_ANY_RELEASE_BEHAVIOR: int = 0
+GLFW_RELEASE_BEHAVIOR_FLUSH: int = 217089
+GLFW_RELEASE_BEHAVIOR_NONE: int = 217090
+GLFW_NATIVE_CONTEXT_API: int = 221185
+GLFW_EGL_CONTEXT_API: int = 221186
+GLFW_OSMESA_CONTEXT_API: int = 221187
+GLFW_ANGLE_PLATFORM_TYPE_NONE: int = 225281
+GLFW_ANGLE_PLATFORM_TYPE_OPENGL: int = 225282
+GLFW_ANGLE_PLATFORM_TYPE_OPENGLES: int = 225283
+GLFW_ANGLE_PLATFORM_TYPE_D3D9: int = 225284
+GLFW_ANGLE_PLATFORM_TYPE_D3D11: int = 225285
+GLFW_ANGLE_PLATFORM_TYPE_VULKAN: int = 225287
+GLFW_ANGLE_PLATFORM_TYPE_METAL: int = 225288
+GLFW_WAYLAND_PREFER_LIBDECOR: int = 229377
+GLFW_WAYLAND_DISABLE_LIBDECOR: int = 229378
+GLFW_ANY_POSITION: int = 2147483648
+GLFW_ARROW_CURSOR: int = 221185
+GLFW_IBEAM_CURSOR: int = 221186
+GLFW_CROSSHAIR_CURSOR: int = 221187
+GLFW_POINTING_HAND_CURSOR: int = 221188
+GLFW_RESIZE_EW_CURSOR: int = 221189
+GLFW_RESIZE_NS_CURSOR: int = 221190
+GLFW_RESIZE_NWSE_CURSOR: int = 221191
+GLFW_RESIZE_NESW_CURSOR: int = 221192
+GLFW_RESIZE_ALL_CURSOR: int = 221193
+GLFW_NOT_ALLOWED_CURSOR: int = 221194
+GLFW_CONNECTED: int = 262145
+GLFW_DISCONNECTED: int = 262146
+GLFW_JOYSTICK_HAT_BUTTONS: int = 327681
+GLFW_ANGLE_PLATFORM_TYPE: int = 327682
+GLFW_PLATFORM: int = 327683
+GLFW_COCOA_CHDIR_RESOURCES: int = 331777
+GLFW_COCOA_MENUBAR: int = 331778
+GLFW_X11_XCB_VULKAN_SURFACE: int = 335873
+GLFW_WAYLAND_LIBDECOR: int = 339969
+GLFW_ANY_PLATFORM: int = 393216
+GLFW_PLATFORM_WIN32: int = 393217
+GLFW_PLATFORM_COCOA: int = 393218
+GLFW_PLATFORM_WAYLAND: int = 393219
+GLFW_PLATFORM_X11: int = 393220
+GLFW_PLATFORM_NULL: int = 393221
diff --git a/dynamic/raylib/enums.py b/dynamic/raylib/enums.py
new file mode 100644
index 0000000..d33b987
--- /dev/null
+++ b/dynamic/raylib/enums.py
@@ -0,0 +1,759 @@
+from enum import IntEnum
+
+class ConfigFlags(IntEnum):
+ """System/Window config flags."""
+ 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_WINDOW_MOUSE_PASSTHROUGH = 16384
+ FLAG_BORDERLESS_WINDOWED_MODE = 32768
+ FLAG_MSAA_4X_HINT = 32
+ FLAG_INTERLACED_HINT = 65536
+
+class TraceLogLevel(IntEnum):
+ """Trace log level."""
+ LOG_ALL = 0
+ LOG_TRACE = 1
+ LOG_DEBUG = 2
+ LOG_INFO = 3
+ LOG_WARNING = 4
+ LOG_ERROR = 5
+ LOG_FATAL = 6
+ LOG_NONE = 7
+
+class KeyboardKey(IntEnum):
+ """Keyboard keys (US keyboard layout)."""
+ 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_LEFT_BRACKET = 91
+ KEY_BACKSLASH = 92
+ KEY_RIGHT_BRACKET = 93
+ KEY_GRAVE = 96
+ 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_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_MENU = 5
+ KEY_VOLUME_UP = 24
+ KEY_VOLUME_DOWN = 25
+
+class MouseButton(IntEnum):
+ """Mouse buttons."""
+ MOUSE_BUTTON_LEFT = 0
+ MOUSE_BUTTON_RIGHT = 1
+ MOUSE_BUTTON_MIDDLE = 2
+ MOUSE_BUTTON_SIDE = 3
+ MOUSE_BUTTON_EXTRA = 4
+ MOUSE_BUTTON_FORWARD = 5
+ MOUSE_BUTTON_BACK = 6
+
+class MouseCursor(IntEnum):
+ """Mouse cursor."""
+ 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
+
+class GamepadButton(IntEnum):
+ """Gamepad buttons."""
+ 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
+
+class GamepadAxis(IntEnum):
+ """Gamepad axis."""
+ 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
+
+class MaterialMapIndex(IntEnum):
+ """Material map index."""
+ 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_CUBEMAP = 7
+ MATERIAL_MAP_IRRADIANCE = 8
+ MATERIAL_MAP_PREFILTER = 9
+ MATERIAL_MAP_BRDF = 10
+
+class ShaderLocationIndex(IntEnum):
+ """Shader location index."""
+ 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
+ SHADER_LOC_VERTEX_BONEIDS = 26
+ SHADER_LOC_VERTEX_BONEWEIGHTS = 27
+ SHADER_LOC_BONE_MATRICES = 28
+
+class ShaderUniformDataType(IntEnum):
+ """Shader uniform data type."""
+ 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
+
+class ShaderAttributeDataType(IntEnum):
+ """Shader attribute data types."""
+ SHADER_ATTRIB_FLOAT = 0
+ SHADER_ATTRIB_VEC2 = 1
+ SHADER_ATTRIB_VEC3 = 2
+ SHADER_ATTRIB_VEC4 = 3
+
+class PixelFormat(IntEnum):
+ """Pixel formats."""
+ 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_UNCOMPRESSED_R8G8B8A8 = 7
+ PIXELFORMAT_UNCOMPRESSED_R32 = 8
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10
+ PIXELFORMAT_UNCOMPRESSED_R16 = 11
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16 = 12
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 = 13
+ PIXELFORMAT_COMPRESSED_DXT1_RGB = 14
+ PIXELFORMAT_COMPRESSED_DXT1_RGBA = 15
+ PIXELFORMAT_COMPRESSED_DXT3_RGBA = 16
+ PIXELFORMAT_COMPRESSED_DXT5_RGBA = 17
+ PIXELFORMAT_COMPRESSED_ETC1_RGB = 18
+ PIXELFORMAT_COMPRESSED_ETC2_RGB = 19
+ PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 20
+ PIXELFORMAT_COMPRESSED_PVRT_RGB = 21
+ PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22
+ PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 23
+ PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 24
+
+class TextureFilter(IntEnum):
+ """Texture parameters: filter mode."""
+ 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
+
+class TextureWrap(IntEnum):
+ """Texture parameters: wrap mode."""
+ TEXTURE_WRAP_REPEAT = 0
+ TEXTURE_WRAP_CLAMP = 1
+ TEXTURE_WRAP_MIRROR_REPEAT = 2
+ TEXTURE_WRAP_MIRROR_CLAMP = 3
+
+class CubemapLayout(IntEnum):
+ """Cubemap layouts."""
+ 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
+
+class FontType(IntEnum):
+ """Font type, defines generation method."""
+ FONT_DEFAULT = 0
+ FONT_BITMAP = 1
+ FONT_SDF = 2
+
+class BlendMode(IntEnum):
+ """Color blending modes (pre-defined)."""
+ BLEND_ALPHA = 0
+ BLEND_ADDITIVE = 1
+ BLEND_MULTIPLIED = 2
+ BLEND_ADD_COLORS = 3
+ BLEND_SUBTRACT_COLORS = 4
+ BLEND_ALPHA_PREMULTIPLY = 5
+ BLEND_CUSTOM = 6
+ BLEND_CUSTOM_SEPARATE = 7
+
+class Gesture(IntEnum):
+ """Gesture."""
+ 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
+
+class CameraMode(IntEnum):
+ """Camera system modes."""
+ CAMERA_CUSTOM = 0
+ CAMERA_FREE = 1
+ CAMERA_ORBITAL = 2
+ CAMERA_FIRST_PERSON = 3
+ CAMERA_THIRD_PERSON = 4
+
+class CameraProjection(IntEnum):
+ """Camera projection."""
+ CAMERA_PERSPECTIVE = 0
+ CAMERA_ORTHOGRAPHIC = 1
+
+class NPatchLayout(IntEnum):
+ """N-patch layout."""
+ NPATCH_NINE_PATCH = 0
+ NPATCH_THREE_PATCH_VERTICAL = 1
+ NPATCH_THREE_PATCH_HORIZONTAL = 2
+
+class GuiState(IntEnum):
+ """Gui control state."""
+ STATE_NORMAL = 0
+ STATE_FOCUSED = 1
+ STATE_PRESSED = 2
+ STATE_DISABLED = 3
+
+class GuiTextAlignment(IntEnum):
+ """Gui control text alignment."""
+ TEXT_ALIGN_LEFT = 0
+ TEXT_ALIGN_CENTER = 1
+ TEXT_ALIGN_RIGHT = 2
+
+class GuiTextAlignmentVertical(IntEnum):
+ """Gui control text alignment vertical."""
+ TEXT_ALIGN_TOP = 0
+ TEXT_ALIGN_MIDDLE = 1
+ TEXT_ALIGN_BOTTOM = 2
+
+class GuiTextWrapMode(IntEnum):
+ """Gui control text wrap mode."""
+ TEXT_WRAP_NONE = 0
+ TEXT_WRAP_CHAR = 1
+ TEXT_WRAP_WORD = 2
+
+class GuiControl(IntEnum):
+ """Gui controls."""
+ 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
+
+class GuiControlProperty(IntEnum):
+ """Gui base properties for every control."""
+ 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
+
+class GuiDefaultProperty(IntEnum):
+ """DEFAULT extended properties."""
+ TEXT_SIZE = 16
+ TEXT_SPACING = 17
+ LINE_COLOR = 18
+ BACKGROUND_COLOR = 19
+ TEXT_LINE_SPACING = 20
+ TEXT_ALIGNMENT_VERTICAL = 21
+ TEXT_WRAP_MODE = 22
+
+class GuiToggleProperty(IntEnum):
+ """Toggle/ToggleGroup."""
+ GROUP_PADDING = 16
+
+class GuiSliderProperty(IntEnum):
+ """Slider/SliderBar."""
+ SLIDER_WIDTH = 16
+ SLIDER_PADDING = 17
+
+class GuiProgressBarProperty(IntEnum):
+ """ProgressBar."""
+ PROGRESS_PADDING = 16
+
+class GuiScrollBarProperty(IntEnum):
+ """ScrollBar."""
+ ARROWS_SIZE = 16
+ ARROWS_VISIBLE = 17
+ SCROLL_SLIDER_PADDING = 18
+ SCROLL_SLIDER_SIZE = 19
+ SCROLL_PADDING = 20
+ SCROLL_SPEED = 21
+
+class GuiCheckBoxProperty(IntEnum):
+ """CheckBox."""
+ CHECK_PADDING = 16
+
+class GuiComboBoxProperty(IntEnum):
+ """ComboBox."""
+ COMBO_BUTTON_WIDTH = 16
+ COMBO_BUTTON_SPACING = 17
+
+class GuiDropdownBoxProperty(IntEnum):
+ """DropdownBox."""
+ ARROW_PADDING = 16
+ DROPDOWN_ITEMS_SPACING = 17
+ DROPDOWN_ARROW_HIDDEN = 18
+ DROPDOWN_ROLL_UP = 19
+
+class GuiTextBoxProperty(IntEnum):
+ """TextBox/TextBoxMulti/ValueBox/Spinner."""
+ TEXT_READONLY = 16
+
+class GuiSpinnerProperty(IntEnum):
+ """Spinner."""
+ SPIN_BUTTON_WIDTH = 16
+ SPIN_BUTTON_SPACING = 17
+
+class GuiListViewProperty(IntEnum):
+ """ListView."""
+ LIST_ITEMS_HEIGHT = 16
+ LIST_ITEMS_SPACING = 17
+ SCROLLBAR_WIDTH = 18
+ SCROLLBAR_SIDE = 19
+ LIST_ITEMS_BORDER_WIDTH = 20
+
+class GuiColorPickerProperty(IntEnum):
+ """ColorPicker."""
+ COLOR_SELECTOR_SIZE = 16
+ HUEBAR_WIDTH = 17
+ HUEBAR_PADDING = 18
+ HUEBAR_SELECTOR_HEIGHT = 19
+ HUEBAR_SELECTOR_OVERFLOW = 20
+
+class GuiIconName(IntEnum):
+ """."""
+ ICON_NONE = 0
+ ICON_FOLDER_FILE_OPEN = 1
+ ICON_FILE_SAVE_CLASSIC = 2
+ ICON_FOLDER_OPEN = 3
+ ICON_FOLDER_SAVE = 4
+ ICON_FILE_OPEN = 5
+ ICON_FILE_SAVE = 6
+ ICON_FILE_EXPORT = 7
+ ICON_FILE_ADD = 8
+ ICON_FILE_DELETE = 9
+ ICON_FILETYPE_TEXT = 10
+ ICON_FILETYPE_AUDIO = 11
+ ICON_FILETYPE_IMAGE = 12
+ ICON_FILETYPE_PLAY = 13
+ ICON_FILETYPE_VIDEO = 14
+ ICON_FILETYPE_INFO = 15
+ ICON_FILE_COPY = 16
+ ICON_FILE_CUT = 17
+ ICON_FILE_PASTE = 18
+ ICON_CURSOR_HAND = 19
+ ICON_CURSOR_POINTER = 20
+ ICON_CURSOR_CLASSIC = 21
+ ICON_PENCIL = 22
+ ICON_PENCIL_BIG = 23
+ ICON_BRUSH_CLASSIC = 24
+ ICON_BRUSH_PAINTER = 25
+ ICON_WATER_DROP = 26
+ ICON_COLOR_PICKER = 27
+ ICON_RUBBER = 28
+ ICON_COLOR_BUCKET = 29
+ ICON_TEXT_T = 30
+ ICON_TEXT_A = 31
+ ICON_SCALE = 32
+ ICON_RESIZE = 33
+ ICON_FILTER_POINT = 34
+ ICON_FILTER_BILINEAR = 35
+ ICON_CROP = 36
+ ICON_CROP_ALPHA = 37
+ ICON_SQUARE_TOGGLE = 38
+ ICON_SYMMETRY = 39
+ ICON_SYMMETRY_HORIZONTAL = 40
+ ICON_SYMMETRY_VERTICAL = 41
+ ICON_LENS = 42
+ ICON_LENS_BIG = 43
+ ICON_EYE_ON = 44
+ ICON_EYE_OFF = 45
+ ICON_FILTER_TOP = 46
+ ICON_FILTER = 47
+ ICON_TARGET_POINT = 48
+ ICON_TARGET_SMALL = 49
+ ICON_TARGET_BIG = 50
+ ICON_TARGET_MOVE = 51
+ ICON_CURSOR_MOVE = 52
+ ICON_CURSOR_SCALE = 53
+ ICON_CURSOR_SCALE_RIGHT = 54
+ ICON_CURSOR_SCALE_LEFT = 55
+ ICON_UNDO = 56
+ ICON_REDO = 57
+ ICON_REREDO = 58
+ ICON_MUTATE = 59
+ ICON_ROTATE = 60
+ ICON_REPEAT = 61
+ ICON_SHUFFLE = 62
+ ICON_EMPTYBOX = 63
+ ICON_TARGET = 64
+ ICON_TARGET_SMALL_FILL = 65
+ ICON_TARGET_BIG_FILL = 66
+ ICON_TARGET_MOVE_FILL = 67
+ ICON_CURSOR_MOVE_FILL = 68
+ ICON_CURSOR_SCALE_FILL = 69
+ ICON_CURSOR_SCALE_RIGHT_FILL = 70
+ ICON_CURSOR_SCALE_LEFT_FILL = 71
+ ICON_UNDO_FILL = 72
+ ICON_REDO_FILL = 73
+ ICON_REREDO_FILL = 74
+ ICON_MUTATE_FILL = 75
+ ICON_ROTATE_FILL = 76
+ ICON_REPEAT_FILL = 77
+ ICON_SHUFFLE_FILL = 78
+ ICON_EMPTYBOX_SMALL = 79
+ ICON_BOX = 80
+ ICON_BOX_TOP = 81
+ ICON_BOX_TOP_RIGHT = 82
+ ICON_BOX_RIGHT = 83
+ ICON_BOX_BOTTOM_RIGHT = 84
+ ICON_BOX_BOTTOM = 85
+ ICON_BOX_BOTTOM_LEFT = 86
+ ICON_BOX_LEFT = 87
+ ICON_BOX_TOP_LEFT = 88
+ ICON_BOX_CENTER = 89
+ ICON_BOX_CIRCLE_MASK = 90
+ ICON_POT = 91
+ ICON_ALPHA_MULTIPLY = 92
+ ICON_ALPHA_CLEAR = 93
+ ICON_DITHERING = 94
+ ICON_MIPMAPS = 95
+ ICON_BOX_GRID = 96
+ ICON_GRID = 97
+ ICON_BOX_CORNERS_SMALL = 98
+ ICON_BOX_CORNERS_BIG = 99
+ ICON_FOUR_BOXES = 100
+ ICON_GRID_FILL = 101
+ ICON_BOX_MULTISIZE = 102
+ ICON_ZOOM_SMALL = 103
+ ICON_ZOOM_MEDIUM = 104
+ ICON_ZOOM_BIG = 105
+ ICON_ZOOM_ALL = 106
+ ICON_ZOOM_CENTER = 107
+ ICON_BOX_DOTS_SMALL = 108
+ ICON_BOX_DOTS_BIG = 109
+ ICON_BOX_CONCENTRIC = 110
+ ICON_BOX_GRID_BIG = 111
+ ICON_OK_TICK = 112
+ ICON_CROSS = 113
+ ICON_ARROW_LEFT = 114
+ ICON_ARROW_RIGHT = 115
+ ICON_ARROW_DOWN = 116
+ ICON_ARROW_UP = 117
+ ICON_ARROW_LEFT_FILL = 118
+ ICON_ARROW_RIGHT_FILL = 119
+ ICON_ARROW_DOWN_FILL = 120
+ ICON_ARROW_UP_FILL = 121
+ ICON_AUDIO = 122
+ ICON_FX = 123
+ ICON_WAVE = 124
+ ICON_WAVE_SINUS = 125
+ ICON_WAVE_SQUARE = 126
+ ICON_WAVE_TRIANGULAR = 127
+ ICON_CROSS_SMALL = 128
+ ICON_PLAYER_PREVIOUS = 129
+ ICON_PLAYER_PLAY_BACK = 130
+ ICON_PLAYER_PLAY = 131
+ ICON_PLAYER_PAUSE = 132
+ ICON_PLAYER_STOP = 133
+ ICON_PLAYER_NEXT = 134
+ ICON_PLAYER_RECORD = 135
+ ICON_MAGNET = 136
+ ICON_LOCK_CLOSE = 137
+ ICON_LOCK_OPEN = 138
+ ICON_CLOCK = 139
+ ICON_TOOLS = 140
+ ICON_GEAR = 141
+ ICON_GEAR_BIG = 142
+ ICON_BIN = 143
+ ICON_HAND_POINTER = 144
+ ICON_LASER = 145
+ ICON_COIN = 146
+ ICON_EXPLOSION = 147
+ ICON_1UP = 148
+ ICON_PLAYER = 149
+ ICON_PLAYER_JUMP = 150
+ ICON_KEY = 151
+ ICON_DEMON = 152
+ ICON_TEXT_POPUP = 153
+ ICON_GEAR_EX = 154
+ ICON_CRACK = 155
+ ICON_CRACK_POINTS = 156
+ ICON_STAR = 157
+ ICON_DOOR = 158
+ ICON_EXIT = 159
+ ICON_MODE_2D = 160
+ ICON_MODE_3D = 161
+ ICON_CUBE = 162
+ ICON_CUBE_FACE_TOP = 163
+ ICON_CUBE_FACE_LEFT = 164
+ ICON_CUBE_FACE_FRONT = 165
+ ICON_CUBE_FACE_BOTTOM = 166
+ ICON_CUBE_FACE_RIGHT = 167
+ ICON_CUBE_FACE_BACK = 168
+ ICON_CAMERA = 169
+ ICON_SPECIAL = 170
+ ICON_LINK_NET = 171
+ ICON_LINK_BOXES = 172
+ ICON_LINK_MULTI = 173
+ ICON_LINK = 174
+ ICON_LINK_BROKE = 175
+ ICON_TEXT_NOTES = 176
+ ICON_NOTEBOOK = 177
+ ICON_SUITCASE = 178
+ ICON_SUITCASE_ZIP = 179
+ ICON_MAILBOX = 180
+ ICON_MONITOR = 181
+ ICON_PRINTER = 182
+ ICON_PHOTO_CAMERA = 183
+ ICON_PHOTO_CAMERA_FLASH = 184
+ ICON_HOUSE = 185
+ ICON_HEART = 186
+ ICON_CORNER = 187
+ ICON_VERTICAL_BARS = 188
+ ICON_VERTICAL_BARS_FILL = 189
+ ICON_LIFE_BARS = 190
+ ICON_INFO = 191
+ ICON_CROSSLINE = 192
+ ICON_HELP = 193
+ ICON_FILETYPE_ALPHA = 194
+ ICON_FILETYPE_HOME = 195
+ ICON_LAYERS_VISIBLE = 196
+ ICON_LAYERS = 197
+ ICON_WINDOW = 198
+ ICON_HIDPI = 199
+ ICON_FILETYPE_BINARY = 200
+ ICON_HEX = 201
+ ICON_SHIELD = 202
+ ICON_FILE_NEW = 203
+ ICON_FOLDER_ADD = 204
+ ICON_ALARM = 205
+ ICON_CPU = 206
+ ICON_ROM = 207
+ ICON_STEP_OVER = 208
+ ICON_STEP_INTO = 209
+ ICON_STEP_OUT = 210
+ ICON_RESTART = 211
+ ICON_BREAKPOINT_ON = 212
+ ICON_BREAKPOINT_OFF = 213
+ ICON_BURGER_MENU = 214
+ ICON_CASE_SENSITIVE = 215
+ ICON_REG_EXP = 216
+ ICON_FOLDER = 217
+ ICON_FILE = 218
+ ICON_SAND_TIMER = 219
+ ICON_WARNING = 220
+ ICON_HELP_BOX = 221
+ ICON_INFO_BOX = 222
+ ICON_PRIORITY = 223
+ ICON_LAYERS_ISO = 224
+ ICON_LAYERS2 = 225
+ ICON_MLAYERS = 226
+ ICON_MAPS = 227
+ ICON_HOT = 228
+ ICON_229 = 229
+ ICON_230 = 230
+ ICON_231 = 231
+ ICON_232 = 232
+ ICON_233 = 233
+ ICON_234 = 234
+ ICON_235 = 235
+ ICON_236 = 236
+ ICON_237 = 237
+ ICON_238 = 238
+ ICON_239 = 239
+ ICON_240 = 240
+ ICON_241 = 241
+ ICON_242 = 242
+ ICON_243 = 243
+ ICON_244 = 244
+ ICON_245 = 245
+ ICON_246 = 246
+ ICON_247 = 247
+ ICON_248 = 248
+ ICON_249 = 249
+ ICON_250 = 250
+ ICON_251 = 251
+ ICON_252 = 252
+ ICON_253 = 253
+ ICON_254 = 254
+ ICON_255 = 255
+
diff --git a/dynamic/raylib/libraylib.dylib b/dynamic/raylib/libraylib.dylib
new file mode 100755
index 0000000..5019b64
Binary files /dev/null and b/dynamic/raylib/libraylib.dylib differ
diff --git a/dynamic/raylib/libraylib.so b/dynamic/raylib/libraylib.so
new file mode 100755
index 0000000..0771502
Binary files /dev/null and b/dynamic/raylib/libraylib.so differ
diff --git a/dynamic/raylib/py.typed b/dynamic/raylib/py.typed
new file mode 100644
index 0000000..e69de29
diff --git a/dynamic/raylib/raylib.dll b/dynamic/raylib/raylib.dll
new file mode 100644
index 0000000..12ea7c8
Binary files /dev/null and b/dynamic/raylib/raylib.dll differ
diff --git a/dynamic/raylib/raylib_modified.h b/dynamic/raylib/raylib_modified.h
new file mode 120000
index 0000000..c9bb387
--- /dev/null
+++ b/dynamic/raylib/raylib_modified.h
@@ -0,0 +1 @@
+../../raylib/raylib.h.modified
\ No newline at end of file
diff --git a/dynamic/raylib/version.py b/dynamic/raylib/version.py
new file mode 120000
index 0000000..b6d41e6
--- /dev/null
+++ b/dynamic/raylib/version.py
@@ -0,0 +1 @@
+../../version.py
\ No newline at end of file
diff --git a/dynamic/setup.py b/dynamic/setup.py
new file mode 100644
index 0000000..4af2f03
--- /dev/null
+++ b/dynamic/setup.py
@@ -0,0 +1,38 @@
+import pathlib
+from setuptools import setup
+from setuptools.dist import Distribution
+from version import __version__
+
+# The directory containing this file
+HERE = pathlib.Path(__file__).parent
+
+# The text of the README file
+README = (HERE / "README.rst").read_text()
+
+
+# This call to setup() does all the work
+setup(
+ name="raylib_dynamic",
+ version=__version__,
+ description="Python CFFI bindings for Raylib DLL version",
+ long_description=README,
+ long_description_content_type="text/x-rst",
+ url="https://github.com/electronstudio/raylib-python-cffi",
+ author="Electron Studio",
+ author_email="github@electronstudio.co.uk",
+ license="EPL-2.0",
+ classifiers=[
+ "License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.9",
+ "Programming Language :: Python :: 3.8",
+ "Programming Language :: Python :: 3.6",
+ "Programming Language :: Python :: 3.7",
+ ],
+ packages=["raylib", "pyray"],
+ include_package_data=True,
+ install_requires=["cffi>=1.14.5","inflection"],
+)
+
+
diff --git a/dynamic/test_dynamic.py b/dynamic/test_dynamic.py
new file mode 100644
index 0000000..7e47a6e
--- /dev/null
+++ b/dynamic/test_dynamic.py
@@ -0,0 +1,36 @@
+"""
+This shows how to use the CFFI dynamic (ABI) binding. Note that is slower and more likely to run into silent errors and segfaults.
+But it doesnt require any C compiler to build.
+"""
+
+from raylib import ffi, rl, colors
+
+rl.InitWindow(800, 450, b"Raylib dynamic binding test")
+rl.SetTargetFPS(60)
+
+camera = ffi.new("struct Camera3D *", [[18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0])
+image = rl.LoadImage(b"../examples/models/resources/heightmap.png")
+texture = rl.LoadTextureFromImage(image)
+mesh = rl.GenMeshHeightmap(image, [16, 8, 16])
+model = rl.LoadModelFromMesh(mesh)
+print(model.materials) # SHOULD BE A pointer to a 'struct Material' but some is NULL pointer to 'Material' ?
+model.materials.maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
+
+rl.UnloadImage(image)
+
+while not rl.WindowShouldClose():
+ rl.UpdateCamera(camera, rl.CAMERA_ORBITAL)
+ rl.BeginDrawing()
+ rl.ClearBackground(colors.RAYWHITE)
+ rl.BeginMode3D(camera[0])
+ rl.DrawModel(model, (-8.0, 0.0, -8.0), 1.0, colors.RED)
+ rl.DrawGrid(20, 1.0)
+ rl.EndMode3D()
+ rl.DrawText(b"This mesh should be textured", 190, 200, 20, colors.VIOLET)
+ rl.EndDrawing()
+rl.CloseWindow()
+
+"""
+Previously this failed to work in the same place the ctypes binding fails, accessing
+materials of a model. I though it was because Python can't dynamically tell the difference between a pointer and an array.
+"""
diff --git a/dynamic/test_pyray.py b/dynamic/test_pyray.py
new file mode 100644
index 0000000..cfa5f3b
--- /dev/null
+++ b/dynamic/test_pyray.py
@@ -0,0 +1,41 @@
+"""
+This shows how to use the Pyray wrapper around the static binding.
+"""
+
+import pyray as pr
+
+pr.init_window(800, 450, "Raylib texture test")
+pr.set_target_fps(60)
+
+image = pr.gen_image_color(800, 400, (0,0,0,255) )
+texture = pr.load_texture_from_image(image)
+pr.update_texture(texture, image.data)
+
+camera = pr.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0)
+image = pr.load_image("examples/models/resources/heightmap.png")
+texture = pr.load_texture_from_image(image)
+mesh = pr.gen_mesh_heightmap(image, (16, 8, 16))
+model = pr.load_model_from_mesh(mesh)
+model.materials.maps[pr.MATERIAL_MAP_ALBEDO].texture = texture
+
+pr.unload_image(image)
+
+pos = pr.get_mouse_position()
+ray = pr.get_screen_to_world_ray(pos, camera)
+
+
+while not pr.window_should_close():
+ pr.update_camera(camera, pr.CAMERA_ORBITAL)
+ pr.begin_drawing()
+ pr.clear_background(pr.RAYWHITE)
+ pr.begin_mode_3d(camera)
+ pr.draw_model(model, (-8.0, 0.0, -8.0), 1.0, pr.RED)
+ pr.draw_grid(20, 1.0)
+ pr.end_mode_3d()
+ pr.draw_text("This mesh should be textured", 190, 200, 20, pr.VIOLET)
+ pr.end_drawing()
+
+ pos = pr.get_mouse_position()
+ ray = pr.get_screen_to_world_ray(pos, camera)
+
+pr.close_window()
diff --git a/dynamic/version.py b/dynamic/version.py
new file mode 120000
index 0000000..a508b60
--- /dev/null
+++ b/dynamic/version.py
@@ -0,0 +1 @@
+../version.py
\ No newline at end of file
diff --git a/examples/audio/audio_module_playing.py b/examples/audio/audio_module_playing.py
new file mode 100644
index 0000000..94c7e25
--- /dev/null
+++ b/examples/audio/audio_module_playing.py
@@ -0,0 +1,151 @@
+"""
+
+raylib [audio] example - playing
+
+"""
+import dataclasses
+import pyray
+import raylib as rl
+
+
+MAX_CIRCLES=64
+
+
+@dataclasses.dataclass
+class CircleWave:
+ position: pyray.Vector2
+ radius: float
+ alpha: float
+ speed: float
+ color: pyray.Color
+
+screenWidth = 800
+screenHeight = 450
+
+rl.SetConfigFlags(rl.FLAG_MSAA_4X_HINT) # NOTE: Try to enable MSAA 4X
+
+rl.InitWindow(screenWidth, screenHeight, b"raylib [audio] example - module playing (streaming)")
+
+rl.InitAudioDevice() # Initialize audio device
+
+colors = [pyray.ORANGE, pyray.RED, pyray.GOLD, pyray.LIME, pyray.BLUE, pyray.VIOLET, pyray.BROWN, pyray.LIGHTGRAY, pyray.PINK,
+ pyray.YELLOW, pyray.GREEN, pyray.SKYBLUE, pyray.PURPLE, pyray.BEIGE]
+
+# Creates some circles for visual effect
+circles = []
+
+for i in range(MAX_CIRCLES):
+ rad = rl.GetRandomValue(10, 40)
+ pos = pyray.Vector2(
+ float(rl.GetRandomValue(rad, int(screenWidth) - rad)),
+ float(rl.GetRandomValue(rad, int(screenHeight) - rad))
+ )
+ c = CircleWave(
+ alpha=0.0,
+ radius=float(rad),
+ position=pos,
+ speed=float(rl.GetRandomValue(1, 100))/2000.0,
+ color=colors[rl.GetRandomValue(0, 13)]
+ )
+ circles.append(c)
+
+music = rl.LoadMusicStream(b"resources/mini1111.xm")
+music.looping = False
+pitch = 1.0
+
+rl.PlayMusicStream(music)
+timePlayed = 0.0
+pause = False
+
+rl.SetTargetFPS(60) # Set our game to run at 60 frames-per-second
+
+
+# Main game loop
+while not rl.WindowShouldClose(): # Detect window close button or ESC key
+ # Update
+ #----------------------------------------------------------------------------------
+ rl.UpdateMusicStream(music) # Update music buffer with new stream data
+
+ # Restart music playing (stop and play)
+ if rl.IsKeyPressed(rl.KEY_SPACE):
+ rl.StopMusicStream(music)
+ rl.PlayMusicStream(music)
+ pause = False
+
+ # Pause/Resume music playing
+ if rl.IsKeyPressed(rl.KEY_P):
+ pause = not pause
+ if pause:
+ rl.PauseMusicStream(music)
+ else:
+ rl.ResumeMusicStream(music)
+
+
+ if rl.IsKeyDown(rl.KEY_DOWN):
+ pitch -= 0.01
+ elif rl.IsKeyDown(rl.KEY_UP):
+ pitch += 0.01
+
+ rl.SetMusicPitch(music, pitch)
+
+ # Get timePlayed scaled to bar dimensions
+ timePlayed = (rl.GetMusicTimePlayed(music) / rl.GetMusicTimeLength(music))*(screenWidth - 40)
+
+ # Color circles animation
+ for i in range(MAX_CIRCLES):
+ if pause:
+ break
+
+ circles[i].alpha += circles[i].speed
+ circles[i].radius += circles[i].speed*10.0
+
+ if circles[i].alpha > 1.0:
+ circles[i].speed *= -1
+
+ if circles[i].alpha <= 0.0:
+ circles[i].alpha = 0.0
+ rad = rl.GetRandomValue(10, 40)
+ pos = pyray.Vector2(
+ float(rl.GetRandomValue(rad, int(screenWidth) - rad)),
+ float(rl.GetRandomValue(rad, int(screenHeight) - rad))
+ )
+ circles[i].position = pos
+ circles[i].radius = float(rad)
+ circles[i].speed = float(rl.GetRandomValue(1, 100)) / 2000.0
+ circles[i].color = colors[rl.GetRandomValue(0, 13)]
+
+ #----------------------------------------------------------------------------------
+
+ # Draw
+ #----------------------------------------------------------------------------------
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+
+ for i in range(MAX_CIRCLES):
+ pyray.draw_circle_v(circles[i].position, circles[i].radius, pyray.fade(circles[i].color, circles[i].alpha))
+
+ # Draw time bar
+ pyray.draw_rectangle(20, screenHeight - 20 - 12, screenWidth - 40, 12, pyray.LIGHTGRAY)
+ pyray.draw_rectangle(20, screenHeight - 20 - 12, int(timePlayed), 12, pyray.MAROON)
+ pyray.draw_rectangle_lines(20, screenHeight - 20 - 12, screenWidth - 40, 12, pyray.GRAY)
+
+ # Draw help instructions
+ pyray.draw_rectangle(20, 20, 425, 145, pyray.RAYWHITE)
+ pyray.draw_rectangle_lines(20, 20, 425, 145, pyray.GRAY)
+ pyray.draw_text("PRESS SPACE TO RESTART MUSIC", 40, 40, 20, pyray.BLACK)
+ pyray.draw_text("PRESS P TO PAUSE/RESUME", 40, 70, 20, pyray.BLACK)
+ pyray.draw_text("PRESS UP/DOWN TO CHANGE SPEED", 40, 100, 20, pyray.BLACK)
+ pyray.draw_text(f"SPEED: {pitch}", 40, 130, 20, pyray.MAROON)
+
+ pyray.end_drawing()
+ #----------------------------------------------------------------------------------
+
+
+# De-Initialization
+#--------------------------------------------------------------------------------------
+rl.UnloadMusicStream(music) # Unload music stream buffers from RAM
+
+rl.CloseAudioDevice() # Close audio device (music streaming is automatically stopped)
+
+rl.CloseWindow() # Close window and OpenGL context
diff --git a/examples/audio/audio_music_stream.py b/examples/audio/audio_music_stream.py
new file mode 100644
index 0000000..46f88ad
--- /dev/null
+++ b/examples/audio/audio_music_stream.py
@@ -0,0 +1,101 @@
+"""checked with raylib-python-cffi 5.5.0.2
+raylib [audio] example - Music playing (streaming)
+Example complexity rating: [★☆☆☆] 1/4
+Example originally created with raylib 1.3, last time updated with raylib 4.0
+Example 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) 2015-2025 Ramon Santamaria (@raysan5)
+
+This source has been converted from C raylib examples to Python.
+"""
+
+import pyray as rl
+from pathlib import Path
+
+THIS_DIR = Path(__file__).resolve().parent
+
+
+# ------------------------------------------------------------------------------------
+# Program main entry point
+# ------------------------------------------------------------------------------------
+def main():
+ # Initialization
+ # --------------------------------------------------------------------------------------
+ screen_width = 800
+ screen_height = 450
+
+ rl.init_window(
+ screen_width,
+ screen_height,
+ "raylib [audio] example - music playing (streaming)",
+ )
+
+ rl.init_audio_device() # Initialize audio device
+
+ music = rl.load_music_stream(str(THIS_DIR / "resources/country.mp3"))
+
+ rl.play_music_stream(music)
+
+ time_played = 0.0 # Time played normalized [0.0f..1.0f]
+ pause = False # Music playing paused
+
+ rl.set_target_fps(30) # Set our game to run at 30 frames-per-second
+ # --------------------------------------------------------------------------------------
+
+ # Main game loop
+ while not rl.window_should_close(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ rl.update_music_stream(music) # Update music buffer with new stream data
+
+ # Restart music playing (stop and play)
+ if rl.is_key_pressed(rl.KEY_SPACE):
+ rl.stop_music_stream(music)
+ rl.play_music_stream(music)
+
+ # Pause/Resume music playing
+ if rl.is_key_pressed(rl.KEY_P):
+ pause = not pause
+
+ if pause:
+ rl.pause_music_stream(music)
+ else:
+ rl.resume_music_stream(music)
+
+ # Get normalized time played for current music stream
+ time_played = rl.get_music_time_played(music) / rl.get_music_time_length(music)
+
+ if time_played > 1.0:
+ time_played = 1.0 # Make sure time played is no longer than music
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ rl.begin_drawing()
+
+ rl.clear_background(rl.RAYWHITE)
+
+ rl.draw_text("MUSIC SHOULD BE PLAYING!", 255, 150, 20, rl.LIGHTGRAY)
+
+ rl.draw_rectangle(200, 200, 400, 12, rl.LIGHTGRAY)
+ rl.draw_rectangle(200, 200, int(time_played * 400.0), 12, rl.MAROON)
+ rl.draw_rectangle_lines(200, 200, 400, 12, rl.GRAY)
+
+ rl.draw_text("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, rl.LIGHTGRAY)
+ rl.draw_text("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, rl.LIGHTGRAY)
+
+ rl.end_drawing()
+ # ----------------------------------------------------------------------------------
+
+ # De-Initialization
+ # --------------------------------------------------------------------------------------
+ rl.unload_music_stream(music) # Unload music stream buffers from RAM
+
+ rl.close_audio_device() # Close audio device (music streaming is automatically stopped)
+
+ rl.close_window() # Close window and OpenGL context
+ # --------------------------------------------------------------------------------------
+
+
+if __name__ == "__main__":
+ main()
diff --git a/examples/audio/audio_sound_loading.py b/examples/audio/audio_sound_loading.py
new file mode 100644
index 0000000..3854293
--- /dev/null
+++ b/examples/audio/audio_sound_loading.py
@@ -0,0 +1,67 @@
+"""checked with raylib-python-cffi 5.5.0.2
+raylib [audio] example - Sound loading and playing
+Example complexity rating: [★☆☆☆] 1/4
+Example originally created with raylib 1.1, last time updated with raylib 3.5
+Example 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) 2014-2025 Ramon Santamaria (@raysan5)
+
+This source has been converted from C raylib examples to Python.
+"""
+
+import pyray as rl
+from pathlib import Path
+
+# Get the directory where this script is located
+THIS_DIR = Path(__file__).resolve().parent
+
+# Initialization
+# --------------------------------------------------------------------------------------
+screen_width = 800
+screen_height = 450
+
+rl.init_window(
+ screen_width, screen_height, "raylib [audio] example - sound loading and playing"
+)
+
+rl.init_audio_device() # Initialize audio device
+
+# Load WAV audio file using proper path resolution
+fx_wav = rl.load_sound(str(THIS_DIR / "resources/sound.wav"))
+# Load OGG audio file using proper path resolution
+fx_ogg = rl.load_sound(str(THIS_DIR / "resources/target.ogg"))
+
+rl.set_target_fps(60) # Set our game to run at 60 frames-per-second
+# --------------------------------------------------------------------------------------
+
+# Main game loop
+while not rl.window_should_close(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ if rl.is_key_pressed(rl.KeyboardKey.KEY_SPACE):
+ rl.play_sound(fx_wav) # Play WAV sound
+ if rl.is_key_pressed(rl.KeyboardKey.KEY_ENTER):
+ rl.play_sound(fx_ogg) # Play OGG sound
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ rl.begin_drawing()
+
+ rl.clear_background(rl.RAYWHITE)
+
+ rl.draw_text("Press SPACE to PLAY the WAV sound!", 200, 180, 20, rl.LIGHTGRAY)
+ rl.draw_text("Press ENTER to PLAY the OGG sound!", 200, 220, 20, rl.LIGHTGRAY)
+
+ rl.end_drawing()
+ # ----------------------------------------------------------------------------------
+
+# De-Initialization
+# --------------------------------------------------------------------------------------
+rl.unload_sound(fx_wav) # Unload sound data
+rl.unload_sound(fx_ogg) # Unload sound data
+
+rl.close_audio_device() # Close audio device
+
+rl.close_window() # Close window and OpenGL context
+# --------------------------------------------------------------------------------------
diff --git a/examples/audio/audio_sound_multi.py b/examples/audio/audio_sound_multi.py
new file mode 100644
index 0000000..0cc6c82
--- /dev/null
+++ b/examples/audio/audio_sound_multi.py
@@ -0,0 +1,86 @@
+"""checked with raylib-python-cffi 5.5.0.2
+raylib [audio] example - Playing sound multiple times
+Example complexity rating: [★★☆☆] 2/4
+Example originally created with raylib 4.6, last time updated with raylib 4.6
+Example contributed by Jeffery Myers (@JeffM2501) and reviewed by Ramon Santamaria (@raysan5)
+Example 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) 2023-2025 Jeffery Myers (@JeffM2501)
+
+This source has been converted from C raylib examples to Python.
+"""
+
+from typing import List
+
+import pyray as rl
+from pathlib import Path
+
+# Get the directory where this script is located
+THIS_DIR = Path(__file__).resolve().parent
+
+MAX_SOUNDS = 10
+sound_array: List[rl.Sound] = []
+current_sound = 0
+
+# Initialization
+# --------------------------------------------------------------------------------------
+screen_width = 800
+screen_height = 450
+
+rl.init_window(
+ screen_width, screen_height, "raylib [audio] example - playing sound multiple times"
+)
+
+rl.init_audio_device() # Initialize audio device
+
+# Load the sound list
+sound_array.append(
+ rl.load_sound(str(THIS_DIR / "resources/sound.wav"))
+) # Load WAV audio file into the first slot as the 'source' sound
+# this sound owns the sample data
+for i in range(1, MAX_SOUNDS):
+ sound_array.append(
+ rl.load_sound_alias(sound_array[0])
+ ) # Load an alias of the sound into slots 1-9
+ # These do not own the sound data, but can be played
+current_sound = 0 # Set the sound list to the start
+
+rl.set_target_fps(60) # Set our game to run at 60 frames-per-second
+# --------------------------------------------------------------------------------------
+
+# Main game loop
+while not rl.window_should_close(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ if rl.is_key_pressed(rl.KeyboardKey.KEY_SPACE):
+ rl.play_sound(sound_array[current_sound]) # Play the next open sound slot
+ current_sound += 1 # Increment the sound slot
+ if (
+ current_sound >= MAX_SOUNDS
+ ): # If the sound slot is out of bounds, go back to 0
+ current_sound = 0
+
+ # Note: a better way would be to look at the list for the first sound that is not playing and use that slot
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ rl.begin_drawing()
+
+ rl.clear_background(rl.RAYWHITE)
+
+ rl.draw_text("Press SPACE to PLAY a WAV sound!", 200, 180, 20, rl.LIGHTGRAY)
+
+ rl.end_drawing()
+ # ----------------------------------------------------------------------------------
+
+# De-Initialization
+# --------------------------------------------------------------------------------------
+for i in range(1, MAX_SOUNDS):
+ rl.unload_sound_alias(sound_array[i]) # Unload sound aliases
+rl.unload_sound(sound_array[0]) # Unload source sound data
+
+rl.close_audio_device() # Close audio device
+
+rl.close_window() # Close window and OpenGL context
+# --------------------------------------------------------------------------------------
diff --git a/examples/audio/audio_sound_positioning.py b/examples/audio/audio_sound_positioning.py
new file mode 100644
index 0000000..f3e77cf
--- /dev/null
+++ b/examples/audio/audio_sound_positioning.py
@@ -0,0 +1,112 @@
+"""checked with raylib-python-cffi 5.5.0.2
+raylib [audio] example - Playing spatialized 3D sound
+Example complexity rating: [★★☆☆] 2/4
+Example originally created with raylib 5.5, last time updated with raylib 5.5
+Example contributed by Le Juez Victor (@Bigfoot71) and reviewed by Ramon Santamaria (@raysan5)
+Example 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) 2025 Le Juez Victor (@Bigfoot71)
+
+This source has been converted from C raylib examples to Python.
+"""
+
+import pyray as rl
+import math
+from pathlib import Path
+
+# Get the directory where this script is located
+THIS_DIR = Path(__file__).resolve().parent
+
+
+# Sound positioning function
+def set_sound_position(listener, sound, position, max_dist):
+ # Calculate direction vector and distance between listener and sound source
+ direction = rl.vector3_subtract(position, listener.position)
+ distance = rl.vector3_length(direction)
+
+ # Apply logarithmic distance attenuation and clamp between 0-1
+ attenuation = 1.0 / (1.0 + (distance / max_dist))
+ attenuation = rl.clamp(attenuation, 0.0, 1.0)
+
+ # Calculate normalized vectors for spatial positioning
+ normalized_direction = rl.vector3_normalize(direction)
+ forward = rl.vector3_normalize(
+ rl.vector3_subtract(listener.target, listener.position)
+ )
+ right = rl.vector3_normalize(rl.vector3_cross_product(listener.up, forward))
+
+ # Reduce volume for sounds behind the listener
+ dot_product = rl.vector3_dot_product(forward, normalized_direction)
+ if dot_product < 0.0:
+ attenuation *= 1.0 + dot_product * 0.5
+
+ # Set stereo panning based on sound position relative to listener
+ pan = 0.5 + 0.5 * rl.vector3_dot_product(normalized_direction, right)
+
+ # Apply final sound properties
+ rl.set_sound_volume(sound, attenuation)
+ rl.set_sound_pan(sound, pan)
+
+
+# Initialization
+# --------------------------------------------------------------------------------------
+screen_width = 800
+screen_height = 450
+
+rl.init_window(
+ screen_width, screen_height, "raylib [audio] example - Playing spatialized 3D sound"
+)
+
+rl.init_audio_device()
+
+sound = rl.load_sound(str(THIS_DIR / "resources/coin.wav"))
+
+camera = rl.Camera3D(
+ (0, 5, 5),
+ (0, 0, 0),
+ (0, 1, 0),
+ 60.0,
+ rl.CameraProjection.CAMERA_PERSPECTIVE,
+)
+
+rl.disable_cursor()
+
+rl.set_target_fps(60)
+# --------------------------------------------------------------------------------------
+
+# Main game loop
+while not rl.window_should_close():
+ # Update
+ # ----------------------------------------------------------------------------------
+ rl.update_camera(camera, rl.CameraMode.CAMERA_FREE)
+
+ th = rl.get_time()
+
+ sphere_pos = rl.Vector3(5.0 * math.cos(th), 0.0, 5.0 * math.sin(th))
+
+ set_sound_position(camera, sound, sphere_pos, 20.0)
+ if not rl.is_sound_playing(sound):
+ rl.play_sound(sound)
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ rl.begin_drawing()
+
+ rl.clear_background(rl.RAYWHITE)
+
+ rl.begin_mode_3d(camera)
+ rl.draw_grid(10, 2)
+ rl.draw_sphere(sphere_pos, 0.5, rl.RED)
+ rl.end_mode_3d()
+
+ rl.end_drawing()
+ # ----------------------------------------------------------------------------------
+
+# De-Initialization
+# --------------------------------------------------------------------------------------
+rl.unload_sound(sound)
+rl.close_audio_device() # Close audio device
+
+rl.close_window() # Close window and OpenGL context
+# --------------------------------------------------------------------------------------
diff --git a/examples/audio/resources/coin.wav b/examples/audio/resources/coin.wav
new file mode 100644
index 0000000..ad95bfb
Binary files /dev/null and b/examples/audio/resources/coin.wav differ
diff --git a/examples/audio/resources/country.mp3 b/examples/audio/resources/country.mp3
new file mode 100644
index 0000000..91066cc
Binary files /dev/null and b/examples/audio/resources/country.mp3 differ
diff --git a/examples/audio/resources/mini1111.xm b/examples/audio/resources/mini1111.xm
new file mode 100644
index 0000000..a185c1a
Binary files /dev/null and b/examples/audio/resources/mini1111.xm differ
diff --git a/examples/audio/resources/sound.wav b/examples/audio/resources/sound.wav
new file mode 100644
index 0000000..b5d01c9
Binary files /dev/null and b/examples/audio/resources/sound.wav differ
diff --git a/examples/audio/resources/target.ogg b/examples/audio/resources/target.ogg
new file mode 100644
index 0000000..2b73e1c
Binary files /dev/null and b/examples/audio/resources/target.ogg differ
diff --git a/examples/core/core_2d_camera.py b/examples/core/core_2d_camera.py
new file mode 100644
index 0000000..8a6bc05
--- /dev/null
+++ b/examples/core/core_2d_camera.py
@@ -0,0 +1,132 @@
+"""
+
+raylib [core] example - 2D Camera System
+
+"""
+import pyray
+
+from pyray import (
+ RAYWHITE,
+ DARKGRAY,
+ RED,
+ GREEN,
+ SKYBLUE,
+ BLUE,
+ BLACK,
+)
+
+# Initialization
+MAX_BUILDINGS = 100
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT,'raylib [core] example - 2d camera')
+
+player = pyray.Rectangle(400, 280, 40, 40)
+buildings = []
+build_colors = []
+spacing = 0
+
+for i in range(MAX_BUILDINGS):
+ width = pyray.get_random_value(50, 200)
+ height = pyray.get_random_value(100, 800)
+ y = SCREEN_HEIGHT - 130 - height
+ x = -6000 + spacing
+
+ buildings.append(pyray.Rectangle(x, y, width, height))
+
+ spacing += width
+
+ build_colors.append(pyray.Color(
+ pyray.get_random_value(200, 240),
+ pyray.get_random_value(200, 240),
+ pyray.get_random_value(200, 250),
+ 255
+ ))
+
+camera = pyray.Camera2D()
+camera.target = pyray.Vector2(player.x + 20, player.y + 20)
+camera.offset = pyray.Vector2(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)
+camera.rotation = 0.0
+camera.zoom = 1.0
+
+pyray.set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+# Main game loop
+while not pyray.window_should_close(): # Detect window close button or ESC key
+ # Update
+
+ # Player movement
+ if pyray.is_key_down(pyray.KeyboardKey.KEY_RIGHT):
+ player.x += 2
+ elif pyray.is_key_down(pyray.KeyboardKey.KEY_LEFT):
+ player.x -= 2
+
+ # Camera target follows player
+ camera.target = pyray.Vector2(player.x + 20, player.y + 20)
+
+ # Camera rotation controls
+ if pyray.is_key_down(pyray.KeyboardKey.KEY_A):
+ camera.rotation -= 1
+ elif pyray.is_key_down(pyray.KeyboardKey.KEY_S):
+ camera.rotation += 1
+
+ # Limit camera rotation to 80 degrees (-40 to 40)
+ if camera.rotation > 40:
+ camera.rotation = 40
+ elif camera.rotation < -40:
+ camera.rotation = -40
+
+ # Camera zoom controls
+ camera.zoom += pyray.get_mouse_wheel_move() * 0.05
+
+ if camera.zoom > 3.0:
+ camera.zoom = 3.0
+ elif camera.zoom < 0.1:
+ camera.zoom = 0.1
+
+ # Camera reset (zoom and rotation)
+ if pyray.is_key_pressed(pyray.KeyboardKey.KEY_R):
+ camera.zoom = 1.0
+ camera.rotation = 0.0
+
+ # Draw
+ pyray.begin_drawing()
+ pyray.clear_background(RAYWHITE)
+
+ pyray.begin_mode_2d(camera)
+
+ pyray.draw_rectangle(-6000, 320, 13000, 8000, DARKGRAY)
+
+ for i in range(MAX_BUILDINGS):
+ pyray.draw_rectangle_rec(buildings[i], build_colors[i])
+
+ pyray.draw_rectangle_rec(player, RED)
+
+ x = int(camera.target.x)
+ y = int(camera.target.y)
+ pyray.draw_line(x, -SCREEN_HEIGHT * 10, x, SCREEN_HEIGHT * 10, GREEN)
+ pyray.draw_line(-SCREEN_WIDTH * 10, y, SCREEN_WIDTH * 10, y, GREEN)
+
+ pyray.end_mode_2d()
+
+ pyray.draw_text('SCREEN AREA', 640, 10, 20, RED)
+
+ pyray.draw_rectangle(0, 0, SCREEN_WIDTH, 5, RED)
+ pyray.draw_rectangle(0, 5, 5, SCREEN_HEIGHT - 10, RED)
+ pyray.draw_rectangle(SCREEN_WIDTH - 5, 5, 5, SCREEN_HEIGHT - 10, RED)
+ pyray.draw_rectangle(0, SCREEN_HEIGHT - 5, SCREEN_WIDTH, 5, RED)
+
+ pyray.draw_rectangle(10, 10, 250, 113, pyray.fade(SKYBLUE, 0.5))
+ pyray.draw_rectangle_lines(10, 10, 250, 113, BLUE)
+
+ pyray.draw_text('Free 2d camera controls:', 20, 20, 10, BLACK)
+ pyray.draw_text('- Right/Left to move Offset', 40, 40, 10, DARKGRAY)
+ pyray.draw_text('- Mouse Wheel to Zoom in-out', 40, 60, 10, DARKGRAY)
+ pyray.draw_text('- A / S to Rotate', 40, 80, 10, DARKGRAY)
+ pyray.draw_text('- R to reset Zoom and Rotation', 40, 100, 10, DARKGRAY)
+
+ pyray.end_drawing()
+
+# De-Initialization
+pyray.close_window() # Close window and OpenGL context
diff --git a/examples/core/core_2d_camera_mouse_zoom.py b/examples/core/core_2d_camera_mouse_zoom.py
new file mode 100644
index 0000000..aeeabf2
--- /dev/null
+++ b/examples/core/core_2d_camera_mouse_zoom.py
@@ -0,0 +1,66 @@
+"""
+raylib [core] example - 2d camera mouse zoom
+"""
+
+import pyray
+
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [core] example - 2d camera mouse zoom")
+
+pyray.set_target_fps(60)
+
+camera = pyray.Camera2D()
+
+camera.zoom = 1.0
+
+pyray.set_target_fps(60)
+
+# main game loop
+while not pyray.window_should_close():
+ # update
+ if pyray.is_mouse_button_down(pyray.MouseButton.MOUSE_BUTTON_RIGHT):
+ delta = pyray.get_mouse_delta()
+ delta = pyray.vector2_scale(delta, -1.0 / camera.zoom)
+ camera.target = pyray.vector2_add(camera.target, delta)
+
+ # zoom based on mouse wheel
+ wheel = pyray.get_mouse_wheel_move()
+ if wheel != 0:
+
+ mouseWorldPos = pyray.get_screen_to_world_2d(pyray.get_mouse_position(), camera)
+
+ camera.offset = pyray.get_mouse_position()
+
+ camera.target = mouseWorldPos
+
+ ZOOM_INCREMENT = 0.125
+
+ camera.zoom += (wheel*ZOOM_INCREMENT)
+ if (camera.zoom < ZOOM_INCREMENT): camera.zoom = ZOOM_INCREMENT
+
+
+ # draw
+ pyray.begin_drawing()
+ pyray.clear_background(pyray.BLACK)
+
+ pyray.begin_mode_2d(camera)
+
+ pyray.rl_push_matrix()
+ pyray.rl_translatef(0, 25*50, 0)
+ pyray.rl_rotatef(90, 1, 0, 0)
+ pyray.draw_grid(100, 50)
+ pyray.rl_pop_matrix()
+
+ pyray.draw_circle(100, 100, 50, pyray.YELLOW)
+
+ pyray.end_mode_2d()
+
+ pyray.draw_text("Mouse right button drag to move, mouse wheel to zoom", 10, 10, 20, pyray.WHITE)
+
+ pyray.end_drawing()
+
+# de-Initialization
+pyray.close_window()
+
diff --git a/examples/core/core_2d_camera_platformer.py b/examples/core/core_2d_camera_platformer.py
new file mode 100644
index 0000000..db8ed8f
--- /dev/null
+++ b/examples/core/core_2d_camera_platformer.py
@@ -0,0 +1,310 @@
+"""
+
+raylib [core] example - 2D Camera platformer
+
+"""
+from math import sqrt
+
+import pyray
+from pyray import (
+ DARKGRAY,
+ RED,
+ BLACK,
+ GRAY,
+ LIGHTGRAY,
+)
+
+# Initialization
+global g_evening_out, g_even_out_target
+g_evening_out = False
+
+G = 400
+PLAYER_JUMP_SPD = 350.0
+PLAYER_HOR_SPD = 200.0
+
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, 'raylib [core] example - 2d camera')
+
+
+# Raylib Math
+def vector2_subtract(v1, v2):
+ return pyray.Vector2(v1.x - v2.x, v1.y - v2.y)
+
+
+def vector2_add(v1, v2):
+ return pyray.Vector2(v1.x + v2.x, v1.y + v2.y)
+
+
+def vector2_length(v):
+ return sqrt((v.x * v.x) + (v.y * v.y))
+
+
+def vector2_scale(v, scale):
+ return pyray.Vector2(v.x * scale, v.y * scale)
+
+
+class Player:
+
+ def __init__(self, position, speed, can_jump):
+ self.position = position
+ self.speed = speed
+ self.can_jump = can_jump
+
+
+class EnvItem:
+
+ def __init__(self, rect, blocking, color):
+ self.rect = rect
+ self.blocking = blocking
+ self.color = color
+
+
+def update_player(player, env_items, delta):
+ if pyray.is_key_down(pyray.KeyboardKey.KEY_LEFT):
+ player.position.x -= PLAYER_HOR_SPD * delta
+ if pyray.is_key_down(pyray.KeyboardKey.KEY_RIGHT):
+ player.position.x += PLAYER_HOR_SPD * delta
+ if pyray.is_key_down(pyray.KeyboardKey.KEY_SPACE) and player.can_jump:
+ player.speed = -PLAYER_JUMP_SPD
+ player.can_jump = False
+
+ hit_obstacle = False
+ for ei in env_items:
+ p = player.position
+ if (
+ ei.blocking and
+ ei.rect.x <= p.x and
+ ei.rect.x + ei.rect.width >= p.x and
+ ei.rect.y >= p.y and
+ ei.rect.y < p.y + player.speed * delta
+ ):
+ hit_obstacle = True
+ player.speed = 0.0
+ p.y = ei.rect.y
+
+ if not hit_obstacle:
+ player.position.y += player.speed * delta
+ player.speed += G * delta
+ player.can_jump = False
+ else:
+ player.can_jump = True
+
+
+def update_camera_center(
+ camera, player, env_items, delta, width, height
+):
+ camera.offset = pyray.Vector2(width / 2, height / 2)
+ camera.target = player.position
+
+
+def update_camera_center_inside_map(
+ camera, player, env_items, delta, width, height
+):
+ camera.target = player.position
+ camera.offset = pyray.Vector2(width / 2, height / 2)
+
+ minX = 1000
+ minY = 1000
+ maxX = -1000
+ maxY = -1000
+
+ for ei in env_items:
+ minX = min(ei.rect.x, minX)
+ maxX = max(ei.rect.x + ei.rect.width, maxX)
+
+ minY = min(ei.rect.y, minY)
+ maxY = max(ei.rect.y + ei.rect.height, maxY)
+
+ wmax = pyray.get_world_to_screen_2d(pyray.Vector2(maxX, maxY), camera)
+ wmin = pyray.get_world_to_screen_2d(pyray.Vector2(minX, minY), camera)
+
+ if wmax.x < width:
+ camera.offset.x = width - (wmax.x - width / 2)
+ if wmax.y < height:
+ camera.offset.y = height - (wmax.y - height / 2)
+ if wmin.x > 0:
+ camera.offset.x = width / 2 - wmin.x
+ if wmin.y > 0:
+ camera.offset.y = height / 2 - wmin.y
+
+
+def update_camera_center_smooth_follow(
+ camera, player, env_items, delta, width, height
+):
+ min_speed = 30
+ min_effect_length = 10
+ fraction_speed = 0.8
+
+ camera.offset = pyray.Vector2(width / 2, height / 2)
+ diff = vector2_subtract(player.position, camera.target)
+ length = vector2_length(diff)
+
+ if length > min_effect_length:
+ speed = max(fraction_speed * length, min_speed)
+ camera.target = vector2_add(
+ camera.target, vector2_scale(diff, speed * delta / length)
+ )
+
+
+def update_camera_even_out_on_landing(
+ camera, player, env_items, delta, width, height
+):
+ global g_evening_out, g_even_out_target
+
+ even_out_speed = 700
+
+ camera.offset = pyray.Vector2(width / 2, height / 2)
+ camera.target.x = player.position.x
+
+ if g_evening_out:
+ if g_even_out_target > camera.target.y:
+ camera.target.y += even_out_speed * delta
+
+ if camera.target.y > g_even_out_target:
+ camera.target.y = g_even_out_target
+ g_evening_out = False
+ else:
+ camera.target.y -= even_out_speed * delta
+ if camera.target.y < g_even_out_target:
+ camera.target.y = g_even_out_target
+ g_evening_out = False
+ else:
+ if (
+ player.can_jump and
+ (player.speed == 0) and
+ (player.position.y != camera.target.y)
+ ):
+ g_evening_out = True
+ g_even_out_target = player.position.y
+
+
+def update_camera_player_bounds_push(
+ camera, player, env_items, delta, width, height
+):
+ bbox = pyray.Vector2(0.2, 0.2)
+
+ bbox_world_min = pyray.get_world_to_screen_2d(
+ pyray.Vector2((1 - bbox.x) * 0.5 * width,
+ (1 - bbox.y) * 0.5 * height),
+ camera
+ )
+ bbox_world_max = pyray.get_world_to_screen_2d(
+ pyray.Vector2((1 + bbox.x) * 0.5 * width,
+ (1 + bbox.y) * 0.5 * height),
+ camera
+ )
+ camera.offset = pyray.Vector2((1 - bbox.x) * 0.5 * width,
+ (1 - bbox.y) * 0.5 * height)
+
+ if player.position.x < bbox_world_min.x:
+ camera.target.x = player.position.x
+ if player.position.y < bbox_world_min.y:
+ camera.target.y = player.position.y
+ if player.position.x > bbox_world_max.x:
+ camera.target.x = (
+ bbox_world_min.x + (player.position.x - bbox_world_max.x)
+ )
+ if player.position.y > bbox_world_max.y:
+ camera.target.y = (
+ bbox_world_min.y + (player.position.y - bbox_world_max.y)
+ )
+
+
+# Main intialization
+player = Player(pyray.Vector2(400, 280), 0, False)
+env_items = (
+ EnvItem(pyray.Rectangle(0, 0, 1000, 400), 0, LIGHTGRAY),
+ EnvItem(pyray.Rectangle(0, 400, 1000, 200), 1, GRAY),
+ EnvItem(pyray.Rectangle(300, 200, 400, 10), 1, GRAY),
+ EnvItem(pyray.Rectangle(250, 300, 100, 10), 1, GRAY),
+ EnvItem(pyray.Rectangle(650, 300, 100, 10), 1, GRAY),
+)
+
+camera = pyray.Camera2D()
+camera.target = player.position
+camera.offset = pyray.Vector2(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)
+camera.rotation = 0.0
+camera.zoom = 1.0
+
+pyray.set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+# Store pointers to the multiple update camera functions
+camera_updaters = (
+ update_camera_center,
+ update_camera_center_inside_map,
+ update_camera_center_smooth_follow,
+ update_camera_even_out_on_landing,
+ update_camera_player_bounds_push,
+)
+camera_option = 0
+camera_updaters_length = len(camera_updaters)
+
+camera_descriptions = (
+ 'Follow player center',
+ 'Follow player center, but clamp to map edges',
+ 'Follow player center smoothed',
+ ('Follow player center horizontally '
+ 'update player center vertically after landing'),
+ 'Player push camera on getting too close to screen edge',
+)
+
+# Main game loop
+while not pyray.window_should_close(): # Detect window close button or ESC key
+ # Update
+ delta_time = pyray.get_frame_time()
+
+ update_player(player, env_items, delta_time)
+
+ camera.zoom += pyray.get_mouse_wheel_move() * 0.05
+
+ if camera.zoom > 3.0:
+ camera.zoom = 3.0
+ elif camera.zoom < 0.25:
+ camera.zoom = 0.25
+
+ if pyray.is_key_pressed(pyray.KeyboardKey.KEY_R):
+ camera.zoom = 1.0
+ player.position = pyray.Vector2(400, 280)
+
+ if pyray.is_key_pressed(pyray.KeyboardKey.KEY_C):
+ camera_option = (camera_option + 1) % camera_updaters_length
+
+ # Call update camera function by its pointer
+ camera_updaters[camera_option](
+ camera, player, env_items, delta_time,
+ SCREEN_WIDTH, SCREEN_HEIGHT
+ )
+
+ # Draw
+ pyray.begin_drawing()
+ pyray.clear_background(LIGHTGRAY)
+
+ pyray.begin_mode_2d(camera)
+
+ for env_item in env_items:
+ pyray.draw_rectangle_rec(env_item.rect, env_item.color)
+
+ player_rect = pyray.Rectangle(
+ int(player.position.x) - 20,
+ int(player.position.y) - 40,
+ 40, 40
+ )
+ pyray.draw_rectangle_rec(player_rect, RED)
+
+ pyray.end_mode_2d()
+
+ pyray.draw_text('Controls:', 20, 20, 10, BLACK)
+ pyray.draw_text('- Right/Left to move', 40, 40, 10, DARKGRAY)
+ pyray.draw_text('- Space to jump', 40, 60, 10, DARKGRAY)
+ pyray.draw_text('- Mouse Wheel to Zoom in-out, R to reset zoom',
+ 40, 80, 10, DARKGRAY)
+ pyray.draw_text('- C to change camera mode', 40, 100, 10, DARKGRAY)
+ pyray.draw_text('Current camera mode:', 20, 120, 10, BLACK)
+ pyray.draw_text(camera_descriptions[camera_option], 40, 140, 10, DARKGRAY)
+
+ pyray.end_drawing()
+
+# De-Initialization
+pyray.close_window() # Close window and OpenGL context
diff --git a/examples/core/core_3d_camera_first_person_incomplete.py b/examples/core/core_3d_camera_first_person_incomplete.py
new file mode 100644
index 0000000..743903b
--- /dev/null
+++ b/examples/core/core_3d_camera_first_person_incomplete.py
@@ -0,0 +1,67 @@
+"""
+raylib [core] example - 3d camera first person
+adapted from https://github.com/raysan5/raylib/blob/master/examples/core/core_3d_camera_first_person.c
+"""
+
+import pyray
+
+MAX_COLUMNS = 20
+
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [core] example - 3d camera first person")
+
+# Define the camera to look into our 3d world (position, target, up vector)
+camera = pyray.Camera3D()
+camera.position = pyray.Vector3(4.0, 2.0, 4.0)
+camera.target = pyray.Vector3(0.0, 1.8, 0.0)
+camera.up = pyray.Vector3(0.0, 1.0, 0.0)
+camera.fovy = 60.0
+camera.projection = pyray.CameraProjection.CAMERA_PERSPECTIVE
+
+# Generates some random columns
+heights = []
+positions = []
+colors = []
+
+for i in range(MAX_COLUMNS):
+ heights.append(pyray.get_random_value(1, 12) * 1.0)
+ positions.append(pyray.Vector3(pyray.get_random_value(-15, 15) * 1.0, heights[i]/2.0 * 1.0, pyray.get_random_value(-15, 15) * 1.0))
+ colors.append(pyray.Color(pyray.get_random_value(20, 255), pyray.get_random_value(10, 55), 30, 255))
+
+
+pyray.set_target_fps(60)
+
+while not pyray.window_should_close():
+
+ pyray.update_camera(camera, pyray.CameraMode.CAMERA_FIRST_PERSON)
+
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+
+ pyray.begin_mode_3d(camera)
+
+ pyray.draw_plane(pyray.Vector3(0.0, 0.0, 0.0), pyray.Vector2(32.0, 32.0), pyray.LIGHTGRAY)
+ pyray.draw_cube(pyray.Vector3(-16.0, 2.5, 0.0), 1.0, 5.0, 32.0, pyray.BLUE)
+ pyray.draw_cube(pyray.Vector3(16.0, 2.5, 0.0), 1.0, 5.0, 32.0, pyray.LIME)
+ pyray.draw_cube(pyray.Vector3(0.0, 2.5, 16.0), 32.0, 5.0, 1.0, pyray.GOLD)
+
+ for i in range(MAX_COLUMNS):
+ pyray.draw_cube(positions[i], 2.0, heights[i], 2.0, colors[i])
+ pyray.draw_cube_wires(positions[i], 2.0, heights[i], 2.0, pyray.MAROON)
+
+
+ pyray.end_mode_3d()
+
+ pyray.draw_rectangle( 10, 10, 220, 70, pyray.fade(pyray.SKYBLUE, 0.5))
+ pyray.draw_rectangle_lines( 10, 10, 220, 70, pyray.BLUE)
+
+ pyray.draw_text("First person camera default controls:", 20, 20, 10, pyray.BLACK)
+ pyray.draw_text("- Move with keys: W, A, S, D", 40, 40, 10, pyray.DARKGRAY)
+ pyray.draw_text("- Mouse move to look around", 40, 60, 10, pyray.DARKGRAY)
+
+ pyray.end_drawing()
+
+pyray.close_window()
diff --git a/examples/core/core_3d_camera_free_incomplete.py b/examples/core/core_3d_camera_free_incomplete.py
new file mode 100644
index 0000000..a1e54ce
--- /dev/null
+++ b/examples/core/core_3d_camera_free_incomplete.py
@@ -0,0 +1,58 @@
+from pyray import *
+
+# Initialization
+screenWidth = 800
+screenHeight = 450
+
+init_window(screenWidth, screenHeight, "raylib [core] example - 3d camera free")
+
+# Define the camera to look into our 3d world
+camera = Camera3D()
+camera.position = Vector3(10.0, 10.0, 10.0) # Camera position
+camera.target = Vector3(0.0, 0.0, 0.0) # Camera looking at point
+camera.up = Vector3(0.0, 1.0, 0.0) # Camera up vector (rotation towards target)
+camera.fovy = 45.0 # Camera field-of-view Y
+camera.projection = CameraProjection.CAMERA_PERSPECTIVE # Camera projection type
+
+cubePosition = Vector3(0.0, 0.0, 0.0)
+
+disable_cursor() # Limit cursor to relative movement inside the window
+
+set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ update_camera(camera, CameraMode.CAMERA_FREE)
+
+ if is_key_pressed(KeyboardKey.KEY_Z):
+ camera.target = Vector3(0.0, 0.0, 0.0)
+
+ # Draw
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+
+ begin_mode_3d(camera)
+
+ draw_cube(cubePosition, 2.0, 2.0, 2.0, RED)
+ draw_cube_wires(cubePosition, 2.0, 2.0, 2.0, MAROON)
+
+ draw_grid(10, 1.0)
+
+ end_mode_3d()
+
+ draw_rectangle(10, 10, 320, 93, fade(SKYBLUE, 0.5))
+ draw_rectangle_lines(10, 10, 320, 93, BLUE)
+
+ draw_text("Free camera default controls:", 20, 20, 10, BLACK)
+ draw_text("- Mouse Wheel to Zoom in-out", 40, 40, 10, DARKGRAY)
+ draw_text("- Mouse Wheel Pressed to Pan", 40, 60, 10, DARKGRAY)
+ draw_text("- Alt + Mouse Wheel Pressed to Rotate", 40, 80, 10, DARKGRAY)
+ draw_text("- Alt + Ctrl + Mouse Wheel Pressed for Smooth Zoom", 40, 100, 10, DARKGRAY)
+ draw_text("- Z to zoom to (0, 0, 0)", 40, 120, 10, DARKGRAY)
+
+ end_drawing()
+
+# De-Initialization
+close_window() # Close window and OpenGL context
diff --git a/examples/core/core_3d_camera_mode.py b/examples/core/core_3d_camera_mode.py
new file mode 100644
index 0000000..715660c
--- /dev/null
+++ b/examples/core/core_3d_camera_mode.py
@@ -0,0 +1,51 @@
+"""
+raylib [core] example - 3d camera mode
+adapted from https://github.com/raysan5/raylib/blob/master/examples/core/core_3d_camera_mode.c
+"""
+
+import pyray
+
+# Initialization
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [core] example - 3d camera mode")
+
+# Define the camera to look into our 3d world
+camera = pyray.Camera3D([0])
+camera.position = pyray.Vector3(0.0, 10.0, 10.0) # Camera position
+camera.target = pyray.Vector3(0.0, 0.0, 0.0) # Camera looking at point
+camera.up = pyray.Vector3(0.0, 1.0, 0.0) # Camera up vector (rotation towards target)
+camera.fovy = 45.0 # Camera field-of-view Y
+camera.projection = pyray.CameraProjection.CAMERA_PERSPECTIVE # Camera mode type
+
+cube_position = pyray.Vector3(0.0, 0.0, 0.0)
+
+pyray.set_target_fps(60)
+
+# Main game loop
+while not pyray.window_should_close():
+
+ # Draw
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+
+ pyray.begin_mode_3d(camera)
+
+ pyray.draw_cube(cube_position, 2.0, 2.0, 2.0, pyray.RED)
+ pyray.draw_cube_wires(cube_position, 2.0, 2.0, 2.0, pyray.MAROON)
+
+ pyray.draw_grid(10, 1.0)
+
+ pyray.end_mode_3d()
+
+ pyray.draw_text("Welcome to the third dimension!", 10, 40, 20, pyray.DARKGRAY)
+
+ pyray.draw_fps(10, 10)
+
+ pyray.end_drawing()
+
+# De-Initialization
+pyray.close_window()
+
diff --git a/examples/core/core_basic_screen_manager.py b/examples/core/core_basic_screen_manager.py
new file mode 100644
index 0000000..5f3eb09
--- /dev/null
+++ b/examples/core/core_basic_screen_manager.py
@@ -0,0 +1,61 @@
+from pyray import *
+from enum import Enum, auto
+
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+
+class GameScreen(Enum):
+ LOGO = auto()
+ TITLE = auto()
+ GAMEPLAY = auto()
+ ENDING = auto()
+
+
+def main():
+ init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [core] example - basic screen manager")
+
+ frame_count = 0
+ set_target_fps(60)
+ current_screen = GameScreen.LOGO
+
+ while not window_should_close():
+
+ # State machine
+ if current_screen == GameScreen.LOGO:
+ frame_count += 1
+ if frame_count > 120:
+ current_screen = GameScreen.TITLE
+ elif current_screen == GameScreen.TITLE:
+ if is_key_pressed(KeyboardKey.KEY_ENTER) or is_gesture_detected(Gesture.GESTURE_TAP):
+ current_screen = GameScreen.GAMEPLAY
+ elif current_screen == GameScreen.GAMEPLAY:
+ if is_key_pressed(KeyboardKey.KEY_ENTER) or is_gesture_detected(Gesture.GESTURE_TAP):
+ current_screen = GameScreen.ENDING
+ elif current_screen == GameScreen.ENDING:
+ if is_key_pressed(KeyboardKey.KEY_ENTER) or is_gesture_detected(Gesture.GESTURE_TAP):
+ current_screen = GameScreen.TITLE
+
+ begin_drawing()
+ clear_background(RAYWHITE)
+ if current_screen == GameScreen.LOGO:
+ draw_text("LOGO SCREEN", 20, 20, 40, LIGHTGRAY)
+ draw_text("WAIT for 2 SECONDS...", 290, 220, 20, GRAY)
+ elif current_screen == GameScreen.TITLE:
+ draw_rectangle(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, GREEN)
+ draw_text("TITLE SCREEN", 20, 20, 40, DARKGREEN)
+ draw_text("PRESS ENTER or TAP to JUMP to GAMEPLAY SCREEN", 120, 220, 20, DARKGREEN)
+ elif current_screen == GameScreen.GAMEPLAY:
+ draw_rectangle(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, PURPLE)
+ draw_text("GAMEPLAY SCREEN", 20, 20, 40, MAROON)
+ draw_text("PRESS ENTER or TAP to JUMP to ENDING SCREEN", 120, 220, 20, MAROON)
+ elif current_screen == GameScreen.ENDING:
+ draw_rectangle(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, BLUE)
+ draw_text("ENDING SCREEN", 20, 20, 40, DARKBLUE)
+ draw_text("PRESS ENTER or TAP to JUMP to TITLE SCREEN", 120, 220, 20, DARKBLUE)
+ end_drawing()
+ close_window()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/examples/core/core_basic_window.py b/examples/core/core_basic_window.py
new file mode 100644
index 0000000..b5b0e22
--- /dev/null
+++ b/examples/core/core_basic_window.py
@@ -0,0 +1,32 @@
+"""
+
+raylib [core] example - Basic window
+
+"""
+import pyray
+
+# Initialization
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, 'raylib [core] example - basic window')
+pyray.set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+
+# Main game loop
+while not pyray.window_should_close(): # Detect window close button or ESC key
+ # Update
+ # TODO: Update your variables here
+
+ # Draw
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+ pyray.draw_text(
+ 'Congrats! You created your first window!', 190, 200, 20, pyray.LIGHTGRAY)
+
+ pyray.end_drawing()
+
+
+# De-Initialization
+pyray.close_window() # Close window and OpenGL context
diff --git a/examples/core/core_drop_files.py b/examples/core/core_drop_files.py
new file mode 100644
index 0000000..d627442
--- /dev/null
+++ b/examples/core/core_drop_files.py
@@ -0,0 +1,51 @@
+"""
+
+* raylib [core] example - Windows drop files
+*
+* This example only works on platforms that support drag & drop (Windows, Linux, OSX, Html5?)
+*
+* This example has been created using raylib 1.3 (www.raylib.com)
+* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+* Copyright (c) 2015 Ramon Santamaria (@raysan5)
+
+"""
+import pyray
+
+screenWidth = 800
+screenHeight = 450
+
+pyray.init_window(screenWidth, screenHeight, 'raylib [core] example - drop files')
+pyray.set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+droppedFiles = pyray.FilePathList()
+
+
+
+while not pyray.window_should_close():
+
+ if pyray.is_file_dropped():
+ droppedFiles = pyray.load_dropped_files()
+
+
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+
+ if droppedFiles.count == 0:
+ pyray.draw_text("Drop your files to this window!", 100, 40, 20, pyray.DARKGRAY)
+ else:
+ pyray.draw_text("Dropped files:", 100, 40, 20, pyray.DARKGRAY)
+
+ for i in range(0, droppedFiles.count):
+ if i % 2 == 0:
+ pyray.draw_rectangle(0, 85 + 40*i, screenWidth, 40, pyray.fade(pyray.LIGHTGRAY, 0.5))
+ else:
+ pyray.draw_rectangle(0, 85 + 40*i, screenWidth, 40, pyray.fade(pyray.LIGHTGRAY, 0.3))
+ pyray.draw_text(droppedFiles.paths[i], 120, 100 + 40*i, 10, pyray.GRAY)
+
+ pyray.draw_text("Drop new files...", 100, 110 + 40*droppedFiles.count, 20, pyray.DARKGRAY)
+ pyray.end_drawing()
+
+# De-Initialization
+pyray.close_window() # Close window and OpenGL context
diff --git a/examples/core/core_input_gestures.py b/examples/core/core_input_gestures.py
new file mode 100644
index 0000000..8d5bff5
--- /dev/null
+++ b/examples/core/core_input_gestures.py
@@ -0,0 +1,95 @@
+"""
+
+raylib [core] example - Input Gestures Detection
+
+"""
+import pyray
+
+
+
+# Initialization
+MAX_GESTURE_STRINGS = 20
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, 'raylib [core] example - input gestures')
+
+touch_position = pyray.Vector2(0, 0)
+touch_area = pyray.Rectangle(220, 10, SCREEN_WIDTH - 230, SCREEN_HEIGHT - 20)
+
+gesture_strings = []
+
+current_gesture = pyray.Gesture.GESTURE_NONE
+last_gesture = pyray.Gesture.GESTURE_NONE
+
+GESTURE_LABELS = {
+ pyray.Gesture.GESTURE_TAP: 'GESTURE TAP',
+ pyray.Gesture.GESTURE_DOUBLETAP: 'GESTURE DOUBLETAP',
+ pyray.Gesture.GESTURE_HOLD: 'GESTURE HOLD',
+ pyray.Gesture.GESTURE_DRAG: 'GESTURE DRAG',
+ pyray.Gesture.GESTURE_SWIPE_RIGHT: 'GESTURE SWIPE RIGHT',
+ pyray.Gesture.GESTURE_SWIPE_LEFT: 'GESTURE SWIPE LEFT',
+ pyray.Gesture.GESTURE_SWIPE_UP: 'GESTURE SWIPE UP',
+ pyray.Gesture.GESTURE_SWIPE_DOWN: 'GESTURE SWIPE DOWN',
+ pyray.Gesture.GESTURE_PINCH_IN: 'GESTURE PINCH IN',
+ pyray.Gesture.GESTURE_PINCH_OUT: 'GESTURE PINCH OUT',
+}
+
+pyray.set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+
+# Main game loop
+while not pyray.window_should_close(): # Detect window close button or ESC key
+ # Update
+ last_gesture = current_gesture
+ current_gesture = pyray.get_gesture_detected()
+ touch_position = pyray.get_touch_position(0)
+
+ if (
+ pyray.check_collision_point_rec(touch_position, touch_area)
+ and current_gesture != pyray.Gesture.GESTURE_NONE
+ ):
+ if current_gesture != last_gesture:
+ gesture_strings.append(GESTURE_LABELS[current_gesture])
+
+ # Reset gestures strings
+ if len(gesture_strings) >= MAX_GESTURE_STRINGS:
+ gesture_strings = []
+
+ # Draw
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+
+ pyray.draw_rectangle_rec(touch_area, pyray.GRAY)
+ pyray.draw_rectangle(225, 15, SCREEN_WIDTH - 240, SCREEN_HEIGHT - 30,
+ pyray.RAYWHITE)
+ pyray.draw_text(
+ 'GESTURES TEST AREA',
+ SCREEN_WIDTH - 270, SCREEN_HEIGHT - 40, 20, pyray.fade(pyray.GRAY, 0.5)
+ )
+
+ for i, val in enumerate(gesture_strings):
+ if i % 2 == 0:
+ pyray.draw_rectangle(
+ 10, 30 + 20 * i, 200, 20, pyray.fade(pyray.LIGHTGRAY, 0.5))
+ else:
+ pyray.draw_rectangle(
+ 10, 30 + 20 * i, 200, 20, pyray.fade(pyray.LIGHTGRAY, 0.3))
+
+ if i < len(gesture_strings) - 1:
+ pyray.draw_text(val, 35, 36 + 20 * i, 10, pyray.DARKGRAY)
+ else:
+ pyray.draw_text(val, 35, 36 + 20 * i, 10, pyray.MAROON)
+
+ pyray.draw_rectangle_lines(10, 29, 200, SCREEN_HEIGHT - 50, pyray.GRAY)
+ pyray.draw_text('DETECTED GESTURES', 50, 15, 10, pyray.GRAY)
+
+ if current_gesture != pyray.Gesture.GESTURE_NONE:
+ pyray.draw_circle_v(touch_position, 30, pyray.MAROON)
+
+ pyray.end_drawing()
+
+
+# De-Initialization
+pyray.close_window() # Close window and OpenGL context
diff --git a/examples/core/core_input_keys.py b/examples/core/core_input_keys.py
new file mode 100644
index 0000000..8635ee6
--- /dev/null
+++ b/examples/core/core_input_keys.py
@@ -0,0 +1,42 @@
+"""
+
+raylib [core] example - Keyboard input
+
+"""
+import pyray
+
+
+# Initialization
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, 'raylib [core] example - keyboard input')
+ball_position = pyray.Vector2(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)
+
+pyray.set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+
+# Main game loop
+while not pyray.window_should_close(): # Detect window close button or ESC key
+ # Update
+ if pyray.is_key_down(pyray.KeyboardKey.KEY_RIGHT):
+ ball_position.x += 2
+ if pyray.is_key_down(pyray.KeyboardKey.KEY_LEFT):
+ ball_position.x -= 2
+ if pyray.is_key_down(pyray.KeyboardKey.KEY_UP):
+ ball_position.y -= 2
+ if pyray.is_key_down(pyray.KeyboardKey.KEY_DOWN):
+ ball_position.y += 2
+
+ # Draw
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+ pyray.draw_text('move the ball with arrow keys', 10, 10, 20, pyray.DARKGRAY)
+ pyray.draw_circle_v(ball_position, 50, pyray.MAROON)
+
+ pyray.end_drawing()
+
+
+# De-Initialization
+pyray.close_window() # Close window and OpenGL context
diff --git a/examples/core/core_input_mouse.py b/examples/core/core_input_mouse.py
new file mode 100644
index 0000000..5f1cce9
--- /dev/null
+++ b/examples/core/core_input_mouse.py
@@ -0,0 +1,52 @@
+"""
+
+raylib [core] example - Mouse input
+
+"""
+from pyray import *
+
+
+# Initialization
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+init_window(SCREEN_WIDTH, SCREEN_HEIGHT, 'raylib [core] example - mouse input')
+
+ball_position = Vector2(-100, -100)
+ball_color = DARKBLUE
+
+set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ ball_position = get_mouse_position()
+
+ if is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_LEFT):
+ ball_color = MAROON
+ elif is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_MIDDLE):
+ ball_color = LIME
+ elif is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_RIGHT):
+ ball_color = DARKBLUE
+ elif is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_SIDE):
+ ball_color = PURPLE
+ elif is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_EXTRA):
+ ball_color = YELLOW
+ elif is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_FORWARD):
+ ball_color = ORANGE
+ elif is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_BACK):
+ ball_color = BEIGE
+ # Draw
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+ draw_circle_v(ball_position, 40, ball_color)
+ draw_text(
+ 'move ball with mouse and click mouse button to change color',
+ 10, 10, 20, DARKGRAY
+ )
+
+ end_drawing()
+
+# De-Initialization
+close_window() # Close window and OpenGL context
diff --git a/examples/core/core_input_mouse_wheel.py b/examples/core/core_input_mouse_wheel.py
new file mode 100644
index 0000000..836cf22
--- /dev/null
+++ b/examples/core/core_input_mouse_wheel.py
@@ -0,0 +1,44 @@
+"""
+
+raylib [core] example - Mouse wheel input
+
+"""
+import pyray
+
+
+
+
+# Initialization
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, 'raylib [core] example - input mouse wheel')
+
+box_position_y: int = SCREEN_HEIGHT // 2 - 40
+scroll_speed = 4 # Scrolling speed in pixels
+
+pyray.set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+
+# Main game loop
+while not pyray.window_should_close(): # Detect window close button or ESC key
+ # Update
+ box_position_y -= int(pyray.get_mouse_wheel_move() * scroll_speed)
+
+ # Draw
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+
+ pyray.draw_rectangle(SCREEN_WIDTH // 2 - 40, box_position_y, 80, 80, pyray.MAROON)
+
+ pyray.draw_text('User mouse wheel to move the cube up and down!',
+ 10, 10, 20, pyray.GRAY)
+ pyray.draw_text('Box position Y: {:03d}'.format(box_position_y),
+ 10, 40, 20, pyray.LIGHTGRAY)
+
+ pyray.end_drawing()
+
+
+# De-Initialization
+pyray.close_window() # Close window and OpenGL context
diff --git a/examples/core/core_random_values.py b/examples/core/core_random_values.py
new file mode 100644
index 0000000..7f63ec3
--- /dev/null
+++ b/examples/core/core_random_values.py
@@ -0,0 +1,49 @@
+"""
+
+raylib [core] example - random values
+
+"""
+from pyray import *
+
+# Initialization
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+init_window(SCREEN_WIDTH, SCREEN_HEIGHT, 'raylib [core] example - random values')
+
+# set_random_seed() // Set a custom random seed if desired, by default: "time(NULL)"
+
+randValue = get_random_value(-8, 5) # Get a random integer number between -8 and 5 (both included)
+
+framesCounter = 0 # Variable used to count frames
+
+set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+
+ # Update
+ # ----------------------------------------------------------------------------------
+ framesCounter += 1
+
+ # Every two seconds (120 frames) a new random value is generated
+ if ((framesCounter/120) % 2) == 1:
+ randValue = get_random_value(-8, 5)
+ framesCounter = 0
+
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+
+ draw_text("Every 2 seconds a new random value is generated:", 130, 100, 20, MAROON)
+
+ draw_text(str(randValue), 360, 180, 80, LIGHTGRAY)
+
+ end_drawing()
+
+# De-Initialization
+close_window() # Close window and OpenGL context
diff --git a/examples/core/core_scissor_test.py b/examples/core/core_scissor_test.py
new file mode 100644
index 0000000..e54b214
--- /dev/null
+++ b/examples/core/core_scissor_test.py
@@ -0,0 +1,57 @@
+"""
+
+raylib [core] example - Scissor Test
+
+"""
+from pyray import *
+
+
+# Initialization
+# --------------------------------------------------------------------------------------
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [core] example - scissor test")
+
+scissorArea = Rectangle(0, 0, 300, 300)
+scissorMode = True
+
+set_target_fps(60) # Set our game to run at 60 frames-per-second
+# --------------------------------------------------------------------------------------
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ if is_key_pressed(KeyboardKey.KEY_S):
+ scissorMode = not scissorMode
+
+ # Centre the scissor area around the mouse position
+ scissorArea.x = get_mouse_x() - scissorArea.width/2
+ scissorArea.y = get_mouse_y() - scissorArea.height/2
+ # ----------------------------------------------------------------------------------
+
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+ if scissorMode:
+ begin_scissor_mode(int(scissorArea.x), int(scissorArea.y), int(scissorArea.width), int(scissorArea.height))
+
+ # Draw full screen rectangle and some text
+ # NOTE: Only part defined by scissor area will be rendered
+ draw_rectangle(0, 0, get_screen_width(), get_screen_height(), RED)
+ draw_text("Move the mouse around to reveal this text!", 190, 200, 20, LIGHTGRAY)
+
+ if scissorMode:
+ end_scissor_mode()
+
+ draw_rectangle_lines_ex(scissorArea, 1, BLACK)
+ draw_text("Press S to toggle scissor test", 10, 10, 20, BLACK)
+
+ end_drawing()
+
+# De-Initialization
+close_window() # Close window and OpenGL context
diff --git a/examples/core/core_smooth_pixel_perfect_camera.py b/examples/core/core_smooth_pixel_perfect_camera.py
new file mode 100644
index 0000000..fdf0604
--- /dev/null
+++ b/examples/core/core_smooth_pixel_perfect_camera.py
@@ -0,0 +1,90 @@
+from pyray import *
+import math
+#Initialization
+
+screenWidth = 800
+screenHeight = 450
+
+virtualScreenWidth = 160
+virtualScreenHeight = 90
+
+virtualRatio = screenWidth/ virtualScreenWidth
+
+init_window(screenWidth, screenHeight, "raylib [core] example - smooth pixel-perfect camera")
+
+worldSpaceCamera = Camera2D([0]) # Game world camera
+worldSpaceCamera.zoom = 1.0
+
+screenSpaceCamera = Camera2D([0]) # Smoothing camera
+screenSpaceCamera.zoom = 1.0
+
+target = load_render_texture(virtualScreenWidth, virtualScreenHeight) # This is where we'll draw all our objects.
+
+rec01 = Rectangle(70.0, 35.0, 20.0, 20.0)
+rec02 = Rectangle(90.0, 55.0, 30.0, 10.0)
+rec03 = Rectangle(80.0, 65.0, 15.0, 25.0)
+
+# The target's height is flipped (in the source Rectangle), due to OpenGL reasons
+sourceRec = Rectangle(0.0, 0.0, target.texture.width, -target.texture.height)
+destRec = Rectangle(-virtualRatio, -virtualRatio, screenWidth + (virtualRatio*2), screenHeight + (virtualRatio*2))
+
+origin = Vector2(0.0, 0.0)
+
+rotation = 0.0
+
+cameraX = 0.0
+cameraY = 0.0
+
+set_target_fps(60)
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+
+ # Update
+
+ rotation += 60.0 *get_frame_time() # Rotate the rectangles, 60 degrees per second
+
+ # Make the camera move to demonstrate the effect
+ cameraX = (math.sin(get_time())*50.0) - 10.0
+ cameraY = math.cos(get_time())*30.0
+
+ # Set the camera's target to the values computed above
+ screenSpaceCamera.target = Vector2(cameraX, cameraY)
+
+ # Round worldSpace coordinates, keep decimals into screenSpace coordinates
+ worldSpaceCamera.target.x = screenSpaceCamera.target.x
+ screenSpaceCamera.target.x -= worldSpaceCamera.target.x
+ screenSpaceCamera.target.x *= virtualRatio
+
+ worldSpaceCamera.target.y = screenSpaceCamera.target.y
+ screenSpaceCamera.target.y -= worldSpaceCamera.target.y
+ screenSpaceCamera.target.y *= virtualRatio
+
+ begin_texture_mode(target)
+ clear_background(RAYWHITE)
+
+ begin_mode_2d(worldSpaceCamera)
+ draw_rectangle_pro(rec01, origin, rotation, BLACK)
+ draw_rectangle_pro(rec02, origin, -rotation, RED)
+ draw_rectangle_pro(rec03, origin, rotation + 45.0, BLUE)
+ end_mode_2d()
+ end_texture_mode()
+
+ begin_drawing()
+ clear_background(RED)
+
+ begin_mode_2d(screenSpaceCamera)
+ draw_texture_pro(target.texture, sourceRec, destRec, origin, 0.0, WHITE)
+ end_mode_2d()
+
+ draw_text(f"Screen resolution: {screenWidth}, {screenHeight}", 10, 10, 20, DARKBLUE)
+ draw_text(f"World resolution: {virtualScreenWidth}, {virtualScreenHeight}", 10, 40, 20, DARKGREEN)
+ draw_fps(get_screen_width() - 95, 10)
+ end_drawing()
+
+
+# De-Initialization
+
+unload_render_texture(target) # Unload render texture
+
+close_window() # Close window and OpenGL context
\ No newline at end of file
diff --git a/examples/core/core_split_screen.py b/examples/core/core_split_screen.py
new file mode 100644
index 0000000..71b5640
--- /dev/null
+++ b/examples/core/core_split_screen.py
@@ -0,0 +1,123 @@
+"""
+
+raylib [core] example - Split Screen
+
+"""
+
+from pyray import *
+
+cameraPlayer1 = Camera3D([0])
+cameraPlayer2 = Camera3D([0])
+
+def draw_scene():
+ count = 5
+ spacing = 4
+
+ # Grid of cube trees on a plane to make a "world"
+
+ draw_plane(Vector3(0, 0, 0), Vector2(50, 50), BEIGE)
+
+ for x in range(-count*spacing, count*spacing, spacing):
+ for z in range(-count*spacing, count*spacing, spacing):
+ draw_cube(Vector3(x, 1.5, z), 1, 1, 1, LIME)
+ draw_cube(Vector3(x, 0.5, z), 0.25, 1, 0.25, BROWN)
+
+ # Draw a cube at each player's position
+ draw_cube(cameraPlayer1.position, 1, 1, 1, RED)
+ draw_cube(cameraPlayer2.position, 1, 1, 1, BLUE)
+
+# Initialization
+
+screenWidth = 800
+screenHeight = 450
+
+init_window(screenWidth, screenHeight, "raylib [core] example - split screen")
+
+# Setup player 1 camera and screen
+
+cameraPlayer1.fovy = 45.0
+cameraPlayer1.up = Vector3(0,1.0,0)
+cameraPlayer1.target = Vector3(0,1.0,0)
+cameraPlayer1.position = Vector3(0,1,-3)
+
+screenPlayer1 = load_render_texture(int(screenWidth/2), int(screenHeight))
+
+# Setup player 2 camera and screen
+cameraPlayer2.fovy = 45.0
+cameraPlayer2.up = Vector3(0,1.0,0)
+cameraPlayer2.target = Vector3(0,3.0,0)
+cameraPlayer2.position = Vector3(-3,3,0)
+
+screenPlayer2 = load_render_texture(int(screenWidth / 2), int(screenHeight))
+
+# Build a flipped rectangle the size of the split view to use for drawing later
+splitScreenRect = Rectangle(0.0, 0.0, screenPlayer1.texture.width, -screenPlayer1.texture.height)
+
+set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+
+ ''' Update
+ If anyone moves this frame, how far will they move based on the time since the last frame
+ this moves thigns at 10 world units per second, regardless of the actual FPS'''
+
+ offsetThisFrame = 10.0 * get_frame_time()
+
+ # Move Player1 forward and backwards (no turning)
+
+ if is_key_down(KeyboardKey.KEY_W):
+ cameraPlayer1.position.z += offsetThisFrame
+ cameraPlayer1.target.z += offsetThisFrame
+
+ elif is_key_down(KeyboardKey.KEY_S):
+
+ cameraPlayer1.position.z -= offsetThisFrame
+ cameraPlayer1.target.z -= offsetThisFrame
+
+ # Move Player2 forward and backwards (no turning)
+ if is_key_down(KeyboardKey.KEY_UP):
+ cameraPlayer2.position.x += offsetThisFrame
+ cameraPlayer2.target.x += offsetThisFrame
+
+ elif is_key_down(KeyboardKey.KEY_DOWN):
+ cameraPlayer2.position
+ cameraPlayer2.position.x -= offsetThisFrame
+ cameraPlayer2.target.x -= offsetThisFrame
+
+ # Draw Player1 view to the render texture
+ begin_texture_mode(screenPlayer1)
+ clear_background(SKYBLUE)
+ begin_mode_3d(cameraPlayer1)
+ draw_scene()
+ end_mode_3d()
+ draw_text("PLAYER1 W/S to move", 10, 10, 20, RED)
+ end_texture_mode()
+
+ # Draw Player2 view to the render texture
+
+ begin_texture_mode(screenPlayer2)
+ clear_background(SKYBLUE)
+ begin_mode_3d(cameraPlayer2)
+ draw_scene()
+ end_mode_3d()
+ draw_text("PLAYER2 UP/DOWN to move", 10, 10, 20, BLUE)
+ end_texture_mode()
+
+ # Draw both views render textures to the screen side by side
+ begin_drawing()
+ clear_background(BLACK)
+ draw_texture_rec(screenPlayer1.texture, splitScreenRect, Vector2(0,0), WHITE)
+ draw_texture_rec(screenPlayer2.texture, splitScreenRect, Vector2(screenWidth/2.0, 0 ), WHITE)
+ end_drawing()
+
+
+# De-Initialization
+unload_render_texture(screenPlayer1) # Unload render texture
+unload_render_texture(screenPlayer2) # Unload render texture
+
+close_window()
+
+
+
+
diff --git a/examples/core/core_vr_simulator.py b/examples/core/core_vr_simulator.py
new file mode 100644
index 0000000..10573f2
--- /dev/null
+++ b/examples/core/core_vr_simulator.py
@@ -0,0 +1,101 @@
+import pyray
+import raylib
+
+GLSL_VERSION = 330
+
+# Initialization
+screenWidth = 800
+screenHeight = 450
+
+# NOTE: screenWidth/screenHeight should match VR device aspect ratio
+pyray.init_window(screenWidth, screenHeight, "raylib [core] example - vr simulator")
+
+# VR device parameters definition
+device = pyray.VrDeviceInfo(
+ # Oculus Rift CV1 parameters for simulator
+ 2160, # Horizontal resolution in pixels
+ 1200, # Vertical resolution in pixels
+ 0.133793, # Horizontal size in meters
+ 0.0669, # Vertical size in meters
+ 0.041, # Distance between eye and display in meters
+ 0.07, # Lens separation distance in meters
+ 0.07, # IPD (distance between pupils) in meters
+
+ # NOTE: CV1 uses fresnel-hybrid-asymmetric lenses with specific compute shaders
+ # Following parameters are just an approximation to CV1 distortion stereo rendering
+ [1.0, 0.22, 0.24, 0.0], # Lens distortion constant parameters
+ [0.996, -0.004, 1.014, 0.0] # Chromatic aberration correction parameters
+)
+
+# Load VR stereo config for VR device parameters (Oculus Rift CV1 parameters)
+config = pyray.load_vr_stereo_config(device)
+
+# Distortion shader (uses device lens distortion and chroma)
+distortion = pyray.load_shader(pyray.ffi.NULL, f"resources/distortion{GLSL_VERSION}.fs")
+
+# Update distortion shader with lens and distortion-scale parameters
+pyray.set_shader_value(distortion, 2, pyray.ffi.new('char []', b"leftLensCenter"), pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC2)
+pyray.set_shader_value(distortion, 2,pyray.ffi.new('char []', b"rightLensCenter"), pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC2)
+pyray.set_shader_value(distortion, 2,pyray.ffi.new('char []', b"leftScreenCenter"), pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC2)
+pyray.set_shader_value(distortion, 2,pyray.ffi.new('char []', b"rightScreenCenter"), pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC2)
+
+pyray.set_shader_value(distortion, 2,pyray.ffi.new('char []', b"scale"), pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC2)
+pyray.set_shader_value(distortion, 2,pyray.ffi.new('char []', b"scaleIn"), pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC2)
+pyray.set_shader_value(distortion, 4,pyray.ffi.new('char []', b"deviceWarpParam"), pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC4)
+pyray.set_shader_value(distortion, 4,pyray.ffi.new('char []', b"chromaAbParam"), pyray.ShaderUniformDataType.SHADER_UNIFORM_VEC4)
+
+# Initialize framebuffer for stereo rendering
+# NOTE: Screen size should match HMD aspect ratio
+target = pyray.load_render_texture(device.hResolution, device.vResolution)
+
+# The target's height is flipped (in the source Rectangle), due to OpenGL reasons
+sourceRec = pyray.Rectangle(0.0, 0.0, target.texture.width, -target.texture.height)
+destRec = pyray.Rectangle(0.0, 0.0, pyray.get_screen_width(), pyray.get_screen_height())
+
+# Define the camera to look into our 3D world
+camera = pyray.Camera3D(
+ pyray.Vector3(5.0, 2.0, 5.0), # Camera position
+ pyray.Vector3(0.0, 2.0, 0.0), # Camera looking at point
+ pyray.Vector3(0.0, 1.0, 0.0), # Camera up vector
+ 60.0, # Camera field-of-view Y
+ pyray.CameraProjection.CAMERA_PERSPECTIVE # Camera projection type
+)
+
+cubePosition = pyray.Vector3(0.0, 0.0, 0.0)
+
+pyray.disable_cursor() # Limit cursor to relative movement inside the window
+
+pyray.set_target_fps(90) # Set our game to run at 90 frames-per-second
+
+# Main game loop
+while not pyray.window_should_close(): # Detect window close button or ESC key
+ # Update
+ pyray.update_camera(camera, pyray.CameraMode.CAMERA_FIRST_PERSON)
+
+ # Draw
+ pyray.begin_texture_mode(target)
+ pyray.clear_background(pyray.RAYWHITE)
+ pyray.begin_vr_stereo_mode(config)
+ pyray.begin_mode_3d(camera)
+
+ pyray.draw_cube(cubePosition, 2.0, 2.0, 2.0, pyray.RED)
+ pyray.draw_cube_wires(cubePosition, 2.0, 2.0, 2.0, pyray.MAROON)
+ pyray.draw_grid(40, 1.0)
+
+ pyray.end_mode_3d()
+ pyray.end_vr_stereo_mode()
+ pyray.end_texture_mode()
+
+ pyray.begin_drawing()
+ pyray.clear_background(pyray.RAYWHITE)
+ pyray.begin_shader_mode(distortion)
+ pyray.draw_texture_pro(target.texture, sourceRec, destRec, pyray.Vector2(0.0, 0.0), 0.0, pyray.WHITE)
+ pyray.end_shader_mode()
+ pyray.draw_fps(10, 10)
+ pyray.end_drawing()
+
+# De-Initialization
+pyray.unload_vr_stereo_config(config) # Unload stereo config
+pyray.unload_render_texture(target) # Unload stereo render fbo
+pyray.unload_shader(distortion) # Unload distortion shader
+pyray.close_window() # Close window and OpenGL context
diff --git a/examples/core/core_window_flags.py b/examples/core/core_window_flags.py
new file mode 100644
index 0000000..14569fe
--- /dev/null
+++ b/examples/core/core_window_flags.py
@@ -0,0 +1,156 @@
+from pyray import *
+import pyray
+
+# Initialization
+# ---------------------------------------------------------
+screen_width = 800
+screen_height = 450
+
+init_window(screen_width, screen_height, "raylib [core] example - window flags")
+
+ball_position = Vector2(get_screen_width() / 2.0, get_screen_height() / 2.0)
+ball_speed = Vector2(5.0, 4.0)
+ball_radius = 20.0
+
+frames_counter = 0
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ # -----------------------------------------------------
+ if is_key_pressed(pyray.KeyboardKey.KEY_F):
+ toggle_fullscreen()
+
+ if is_key_pressed(pyray.KeyboardKey.KEY_R):
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_RESIZABLE):
+ clear_window_state(pyray.ConfigFlags.FLAG_WINDOW_RESIZABLE)
+ else:
+ set_window_state(pyray.ConfigFlags.FLAG_WINDOW_RESIZABLE)
+
+ if is_key_pressed(pyray.KeyboardKey.KEY_D):
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_UNDECORATED):
+ clear_window_state(pyray.ConfigFlags.FLAG_WINDOW_UNDECORATED)
+ else:
+ set_window_state(pyray.ConfigFlags.FLAG_WINDOW_UNDECORATED)
+
+ if is_key_pressed(pyray.KeyboardKey.KEY_H):
+ if not is_window_state(pyray.ConfigFlags.FLAG_WINDOW_HIDDEN):
+ set_window_state(pyray.ConfigFlags.FLAG_WINDOW_HIDDEN)
+ frames_counter = 0
+
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_HIDDEN):
+ frames_counter += 1
+ if frames_counter >= 240:
+ clear_window_state(pyray.ConfigFlags.FLAG_WINDOW_HIDDEN) # Show window after 3 seconds
+
+ if is_key_pressed(pyray.KeyboardKey.KEY_N):
+ if not is_window_state(pyray.ConfigFlags.FLAG_WINDOW_MINIMIZED):
+ minimize_window()
+ frames_counter = 0
+
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_MINIMIZED):
+ frames_counter += 1
+ if frames_counter >= 240:
+ restore_window() # Restore window after 3 seconds
+
+ if is_key_pressed(pyray.KeyboardKey.KEY_M):
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_RESIZABLE):
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_MAXIMIZED):
+ restore_window()
+ else:
+ maximize_window()
+
+ if is_key_pressed(pyray.KeyboardKey.KEY_U):
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_UNFOCUSED):
+ clear_window_state(pyray.ConfigFlags.FLAG_WINDOW_UNFOCUSED)
+ else:
+ set_window_state(pyray.ConfigFlags.FLAG_WINDOW_UNFOCUSED)
+
+ if is_key_pressed(pyray.KeyboardKey.KEY_T):
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_TOPMOST):
+ clear_window_state(pyray.ConfigFlags.FLAG_WINDOW_TOPMOST)
+ else:
+ set_window_state(pyray.ConfigFlags.FLAG_WINDOW_TOPMOST)
+
+ if is_key_pressed(pyray.KeyboardKey.KEY_A):
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_ALWAYS_RUN):
+ clear_window_state(pyray.ConfigFlags.FLAG_WINDOW_ALWAYS_RUN)
+ else:
+ set_window_state(pyray.ConfigFlags.FLAG_WINDOW_ALWAYS_RUN)
+
+ if is_key_pressed(pyray.KeyboardKey.KEY_V):
+ if is_window_state(pyray.ConfigFlags.FLAG_VSYNC_HINT):
+ clear_window_state(pyray.ConfigFlags.FLAG_VSYNC_HINT)
+ else:
+ set_window_state(pyray.ConfigFlags.FLAG_VSYNC_HINT)
+
+ # Bouncing ball logic
+ ball_position.x += ball_speed.x
+ ball_position.y += ball_speed.y
+ if ball_position.x >= (get_screen_width() - ball_radius) or ball_position.x <= ball_radius:
+ ball_speed.x *= -1.0
+ if ball_position.y >= (get_screen_height() - ball_radius) or ball_position.y <= ball_radius:
+ ball_speed.y *= -1.0
+
+ # Draw
+ # -----------------------------------------------------
+ begin_drawing()
+
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_TRANSPARENT):
+ clear_background(BLANK)
+ else:
+ clear_background(RAYWHITE)
+
+ draw_circle_v(ball_position, ball_radius, MAROON)
+ draw_rectangle_lines_ex(Rectangle(0, 0, get_screen_width(), get_screen_height()), 4, RAYWHITE)
+
+ draw_circle_v(get_mouse_position(), 10, DARKBLUE)
+
+ draw_fps(10, 10)
+
+ draw_text(f"Screen Size: [{get_screen_width()}, {get_screen_height()}]", 10, 40, 10, GREEN)
+
+ # Draw window state info
+ draw_text("Following flags can be set after window creation:", 10, 60, 10, GRAY)
+ flag_texts = [
+ ("FLAG_FULLSCREEN_MODE", pyray.ConfigFlags.FLAG_FULLSCREEN_MODE),
+ ("FLAG_WINDOW_RESIZABLE", pyray.ConfigFlags.FLAG_WINDOW_RESIZABLE),
+ ("FLAG_WINDOW_UNDECORATED", pyray.ConfigFlags.FLAG_WINDOW_UNDECORATED),
+ ("FLAG_WINDOW_HIDDEN", pyray.ConfigFlags.FLAG_WINDOW_HIDDEN),
+ ("FLAG_WINDOW_MINIMIZED", pyray.ConfigFlags.FLAG_WINDOW_MINIMIZED),
+ ("FLAG_WINDOW_MAXIMIZED", pyray.ConfigFlags.FLAG_WINDOW_MAXIMIZED),
+ ("FLAG_WINDOW_UNFOCUSED", pyray.ConfigFlags.FLAG_WINDOW_UNFOCUSED),
+ ("FLAG_WINDOW_TOPMOST", pyray.ConfigFlags.FLAG_WINDOW_TOPMOST),
+ ("FLAG_WINDOW_ALWAYS_RUN", pyray.ConfigFlags.FLAG_WINDOW_ALWAYS_RUN),
+ ("FLAG_VSYNC_HINT", pyray.ConfigFlags.FLAG_VSYNC_HINT),
+ ]
+ y_offset = 80
+ for text, flag in flag_texts:
+ if is_window_state(flag):
+ draw_text(f"[{text[5:]}] {text}: on", 10, y_offset, 10, LIME)
+ else:
+ draw_text(f"[{text[5:]}] {text}: off", 10, y_offset, 10, MAROON)
+ y_offset += 20
+
+ draw_text("Following flags can only be set before window creation:", 10, 300, 10, GRAY)
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_HIGHDPI):
+ draw_text("FLAG_WINDOW_HIGHDPI: on", 10, 320, 10, LIME)
+ else:
+ draw_text("FLAG_WINDOW_HIGHDPI: off", 10, 320, 10, MAROON)
+ if is_window_state(pyray.ConfigFlags.FLAG_WINDOW_TRANSPARENT):
+ draw_text("FLAG_WINDOW_TRANSPARENT: on", 10, 340, 10, LIME)
+ else:
+ draw_text("FLAG_WINDOW_TRANSPARENT: off", 10, 340, 10, MAROON)
+ if is_window_state(pyray.ConfigFlags.FLAG_MSAA_4X_HINT):
+ draw_text("FLAG_MSAA_4X_HINT: on", 10, 360, 10, LIME)
+ else:
+ draw_text("FLAG_MSAA_4X_HINT: off", 10, 360, 10, MAROON)
+
+ end_drawing()
+ # -----------------------------------------------------
+
+# De-Initialization
+# ---------------------------------------------------------
+close_window() # Close window and OpenGL context
+# ---------------------------------------------------------
+
diff --git a/examples/core/core_window_should_close.py b/examples/core/core_window_should_close.py
new file mode 100644
index 0000000..a02d493
--- /dev/null
+++ b/examples/core/core_window_should_close.py
@@ -0,0 +1,62 @@
+"""
+
+raylib [core] example - Window Should Close
+
+"""
+from pyray import *
+
+# Initialization
+# --------------------------------------------------------------------------------------
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [core] example - window should close")
+
+set_exit_key(KeyboardKey.KEY_NULL) # Disable KEY_ESCAPE to close window, X-button still works
+
+exitWindowRequested = False # Flag to request window to exit
+exitWindow = False # Flag to set window to exit
+
+set_target_fps(60) # Set our game to run at 60 frames-per-second
+# --------------------------------------------------------------------------------------
+
+# Main game loop
+while not exitWindow:
+
+ # Update
+ # ----------------------------------------------------------------------------------
+ # Detect if X-button or KEY_ESCAPE have been pressed to close window
+ if window_should_close() or is_key_pressed(KeyboardKey.KEY_ESCAPE):
+ exitWindowRequested = True
+
+ if exitWindowRequested:
+
+ # A request for close window has been issued, we can save data before closing
+ # or just show a message asking for confirmation
+
+ if is_key_pressed(KeyboardKey.KEY_Y):
+ exitWindow = True
+ elif is_key_pressed(KeyboardKey.KEY_N):
+ exitWindowRequested = False
+
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+
+ if exitWindowRequested:
+
+ draw_rectangle(0, 100, SCREEN_WIDTH, 200, BLACK)
+ draw_text("Are you sure you want to exit program? [Y/N]", 40, 180, 30, WHITE)
+
+ else:
+ draw_text("Try to close the window to get confirmation message!", 120, 200, 20, LIGHTGRAY)
+
+ end_drawing()
+ # ----------------------------------------------------------------------------------
+
+# De-Initialization
+close_window() # Close window and OpenGL context
diff --git a/examples/extra/extra_camera.py b/examples/extra/extra_camera.py
new file mode 100644
index 0000000..e1fcb0b
--- /dev/null
+++ b/examples/extra/extra_camera.py
@@ -0,0 +1,138 @@
+# python3 -m pip install pyglm
+
+from math import sin, cos
+import glm # type: ignore
+from raylib import rl, ffi
+
+
+class CameraFly:
+ def __init__(self, x=0, y=0, z=0, fov=70.0):
+ self.last_mouse = ffi.new("struct Vector2 *", [0, 0])
+ self.fov = fov
+ self.yaw = -46.33
+ self.pitch = 0.0
+ self.front = glm.vec3()
+ self.up = glm.vec3()
+ self.right = glm.vec3()
+ self.position = glm.vec3(x, y, z)
+ self.world_up = glm.vec3(0, 1, 0)
+ self.fps_facing = glm.vec3()
+ self.movement_speed = 10
+ self.mouse_sensitivity = 0.002
+ self.last_time = rl.GetFrameTime()
+
+ def get_camera(self):
+ return ffi.new(
+ "struct Camera3D *",
+ [
+ self.get_ray_front(),
+ self.get_ray_position(),
+ self.get_ray_up(),
+ self.fov,
+ rl.CAMERA_PERSPECTIVE
+ ]
+ )
+
+ def get_ray_front(self):
+ return list(self.position + self.front)
+
+ def get_ray_up(self):
+ return list(self.up)
+
+ def get_ray_position(self):
+ return list(self.position)
+
+ def update_keyboard(self):
+ boost = 4 if rl.IsKeyDown(rl.KEY_LEFT_SHIFT) else 1
+ velocity = self.movement_speed * boost * rl.GetFrameTime()
+
+ if rl.IsKeyDown(rl.KEY_W):
+ self.position = self.position - self.fps_facing * velocity
+
+ if rl.IsKeyDown(rl.KEY_S):
+ self.position = self.position + self.fps_facing * velocity
+
+ if rl.IsKeyDown(rl.KEY_D):
+ dirr = glm.normalize(glm.cross(self.fps_facing, self.world_up))
+ self.position = self.position - dirr * velocity
+
+ if rl.IsKeyDown(rl.KEY_A):
+ dirr = glm.normalize(glm.cross(self.fps_facing, self.world_up))
+ self.position = self.position + dirr * velocity
+
+ if rl.IsKeyDown(rl.KEY_SPACE):
+ self.position = self.position + self.world_up * velocity
+
+ if rl.IsKeyDown(rl.KEY_LEFT_CONTROL) or rl.IsKeyDown(rl.KEY_RIGHT_CONTROL):
+ self.position = self.position - self.world_up * velocity
+
+ def update_mouse(self):
+ pos = rl.GetMousePosition()
+ width = rl.GetScreenWidth()
+ height = rl.GetScreenHeight()
+
+ mouse_coordinates = ffi.new("struct Vector2 *", [
+ pos.x - self.last_mouse.x,
+ pos.y - self.last_mouse.y
+ ])
+
+ self.yaw += mouse_coordinates.x * self.mouse_sensitivity
+ self.pitch += (mouse_coordinates.y * self.mouse_sensitivity)
+ self.pitch = min(self.pitch, 1.5)
+ self.pitch = max(self.pitch, -1.5)
+ self.last_mouse = rl.GetMousePosition()
+
+ def update(self):
+ # NOTE(pebaz): Comment out these lines to control them in a game loop
+ self.update_keyboard()
+ self.update_mouse()
+
+ # Update all camera vectors to reflect changes
+ self.fps_facing = glm.vec3(
+ cos((self.yaw)) * cos((0)),
+ sin((0)),
+ sin((self.yaw)) * cos((0))
+ )
+ self.fps_facing = glm.normalize(self.fps_facing)
+
+ front = glm.vec3(
+ cos((self.yaw)) * cos((self.pitch)),
+ sin((self.pitch)),
+ sin((self.yaw)) * cos((self.pitch))
+ )
+
+ self.front = glm.normalize(front)
+ self.right = glm.normalize(glm.cross(self.front, self.world_up))
+ self.up = glm.normalize(glm.cross(self.right, self.front))
+
+
+def camera_test():
+ rl.SetTraceLogLevel(rl.LOG_ERROR)
+ rl.SetConfigFlags(rl.FLAG_WINDOW_RESIZABLE)
+ rl.InitWindow(512, 256, b'Test')
+ rl.SetTargetFPS(60)
+ rl.DisableCursor()
+
+ flycam = CameraFly()
+
+
+ while not rl.WindowShouldClose():
+ flycam.update()
+ cam = flycam.get_camera()
+
+ rl.BeginDrawing()
+ rl.ClearBackground((0, 200, 255, 255))
+ rl.BeginMode3D(cam[0])
+
+ # NOTE(pebaz): For whatever reason, this can solve a percentage of artifacts
+ #rl.DrawGizmo([100000000, 100000000, 100000000])
+
+ rl.DrawGrid(32, 1)
+
+ rl.EndMode3D()
+ rl.EndDrawing()
+
+ rl.CloseWindow()
+
+if __name__ == '__main__':
+ camera_test()
\ No newline at end of file
diff --git a/examples/extra/extra_flow_field.py b/examples/extra/extra_flow_field.py
new file mode 100644
index 0000000..7f88117
--- /dev/null
+++ b/examples/extra/extra_flow_field.py
@@ -0,0 +1,141 @@
+"""
+RenderTexture example
+
+Run with:
+python3 -m pip install pyglm
+python3 flow-field
+ flow-field bees
+"""
+
+import sys, math, time, random
+import glm # type: ignore
+# Note package is PyGLM, not glm.
+from raylib import rl, ffi
+from raylib.colors import *
+
+CTM = lambda: round(time.time() * 1000)
+
+
+
+BEES = bool(sys.argv[1:])
+
+
+
+
+rl.SetTraceLogLevel(rl.LOG_ERROR)
+rl.SetConfigFlags(rl.FLAG_WINDOW_RESIZABLE)
+rl.InitWindow(512, 512, b'Friendly Bees')
+rl.SetTargetFPS(60)
+#rl.DisableCursor()
+
+canvas = rl.LoadRenderTexture(rl.GetScreenWidth(), rl.GetScreenHeight())
+rl.SetTextureWrap(canvas.texture, rl.TEXTURE_WRAP_MIRROR_REPEAT)
+
+def random_point_in_circle(center, radius):
+ a = random.random() * 2 * math.pi
+ r = radius * math.sqrt(random.random())
+ x = r * math.cos(a)
+ z = r * math.sin(a)
+ return glm.vec3(
+ x + center.x,
+ center.y,
+ z + center.z
+ )
+
+class Particle:
+ def __init__(self, pos):
+ self.pos = pos
+ self.scl = 16 if BEES else 2
+ self.ang = math.radians(random.randint(0, 359))
+ self.spd = random.randint(4, 10)
+ self.start = CTM()
+ self.clr = [255, 200, 0, 155] if BEES else [*(random.randint(55, 255) for i in range(3)), 55]
+ self.mem = (0, 0)
+ self.pre = glm.vec2(pos)
+
+ def process(self):
+ if CTM() > self.start + 50:
+ self.ang = math.radians(glm.simplex(self.pos) * 360.0)
+ self.start = CTM()
+
+ self.rot = glm.vec2(
+ glm.vec4(1) * glm.rotate(glm.mat4(), self.ang, [0, 0, 1])
+ )
+ self.pre = int(self.pos.x), int(self.pos.y)
+ self.pos += self.rot * rl.GetFrameTime() * 64
+ rl.DrawLine(
+ int(self.pos.x), int(self.pos.y), *self.pre, self.clr
+ )
+
+ if self.pos.x < 0: self.pos.x = rl.GetScreenWidth() - 1
+ if self.pos.y < 0: self.pos.y = rl.GetScreenHeight() - 1
+ if self.pos.x >= rl.GetScreenWidth(): self.pos.x = 0
+ if self.pos.y >= rl.GetScreenHeight(): self.pos.y = 0
+
+ hlf = self.scl // 2
+ self.mem = int(self.pos.x) - hlf, int(self.pos.y) - hlf
+ rl.DrawRectangle(
+ *self.mem,
+ self.scl if not BEES else hlf,
+ self.scl,
+ self.clr
+ )
+ if BEES:
+ rl.DrawRectangle(
+ self.mem[0] + hlf, self.mem[1],
+ hlf,
+ self.scl,
+ [0, 0, 0, 55]
+ )
+
+dims = rl.GetScreenWidth(), rl.GetScreenHeight()
+ini = False
+parts = [
+ Particle(glm.vec2(random_point_in_circle(
+ glm.vec3(
+ rl.GetScreenWidth() / 2,
+ rl.GetScreenHeight() / 2,
+ 0
+ ),
+ 64
+ )))
+ for i in range(125)
+]
+while not rl.WindowShouldClose():
+ if (rl.GetScreenWidth(), rl.GetScreenHeight()) != dims:
+ canvas = rl.LoadRenderTexture(rl.GetScreenWidth(), rl.GetScreenHeight())
+ rl.SetTextureWrap(canvas.texture, rl.WRAP_MIRROR_REPEAT)
+ ini = False
+ dims = rl.GetScreenWidth(), rl.GetScreenHeight()
+
+ rl.BeginDrawing()
+
+ rl.BeginTextureMode(canvas)
+ if not ini:
+ rl.ClearBackground([200, 200, 0, 255] if BEES else WHITE)
+ if BEES:
+ rl.DrawRectangle(
+ 0, 0,
+ dims[0], dims[1] // 2,
+ (0, 200, 255, 255)
+ )
+ rl.DrawCircle(
+ dims[0] - 72, 72, 32, [255, 200, 0, 255]
+ )
+ else:
+ ini = True
+
+ for part in parts: part.process()
+
+ rl.EndTextureMode()
+
+ tex = canvas.texture
+ rl.DrawTexturePro(
+ tex, [0.0, 0.0, tex.width, -tex.height],
+ [0, 0, tex.width, tex.height],
+ [0, 0], 0.0, WHITE
+ )
+
+ rl.EndDrawing()
+
+rl.CloseWindow()
diff --git a/examples/transparent_undecorated_window.py b/examples/extra/extra_transparent_undecorated_window.py
similarity index 96%
rename from examples/transparent_undecorated_window.py
rename to examples/extra/extra_transparent_undecorated_window.py
index 8b7c55b..3c5895a 100644
--- a/examples/transparent_undecorated_window.py
+++ b/examples/extra/extra_transparent_undecorated_window.py
@@ -1,8 +1,11 @@
"""
+FIXME this example is broken with Raylib 4.0
+
Requirements:
- raylib
- pytweening
- pyglm
+- screeninfo
Windows-Only Requirements:
- win32gui
@@ -15,10 +18,10 @@ Mac:
"""
import sys, time
-import glm
-import pytweening as tween
-import screeninfo
-from raylib.dynamic import raylib as rl, ffi
+import glm # type: ignore
+import pytweening as tween # type: ignore
+import screeninfo # type: ignore
+from raylib import rl, ffi
from raylib.colors import *
diff --git a/examples/extra/mesh_creation.py b/examples/extra/mesh_creation.py
new file mode 100644
index 0000000..5f3c49a
--- /dev/null
+++ b/examples/extra/mesh_creation.py
@@ -0,0 +1,120 @@
+from array import array
+import pyray as pr
+
+W, H = 640, 480
+
+
+def make_cube(width, height, length):
+ vertices = array('f', [
+ -width / 2, -height / 2, length / 2,
+ width / 2, -height / 2, length / 2,
+ width / 2, height / 2, length / 2,
+ -width / 2, height / 2, length / 2,
+ -width / 2, -height / 2, -length / 2,
+ -width / 2, height / 2, -length / 2,
+ width / 2, height / 2, -length / 2,
+ width / 2, -height / 2, -length / 2,
+ -width / 2, height / 2, -length / 2,
+ -width / 2, height / 2, length / 2,
+ width / 2, height / 2, length / 2,
+ width / 2, height / 2, -length / 2,
+ -width / 2, -height / 2, -length / 2,
+ width / 2, -height / 2, -length / 2,
+ width / 2, -height / 2, length / 2,
+ -width / 2, -height / 2, length / 2,
+ width / 2, -height / 2, -length / 2,
+ width / 2, height / 2, -length / 2,
+ width / 2, height / 2, length / 2,
+ width / 2, -height / 2, length / 2,
+ -width / 2, -height / 2, -length / 2,
+ -width / 2, -height / 2, length / 2,
+ -width / 2, height / 2, length / 2,
+ -width / 2, height / 2, -length / 2
+ ])
+
+ texcoords = array('f', [
+ 0.0, 0.0,
+ 1.0, 0.0,
+ 1.0, 1.0,
+ 0.0, 1.0,
+ 1.0, 0.0,
+ 1.0, 1.0,
+ 0.0, 1.0,
+ 0.0, 0.0,
+ 0.0, 1.0,
+ 0.0, 0.0,
+ 1.0, 0.0,
+ 1.0, 1.0,
+ 1.0, 1.0,
+ 0.0, 1.0,
+ 0.0, 0.0,
+ 1.0, 0.0,
+ 1.0, 0.0,
+ 1.0, 1.0,
+ 0.0, 1.0,
+ 0.0, 0.0,
+ 0.0, 0.0,
+ 1.0, 0.0,
+ 1.0, 1.0,
+ 0.0, 1.0])
+
+ normals = array('f', [
+ 0.0, 0.0, 1.0,
+ 0.0, 0.0, 1.0,
+ 0.0, 0.0, 1.0,
+ 0.0, 0.0, 1.0,
+ 0.0, 0.0, -1.0,
+ 0.0, 0.0, -1.0,
+ 0.0, 0.0, -1.0,
+ 0.0, 0.0, -1.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, -1.0, 0.0,
+ 0.0, -1.0, 0.0,
+ 0.0, -1.0, 0.0,
+ 0.0, -1.0, 0.0,
+ 1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0
+ ])
+
+ indices = array('h',
+ sum([[4 * k, 4 * k + 1, 4 * k + 2, 4 * k, 4 * k + 2, 4 * k + 3] for k in range(0, 6)], []))
+
+ print(vertices, indices)
+
+ return (pr.Mesh(24, 12, vertices, texcoords,
+ None, normals, None, None, indices,
+ None, None, None, None, 0, None))
+
+
+pr.init_window(W, H, "Mesh creation")
+
+msh = make_cube(3, 4, 40)
+pr.upload_mesh(msh, False)
+matdefault = pr.load_material_default()
+eye = pr.matrix_identity()
+
+camera = pr.Camera3D((30.0, 20.0, 30.0), (0.0, 0.0, 0.0), (0.0, 1.0, 0.0), 70.0,
+ pr.CameraProjection.CAMERA_PERSPECTIVE)
+
+# Export so we can inspect it
+pr.export_mesh(msh, "test-cube.obj")
+
+while not pr.window_should_close():
+ pr.update_camera(camera, pr.CameraMode.CAMERA_ORBITAL)
+ pr.begin_drawing()
+ pr.clear_background(pr.BLACK)
+ pr.begin_mode_3d(camera)
+ pr.draw_grid(10, 5.0)
+ pr.draw_mesh(msh, matdefault, eye)
+ pr.end_mode_3d()
+ pr.end_drawing()
+pr.close_window()
diff --git a/examples/extra/textures_opencv.py b/examples/extra/textures_opencv.py
new file mode 100644
index 0000000..4edea98
--- /dev/null
+++ b/examples/extra/textures_opencv.py
@@ -0,0 +1,26 @@
+import cv2 as cv # type:ignore
+from pyray import *
+
+opencv_image = cv.imread("resources/raylib_logo.jpg")
+if opencv_image is None:
+ exit("Could not read the image.")
+
+screenWidth = 800
+screenHeight = 450
+init_window(screenWidth, screenHeight, "example - image loading")
+
+pointer_to_image_data = ffi.from_buffer(opencv_image.data)
+raylib_image = Image(pointer_to_image_data, 256, 256, 1, PixelFormat.PIXELFORMAT_UNCOMPRESSED_R8G8B8)
+texture = load_texture_from_image(raylib_image)
+unload_image(raylib_image)
+
+while not window_should_close():
+ begin_drawing()
+ clear_background(RAYWHITE)
+ draw_texture(texture, int(screenWidth/2 - texture.width/2), int(screenHeight/2 - texture.height/2), WHITE)
+ end_drawing()
+
+unload_texture(texture)
+close_window()
+
+
diff --git a/examples/extra/vector2_extended.py b/examples/extra/vector2_extended.py
new file mode 100644
index 0000000..87e665f
--- /dev/null
+++ b/examples/extra/vector2_extended.py
@@ -0,0 +1,260 @@
+# An OO wrapper around the Vector2 struct, by @Emtyloc
+
+from pyray import *
+
+class Vector2Ex(list):
+ def __init__(self, x, y):
+ super(Vector2Ex, self).__init__([x, y])
+
+ @property
+ def x(self):
+ return self[0]
+
+ @x.setter
+ def x(self, value):
+ self[0]= value
+
+ @property
+ def y(self):
+ return self[1]
+
+ @y.setter
+ def y(self, value):
+ self[1]= value
+
+ @staticmethod
+ def to_Vec2(v: Vector2):
+ """
+ Cast Vector2 to Vec2.
+ """
+ return Vector2Ex(v.x, v.y)
+
+ def __repr__(self) -> str:
+ return f"{self.x}, {self.y}"
+
+ def __eq__(self, other):
+ if isinstance(other, Vector2Ex):
+ return self.x == other.x and self.y == other.y
+ return False
+
+ def __add__(self, other):
+ if isinstance(other, Vector2Ex):
+ return Vector2Ex(self.x + other.x, self.y + other.y)
+ return Vector2Ex(self.x + other, self.y + other)
+
+ def __iadd__(self, other):
+ if isinstance(other, Vector2Ex):
+ self.x += other.x
+ self.y += other.y
+ else:
+ res = vector2_add_value(self, other)
+ self.x = res.x
+ self.y = res.y
+ return self
+
+ def __radd__(self, other):
+ return self + other
+
+ def __sub__(self, other):
+ if isinstance(other, Vector2Ex):
+ return Vector2Ex(self.x - other.x, self.y - other.y)
+ return Vector2Ex(self.x - other, self.y - other)
+
+ def __isub__(self, other):
+ if isinstance(other, Vector2Ex):
+ self.x -= other.x
+ self.y -= other.y
+ else:
+ self.x -= other
+ self.y -= other
+ return self
+
+ def __rsub__(self, other):
+ return Vector2Ex(other - self.x, other - self.y)
+
+ def __mul__(self, other):
+ if isinstance(other, Vector2Ex):
+ res = vector2_multiply(self, other)
+ return self.to_Vec2(res)
+ return Vector2Ex(self.x * other, self.y * other)
+
+ def __imul__(self, other):
+ if isinstance(other, Vector2Ex):
+ res = vector2_multiply(self, other)
+ else:
+ res = vector2_scale(self, other)
+ self.x = res.x
+ self.y = res.y
+ return self
+
+ def __truediv__(self, other):
+ if isinstance(other, Vector2Ex):
+ res = vector_2divide(self, other)
+ return self.to_Vec2(res)
+ return Vector2Ex(self.x / other, self.y / other)
+
+ def __itruediv__(self, other):
+ if isinstance(other, Vector2Ex):
+ res = vector_2divide(self, other)
+ else:
+ res = vector2_scale(self, 1/other)
+ self.x = res.x
+ self.y = res.y
+ return self
+
+ def __neg__(self):
+ return Vector2Ex(-self.x, -self.y)
+
+ def __pos__(self):
+ return Vector2Ex(self.x, self.y)
+
+ def __pow__(self, exponent):
+ return Vector2Ex(self.x ** exponent, self.y ** exponent)
+
+ # PyRay mapped vector2 functions
+
+ def angle(self, vec2):
+ return vector2_angle(self, vec2)
+
+ def clamp(self, min_vec2, max_vec2):
+ res = vector2_clamp(self, min_vec2, max_vec2)
+ return self.to_Vec2(res)
+
+ def clamp_value(self, min_val: float, max_val: float):
+ res = vector2_clamp_value(self, min_val, max_val)
+ return self.to_Vec2(res)
+
+ def distance(self, vec2):
+ return vector_2distance(self, vec2)
+
+ def distance_sqr(self, vec2) -> float:
+ return vector_2distance_sqr(self, vec2)
+
+ def dot_product(self, vec2) -> float:
+ return vector_2dot_product(self, vec2)
+
+ def invert(self):
+ res = vector2_invert(self)
+ return self.to_Vec2(res)
+
+ def length(self):
+ return vector2_length(self)
+
+ def length_sqr(self) -> float:
+ return vector2_length_sqr(self)
+
+ def lerp(self, vec2, amount: float):
+ res = vector2_lerp(self, vec2, amount)
+ return self.to_Vec2(res)
+
+ def move_towards(self, target_vec2, max_distance: float):
+ res = vector2_move_towards(self, target_vec2, max_distance)
+ return self.to_Vec2(res)
+
+ def negate(self):
+ res = vector2_negate(self)
+ return self.to_Vec2(res)
+
+ def normalize(self):
+ res = vector2_normalize(self)
+ return self.to_Vec2(res)
+
+ def reflect(self, normal_vec2):
+ res = vector2_reflect(self, normal_vec2)
+ return self.to_Vec2(res)
+
+ def rotate(self, angle: float):
+ res = vector2_rotate(self, angle)
+ return self.to_Vec2(res)
+
+ def transform(self, mat: Matrix):
+ res = vector2_transform(self, mat)
+ return self.to_Vec2(res)
+
+ @staticmethod
+ def line_angle(start_vec2, end_vec2) -> float:
+ return vector2_line_angle(start_vec2, end_vec2)
+
+ @staticmethod
+ def one():
+ return Vector2Ex(1, 1)
+
+ @staticmethod
+ def zero():
+ return Vector2Ex(0, 0)
+
+
+if __name__ == "__main__":
+ # Arithmetic ops
+ v1 = Vector2Ex(5, 5)
+ v2 = Vector2Ex(10, 10)
+
+ print(v1 + v2) # 15, 15
+ print(v1 - v2) # -5, -5
+
+ print(v1 * v2) # 50.0, 50.0
+ print(v1 / v2) # 0.5, 0.5
+
+ print(v1 * 2) # 10, 10
+ print(v2 / 2) # 5.0, 5.0
+
+ v1+=v2
+ print(v1) #15, 15
+ v2-=v1
+ print(v2) #-5, -5
+
+ v1/=-v2
+ print(v1) #3.0, 3.0
+ v2*=v1
+ print(v2) #-15.0, -15.0
+
+ v3 = Vector2Ex(3, 5)
+ print(v3 ** 2) #9, 25
+
+ v1 = Vector2Ex.one()
+ print(v1)
+
+ v0 = Vector2Ex.zero()
+ print(v0)
+
+ # Vector2 pyray methods
+ v1 = Vector2Ex(3, 4)
+ v2 = Vector2Ex(1, 2)
+ v_min = Vector2Ex(0, 0)
+ v_max = Vector2Ex(5, 5)
+
+ print("Angle:", v1.angle(v2))
+
+ print("Clamp:", v1.clamp(v_min, v_max))
+
+ print("Clamp value:", v1.clamp_value(1.5, 3.5))
+
+ print("Distance:", v1.distance(v2))
+
+ print("Distance Sqr:", v1.distance_sqr(v2))
+
+ print("Dot Product:", v1.dot_product(v2))
+
+ print("Invert:", v1.invert())
+
+ print("Length:", v1.length())
+
+ print("Length Sqr:", v1.length_sqr())
+
+ print("Lerp:", v1.lerp(v2, 0.5))
+
+ print("Line Angle:", Vector2Ex.line_angle(v1, v2))
+
+ print("Move Towards:", v1.move_towards(v2, 0.5))
+
+ print("Negate:", v1.negate())
+
+ print("Normalize:", v1.normalize())
+
+ print("Reflect:", v1.reflect(v2))
+
+ print("Rotate:", v1.rotate(45))
+
+ # I don't know why this not work
+ # mat = Matrix2x2(1, 0, 0, 1)
+ # print("Transform:", v1.transform(mat))
diff --git a/examples/models/models_animation.py b/examples/models/models_animation.py
new file mode 100644
index 0000000..9b40722
--- /dev/null
+++ b/examples/models/models_animation.py
@@ -0,0 +1,82 @@
+import pyray as ray
+
+
+screen_width = 800
+screen_height = 450
+
+ray.init_window(screen_width, screen_height, "raylib [models] example - model animation")
+
+# Define the camera to look into our 3d world
+camera = ray.Camera3D()
+camera.position = ray.Vector3( 10.0, 10.0, 10.0 ) # Camera position
+camera.target = ray.Vector3( 0.0, 0.0, 0.0 ) # Camera looking at point
+camera.up = ray.Vector3( 0.0, 1.0, 0.0 ) # Camera up vector (rotation towards target)
+camera.fovy = 45.0 # Camera field-of-view Y
+camera.projection = ray.CameraProjection.CAMERA_PERSPECTIVE # Camera mode type
+
+model = ray.load_model("resources/models/iqm/guy.iqm") # Load the animated model mesh and basic data
+texture = ray.load_texture("resources/models/iqm/guytex.png") # Load model texture and set material
+ray.set_material_texture(model.materials, ray.MaterialMapIndex.MATERIAL_MAP_ALBEDO, texture) # Set model material map texture
+
+position = ( 0., 0., 0. ) # Set model position
+
+# Load animation data
+count = ray.ffi.new("int *", 1)
+anims = ray.load_model_animations("resources/models/iqm/guyanim.iqm", count)
+anim_frame_counter = 0
+
+ray.set_target_fps(60) # Set our game to run at 60 frames-per-second
+#--------------------------------------------------------------------------------------
+
+# Main game loop
+while not ray.window_should_close(): # Detect window close button or ESC key
+ # Update
+ #----------------------------------------------------------------------------------
+ ray.update_camera(camera, ray.CameraMode.CAMERA_FREE)
+
+ # Play animation when spacebar is held down
+ if ray.is_key_down(ray.KeyboardKey.KEY_SPACE):
+ anim_frame_counter+=1
+ ray.update_model_animation(model, anims[0], anim_frame_counter)
+ if anim_frame_counter >= anims[0].frameCount:
+ anim_frame_counter = 0
+
+ #----------------------------------------------------------------------------------
+
+ # Draw
+ #----------------------------------------------------------------------------------
+ ray.begin_drawing()
+
+ ray.clear_background(ray.RAYWHITE)
+
+ ray.begin_mode_3d(camera)
+
+ ray.draw_model_ex(model, position, ray.Vector3( 1.0, 0.0, 0.0 ), -90.0, ray.Vector3( 1.0, 1.0, 1.0 ), ray.WHITE)
+
+ for i in range(model.boneCount):
+ ray.draw_cube(anims.framePoses[anim_frame_counter][i].translation, 0.2, 0.2, 0.2, ray.RED)
+
+ ray.draw_grid(10, 1.0) # Draw a grid
+
+ ray.end_mode_3d()
+
+ ray.draw_text("PRESS SPACE to PLAY MODEL ANIMATION", 10, 10, 20, ray.MAROON)
+ ray.draw_text("(c) Guy IQM 3D model by @culacant", screen_width - 200, screen_height - 20, 10, ray.GRAY)
+
+ ray.draw_fps(10, 400)
+
+ ray.end_drawing()
+ #----------------------------------------------------------------------------------
+
+
+# De-Initialization
+#--------------------------------------------------------------------------------------
+ray.unload_texture(texture) # Unload texture
+
+# Unload model animations data
+for i in range(count[0]):
+ ray.unload_model_animation(anims[i])
+
+ray.unload_model(model) # Unload model
+
+ray.close_window() # Close window and OpenGL context
\ No newline at end of file
diff --git a/examples/models/models_billboard.png b/examples/models/models_billboard.png
deleted file mode 100644
index dad1e55..0000000
Binary files a/examples/models/models_billboard.png and /dev/null differ
diff --git a/examples/models/models_billboard.py b/examples/models/models_billboard.py
index a390044..6f42c57 100644
--- a/examples/models/models_billboard.py
+++ b/examples/models/models_billboard.py
@@ -9,7 +9,7 @@
# *
# ********************************************************************************************/
-from raylib.static import *
+from raylib import *
# Initialization
@@ -27,14 +27,12 @@ camera.position = [ 5.0, 4.0, 5.0 ]
camera.target = [ 0.0, 2.0, 0.0 ]
camera.up = [ 0.0, 1.0, 0.0 ]
camera.fovy = 45.0
-camera.type = CAMERA_PERSPECTIVE
+camera.projection = CAMERA_PERSPECTIVE
bill = LoadTexture(b"resources/billboard.png") # Our texture billboard
billPosition = [ 0.0, 2.0, 0.0 ] # Position where draw billboard
-SetCameraMode(camera, CAMERA_ORBITAL) # Set an orbital camera mode
-
SetTargetFPS(60) # Set our game to run at 60 frames-per-second
#--------------------------------------------------------------------------------------
@@ -42,7 +40,7 @@ SetTargetFPS(60) # Set our game to run at 60 frames-per-se
while not WindowShouldClose() : # Detect window close button or ESC key
# Update
#----------------------------------------------------------------------------------
- UpdateCamera(cameraPtr) # Update camera
+ UpdateCamera(cameraPtr, CAMERA_ORBITAL) # Update camera
#----------------------------------------------------------------------------------
# Draw
diff --git a/examples/models/models_box_collisions.png b/examples/models/models_box_collisions.png
deleted file mode 100644
index d01fd9d..0000000
Binary files a/examples/models/models_box_collisions.png and /dev/null differ
diff --git a/examples/models/models_box_collisions.py b/examples/models/models_box_collisions.py
index 86c9c72..7f7781a 100644
--- a/examples/models/models_box_collisions.py
+++ b/examples/models/models_box_collisions.py
@@ -9,7 +9,7 @@
# *
# ********************************************************************************************/
-from raylib.static import *
+from raylib import *
# Initialization
# --------------------------------------------------------------------------------------
diff --git a/examples/models/models_cubicmap.png b/examples/models/models_cubicmap.png
deleted file mode 100644
index 9cb854c..0000000
Binary files a/examples/models/models_cubicmap.png and /dev/null differ
diff --git a/examples/models/models_cubicmap.py b/examples/models/models_cubicmap.py
index dbff866..d0f3367 100644
--- a/examples/models/models_cubicmap.py
+++ b/examples/models/models_cubicmap.py
@@ -9,7 +9,7 @@
# *
# ********************************************************************************************/
-from raylib.static import *
+from raylib import *
# Initialization
@@ -30,13 +30,12 @@ model = LoadModelFromMesh(mesh)
# NOTE: By default each cube is mapped to one part of texture atlas
texture = LoadTexture(b"resources/cubicmap_atlas.png") # Load map texture
-model.materials[0].maps[MAP_DIFFUSE].texture = texture # Set map diffuse texture
+model.materials[0].maps[MATERIAL_MAP_ALBEDO ].texture = texture # Set map diffuse texture
mapPosition = [ -16.0, 0.0, -8.0 ] # Set model position
UnloadImage(image) # Unload cubesmap image from RAM, already uploaded to VRAM
-SetCameraMode(camera[0], CAMERA_ORBITAL) # Set an orbital camera mode
SetTargetFPS(60) # Set our game to run at 60 frames-per-second
#--------------------------------------------------------------------------------------
@@ -46,7 +45,7 @@ while not WindowShouldClose(): # Detect window close button or ESC key
# Update
#----------------------------------------------------------------------------------
- UpdateCamera(camera) # Update camera
+ UpdateCamera(camera, CAMERA_ORBITAL) # Update camera
#----------------------------------------------------------------------------------
# Draw
diff --git a/examples/models/models_geometric_shapes.png b/examples/models/models_geometric_shapes.png
deleted file mode 100644
index 6076b42..0000000
Binary files a/examples/models/models_geometric_shapes.png and /dev/null differ
diff --git a/examples/models/models_geometric_shapes.py b/examples/models/models_geometric_shapes.py
index a9a6434..fd90582 100644
--- a/examples/models/models_geometric_shapes.py
+++ b/examples/models/models_geometric_shapes.py
@@ -9,7 +9,7 @@
# *
# ********************************************************************************************/
-from raylib.static import *
+from raylib import *
# Initialization
@@ -26,7 +26,7 @@ camera.position = [ 0.0, 10.0, 10.0 ]
camera.target = [ 0.0, 0.0, 0.0 ]
camera.up = [ 0.0, 1.0, 0.0 ]
camera.fovy = 45.0
-camera.type = CAMERA_PERSPECTIVE
+camera.projection = CAMERA_PERSPECTIVE
SetTargetFPS(60) # Set our game to run at 60 frames-per-second
#--------------------------------------------------------------------------------------
diff --git a/examples/models/models_heightmap.png b/examples/models/models_heightmap.png
deleted file mode 100644
index 6dcf01f..0000000
Binary files a/examples/models/models_heightmap.png and /dev/null differ
diff --git a/examples/models/models_heightmap.py b/examples/models/models_heightmap.py
index 22e0f5c..ef7b694 100644
--- a/examples/models/models_heightmap.py
+++ b/examples/models/models_heightmap.py
@@ -9,7 +9,7 @@
# *
# ********************************************************************************************/
-from raylib.static import *
+from raylib import *
# Initialization
#--------------------------------------------------------------------------------------
@@ -27,13 +27,11 @@ texture = LoadTextureFromImage(image) # Convert image to texture
mesh = GenMeshHeightmap(image, ( 16, 8, 16 )) # Generate heightmap mesh (RAM and VRAM)
model = LoadModelFromMesh(mesh) # Load model from generated mesh
-model.materials[0].maps[MAP_DIFFUSE].texture = texture # Set map diffuse texture
+model.materials[0].maps[MATERIAL_MAP_ALBEDO].texture = texture # Set map diffuse texture
mapPosition = ( -8.0, 0.0, -8.0 ) # Define model position
UnloadImage(image) # Unload heightmap image from RAM, already uploaded to VRAM
-SetCameraMode(camera[0], CAMERA_ORBITAL) # Set an orbital camera mode
-
SetTargetFPS(60) # Set our game to run at 60 frames-per-second
#--------------------------------------------------------------------------------------
@@ -41,7 +39,7 @@ SetTargetFPS(60) # Set our game to run at 60 frames-per-se
while not WindowShouldClose(): # Detect window close button or ESC key
# Update
#----------------------------------------------------------------------------------
- UpdateCamera(camera) # Update camera
+ UpdateCamera(camera, CAMERA_ORBITAL) # Update camera
#----------------------------------------------------------------------------------
# Draw
diff --git a/examples/models/models_material_pbr.c b/examples/models/models_material_pbr.c
deleted file mode 100644
index b656582..0000000
--- a/examples/models/models_material_pbr.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*******************************************************************************************
-*
-* raylib [models] example - PBR material
-*
-* This example has been created using raylib 1.8 (www.raylib.com)
-* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-* Copyright (c) 2017 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-#include "raymath.h"
-
-#define RLIGHTS_IMPLEMENTATION
-#include "rlights.h"
-
-#define CUBEMAP_SIZE 512 # Cubemap texture size
-#define IRRADIANCE_SIZE 32 # Irradiance texture size
-#define PREFILTERED_SIZE 256 # Prefiltered HDR environment texture size
-#define BRDF_SIZE 512 # BRDF LUT texture size
-
-# PBR material loading
-static Material LoadMaterialPBR(Color albedo, float metalness, float roughness)
-
-int main()
-[
- # Initialization
- #--------------------------------------------------------------------------------------
- int screenWidth = 800
- int screenHeight = 450
-
- SetConfigFlags(FLAG_MSAA_4X_HINT) # Enable Multi Sampling Anti Aliasing 4x (if available)
- InitWindow(screenWidth, screenHeight, "raylib [models] example - pbr material")
-
- # Define the camera to look into our 3d world
- Camera camera = [[ 4.0, 4.0, 4.0 ], [ 0.0, 0.5f, 0.0 ], [ 0.0, 1.0, 0.0 ], 45.0, 0 ]
-
- # Load model and PBR material
- Model model = LoadModel("resources/pbr/trooper.obj")
- MeshTangents(&model.mesh)
- model.material = LoadMaterialPBR((Color)[ 255, 255, 255, 255 ], 1.0, 1.0)
-
- # Define lights attributes
- # NOTE: Shader is passed to every light on creation to define shader bindings internally
- Light lights[MAX_LIGHTS] = [
- CreateLight(LIGHT_POINT, (Vector3)[ LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0 ], (Vector3)[ 0.0, 0.0, 0.0 ], (Color)[ 255, 0, 0, 255 ], model.material.shader),
- CreateLight(LIGHT_POINT, (Vector3)[ 0.0, LIGHT_HEIGHT, LIGHT_DISTANCE ], (Vector3)[ 0.0, 0.0, 0.0 ], (Color)[ 0, 255, 0, 255 ], model.material.shader),
- CreateLight(LIGHT_POINT, (Vector3)[ -LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0 ], (Vector3)[ 0.0, 0.0, 0.0 ], (Color)[ 0, 0, 255, 255 ], model.material.shader),
- CreateLight(LIGHT_DIRECTIONAL, (Vector3)[ 0.0, LIGHT_HEIGHT*2.0, -LIGHT_DISTANCE ], (Vector3)[ 0.0, 0.0, 0.0 ], (Color)[ 255, 0, 255, 255 ], model.material.shader)
- ]
-
- SetCameraMode(camera, CAMERA_ORBITAL) # Set an orbital camera mode
-
- SetTargetFPS(60) # Set our game to run at 60 frames-per-second
- #--------------------------------------------------------------------------------------
-
- # Main game loop
- while (!WindowShouldClose()) # Detect window close button or ESC key
- [
- # Update
- #----------------------------------------------------------------------------------
- UpdateCamera(&camera) # Update camera
-
- # Send to material PBR shader camera view position
- float cameraPos[3] = [ camera.position.x, camera.position.y, camera.position.z ]
- SetShaderValue(model.material.shader, model.material.shader.locs[LOC_VECTOR_VIEW], cameraPos, 3)
- #----------------------------------------------------------------------------------
-
- # Draw
- #----------------------------------------------------------------------------------
- BeginDrawing()
-
- ClearBackground(RAYWHITE)
-
- BeginMode3D(camera)
-
- DrawModel(model, Vector3Zero(), 1.0, WHITE)
-
- DrawGrid(10, 1.0)
-
- EndMode3D()
-
- DrawFPS(10, 10)
-
- EndDrawing()
- #----------------------------------------------------------------------------------
- ]
-
- # De-Initialization
- #--------------------------------------------------------------------------------------
- UnloadModel(model) # Unload skybox model
-
- CloseWindow() # Close window and OpenGL context
- #--------------------------------------------------------------------------------------
-
- return 0
-]
-
-# Load PBR material (Supports: ALBEDO, NORMAL, METALNESS, ROUGHNESS, AO, EMMISIVE, HEIGHT maps)
-# NOTE: PBR shader is loaded inside this function
-static Material LoadMaterialPBR(Color albedo, float metalness, float roughness)
-[
- Material mat = [ 0 ] # NOTE: All maps textures are set to [ 0 ]
-
- #define PATH_PBR_VS "resources/shaders/pbr.vs" # Path to physically based rendering vertex shader
- #define PATH_PBR_FS "resources/shaders/pbr.fs" # Path to physically based rendering fragment shader
-
- mat.shader = LoadShader(PATH_PBR_VS, PATH_PBR_FS)
-
- # Get required locations points for PBR material
- # NOTE: Those location names must be available and used in the shader code
- mat.shader.locs[LOC_MAP_ALBEDO] = GetShaderLocation(mat.shader, "albedo.sampler")
- mat.shader.locs[LOC_MAP_METALNESS] = GetShaderLocation(mat.shader, "metalness.sampler")
- mat.shader.locs[LOC_MAP_NORMAL] = GetShaderLocation(mat.shader, "normals.sampler")
- mat.shader.locs[LOC_MAP_ROUGHNESS] = GetShaderLocation(mat.shader, "roughness.sampler")
- mat.shader.locs[LOC_MAP_OCCLUSION] = GetShaderLocation(mat.shader, "occlusion.sampler")
- #mat.shader.locs[LOC_MAP_EMISSION] = GetShaderLocation(mat.shader, "emission.sampler")
- #mat.shader.locs[LOC_MAP_HEIGHT] = GetShaderLocation(mat.shader, "height.sampler")
- mat.shader.locs[LOC_MAP_IRRADIANCE] = GetShaderLocation(mat.shader, "irradianceMap")
- mat.shader.locs[LOC_MAP_PREFILTER] = GetShaderLocation(mat.shader, "prefilterMap")
- mat.shader.locs[LOC_MAP_BRDF] = GetShaderLocation(mat.shader, "brdfLUT")
-
- # Set view matrix location
- mat.shader.locs[LOC_MATRIX_MODEL] = GetShaderLocation(mat.shader, "matModel")
- mat.shader.locs[LOC_MATRIX_VIEW] = GetShaderLocation(mat.shader, "view")
- mat.shader.locs[LOC_VECTOR_VIEW] = GetShaderLocation(mat.shader, "viewPos")
-
- # Set PBR standard maps
- mat.maps[MAP_ALBEDO].texture = LoadTexture("resources/pbr/trooper_albedo.png")
- mat.maps[MAP_NORMAL].texture = LoadTexture("resources/pbr/trooper_normals.png")
- mat.maps[MAP_METALNESS].texture = LoadTexture("resources/pbr/trooper_metalness.png")
- mat.maps[MAP_ROUGHNESS].texture = LoadTexture("resources/pbr/trooper_roughness.png")
- mat.maps[MAP_OCCLUSION].texture = LoadTexture("resources/pbr/trooper_ao.png")
-
- # Set environment maps
- #define PATH_CUBEMAP_VS "resources/shaders/cubemap.vs" # Path to equirectangular to cubemap vertex shader
- #define PATH_CUBEMAP_FS "resources/shaders/cubemap.fs" # Path to equirectangular to cubemap fragment shader
- #define PATH_SKYBOX_VS "resources/shaders/skybox.vs" # Path to skybox vertex shader
- #define PATH_IRRADIANCE_FS "resources/shaders/irradiance.fs" # Path to irradiance (GI) calculation fragment shader
- #define PATH_PREFILTER_FS "resources/shaders/prefilter.fs" # Path to reflection prefilter calculation fragment shader
- #define PATH_BRDF_VS "resources/shaders/brdf.vs" # Path to bidirectional reflectance distribution function vertex shader
- #define PATH_BRDF_FS "resources/shaders/brdf.fs" # Path to bidirectional reflectance distribution function fragment shader
-
- Shader shdrCubemap = LoadShader(PATH_CUBEMAP_VS, PATH_CUBEMAP_FS)
- Shader shdrIrradiance = LoadShader(PATH_SKYBOX_VS, PATH_IRRADIANCE_FS)
- Shader shdrPrefilter = LoadShader(PATH_SKYBOX_VS, PATH_PREFILTER_FS)
- Shader shdrBRDF = LoadShader(PATH_BRDF_VS, PATH_BRDF_FS)
-
- # Setup required shader locations
- SetShaderValuei(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1])[ 0 ], 1)
- SetShaderValuei(shdrIrradiance, GetShaderLocation(shdrIrradiance, "environmentMap"), (int[1])[ 0 ], 1)
- SetShaderValuei(shdrPrefilter, GetShaderLocation(shdrPrefilter, "environmentMap"), (int[1])[ 0 ], 1)
-
- Texture2D texHDR = LoadTexture("resources/dresden_square.hdr")
- Texture2D cubemap = GenTextureCubemap(shdrCubemap, texHDR, CUBEMAP_SIZE)
- mat.maps[MAP_IRRADIANCE].texture = GenTextureIrradiance(shdrIrradiance, cubemap, IRRADIANCE_SIZE)
- mat.maps[MAP_PREFILTER].texture = GenTexturePrefilter(shdrPrefilter, cubemap, PREFILTERED_SIZE)
- mat.maps[MAP_BRDF].texture = GenTextureBRDF(shdrBRDF, cubemap, BRDF_SIZE)
- UnloadTexture(cubemap)
- UnloadTexture(texHDR)
-
- # Unload already used shaders (to create specific textures)
- UnloadShader(shdrCubemap)
- UnloadShader(shdrIrradiance)
- UnloadShader(shdrPrefilter)
- UnloadShader(shdrBRDF)
-
- # Set textures filtering for better quality
- SetTextureFilter(mat.maps[MAP_ALBEDO].texture, FILTER_BILINEAR)
- SetTextureFilter(mat.maps[MAP_NORMAL].texture, FILTER_BILINEAR)
- SetTextureFilter(mat.maps[MAP_METALNESS].texture, FILTER_BILINEAR)
- SetTextureFilter(mat.maps[MAP_ROUGHNESS].texture, FILTER_BILINEAR)
- SetTextureFilter(mat.maps[MAP_OCCLUSION].texture, FILTER_BILINEAR)
-
- # Enable sample usage in shader for assigned textures
- SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "albedo.useSampler"), (int[1])[ 1 ], 1)
- SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "normals.useSampler"), (int[1])[ 1 ], 1)
- SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "metalness.useSampler"), (int[1])[ 1 ], 1)
- SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "roughness.useSampler"), (int[1])[ 1 ], 1)
- SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "occlusion.useSampler"), (int[1])[ 1 ], 1)
-
- int renderModeLoc = GetShaderLocation(mat.shader, "renderMode")
- SetShaderValuei(mat.shader, renderModeLoc, (int[1])[ 0 ], 1)
-
- # Set up material properties color
- mat.maps[MAP_ALBEDO].color = albedo
- mat.maps[MAP_NORMAL].color = (Color)[ 128, 128, 255, 255 ]
- mat.maps[MAP_METALNESS].value = metalness
- mat.maps[MAP_ROUGHNESS].value = roughness
- mat.maps[MAP_OCCLUSION].value = 1.0
- mat.maps[MAP_EMISSION].value = 0.5f
- mat.maps[MAP_HEIGHT].value = 0.5f
-
- return mat
-]
diff --git a/examples/models/models_material_pbr.png b/examples/models/models_material_pbr.png
deleted file mode 100644
index 86ba01b..0000000
Binary files a/examples/models/models_material_pbr.png and /dev/null differ
diff --git a/examples/models/models_mesh_generation.c b/examples/models/models_mesh_generation.c
deleted file mode 100644
index 3e9b533..0000000
--- a/examples/models/models_mesh_generation.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*******************************************************************************************
-*
-* raylib example - procedural mesh generation
-*
-* This example has been created using raylib 1.8 (www.raylib.com)
-* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-* Copyright (c) 2017 Ramon Santamaria (Ray San)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#define NUM_MODELS 7 # We generate 7 parametric 3d shapes
-
-int main()
-[
- # Initialization
- #--------------------------------------------------------------------------------------
- int screenWidth = 800
- int screenHeight = 450
-
- InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh generation")
-
- # We generate a checked image for texturing
- Image checked = GenImageChecked(2, 2, 1, 1, RED, GREEN)
- Texture2D texture = LoadTextureFromImage(checked)
- UnloadImage(checked)
-
- Model models[NUM_MODELS]
-
- models[0] = LoadModelFromMesh(GenMeshPlane(2, 2, 5, 5))
- models[1] = LoadModelFromMesh(GenMeshCube(2.0, 1.0, 2.0))
- models[2] = LoadModelFromMesh(GenMeshSphere(2, 32, 32))
- models[3] = LoadModelFromMesh(GenMeshHemiSphere(2, 16, 16))
- models[4] = LoadModelFromMesh(GenMeshCylinder(1, 2, 16))
- models[5] = LoadModelFromMesh(GenMeshTorus(0.25f, 4.0, 16, 32))
- models[6] = LoadModelFromMesh(GenMeshKnot(1.0, 2.0, 16, 128))
-
- # Set checked texture as default diffuse component for all models material
- for (int i = 0 i < NUM_MODELS i++) models[i].material.maps[MAP_DIFFUSE].texture = texture
-
- # Define the camera to look into our 3d world
- Camera camera = [[ 5.0, 5.0, 5.0 ], [ 0.0, 0.0, 0.0 ], [ 0.0, 1.0, 0.0 ], 45.0, 0 ]
-
- # Model drawing position
- Vector3 position = [ 0.0, 0.0, 0.0 ]
-
- int currentModel = 0
-
- SetCameraMode(camera, CAMERA_ORBITAL) # Set a orbital camera mode
-
- SetTargetFPS(60) # Set our game to run at 60 frames-per-second
- #--------------------------------------------------------------------------------------
-
- # Main game loop
- while (!WindowShouldClose()) # Detect window close button or ESC key
- [
- # Update
- #----------------------------------------------------------------------------------
- UpdateCamera(&camera) # Update internal camera and our camera
-
- if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
- [
- currentModel = (currentModel + 1)%NUM_MODELS # Cycle between the textures
- ]
- #----------------------------------------------------------------------------------
-
- # Draw
- #----------------------------------------------------------------------------------
- BeginDrawing()
-
- ClearBackground(RAYWHITE)
-
- BeginMode3D(camera)
-
- DrawModel(models[currentModel], position, 1.0, WHITE)
-
- DrawGrid(10, 1.0)
-
- EndMode3D()
-
- DrawRectangle(30, 400, 310, 30, Fade(SKYBLUE, 0.5f))
- DrawRectangleLines(30, 400, 310, 30, Fade(DARKBLUE, 0.5f))
- DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL MODELS", 40, 410, 10, BLUE)
-
- switch(currentModel)
- [
- case 0: DrawText("PLANE", 680, 10, 20, DARKBLUE) break
- case 1: DrawText("CUBE", 680, 10, 20, DARKBLUE) break
- case 2: DrawText("SPHERE", 680, 10, 20, DARKBLUE) break
- case 3: DrawText("HEMISPHERE", 640, 10, 20, DARKBLUE) break
- case 4: DrawText("CYLINDER", 680, 10, 20, DARKBLUE) break
- case 5: DrawText("TORUS", 680, 10, 20, DARKBLUE) break
- case 6: DrawText("KNOT", 680, 10, 20, DARKBLUE) break
- default: break
- ]
-
- EndDrawing()
- #----------------------------------------------------------------------------------
- ]
-
- # De-Initialization
- #--------------------------------------------------------------------------------------
-
- # Unload models data (GPU VRAM)
- for (int i = 0 i < NUM_MODELS i++) UnloadModel(models[i])
-
- CloseWindow() # Close window and OpenGL context
- #--------------------------------------------------------------------------------------
-
- return 0
-]
\ No newline at end of file
diff --git a/examples/models/models_mesh_generation.png b/examples/models/models_mesh_generation.png
deleted file mode 100644
index d8eb364..0000000
Binary files a/examples/models/models_mesh_generation.png and /dev/null differ
diff --git a/examples/models/models_mesh_picking.c b/examples/models/models_mesh_picking.c
deleted file mode 100644
index 40ece69..0000000
--- a/examples/models/models_mesh_picking.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*******************************************************************************************
-*
-* raylib [models] example - Mesh picking in 3d mode, ground plane, triangle, mesh
-*
-* This example has been created using raylib 1.7 (www.raylib.com)
-* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-* Copyright (c) 2015 Ramon Santamaria (@raysan5)
-* Example contributed by Joel Davis (@joeld42)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-#include "raymath.h"
-
-#define FLT_MAX 3.40282347E+38F # Maximum value of a float, defined in
-
-int main()
-[
- # Initialization
- #--------------------------------------------------------------------------------------
- int screenWidth = 800
- int screenHeight = 450
-
- InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh picking")
-
- # Define the camera to look into our 3d world
- Camera camera
- camera.position = (Vector3)[ 20.0, 20.0, 20.0 ] # Camera position
- camera.target = (Vector3)[ 0.0, 8.0, 0.0 ] # Camera looking at point
- camera.up = (Vector3)[ 0.0, 1.6f, 0.0 ] # Camera up vector (rotation towards target)
- camera.fovy = 45.0 # Camera field-of-view Y
- camera.type = CAMERA_PERSPECTIVE # Camera mode type
-
- Ray ray # Picking ray
-
- Model tower = LoadModel("resources/models/turret.obj") # Load OBJ model
- Texture2D texture = LoadTexture("resources/models/turret_diffuse.png") # Load model texture
- tower.material.maps[MAP_DIFFUSE].texture = texture # Set model diffuse texture
-
- Vector3 towerPos = [ 0.0, 0.0, 0.0 ] # Set model position
- BoundingBox towerBBox = MeshBoundingBox(tower.mesh) # Get mesh bounding box
- bool hitMeshBBox = false
- bool hitTriangle = false
-
- # Test triangle
- Vector3 ta = (Vector3)[ -25.0, 0.5, 0.0 ]
- Vector3 tb = (Vector3)[ -4.0, 2.5, 1.0 ]
- Vector3 tc = (Vector3)[ -8.0, 6.5, 0.0 ]
-
- Vector3 bary = [ 0.0, 0.0, 0.0 ]
-
- SetCameraMode(camera, CAMERA_FREE) # Set a free camera mode
-
- SetTargetFPS(60) # Set our game to run at 60 frames-per-second
- #--------------------------------------------------------------------------------------
- # Main game loop
- while (!WindowShouldClose()) # Detect window close button or ESC key
- [
- # Update
- #----------------------------------------------------------------------------------
- UpdateCamera(&camera) # Update camera
-
- # Display information about closest hit
- RayHitInfo nearestHit
- char *hitObjectName = "None"
- nearestHit.distance = FLT_MAX
- nearestHit.hit = false
- Color cursorColor = WHITE
-
- # Get ray and test against ground, triangle, and mesh
- ray = GetMouseRay(GetMousePosition(), camera)
-
- # Check ray collision aginst ground plane
- RayHitInfo groundHitInfo = GetCollisionRayGround(ray, 0.0)
-
- if ((groundHitInfo.hit) && (groundHitInfo.distance < nearestHit.distance))
- [
- nearestHit = groundHitInfo
- cursorColor = GREEN
- hitObjectName = "Ground"
- ]
-
- # Check ray collision against test triangle
- RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, ta, tb, tc)
-
- if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance))
- [
- nearestHit = triHitInfo
- cursorColor = PURPLE
- hitObjectName = "Triangle"
-
- bary = Vector3Barycenter(nearestHit.position, ta, tb, tc)
- hitTriangle = true
- ]
- else hitTriangle = false
-
- RayHitInfo meshHitInfo
-
- # Check ray collision against bounding box first, before trying the full ray-mesh test
- if (CheckCollisionRayBox(ray, towerBBox))
- [
- hitMeshBBox = true
-
- # Check ray collision against model
- # NOTE: It considers model.transform matrix!
- meshHitInfo = GetCollisionRayModel(ray, &tower)
-
- if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance))
- [
- nearestHit = meshHitInfo
- cursorColor = ORANGE
- hitObjectName = "Mesh"
- ]
-
- ] hitMeshBBox = false
- #----------------------------------------------------------------------------------
-
- # Draw
- #----------------------------------------------------------------------------------
- BeginDrawing()
-
- ClearBackground(RAYWHITE)
-
- BeginMode3D(camera)
-
- # Draw the tower
- # WARNING: If scale is different than 1.0,
- # not considered by GetCollisionRayModel()
- DrawModel(tower, towerPos, 1.0, WHITE)
-
- # Draw the test triangle
- DrawLine3D(ta, tb, PURPLE)
- DrawLine3D(tb, tc, PURPLE)
- DrawLine3D(tc, ta, PURPLE)
-
- # Draw the mesh bbox if we hit it
- if (hitMeshBBox) DrawBoundingBox(towerBBox, LIME)
-
- # If we hit something, draw the cursor at the hit point
- if (nearestHit.hit)
- [
- DrawCube(nearestHit.position, 0.3, 0.3, 0.3, cursorColor)
- DrawCubeWires(nearestHit.position, 0.3, 0.3, 0.3, RED)
-
- Vector3 normalEnd
- normalEnd.x = nearestHit.position.x + nearestHit.normal.x
- normalEnd.y = nearestHit.position.y + nearestHit.normal.y
- normalEnd.z = nearestHit.position.z + nearestHit.normal.z
-
- DrawLine3D(nearestHit.position, normalEnd, RED)
- ]
-
- DrawRay(ray, MAROON)
-
- DrawGrid(10, 10.0)
-
- EndMode3D()
-
- # Draw some debug GUI text
- DrawText(FormatText("Hit Object: %s", hitObjectName), 10, 50, 10, BLACK)
-
- if (nearestHit.hit)
- [
- int ypos = 70
-
- DrawText(FormatText("Distance: %3.2f", nearestHit.distance), 10, ypos, 10, BLACK)
-
- DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f",
- nearestHit.position.x,
- nearestHit.position.y,
- nearestHit.position.z), 10, ypos + 15, 10, BLACK)
-
- DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f",
- nearestHit.normal.x,
- nearestHit.normal.y,
- nearestHit.normal.z), 10, ypos + 30, 10, BLACK)
-
- if (hitTriangle) DrawText(FormatText("Barycenter: %3.2f %3.2f %3.2f", bary.x, bary.y, bary.z), 10, ypos + 45, 10, BLACK)
- ]
-
- DrawText("Use Mouse to Move Camera", 10, 430, 10, GRAY)
-
- DrawText("(c) Turret 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY)
-
- DrawFPS(10, 10)
-
- EndDrawing()
- #----------------------------------------------------------------------------------
- ]
-
- # De-Initialization
- #--------------------------------------------------------------------------------------
- UnloadModel(tower) # Unload model
- UnloadTexture(texture) # Unload texture
-
- CloseWindow() # Close window and OpenGL context
- #--------------------------------------------------------------------------------------
-
- return 0
-]
\ No newline at end of file
diff --git a/examples/models/models_mesh_picking.png b/examples/models/models_mesh_picking.png
deleted file mode 100644
index 0972f94..0000000
Binary files a/examples/models/models_mesh_picking.png and /dev/null differ
diff --git a/examples/models/models_obj_loading.png b/examples/models/models_obj_loading.png
deleted file mode 100644
index 098aa60..0000000
Binary files a/examples/models/models_obj_loading.png and /dev/null differ
diff --git a/examples/models/models_obj_loading.py b/examples/models/models_obj_loading.py
index acfe911..6dcc074 100644
--- a/examples/models/models_obj_loading.py
+++ b/examples/models/models_obj_loading.py
@@ -9,7 +9,7 @@
# *
# ********************************************************************************************/
-from raylib.static import *
+from raylib import *
# Initialization
#--------------------------------------------------------------------------------------
@@ -20,15 +20,16 @@ InitWindow(screenWidth, screenHeight, b"raylib [models] example - obj model load
# Define the camera to look into our 3d world
camera = ffi.new("struct Camera3D *")
-camera.position = [ 50.0, 50.0, 50.0 ] # Camera position
+camera.position = [ 5.0, 5.0, 5.0 ] # Camera position
camera.target = [ 0.0, 2.5, 0.0 ] # Camera looking at point
camera.up = [ 0.0, 1.0, 0.0 ] # Camera up vector (rotation towards target)
camera.fovy = 45.0 # Camera field-of-view Y
-camera.type = CAMERA_PERSPECTIVE # Camera mode type
+camera.projection = CAMERA_PERSPECTIVE # Camera mode type
-model = LoadModel(b"resources/models/monkey/monkey4.gltf") # Load OBJ model
-texture = LoadTexture(b"resources/models/castle_diffuse.png") # Load model texture
-#model.materials.maps[MAP_DIFFUSE].texture = texture # Set map diffuse texture
+
+model = LoadModel(b"resources/models/house.obj") # Load OBJ model
+texture = LoadTexture(b"resources/models/house_diffuse.png") # Load model texture
+model.materials.maps[MATERIAL_MAP_ALBEDO].texture = texture # Set map diffuse texture
position = [ 0.0, 0.0, 0.0 ] # Set model position
SetTargetFPS(60) # Set our game to run at 60 frames-per-second
@@ -40,7 +41,7 @@ while not WindowShouldClose(): # Detect window close button or ESC key
#----------------------------------------------------------------------------------
#...
#----------------------------------------------------------------------------------
-
+ rl.UpdateCamera(camera, rl.CAMERA_ORBITAL)
# Draw
#----------------------------------------------------------------------------------
BeginDrawing()
@@ -53,8 +54,6 @@ while not WindowShouldClose(): # Detect window close button or ESC key
DrawGrid(10, 1.0) # Draw a grid
- DrawGizmo(position) # Draw gizmo
-
EndMode3D()
DrawText(b"(c) Castle 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY)
diff --git a/examples/models/models_orthographic_projection.c b/examples/models/models_orthographic_projection.c
deleted file mode 100644
index b00bb23..0000000
--- a/examples/models/models_orthographic_projection.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************************
-*
-* raylib [models] example - Show the difference between perspective and orthographic projection
-*
-* This program is heavily based on the geometric objects example
-*
-* This example has been created using raylib 1.9.7 (www.raylib.com)
-* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-* Copyright (c) 2018 Max Danielsson & Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#define FOVY_PERSPECTIVE 45.0
-#define WIDTH_ORTHOGRAPHIC 10.0
-
-int main()
-[
- # Initialization
- #--------------------------------------------------------------------------------------
- int screenWidth = 800
- int screenHeight = 450
-
- InitWindow(screenWidth, screenHeight, "raylib [models] example - geometric shapes")
-
- # Define the camera to look into our 3d world
- Camera camera = [[ 0.0, 10.0, 10.0 ], [ 0.0, 0.0, 0.0 ], [ 0.0, 1.0, 0.0 ], FOVY_PERSPECTIVE, CAMERA_PERSPECTIVE ]
-
- SetTargetFPS(60) # Set our game to run at 60 frames-per-second
- #--------------------------------------------------------------------------------------
-
- # Main game loop
- while (!WindowShouldClose()) # Detect window close button or ESC key
- [
- # Update
- #----------------------------------------------------------------------------------
- if (IsKeyPressed(KEY_SPACE))
- [
- if (camera.type == CAMERA_PERSPECTIVE)
- [
- camera.fovy = WIDTH_ORTHOGRAPHIC
- camera.type = CAMERA_ORTHOGRAPHIC
- ]
- else
- [
- camera.fovy = FOVY_PERSPECTIVE
- camera.type = CAMERA_PERSPECTIVE
- ]
- ]
- #----------------------------------------------------------------------------------
-
- # Draw
- #----------------------------------------------------------------------------------
- BeginDrawing()
-
- ClearBackground(RAYWHITE)
-
- BeginMode3D(camera)
-
- DrawCube((Vector3)[-4.0, 0.0, 2.0], 2.0, 5.0, 2.0, RED)
- DrawCubeWires((Vector3)[-4.0, 0.0, 2.0], 2.0, 5.0, 2.0, GOLD)
- DrawCubeWires((Vector3)[-4.0, 0.0, -2.0], 3.0, 6.0, 2.0, MAROON)
-
- DrawSphere((Vector3)[-1.0, 0.0, -2.0], 1.0, GREEN)
- DrawSphereWires((Vector3)[1.0, 0.0, 2.0], 2.0, 16, 16, LIME)
-
- DrawCylinder((Vector3)[4.0, 0.0, -2.0], 1.0, 2.0, 3.0, 4, SKYBLUE)
- DrawCylinderWires((Vector3)[4.0, 0.0, -2.0], 1.0, 2.0, 3.0, 4, DARKBLUE)
- DrawCylinderWires((Vector3)[4.5f, -1.0, 2.0], 1.0, 1.0, 2.0, 6, BROWN)
-
- DrawCylinder((Vector3)[1.0, 0.0, -4.0], 0.0, 1.5f, 3.0, 8, GOLD)
- DrawCylinderWires((Vector3)[1.0, 0.0, -4.0], 0.0, 1.5f, 3.0, 8, PINK)
-
- DrawGrid(10, 1.0) # Draw a grid
-
- EndMode3D()
-
- DrawText("Press Spacebar to switch camera type", 10, GetScreenHeight() - 30, 20, DARKGRAY)
-
- if (camera.type == CAMERA_ORTHOGRAPHIC) DrawText("ORTHOGRAPHIC", 10, 40, 20, BLACK)
- else if (camera.type == CAMERA_PERSPECTIVE) DrawText("PERSPECTIVE", 10, 40, 20, BLACK)
-
- DrawFPS(10, 10)
-
- EndDrawing()
- #----------------------------------------------------------------------------------
- ]
-
- # De-Initialization
- #--------------------------------------------------------------------------------------
- CloseWindow() # Close window and OpenGL context
- #--------------------------------------------------------------------------------------
-
- return 0
-]
diff --git a/examples/models/models_orthographic_projection.png b/examples/models/models_orthographic_projection.png
deleted file mode 100644
index 2942eee..0000000
Binary files a/examples/models/models_orthographic_projection.png and /dev/null differ
diff --git a/examples/models/models_skybox.c b/examples/models/models_skybox.c
deleted file mode 100644
index 17ff9e7..0000000
--- a/examples/models/models_skybox.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************************
-*
-* raylib [models] example - Skybox loading and drawing
-*
-* This example has been created using raylib 1.8 (www.raylib.com)
-* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-* Copyright (c) 2017 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-int main()
-[
- # Initialization
- #--------------------------------------------------------------------------------------
- int screenWidth = 800
- int screenHeight = 450
-
- InitWindow(screenWidth, screenHeight, "raylib [models] example - skybox loading and drawing")
-
- # Define the camera to look into our 3d world
- Camera camera = [[ 1.0, 1.0, 1.0 ], [ 0.0, 0.0, 0.0 ], [ 0.0, 1.0, 0.0 ], 45.0, 0 ]
-
- # Load skybox model
- Mesh cube = GenMeshCube(1.0, 1.0, 1.0)
- Model skybox = LoadModelFromMesh(cube)
-
- # Load skybox shader and set required locations
- # NOTE: Some locations are automatically set at shader loading
- skybox.material.shader = LoadShader("resources/shaders/skybox.vs", "resources/shaders/skybox.fs")
- SetShaderValuei(skybox.material.shader, GetShaderLocation(skybox.material.shader, "environmentMap"), (int[1])[ MAP_CUBEMAP ], 1)
-
- # Load cubemap shader and setup required shader locations
- Shader shdrCubemap = LoadShader("resources/shaders/cubemap.vs", "resources/shaders/cubemap.fs")
- SetShaderValuei(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1])[ 0 ], 1)
-
- # Load HDR panorama (sphere) texture
- Texture2D texHDR = LoadTexture("resources/dresden_square.hdr")
-
- # Generate cubemap (texture with 6 quads-cube-mapping) from panorama HDR texture
- # NOTE: New texture is generated rendering to texture, shader computes the sphre->cube coordinates mapping
- skybox.material.maps[MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, texHDR, 512)
-
- UnloadTexture(texHDR) # Texture not required anymore, cubemap already generated
- UnloadShader(shdrCubemap) # Unload cubemap generation shader, not required anymore
-
- SetCameraMode(camera, CAMERA_FIRST_PERSON) # Set a first person camera mode
-
- SetTargetFPS(60) # Set our game to run at 60 frames-per-second
- #--------------------------------------------------------------------------------------
-
- # Main game loop
- while (!WindowShouldClose()) # Detect window close button or ESC key
- [
- # Update
- #----------------------------------------------------------------------------------
- UpdateCamera(&camera) # Update camera
- #----------------------------------------------------------------------------------
-
- # Draw
- #----------------------------------------------------------------------------------
- BeginDrawing()
-
- ClearBackground(RAYWHITE)
-
- BeginMode3D(camera)
-
- DrawModel(skybox, (Vector3)[0, 0, 0], 1.0, WHITE)
-
- DrawGrid(10, 1.0)
-
- EndMode3D()
-
- DrawFPS(10, 10)
-
- EndDrawing()
- #----------------------------------------------------------------------------------
- ]
-
- # De-Initialization
- #--------------------------------------------------------------------------------------
- UnloadModel(skybox) # Unload skybox model (and textures)
-
- CloseWindow() # Close window and OpenGL context
- #--------------------------------------------------------------------------------------
-
- return 0
-]
diff --git a/examples/models/models_skybox.png b/examples/models/models_skybox.png
deleted file mode 100644
index feb0f73..0000000
Binary files a/examples/models/models_skybox.png and /dev/null differ
diff --git a/examples/models/models_skybox.py b/examples/models/models_skybox_outdated_needs_update.py
similarity index 74%
rename from examples/models/models_skybox.py
rename to examples/models/models_skybox_outdated_needs_update.py
index 433ffd7..5f193b7 100644
--- a/examples/models/models_skybox.py
+++ b/examples/models/models_skybox_outdated_needs_update.py
@@ -1,4 +1,5 @@
-from raylib.dynamic import raylib as rl, ffi
+#type: ignore
+import raylib as rl
from raylib.colors import *
screenWidth = 1260
@@ -6,7 +7,7 @@ screenHeight = 768
rl.InitWindow(screenWidth, screenHeight, b'Skymap Demo')
-camera = ffi.new('struct Camera3D *', [[1, 1, 1], [4, 1, 4], [0, 1, 0], 70, 0])
+camera = rl.ffi.new('struct Camera3D *', [[1, 1, 1], [4, 1, 4], [0, 1, 0], 70, 0])
cube = rl.GenMeshCube(100, 100, 100)
skybox = rl.LoadModelFromMesh(cube)
@@ -19,8 +20,8 @@ skybox.materials[0].shader = rl.LoadShader(
rl.SetShaderValue(
skybox.materials[0].shader,
rl.GetShaderLocation(skybox.materials[0].shader, b"environmentMap"),
- ffi.new('int[]', [rl.MAP_CUBEMAP]),
- rl.UNIFORM_INT
+ rl.ffi.new('int[]', [rl.MATERIAL_MAP_CUBEMAP]),
+ rl.RL_SHADER_UNIFORM_INT
)
shdrCubemap = rl.LoadShader(
@@ -31,23 +32,23 @@ shdrCubemap = rl.LoadShader(
rl.SetShaderValue(
shdrCubemap,
rl.GetShaderLocation(shdrCubemap, b'equirectangularMap'),
- ffi.new('int[]', [0]),
- rl.UNIFORM_INT
+ rl.ffi.new('int[]', [0]),
+ rl.SHADER_UNIFORM_INT
)
texHDR = rl.LoadTexture(b'resources/dresden_square.hdr')
-skybox.materials[0].maps[rl.MAP_CUBEMAP].texture = rl.GenTextureCubemap(shdrCubemap, texHDR, 512);
+# THIS FUNCTION NO LONGER EXISTS, will require porting a lot of C code from the C example to replace it
+skybox.materials[0].maps[rl.MAP_CUBEMAP].texture = rl.GenTextureCubemap(shdrCubemap, texHDR, 512, rl.UNCOMPRESSED_R32G32B32)
+
rl.UnloadTexture(texHDR)
rl.UnloadShader(shdrCubemap)
-rl.SetCameraMode(camera[0], rl.CAMERA_FIRST_PERSON)
-
rl.SetTargetFPS(60)
while not rl.WindowShouldClose():
- rl.UpdateCamera(camera)
+ rl.UpdateCamera(camera, rl.CAMERA_FIRST_PERSON)
rl.BeginDrawing()
rl.ClearBackground(RAYWHITE)
rl.BeginMode3D(camera[0])
diff --git a/examples/models/models_waving_cubes.py b/examples/models/models_waving_cubes.py
new file mode 100644
index 0000000..af14105
--- /dev/null
+++ b/examples/models/models_waving_cubes.py
@@ -0,0 +1,79 @@
+from pyray import *
+import pyray
+import math
+
+# Program main entry point
+# Initialization
+screenWidth = 800
+screenHeight = 450
+
+init_window(screenWidth, screenHeight, "raylib [models] example - waving cubes")
+
+# Initialize the camera
+camera = Camera3D()
+camera.position = Vector3(30.0, 20.0, 30.0) # Camera position
+camera.target = Vector3(0.0, 0.0, 0.0) # Camera looking at point
+camera.up = Vector3(0.0, 1.0, 0.0) # Camera up vector (rotation towards target)
+camera.fovy = 70.0 # Camera field-of-view Y
+camera.projection = pyray.CameraProjection.CAMERA_PERSPECTIVE # Camera projection type
+
+# Specify the amount of blocks in each direction
+numBlocks = 15
+
+set_target_fps(60)
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ time = get_time()
+
+ # Calculate time scale for cube position and size
+ scale = (2.0 + math.sin(time)) * 0.7
+
+ # Move camera around the scene
+ cameraTime = time * 0.3
+ camera.position.x = math.cos(cameraTime) * 40.0
+ camera.position.z = math.sin(cameraTime) * 40.0
+
+ # Draw
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+
+ begin_mode_3d(camera)
+
+ draw_grid(10, 5.0)
+
+ for x in range(numBlocks):
+ for y in range(numBlocks):
+ for z in range(numBlocks):
+ # Scale of the blocks depends on x/y/z positions
+ blockScale = (x + y + z) / 30.0
+
+ # Scatter makes the waving effect by adding blockScale over time
+ scatter = math.sin(blockScale * 20.0 + time * 4.0)
+
+ # Calculate the cube position
+ cubePos = Vector3(
+ (x - numBlocks / 2) * (scale * 3.0) + scatter,
+ (y - numBlocks / 2) * (scale * 2.0) + scatter,
+ (z - numBlocks / 2) * (scale * 3.0) + scatter,
+ )
+
+ # Pick a color with a hue depending on cube position for the rainbow color effect
+ cubeColor = color_from_hsv(((x + y + z) * 18) % 360, 0.75, 0.9)
+
+ # Calculate cube size
+ cubeSize = (2.4 - scale) * blockScale
+
+ # And finally, draw the cube!
+ draw_cube(cubePos, cubeSize, cubeSize, cubeSize, cubeColor)
+
+ end_mode_3d()
+
+ draw_fps(10, 10)
+
+ end_drawing()
+
+# De-Initialization
+close_window() # Close window and OpenGL context
diff --git a/examples/models/models_yaw_pitch_roll.c b/examples/models/models_yaw_pitch_roll.c
deleted file mode 100644
index 7e39651..0000000
--- a/examples/models/models_yaw_pitch_roll.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/*******************************************************************************************
-*
-* raylib [models] example - Plane rotations (yaw, pitch, roll)
-*
-* This example has been created using raylib 1.8 (www.raylib.com)
-* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-* Example based on Berni work on Raspberry Pi:
-* http:#forum.raylib.com/index.php?p=/discussion/124/line-versus-triangle-drawing-order
-*
-* Copyright (c) 2017 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-#include "raymath.h"
-
-# Draw angle gauge controls
-void DrawAngleGauge(Texture2D angleGauge, int x, int y, float angle, char title[], Color color)
-
-#----------------------------------------------------------------------------------
-# Main entry point
-#----------------------------------------------------------------------------------
-int main()
-[
- # Initialization
- #--------------------------------------------------------------------------------------
- const int screenWidth = 800
- const int screenHeight = 450
-
- InitWindow(screenWidth, screenHeight, "raylib [models] example - plane rotations (yaw, pitch, roll)")
-
- Texture2D texAngleGauge = LoadTexture("resources/angle_gauge.png")
- Texture2D texBackground = LoadTexture("resources/background.png")
- Texture2D texPitch = LoadTexture("resources/pitch.png")
- Texture2D texPlane = LoadTexture("resources/plane.png")
-
- RenderTexture2D framebuffer = LoadRenderTexture(192, 192)
-
- # Model loading
- Model model = LoadModel("resources/plane.obj") # Load OBJ model
- model.material.maps[MAP_DIFFUSE].texture = LoadTexture("resources/plane_diffuse.png") # Set map diffuse texture
-
- GenTextureMipmaps(&model.material.maps[MAP_DIFFUSE].texture)
-
- Camera camera = [ 0 ]
- camera.position = (Vector3)[ 0.0, 60.0, -120.0 ]# Camera position perspective
- camera.target = (Vector3)[ 0.0, 12.0, 0.0 ] # Camera looking at point
- camera.up = (Vector3)[ 0.0, 1.0, 0.0 ] # Camera up vector (rotation towards target)
- camera.fovy = 30.0 # Camera field-of-view Y
- camera.type = CAMERA_PERSPECTIVE # Camera type
-
- float pitch = 0.0
- float roll = 0.0
- float yaw = 0.0
-
- SetTargetFPS(60)
- #--------------------------------------------------------------------------------------
-
-
- while (!WindowShouldClose()) # Detect window close button or ESC key
- [
- # Update
- #----------------------------------------------------------------------------------
-
- # Plane roll (x-axis) controls
- if (IsKeyDown(KEY_LEFT)) roll += 1.0
- else if (IsKeyDown(KEY_RIGHT)) roll -= 1.0
- else
- [
- if (roll > 0.0) roll -= 0.5f
- else if (roll < 0.0) roll += 0.5f
- ]
-
- # Plane yaw (y-axis) controls
- if (IsKeyDown(KEY_S)) yaw += 1.0
- else if (IsKeyDown(KEY_A)) yaw -= 1.0
- else
- [
- if (yaw > 0.0) yaw -= 0.5f
- else if (yaw < 0.0) yaw += 0.5f
- ]
-
- # Plane pitch (z-axis) controls
- if (IsKeyDown(KEY_DOWN)) pitch += 0.6f
- else if (IsKeyDown(KEY_UP)) pitch -= 0.6f
- else
- [
- if (pitch > 0.3f) pitch -= 0.3f
- else if (pitch < -0.3f) pitch += 0.3f
- ]
-
- # Wraps the phase of an angle to fit between -180 and +180 degrees
- int pitchOffset = pitch
- while (pitchOffset > 180) pitchOffset -= 360
- while (pitchOffset < -180) pitchOffset += 360
- pitchOffset *= 10
-
- Matrix transform = MatrixIdentity()
-
- transform = MatrixMultiply(transform, MatrixRotateZ(DEG2RAD*roll))
- transform = MatrixMultiply(transform, MatrixRotateX(DEG2RAD*pitch))
- transform = MatrixMultiply(transform, MatrixRotateY(DEG2RAD*yaw))
-
- model.transform = transform
- #----------------------------------------------------------------------------------
-
- # Draw
- #----------------------------------------------------------------------------------
- BeginDrawing()
-
- ClearBackground(RAYWHITE)
-
- # Draw framebuffer texture (Ahrs Display)
- int centerX = framebuffer.texture.width/2
- int centerY = framebuffer.texture.height/2
- float scaleFactor = 0.5f
-
- BeginTextureMode(framebuffer)
-
- BeginBlendMode(BLEND_ALPHA)
-
- DrawTexturePro(texBackground, (Rectangle)[ 0, 0, texBackground.width, texBackground.height ],
- (Rectangle)[ centerX, centerY, texBackground.width*scaleFactor, texBackground.height*scaleFactor],
- (Vector2)[ texBackground.width/2*scaleFactor, texBackground.height/2*scaleFactor + pitchOffset*scaleFactor ], roll, WHITE)
-
- DrawTexturePro(texPitch, (Rectangle)[ 0, 0, texPitch.width, texPitch.height ],
- (Rectangle)[ centerX, centerY, texPitch.width*scaleFactor, texPitch.height*scaleFactor ],
- (Vector2)[ texPitch.width/2*scaleFactor, texPitch.height/2*scaleFactor + pitchOffset*scaleFactor ], roll, WHITE)
-
- DrawTexturePro(texPlane, (Rectangle)[ 0, 0, texPlane.width, texPlane.height ],
- (Rectangle)[ centerX, centerY, texPlane.width*scaleFactor, texPlane.height*scaleFactor ],
- (Vector2)[ texPlane.width/2*scaleFactor, texPlane.height/2*scaleFactor ], 0, WHITE)
-
- EndBlendMode()
-
- EndTextureMode()
-
- # Draw 3D model (recomended to draw 3D always before 2D)
- BeginMode3D(camera)
-
- DrawModel(model, (Vector3)[ 0, 6.0, 0 ], 1.0, WHITE) # Draw 3d model with texture
- DrawGrid(10, 10.0)
-
- EndMode3D()
-
- # Draw 2D GUI stuff
- DrawAngleGauge(texAngleGauge, 80, 70, roll, "roll", RED)
- DrawAngleGauge(texAngleGauge, 190, 70, pitch, "pitch", GREEN)
- DrawAngleGauge(texAngleGauge, 300, 70, yaw, "yaw", SKYBLUE)
-
- DrawRectangle(30, 360, 260, 70, Fade(SKYBLUE, 0.5f))
- DrawRectangleLines(30, 360, 260, 70, Fade(DARKBLUE, 0.5f))
- DrawText("Pitch controlled with: KEY_UP / KEY_DOWN", 40, 370, 10, DARKGRAY)
- DrawText("Roll controlled with: KEY_LEFT / KEY_RIGHT", 40, 390, 10, DARKGRAY)
- DrawText("Yaw controlled with: KEY_A / KEY_S", 40, 410, 10, DARKGRAY)
-
- # Draw framebuffer texture
- DrawTextureRec(framebuffer.texture, (Rectangle)[ 0, 0, framebuffer.texture.width, -framebuffer.texture.height ],
- (Vector2)[ screenWidth - framebuffer.texture.width - 20, 20 ], Fade(WHITE, 0.8f))
-
- DrawRectangleLines(screenWidth - framebuffer.texture.width - 20, 20, framebuffer.texture.width, framebuffer.texture.height, DARKGRAY)
-
- EndDrawing()
- #----------------------------------------------------------------------------------
- ]
-
- # De-Initialization
- #--------------------------------------------------------------------------------------
-
- # Unload all loaded data
- UnloadModel(model)
-
- UnloadRenderTexture(framebuffer)
-
- UnloadTexture(texAngleGauge)
- UnloadTexture(texBackground)
- UnloadTexture(texPitch)
- UnloadTexture(texPlane)
-
- CloseWindow() # Close window and OpenGL context
- #--------------------------------------------------------------------------------------
-
- return 0
-]
-
-# Draw angle gauge controls
-void DrawAngleGauge(Texture2D angleGauge, int x, int y, float angle, char title[], Color color)
-[
- Rectangle srcRec = [ 0, 0, angleGauge.width, angleGauge.height ]
- Rectangle dstRec = [ x, y, angleGauge.width, angleGauge.height ]
- Vector2 origin = [ angleGauge.width/2, angleGauge.height/2]
- int textSize = 20
-
- DrawTexturePro(angleGauge, srcRec, dstRec, origin, angle, color)
-
- DrawText(FormatText("%5.1f", angle), x - MeasureText(FormatText("%5.1f", angle), textSize) / 2, y + 10, textSize, DARKGRAY)
- DrawText(title, x - MeasureText(title, textSize) / 2, y + 60, textSize, DARKGRAY)
-]
diff --git a/examples/models/models_yaw_pitch_roll.png b/examples/models/models_yaw_pitch_roll.png
deleted file mode 100644
index 5400304..0000000
Binary files a/examples/models/models_yaw_pitch_roll.png and /dev/null differ
diff --git a/examples/models/resources/models/iqm/guy.blend b/examples/models/resources/models/iqm/guy.blend
new file mode 100644
index 0000000..3880467
Binary files /dev/null and b/examples/models/resources/models/iqm/guy.blend differ
diff --git a/examples/models/resources/models/iqm/guy.iqm b/examples/models/resources/models/iqm/guy.iqm
new file mode 100644
index 0000000..36bed5e
Binary files /dev/null and b/examples/models/resources/models/iqm/guy.iqm differ
diff --git a/examples/models/resources/models/iqm/guyanim.iqm b/examples/models/resources/models/iqm/guyanim.iqm
new file mode 100644
index 0000000..824a68a
Binary files /dev/null and b/examples/models/resources/models/iqm/guyanim.iqm differ
diff --git a/examples/models/resources/models/iqm/guytex.png b/examples/models/resources/models/iqm/guytex.png
new file mode 100644
index 0000000..05a58ee
Binary files /dev/null and b/examples/models/resources/models/iqm/guytex.png differ
diff --git a/examples/models/resources/models/iqm/vertex_colored_object.iqm b/examples/models/resources/models/iqm/vertex_colored_object.iqm
new file mode 100644
index 0000000..ad0db07
Binary files /dev/null and b/examples/models/resources/models/iqm/vertex_colored_object.iqm differ
diff --git a/examples/others/rlgl_standalone.py b/examples/others/rlgl_standalone.py
new file mode 100644
index 0000000..0332b5a
--- /dev/null
+++ b/examples/others/rlgl_standalone.py
@@ -0,0 +1,446 @@
+#*******************************************************************************************
+#
+# raylib [rlgl] example - Using rlgl module as standalone module
+#
+# rlgl library is an abstraction layer for multiple OpenGL versions (1.1, 2.1, 3.3 Core, ES 2.0)
+# that provides a pseudo-OpenGL 1.1 immediate-mode style API (rlVertex, rlTranslate, rlRotate...)
+#
+# WARNING: This example is intended only for PLATFORM_DESKTOP and OpenGL 3.3 Core profile.
+# It could work on other platforms if redesigned for those platforms (out-of-scope)
+#
+# DEPENDENCIES:
+# glfw3 - Windows and context initialization library
+# rlgl.h - OpenGL abstraction layer to OpenGL 1.1, 3.3 or ES2
+# glad.h - OpenGL extensions initialization library (required by rlgl)
+# raymath.h - 3D math library
+#
+# WINDOWS COMPILATION:
+# gcc -o rlgl_standalone.exe rlgl_standalone.c -s -Iexternal\include -I..\..\src \
+# -L. -Lexternal\lib -lglfw3 -lopengl32 -lgdi32 -Wall -std=c99 -DGRAPHICS_API_OPENGL_33
+#
+# APPLE COMPILATION:
+# gcc -o rlgl_standalone rlgl_standalone.c -I../../src -Iexternal/include -Lexternal/lib \
+# -lglfw3 -framework CoreVideo -framework OpenGL -framework IOKit -framework Cocoa
+# -Wno-deprecated-declarations -std=c99 -DGRAPHICS_API_OPENGL_33
+#
+#
+# LICENSE: zlib/libpng
+#
+# This example 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) 2014-2023 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.
+#
+#*******************************************************************************************/
+
+# NOTE: rlgl can be configured just re-defining the following values:
+# define RL_DEFAULT_BATCH_BUFFER_ELEMENTS 8192 # Default internal render batch elements limits
+# define RL_DEFAULT_BATCH_BUFFERS 1 # Default number of batch buffers (multi-buffering)
+# define RL_DEFAULT_BATCH_DRAWCALLS 256 # Default number of batch draw calls (by state changes: mode, texture)
+# define RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS 4 # Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())
+# define RL_MAX_MATRIX_STACK_SIZE 32 # Maximum size of internal Matrix stack
+# define RL_MAX_SHADER_LOCATIONS 32 # Maximum number of shader locations supported
+# define RL_CULL_DISTANCE_NEAR 0.01 # Default projection matrix near cull distance
+# define RL_CULL_DISTANCE_FAR 1000.0 # Default projection matrix far cull distance
+
+import sys
+import dataclasses
+import pyray
+from raylib import ffi, rl
+from raylib.defines import (
+ GLFW_TRUE,
+ GLFW_SAMPLES, GLFW_DEPTH_BITS, GLFW_CONTEXT_VERSION_MAJOR, GLFW_CONTEXT_VERSION_MINOR, GLFW_OPENGL_PROFILE,
+ GLFW_OPENGL_CORE_PROFILE, GLFW_OPENGL_FORWARD_COMPAT, RL_PROJECTION, RL_MODELVIEW, DEG2RAD, RL_LINES, RL_TRIANGLES,
+ GLFW_KEY_ESCAPE, GLFW_PRESS,
+)
+from raylib.colors import (
+ RAYWHITE,
+ RED,
+ DARKGRAY
+)
+
+#----------------------------------------------------------------------------------
+# Structures Definition
+#----------------------------------------------------------------------------------
+# Color, 4 components, R8G8B8A8 (32bit)
+@dataclasses.dataclass
+class Color:
+ r: int
+ g: int
+ b: int
+ a: int
+
+
+# Camera type, defines a camera position/orientation in 3d space
+@dataclasses.dataclass
+class Camera:
+ position: pyray.Vector3 # Camera position
+ target: pyray.Vector3 # Camera target it looks-at
+ up: pyray.Vector3 # Camera up vector (rotation over its axis)
+ fovy: float # Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic
+ projection: int # Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC
+
+
+#----------------------------------------------------------------------------------
+# Module specific Functions Declaration
+#----------------------------------------------------------------------------------
+# static void ErrorCallback(int error, const char *description)
+# static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
+
+# Drawing functions (uses rlgl functionality)
+# static void DrawGrid(int slices, float spacing)
+# static void DrawCube(Vector3 position, float width, float height, float length, Color color)
+# static void DrawCubeWires(Vector3 position, float width, float height, float length, Color color)
+# static void DrawRectangleV(Vector2 position, Vector2 size, Color color)
+
+# NOTE: We use raymath to get this functionality but it could be implemented in this module
+#static Matrix MatrixIdentity(void)
+#static Matrix MatrixOrtho(double left, double right, double bottom, double top, double near, double far)
+#static Matrix MatrixPerspective(double fovy, double aspect, double near, double far)
+#static Matrix MatrixLookAt(Vector3 eye, Vector3 target, Vector3 up)
+
+
+# GLFW3: Error callback
+@ffi.callback("void(int, const char *)")
+def ErrorCallback(error: int, description: bytes):
+ print("%r" % description, file=sys.stderr)
+
+
+# GLFW3: Keyboard callback
+@ffi.callback("void(GLFWwindow *, int, int, int, int)")
+def KeyCallback(window, key: int, scancode: int, action: int, mods: int):
+ if key == GLFW_KEY_ESCAPE and action == GLFW_PRESS:
+ rl.glfwSetWindowShouldClose(window, GLFW_TRUE)
+
+
+# Draw rectangle using rlgl OpenGL 1.1 style coding (translated to OpenGL 3.3 internally)
+def DrawRectangleV(position, size, color: Color):
+ rl.rlBegin(RL_TRIANGLES)
+ rl.rlColor4ub(color.r, color.g, color.b, color.a)
+ rl.rlVertex2f(position.x, position.y)
+ rl.rlVertex2f(position.x, position.y + size.y)
+ rl.rlVertex2f(position.x + size.x, position.y + size.y)
+ rl.rlVertex2f(position.x, position.y)
+ rl.rlVertex2f(position.x + size.x, position.y + size.y)
+ rl.rlVertex2f(position.x + size.x, position.y)
+ rl.rlEnd()
+
+
+# Draw a grid centered at (0, 0, 0)
+def DrawGrid(slices: int, spacing: float):
+ half_slices = slices // 2
+
+ rl.rlBegin(RL_LINES)
+ for i in range(half_slices * -1, half_slices+1):
+ if i == 0:
+ rl.rlColor3f(0.5, 0.5, 0.5)
+ rl.rlColor3f(0.5, 0.5, 0.5)
+ rl.rlColor3f(0.5, 0.5, 0.5)
+ rl.rlColor3f(0.5, 0.5, 0.5)
+ else:
+ rl.rlColor3f(0.75, 0.75, 0.75)
+ rl.rlColor3f(0.75, 0.75, 0.75)
+ rl.rlColor3f(0.75, 0.75, 0.75)
+ rl.rlColor3f(0.75, 0.75, 0.75)
+
+ rl.rlVertex3f(float(i)*spacing, 0.0, float(half_slices)*-1.0*spacing)
+ rl.rlVertex3f(float(i)*spacing, 0.0, float(half_slices)*spacing)
+
+ rl.rlVertex3f(float(half_slices)*-1.0*spacing, 0.0, float(i)*spacing)
+ rl.rlVertex3f(float(half_slices)*spacing, 0.0, float(i)*spacing)
+ rl.rlEnd()
+
+
+# Draw cube
+# NOTE: Cube position is the center position
+def DrawCube(position, width: float, height: float, length: float, color: Color):
+ x: float = 0.0
+ y: float = 0.0
+ z: float = 0.0
+
+ rl.rlPushMatrix()
+
+
+ # NOTE: Be careful! Function order matters (rotate -> scale -> translate)
+ rl.rlTranslatef(position.x, position.y, position.z)
+ #rlScalef(2.0f, 2.0f, 2.0f)
+ #rlRotatef(45, 0, 1, 0)
+
+ rl.rlBegin(RL_TRIANGLES)
+ rl.rlColor4ub(color.r, color.g, color.b, color.a)
+
+ # Front Face -----------------------------------------------------
+ rl.rlVertex3f(x-width/2, y-height/2, z+length/2) # Bottom Left
+ rl.rlVertex3f(x+width/2, y-height/2, z+length/2) # Bottom Right
+ rl.rlVertex3f(x-width/2, y+height/2, z+length/2) # Top Left
+
+ rl.rlVertex3f(x+width/2, y+height/2, z+length/2) # Top Right
+ rl.rlVertex3f(x-width/2, y+height/2, z+length/2) # Top Left
+ rl.rlVertex3f(x+width/2, y-height/2, z+length/2) # Bottom Right
+
+ # Back Face ------------------------------------------------------
+ rl.rlVertex3f(x-width/2, y-height/2, z-length/2) # Bottom Left
+ rl.rlVertex3f(x-width/2, y+height/2, z-length/2) # Top Left
+ rl.rlVertex3f(x+width/2, y-height/2, z-length/2) # Bottom Right
+
+ rl.rlVertex3f(x+width/2, y+height/2, z-length/2) # Top Right
+ rl.rlVertex3f(x+width/2, y-height/2, z-length/2) # Bottom Right
+ rl.rlVertex3f(x-width/2, y+height/2, z-length/2) # Top Left
+
+ # Top Face -------------------------------------------------------
+ rl.rlVertex3f(x-width/2, y+height/2, z-length/2) # Top Left
+ rl.rlVertex3f(x-width/2, y+height/2, z+length/2) # Bottom Left
+ rl.rlVertex3f(x+width/2, y+height/2, z+length/2) # Bottom Right
+
+ rl.rlVertex3f(x+width/2, y+height/2, z-length/2) # Top Right
+ rl.rlVertex3f(x-width/2, y+height/2, z-length/2) # Top Left
+ rl.rlVertex3f(x+width/2, y+height/2, z+length/2) # Bottom Right
+
+ # Bottom Face ----------------------------------------------------
+ rl.rlVertex3f(x-width/2, y-height/2, z-length/2) # Top Left
+ rl.rlVertex3f(x+width/2, y-height/2, z+length/2) # Bottom Right
+ rl.rlVertex3f(x-width/2, y-height/2, z+length/2) # Bottom Left
+
+ rl.rlVertex3f(x+width/2, y-height/2, z-length/2) # Top Right
+ rl.rlVertex3f(x+width/2, y-height/2, z+length/2) # Bottom Right
+ rl.rlVertex3f(x-width/2, y-height/2, z-length/2) # Top Left
+
+ # Right face -----------------------------------------------------
+ rl.rlVertex3f(x+width/2, y-height/2, z-length/2) # Bottom Right
+ rl.rlVertex3f(x+width/2, y+height/2, z-length/2) # Top Right
+ rl.rlVertex3f(x+width/2, y+height/2, z+length/2) # Top Left
+
+ rl.rlVertex3f(x+width/2, y-height/2, z+length/2) # Bottom Left
+ rl.rlVertex3f(x+width/2, y-height/2, z-length/2) # Bottom Right
+ rl.rlVertex3f(x+width/2, y+height/2, z+length/2) # Top Left
+
+ # Left Face ------------------------------------------------------
+ rl.rlVertex3f(x-width/2, y-height/2, z-length/2) # Bottom Right
+ rl.rlVertex3f(x-width/2, y+height/2, z+length/2) # Top Left
+ rl.rlVertex3f(x-width/2, y+height/2, z-length/2) # Top Right
+
+ rl.rlVertex3f(x-width/2, y-height/2, z+length/2) # Bottom Left
+ rl.rlVertex3f(x-width/2, y+height/2, z+length/2) # Top Left
+ rl.rlVertex3f(x-width/2, y-height/2, z-length/2) # Bottom Right
+ rl.rlEnd()
+ rl.rlPopMatrix()
+
+
+#Draw cube wires
+def DrawCubeWires(position, width: float, height: float, length: float, color: Color):
+ x: float = 0.0
+ y: float = 0.0
+ z: float = 0.0
+
+ rl.rlPushMatrix()
+
+ rl.rlTranslatef(position.x, position.y, position.z)
+ #rlRotatef(45, 0, 1, 0)
+
+ rl.rlBegin(RL_LINES)
+ rl.rlColor4ub(color.r, color.g, color.b, color.a)
+
+ # Front Face -----------------------------------------------------
+ # Bottom Line
+ rl.rlVertex3f(x-width/2, y-height/2, z+length/2) # Bottom Left
+ rl.rlVertex3f(x+width/2, y-height/2, z+length/2) # Bottom Right
+
+ # Left Line
+ rl.rlVertex3f(x+width/2, y-height/2, z+length/2) # Bottom Right
+ rl.rlVertex3f(x+width/2, y+height/2, z+length/2) # Top Right
+
+ # Top Line
+ rl.rlVertex3f(x+width/2, y+height/2, z+length/2) # Top Right
+ rl.rlVertex3f(x-width/2, y+height/2, z+length/2) # Top Left
+
+ # Right Line
+ rl.rlVertex3f(x-width/2, y+height/2, z+length/2) # Top Left
+ rl.rlVertex3f(x-width/2, y-height/2, z+length/2) # Bottom Left
+
+ # Back Face ------------------------------------------------------
+ # Bottom Line
+ rl.rlVertex3f(x-width/2, y-height/2, z-length/2) # Bottom Left
+ rl.rlVertex3f(x+width/2, y-height/2, z-length/2) # Bottom Right
+
+ # Left Line
+ rl.rlVertex3f(x+width/2, y-height/2, z-length/2) # Bottom Right
+ rl.rlVertex3f(x+width/2, y+height/2, z-length/2) # Top Right
+
+ # Top Line
+ rl.rlVertex3f(x+width/2, y+height/2, z-length/2) # Top Right
+ rl.rlVertex3f(x-width/2, y+height/2, z-length/2) # Top Left
+
+ # Right Line
+ rl.rlVertex3f(x-width/2, y+height/2, z-length/2) # Top Left
+ rl.rlVertex3f(x-width/2, y-height/2, z-length/2) # Bottom Left
+
+ # Top Face -------------------------------------------------------
+ # Left Line
+ rl.rlVertex3f(x-width/2, y+height/2, z+length/2) # Top Left Front
+ rl.rlVertex3f(x-width/2, y+height/2, z-length/2) # Top Left Back
+
+ # Right Line
+ rl.rlVertex3f(x+width/2, y+height/2, z+length/2) # Top Right Front
+ rl.rlVertex3f(x+width/2, y+height/2, z-length/2) # Top Right Back
+
+ # Bottom Face ---------------------------------------------------
+ # Left Line
+ rl.rlVertex3f(x-width/2, y-height/2, z+length/2) # Top Left Front
+ rl.rlVertex3f(x-width/2, y-height/2, z-length/2) # Top Left Back
+
+ # Right Line
+ rl.rlVertex3f(x+width/2, y-height/2, z+length/2) # Top Right Front
+ rl.rlVertex3f(x+width/2, y-height/2, z-length/2) # Top Right Back
+ rl.rlEnd()
+ rl.rlPopMatrix()
+
+
+
+# Initialization
+#--------------------------------------------------------------------------------------
+screenWidth: int = 800
+screenHeight: int = 450
+
+# GLFW3 Initialization + OpenGL 3.3 Context + Extensions
+#--------------------------------------------------------
+rl.glfwSetErrorCallback(ErrorCallback)
+
+if not rl.glfwInit():
+ print("GLFW3: Can not initialize GLFW")
+ exit(1)
+
+print("GLFW3: GLFW initialized successfully")
+
+rl.glfwWindowHint(GLFW_SAMPLES, 4)
+rl.glfwWindowHint(GLFW_DEPTH_BITS, 16)
+
+# WARNING: OpenGL 3.3 Core profile only
+rl.glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3)
+rl.glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3)
+rl.glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE)
+#glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE)
+#if defined(__APPLE__)
+rl.glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE)
+#endif
+
+window = rl.glfwCreateWindow(screenWidth, screenHeight, b"rlgl standalone", ffi.NULL, ffi.NULL)
+
+if not window:
+ print("Cannot create GLFW3 Window.")
+ rl.glfwTerminate()
+ exit(2)
+
+print("GLFW3: Window created successfully")
+
+rl.glfwSetWindowPos(window, 200, 200)
+
+rl.glfwSetKeyCallback(window, KeyCallback)
+
+rl.glfwMakeContextCurrent(window)
+rl.glfwSwapInterval(0)
+
+# Load OpenGL 3.3 supported extensions
+rl.rlLoadExtensions(ffi.addressof(rl, 'glfwGetProcAddress'))
+#--------------------------------------------------------
+
+# Initialize OpenGL context (states and resources)
+rl.rlglInit(screenWidth, screenHeight)
+
+# Initialize viewport and internal projection/modelview matrices
+rl.rlViewport(0, 0, screenWidth, screenHeight)
+rl.rlMatrixMode(RL_PROJECTION) # Switch to PROJECTION matrix
+rl.rlLoadIdentity() # Reset current matrix (PROJECTION)
+rl.rlOrtho(0, screenWidth, screenHeight, 0, 0.0, 1.0) # Orthographic projection with top-left corner at (0,0)
+rl.rlMatrixMode(RL_MODELVIEW) # Switch back to MODELVIEW matrix
+rl.rlLoadIdentity() # Reset current matrix (MODELVIEW)
+
+rl.rlClearColor(245, 245, 245, 255) # Define clear color
+rl.rlEnableDepthTest() # Enable DEPTH_TEST for 3D
+
+camera = Camera(
+ position = pyray.Vector3(5.0, 5.0, 5.0), # Camera position
+ target = pyray.Vector3(0.0, 0.0, 0.0), # Camera looking at point
+ up = pyray.Vector3(0.0, 1.0, 0.0), # Camera up vector (rotation towards target)
+ fovy = 45.0, # Camera field-of-view Y
+ projection=rl.CAMERA_PERSPECTIVE)
+
+cubePosition = pyray.Vector3(0.0, 0.0, 0.0) # Cube default position (center)
+#--------------------------------------------------------------------------------------
+
+RLGL_SET_MATRIX_MANUALLY = True
+
+# Main game loop
+while not rl.glfwWindowShouldClose(window):
+ # Update
+ #----------------------------------------------------------------------------------
+ #camera.position.x += 0.01f
+ #----------------------------------------------------------------------------------
+
+ # Draw
+ #----------------------------------------------------------------------------------
+ rl.rlClearScreenBuffers() # Clear current framebuffer
+
+ # Draw '3D' elements in the scene
+ #-----------------------------------------------
+ # Calculate projection matrix (from perspective) and view matrix from camera look at
+ matProj = rl.MatrixPerspective(camera.fovy*DEG2RAD, float(screenWidth)/float(screenHeight), 0.01, 1000.0)
+ matView = rl.MatrixLookAt(camera.position, camera.target, camera.up)
+
+ rl.rlSetMatrixModelview(matView) # Set internal modelview matrix (default shader)
+ rl.rlSetMatrixProjection(matProj) # Set internal projection matrix (default shader)
+
+ DrawCube(cubePosition, 2.0, 2.0, 2.0, Color(*RED))
+ DrawCubeWires(cubePosition, 2.0, 2.0, 2.0, Color(*RAYWHITE))
+ DrawGrid(10, 1.0)
+
+ # Draw internal render batch buffers (3D data)
+ rl.rlDrawRenderBatchActive()
+ #-----------------------------------------------
+
+ # Draw '2D' elements in the scene (GUI)
+ #-----------------------------------------------
+
+ if RLGL_SET_MATRIX_MANUALLY:
+ matProj = rl.MatrixOrtho(0.0, screenWidth, screenHeight, 0.0, 0.0, 1.0)
+ matView = rl.MatrixIdentity()
+ rl.rlSetMatrixModelview(matView) # Set internal modelview matrix (default shader)
+ rl.rlSetMatrixProjection(matProj) # Set internal projection matrix (default shader)
+ else: # Let rlgl generate and multiply matrix internally
+ rl.rlMatrixMode(RL_PROJECTION) # Enable internal projection matrix
+ rl.rlLoadIdentity() # Reset internal projection matrix
+ rl.rlOrtho(0.0, screenWidth, screenHeight, 0.0, 0.0, 1.0) # Recalculate internal projection matrix
+ rl.rlMatrixMode(RL_MODELVIEW) # Enable internal modelview matrix
+ rl.rlLoadIdentity() # Reset internal modelview matrix
+
+ DrawRectangleV(pyray.Vector2(10.0, 10.0), pyray.Vector2(780.0, 20.0), Color(*DARKGRAY))
+
+ # Draw internal render batch buffers (2D data)
+ rl.rlDrawRenderBatchActive()
+ #-----------------------------------------------
+
+ rl.glfwSwapBuffers(window)
+ rl.glfwPollEvents()
+ #----------------------------------------------------------------------------------
+
+# De-Initialization
+#--------------------------------------------------------------------------------------
+rl.rlglClose() # Unload rlgl internal buffers and default shader/texture
+
+rl.glfwDestroyWindow(window) # Close window
+rl.glfwTerminate() # Free GLFW3 resources
+#--------------------------------------------------------------------------------------
diff --git a/examples/physics/physac.py b/examples/physics/physac.py
new file mode 100644
index 0000000..1556f34
--- /dev/null
+++ b/examples/physics/physac.py
@@ -0,0 +1,88 @@
+"""
+raylib [physac] example - physics demo
+"""
+
+
+from raylib import *
+
+
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+SetConfigFlags(FLAG_MSAA_4X_HINT)
+InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, b'[physac] Basic demo')
+
+InitPhysics()
+
+floor = CreatePhysicsBodyRectangle((SCREEN_WIDTH/2, SCREEN_HEIGHT), 500, 100, 10)
+floor.enabled = False
+
+circle = CreatePhysicsBodyCircle((SCREEN_WIDTH/2, SCREEN_HEIGHT/2), 45, 10)
+circle.enabled = False
+
+SetTargetFPS(60)
+
+while not WindowShouldClose():
+ # Update
+ # ----------------------------------------------------------------------
+
+ if IsKeyPressed(KEY_R): # Reset physics system
+ ClosePhysics()
+ InitPhysics()
+
+ floor = CreatePhysicsBodyRectangle((SCREEN_WIDTH/2, SCREEN_HEIGHT), 500, 100, 10)
+ floor.enabled = False
+
+ circle = CreatePhysicsBodyCircle((SCREEN_WIDTH/2, SCREEN_HEIGHT/2), 45, 10)
+ circle.enabled = False
+
+ # Physics body creation inputs
+ if IsMouseButtonPressed(MOUSE_BUTTON_LEFT):
+ CreatePhysicsBodyPolygon(GetMousePosition(), GetRandomValue(20, 80), GetRandomValue(3, 8), 10)
+ elif IsMouseButtonPressed(MOUSE_BUTTON_RIGHT):
+ CreatePhysicsBodyCircle(GetMousePosition(), GetRandomValue(10, 45), 10)
+
+ # Destroy falling physics bodies
+ bodies_count = GetPhysicsBodiesCount()
+ for i in reversed(range(bodies_count)):
+ body = GetPhysicsBody(i)
+
+ if body and body.position.y > SCREEN_HEIGHT * 2:
+ DestroyPhysicsBody(body)
+ # ----------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------
+ BeginDrawing()
+
+ ClearBackground(BLACK)
+ DrawFPS(SCREEN_WIDTH - 90, SCREEN_HEIGHT - 30)
+
+ # Draw created physics bodies
+ bodies_count = GetPhysicsBodiesCount()
+ for i in range(bodies_count):
+ body = GetPhysicsBody(i)
+
+ if body:
+ vertex_count = GetPhysicsShapeVerticesCount(i)
+ for j in range(vertex_count):
+ # Get physics bodies shape vertices to draw lines
+ # Note: GetPhysicsShapeVertex() already calculates rotation transformations
+ vertexA = GetPhysicsShapeVertex(body, j)
+
+ # Get next vertex or first to close the shape
+ jj = (j + 1) if (j+1) < vertex_count else 0
+ vertexB = GetPhysicsShapeVertex(body, jj)
+
+ # Draw a line between two vertex positions
+ DrawLineV(vertexA, vertexB, GREEN)
+
+ DrawText(b'Left mouse button to create a polygon', 10, 10, 10, WHITE)
+ DrawText(b'Right mouse button to create a circle', 10, 25, 10, WHITE)
+ DrawText(b"Press 'R' to reset example", 10, 40, 10, WHITE)
+
+ EndDrawing()
+ # ----------------------------------------------------------------------
+
+ClosePhysics()
+CloseWindow()
diff --git a/examples/shaders/fog.py b/examples/shaders/fog.py
deleted file mode 100644
index 3cc18b1..0000000
--- a/examples/shaders/fog.py
+++ /dev/null
@@ -1,94 +0,0 @@
-"""
-Example converted to Python from:
-http://bedroomcoders.co.uk/raylib-fog/
-"""
-
-from raylib.dynamic import raylib as rl, ffi
-from raylib.colors import *
-
-rl.SetConfigFlags(rl.FLAG_MSAA_4X_HINT | rl.FLAG_WINDOW_RESIZABLE)
-rl.InitWindow(1280, 768, b'Fog Test')
-
-camera = ffi.new('struct Camera3D *', [
- [2, 2, 6],
- [0, 5, 0],
- [0, 1, 0],
- 45,
- rl.CAMERA_PERSPECTIVE
-])
-
-model = rl.LoadModelFromMesh(rl.GenMeshTorus(0.4, 1, 16, 32))
-model2 = rl.LoadModelFromMesh(rl.GenMeshCube(1, 1, 1))
-model3 = rl.LoadModelFromMesh(rl.GenMeshSphere(0.5, 32, 32))
-
-texture = rl.LoadTexture(b'resources/test.png')
-
-model.materials[0].maps[rl.MAP_DIFFUSE].texture = texture
-model2.materials[0].maps[rl.MAP_DIFFUSE].texture = texture
-model3.materials[0].maps[rl.MAP_DIFFUSE].texture = texture
-
-shader = rl.LoadShader(b'resources/shaders/fogLight.vs', b'resources/shaders/fogLight.fs')
-shader.locs[rl.LOC_MATRIX_MODEL] = rl.GetShaderLocation(shader, b'matModel')
-shader.locs[rl.LOC_VECTOR_VIEW] = rl.GetShaderLocation(shader, b'viewPos')
-
-amb = rl.GetShaderLocation(shader, b'ambient')
-rl.SetShaderValue(shader, amb, ffi.new('float[]', [0.2, 0.2, 0.2, 1.0]), rl.UNIFORM_VEC4)
-
-fog_color = [0.2, 0.2, 1.0, 1.0]
-fogC = rl.GetShaderLocation(shader, b'fogColor')
-rl.SetShaderValue(shader, fogC, ffi.new('float[]', fog_color), rl.UNIFORM_VEC4)
-
-fogD = rl.GetShaderLocation(shader, b'FogDensity')
-fogDensity = 0.12
-rl.SetShaderValue(shader, fogD, ffi.new('float[]', [fogDensity]), rl.UNIFORM_FLOAT)
-
-
-model.materials[0].shader = shader
-model2.materials[0].shader = shader
-model3.materials[0].shader = shader
-
-rl.SetCameraMode(camera[0], rl.CAMERA_ORBITAL)
-rl.SetTargetFPS(60)
-
-while not rl.WindowShouldClose():
- rl.UpdateCamera(camera)
-
- if rl.IsKeyDown(rl.KEY_UP):
- fogDensity = min(fogDensity + 0.001, 1)
-
- if rl.IsKeyDown(rl.KEY_DOWN):
- fogDensity = max(fogDensity - 0.001, 0)
-
- rl.SetShaderValue(shader, fogD, ffi.new('float[]', [fogDensity]), rl.UNIFORM_FLOAT)
-
- rl.SetShaderValue(shader, shader.locs[rl.LOC_VECTOR_VIEW], ffi.new('float[]', [camera.position.x]), rl.UNIFORM_VEC3)
-
- rl.BeginDrawing()
-
- rl.ClearBackground([int(255 * i) for i in fog_color])
-
- rl.BeginMode3D(camera[0])
- rl.DrawModel(model, [0] * 3, 1, WHITE)
- rl.DrawModel(model2, [-2.6, 0, 0], 1, WHITE)
- rl.DrawModel(model3, [ 2.6, 0, 0], 1, WHITE)
-
- for i in range(-20, 20, 2):
- rl.DrawModel(model, [i, 0, 2], 1, WHITE)
-
-
- rl.DrawGizmo([1000, 1000, 1000])
-
- rl.EndMode3D()
-
- rl.DrawFPS(10, 10)
- rl.DrawText(f'Up/Down to change fog density: {fogDensity}'.encode('utf-8'), 10, 30, 20, WHITE)
-
- rl.EndDrawing()
-
-
-rl.CloseWindow()
-rl.UnloadModel(model)
-rl.UnloadModel(model2)
-rl.UnloadModel(model3)
-rl.UnloadTexture(texture)
-rl.UnloadShader(shader)
diff --git a/examples/shaders/light_system.py b/examples/shaders/light_system.py
new file mode 100644
index 0000000..f07e483
--- /dev/null
+++ b/examples/shaders/light_system.py
@@ -0,0 +1,99 @@
+import raylib as rl
+
+
+class LightSystem:
+ MAX_LIGHTS = 4 #// Max dynamic lights supported by shader
+ lightsCount = 0
+ lights: list['Light'] = []
+
+ def __init__(self, ambient = [ 0.2, 0.2, 0.2, 1.0 ], *ls):
+ self.shader = rl.LoadShader(b"resources/shaders/fogLight.vs",
+ b"resources/shaders/fogLight.fs");
+
+ #// Get some shader loactions
+ self.shader.locs[rl.SHADER_LOC_MATRIX_MODEL] = rl.GetShaderLocation(self.shader, b"matModel")
+ self.shader.locs[rl.SHADER_LOC_VECTOR_VIEW] = rl.GetShaderLocation(self.shader, b"viewPos")
+
+ #// ambient light level
+ self.ambientLoc = rl.GetShaderLocation(self.shader, b"ambient")
+ v = rl.ffi.new("struct Vector4 *", ambient)
+ rl.SetShaderValue(self.shader, self.ambientLoc, v, rl.SHADER_UNIFORM_VEC4)
+
+ for light in ls:
+ self.add(light)
+
+ def add(self, light):
+ light.configure(len(self.lights), self.shader)
+ self.lights.append(light)
+ if len(self.lights) > self.MAX_LIGHTS:
+ raise Exception("Too many lights")
+
+ def update(self, cameraPos):
+ rl.SetShaderValue(self.shader, self.shader.locs[rl.SHADER_LOC_VECTOR_VIEW], rl.ffi.new("struct Vector3 *",cameraPos), rl.SHADER_UNIFORM_VEC3)
+ for light in self.lights:
+ light.UpdateLightValues()
+
+ def draw(self):
+ for light in self.lights:
+ if light.enabled:
+ rl.DrawSphereEx(light.position[0], 0.2, 8, 8, light.color)
+
+
+
+
+LIGHT_DIRECTIONAL=0
+LIGHT_POINT=1
+
+
+class Light:
+ def __init__(self, type, position, target, color):
+ self.enabled = True
+ self.type = type
+ self.position = rl.ffi.new("struct Vector3 *",position)
+ self.target = target
+ self.color = color
+
+
+
+
+ def configure(self, id, shader):
+ self.shader = shader
+ #// TODO: Below code doesn't look good to me,
+ #// it assumes a specific shader naming and structure
+ #// Probably this implementation could be improved
+ self.enabledName = f"lights[{id}].enabled"
+ self.typeName = f"lights[{id}].type"
+ self.posName = f"lights[{id}].position"
+ self.targetName = f"lights[{id}].target"
+ self.colorName = f"lights[{id}].color"
+
+ self.enabledLoc = rl.GetShaderLocation(shader, self.enabledName.encode('utf-8'))
+ self.typeLoc = rl.GetShaderLocation(shader, self.typeName.encode('utf-8'))
+ self.posLoc = rl.GetShaderLocation(shader, self.posName.encode('utf-8'))
+ self.targetLoc = rl.GetShaderLocation(shader, self.targetName.encode('utf-8'))
+ self.colorLoc = rl.GetShaderLocation(shader, self.colorName.encode('utf-8'))
+
+ self.UpdateLightValues()
+
+
+ #// Send light properties to shader
+ #// NOTE: Light shader locations should be available
+ def UpdateLightValues(self):
+ #// Send to shader light enabled state and type
+ rl.SetShaderValue(self.shader, self.enabledLoc, rl.ffi.new("int *",self.enabled), rl.SHADER_UNIFORM_INT)
+ rl.SetShaderValue(self.shader, self.typeLoc, rl.ffi.new("int *",self.type), rl.SHADER_UNIFORM_INT)
+
+ #// Send to shader light position values
+ position = [ self.position.x, self.position.y, self.position.z]
+ rl.SetShaderValue(self.shader, self.posLoc, rl.ffi.new("struct Vector3 *",position), rl.SHADER_UNIFORM_VEC3)
+
+ #// Send to shader light target position values
+ target =[ self.target.x, self.target.y, self.target.z ]
+ rl.SetShaderValue(self.shader, self.targetLoc, rl.ffi.new("struct Vector3 *",target), rl.SHADER_UNIFORM_VEC3)
+
+ #// Send to shader light color values
+ color = [self.color[0]/255.0, self.color[1]/255.0, self.color[2]/255.0, self.color[3]/255.0]
+ rl.SetShaderValue(self.shader, self.colorLoc, rl.ffi.new("struct Vector4 *",color), rl.SHADER_UNIFORM_VEC4)
+
+
+
diff --git a/examples/shaders/resources/shaders/fogLight.fs b/examples/shaders/resources/shaders/fogLight.fs
index 652143c..3841329 100644
--- a/examples/shaders/resources/shaders/fogLight.fs
+++ b/examples/shaders/resources/shaders/fogLight.fs
@@ -78,6 +78,7 @@ void main()
// gamma
finalColor = pow(finalColor, vec4(1.0/2.2));
+
float dist = length(viewPos - fragPosition) ;
float fogFactor = 1.0 / exp( (dist * FogDensity) * (dist * FogDensity));
@@ -88,4 +89,5 @@ void main()
fogFactor = clamp( fogFactor, 0.0, 1.0 );
finalColor = mix(fogColor, finalColor, fogFactor);
+
}
diff --git a/examples/shaders/resources/shaders/glsl330/write_depth.fs b/examples/shaders/resources/shaders/glsl330/write_depth.fs
new file mode 100644
index 0000000..f0e07be
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl330/write_depth.fs
@@ -0,0 +1,20 @@
+#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;
+
+void main()
+{
+ vec4 texelColor = texture(texture0, fragTexCoord);
+
+ finalColor = texelColor*colDiffuse*fragColor;
+ gl_FragDepth = 1.0 - finalColor.z;
+}
diff --git a/examples/shaders/rlmath.py b/examples/shaders/rlmath.py
new file mode 100644
index 0000000..f10ca65
--- /dev/null
+++ b/examples/shaders/rlmath.py
@@ -0,0 +1,96 @@
+# just a few functions from raymath
+
+import raylib as rl
+import math
+
+
+PI = 3.14159265358979323846
+DEG2RAD = (PI/180.0)
+RAD2DEG = (180.0/PI)
+
+def Clamp(value: float, minv: float, maxv: float):
+ #res = value < minv ? minv : value
+ res = minv if value < minv else value
+ #return res > maxv ? maxv : res
+ return maxv if res > maxv else res
+
+def Lerp(start: float, end: float, amount: float):
+ return start + amount*(end - start)
+
+
+def Vector2Zero():
+ return ffi.new("struct Vector2 *",[ 0, 0])
+
+
+def Vector3Zero():
+ return rl.ffi.new("struct Vector3 *",[ 0, 0, 0])
+
+def MatrixRotateX(angle):
+ result = MatrixIdentity();
+
+ cosres = math.cos(angle);
+ sinres = math.sin(angle);
+
+ result.m5 = cosres;
+ result.m6 = -sinres;
+ result.m9 = sinres;
+ result.m10 = cosres;
+
+ return result;
+
+
+
+def MatrixRotateY(angle):
+ result = MatrixIdentity()
+
+ cosres = math.cos(angle);
+ sinres = math.sin(angle);
+
+ result.m0 = cosres;
+ result.m2 = sinres;
+ result.m8 = -sinres;
+ result.m10 = cosres;
+
+ return result;
+
+
+def MatrixIdentity():
+ result = rl.ffi.new("struct Matrix *",[ 1.0, 0.0, 0.0, 0.0,0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ])
+ return result
+
+
+
+def MatrixRotateZ(angle):
+ result = MatrixIdentity();
+
+ cosres = math.cos(angle);
+ sinres = math.sin(angle);
+
+ result.m0 = cosres;
+ result.m1 = -sinres;
+ result.m4 = sinres;
+ result.m5 = cosres;
+
+ return result
+
+
+def MatrixMultiply(left, right):
+ result = rl.ffi.new("struct Matrix *")
+ 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
diff --git a/examples/shaders/shaders_basic_lighting.py b/examples/shaders/shaders_basic_lighting.py
old mode 100644
new mode 100755
index 7bcffcd..101c345
--- a/examples/shaders/shaders_basic_lighting.py
+++ b/examples/shaders/shaders_basic_lighting.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
# /*******************************************************************************************
# *
# * raylib [shaders] example - basic lighting
@@ -23,323 +24,151 @@
# *
# * Copyright (c) 2019 Chris Camacho (@codifies) and Ramon Santamaria (@raysan5)
# *
+# *
# ********************************************************************************************/
-from raylib.static import *
+
+import raylib as rl
+
+from raylib.colors import *
from dataclasses import dataclass
from enum import Enum
from typing import Any
import math
+# a few functions ported from raymath
+from rlmath import *
+# lighting system
+from light_system import *
+# Initialization
+# --------------------------------------------------------------------------------------
+screenWidth = 1200
+screenHeight = 720
-def MatrixRotateX(angle):
- result = MatrixIdentity();
+rl.SetConfigFlags(
+ rl.FLAG_MSAA_4X_HINT | rl.FLAG_WINDOW_RESIZABLE) # Enable Multi Sampling Anti Aliasing 4x (if available)
+rl.InitWindow(screenWidth, screenHeight, b"raylib [shaders] example - basic lighting")
- cosres = math.cos(angle);
- sinres = math.sin(angle);
+camera = rl.ffi.new('struct Camera3D *', [
+ [2, 2, 6],
+ [0, .5, 0],
+ [0, 1, 0],
+ 45,
+ rl.CAMERA_PERSPECTIVE
+])
- result.m5 = cosres;
- result.m6 = -sinres;
- result.m9 = sinres;
- result.m10 = cosres;
+# Load models
+modelA = rl.LoadModelFromMesh(rl.GenMeshTorus(0.4, 1.0, 16, 32))
+modelB = rl.LoadModelFromMesh(rl.GenMeshCube(1.0, 1.0, 1.0))
+modelC = rl.LoadModelFromMesh(rl.GenMeshSphere(0.5, 32, 32))
- return result;
+# Load models texture
+texture = rl.LoadTexture(b"resources/texel_checker.png")
+# Assign texture to default model material
+modelA.materials[0].maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
+modelB.materials[0].maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
+modelC.materials[0].maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
+angle = 6.282
-def MatrixRotateY(angle):
- result = MatrixIdentity()
+# Using 4 point lights, white, red, green and blue
- cosres = math.cos(angle);
- sinres = math.sin(angle);
+lights0 = Light(LIGHT_POINT, [4, 2, 4], Vector3Zero(), WHITE)
+lights1 = Light(LIGHT_POINT, [4, 2, 4], Vector3Zero(), RED)
+lights2 = Light(LIGHT_POINT, [0, 4, 2], Vector3Zero(), GREEN)
+lights3 = Light(LIGHT_POINT, [0, 4, 2], Vector3Zero(), BLUE)
- result.m0 = cosres;
- result.m2 = sinres;
- result.m8 = -sinres;
- result.m10 = cosres;
+lightSystem = LightSystem([0.2, 0.2, 0.2, 1.0], lights0, lights1, lights2, lights3)
+fogD = rl.GetShaderLocation(lightSystem.shader, b'FogDensity')
+fogDensity = 0.0
- return result;
-
-
-def MatrixIdentity():
- result = ffi.new("struct Matrix *",[ 1.0, 0.0, 0.0, 0.0,0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ])
- return result
-
-
-
-def MatrixRotateZ(angle):
- result = MatrixIdentity();
-
- cosres = math.cos(angle);
- sinres = math.sin(angle);
-
- result.m0 = cosres;
- result.m1 = -sinres;
- result.m4 = sinres;
- result.m5 = cosres;
-
- return result
-
-
-def MatrixMultiply(left, right):
- result = ffi.new("struct Matrix *")
- 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
-
-
-#//----------------------------------------------------------------------------------
-#// Types and Structures Definition
-#//----------------------------------------------------------------------------------
-
-class LightSystem:
- MAX_LIGHTS = 4 #// Max dynamic lights supported by shader
- lightsCount = 0
- lights = []
-
- def __init__(self, ambient = [ 0.2, 0.2, 0.2, 1.0 ], *ls):
- self.shader = LoadShader(b"resources/shaders/glsl330/basic_lighting.vs",
- b"resources/shaders/glsl330/basic_lighting.fs");
-
- #// Get some shader loactions
- self.shader.locs[LOC_MATRIX_MODEL] = GetShaderLocation(self.shader, b"matModel");
- self.shader.locs[LOC_VECTOR_VIEW] = GetShaderLocation(self.shader, b"viewPos");
-
- #// ambient light level
- self.ambientLoc = GetShaderLocation(self.shader, b"ambient");
- v = ffi.new("struct Vector4 *", ambient)
- SetShaderValue(self.shader, self.ambientLoc, v, UNIFORM_VEC4);
-
- for light in ls:
- self.add(light)
-
- def add(self, light):
- light.configure(len(self.lights), self.shader)
- self.lights.append(light)
- if len(self.lights) > self.MAX_LIGHTS:
- raise Exception("Too many lights")
-
- def update(self, cameraPos):
- SetShaderValue(self.shader, self.shader.locs[LOC_VECTOR_VIEW], ffi.new("struct Vector3 *",cameraPos), UNIFORM_VEC3)
- for light in self.lights:
- light.UpdateLightValues()
-
- def draw(self):
- for light in self.lights:
- if light.enabled:
- DrawSphereEx(light.position[0], 0.2, 8, 8, light.color)
-
-
-
-
-LIGHT_DIRECTIONAL=0
-LIGHT_POINT=1
-
-
-class Light:
- def __init__(self, type, position, target, color):
- self.enabled = True
- self.type = type
- self.position = ffi.new("struct Vector3 *",position)
- self.target = target
- self.color = color
-
-
-
-
- def configure(self, id, shader):
- self.shader = shader
- #// TODO: Below code doesn't look good to me,
- # // it assumes a specific shader naming and structure
- # // Probably this implementation could be improved
- self.enabledName = f"lights[{id}].enabled"
- self.typeName = f"lights[{id}].type"
- self.posName = f"lights[{id}].position"
- self.targetName = f"lights[{id}].target"
- self.colorName = f"lights[{id}].color"
-
- self.enabledLoc = GetShaderLocation(shader, self.enabledName.encode('utf-8'))
- self.typeLoc = GetShaderLocation(shader, self.typeName.encode('utf-8'))
- self.posLoc = GetShaderLocation(shader, self.posName.encode('utf-8'))
- self.targetLoc = GetShaderLocation(shader, self.targetName.encode('utf-8'))
- self.colorLoc = GetShaderLocation(shader, self.colorName.encode('utf-8'))
-
- self.UpdateLightValues()
-
-
- #// Send light properties to shader
- #// NOTE: Light shader locations should be available
- def UpdateLightValues(self):
- #// Send to shader light enabled state and type
- SetShaderValue(self.shader, self.enabledLoc, ffi.new("int *",self.enabled), UNIFORM_INT)
- SetShaderValue(self.shader, self.typeLoc, ffi.new("int *",self.type), UNIFORM_INT)
-
- #// Send to shader light position values
- position = [ self.position.x, self.position.y, self.position.z]
- SetShaderValue(self.shader, self.posLoc, ffi.new("struct Vector3 *",position), UNIFORM_VEC3)
-
- #// Send to shader light target position values
- target =[ self.target.x, self.target.y, self.target.z ]
- SetShaderValue(self.shader, self.targetLoc, ffi.new("struct Vector3 *",target), UNIFORM_VEC3)
-
- #// Send to shader light color values
- color = [self.color[0]/255.0, self.color[1]/255.0, self.color[2]/255.0, self.color[3]/255.0]
- SetShaderValue(self.shader, self.colorLoc, ffi.new("struct Vector4 *",color), UNIFORM_VEC4)
-
-
-
-def Vector3Zero():
- return ffi.new("struct Vector3 *",[ 0, 0, 0])
-
-#// Initialization
-#//--------------------------------------------------------------------------------------
-screenWidth = 800;
-screenHeight = 450;
-
-SetConfigFlags(FLAG_MSAA_4X_HINT); # Enable Multi Sampling Anti Aliasing 4x (if available)
-InitWindow(screenWidth, screenHeight, b"raylib [shaders] example - basic lighting")
-
-#// Define the camera to look into our 3d world
-cameraPtr = ffi.new("struct Camera3D *")
-camera = cameraPtr[0]
-camera.position = [ 2.0, 2.0, 6.0 ] # // Camera position
-camera.target = [ 0.0, 0.5, 0.0]# // Camera looking at point
-camera.up = [ 0.0, 1.0, 0.0]# // Camera up vector (rotation towards target)
-camera.fovy = 45.0 # // Camera field-of-view Y
-camera.type = CAMERA_PERSPECTIVE # // Camera mode type
-
- #// Load models
-modelA = LoadModelFromMesh(GenMeshTorus(0.4, 1.0, 16, 32))
-modelB = LoadModelFromMesh(GenMeshCube(1.0, 1.0, 1.0))
-modelC = LoadModelFromMesh(GenMeshSphere(0.5, 32, 32))
-
-#// Load models texture
-texture = LoadTexture(b"resources/texel_checker.png")
-
-#// Assign texture to default model material
-modelA.materials[0].maps[MAP_DIFFUSE].texture = texture
-modelB.materials[0].maps[MAP_DIFFUSE].texture = texture
-modelC.materials[0].maps[MAP_DIFFUSE].texture = texture
-
-
-
-
-
-angle = 6.282;
-
-
-#// Using 4 point lights, white, red, green and blue
-
-#lights[0] = Light(LIGHT_POINT, ffi.new("struct Vector3 *",[ 400, 400, 400 ]), Vector3Zero(), WHITE, shader)
-lights0 = Light(LIGHT_POINT, [ 4, 2, 4 ], Vector3Zero(), WHITE)
-lights1 = Light(LIGHT_POINT, [4, 2, 4 ], Vector3Zero(), RED)
-lights2 = Light(LIGHT_POINT, [ 0, 4, 2 ], Vector3Zero(), GREEN)
-lights3 = Light(LIGHT_POINT, [ 0, 4, 2 ], Vector3Zero(), BLUE)
-
-lightSystem = LightSystem([ 0.2, 0.2, 0.2, 1.0 ], lights0, lights1, lights2, lights3)
-
-#// All models use the same shader
+# All models use the same shader - which lights them
modelA.materials[0].shader = lightSystem.shader
modelB.materials[0].shader = lightSystem.shader
modelC.materials[0].shader = lightSystem.shader
+rl.SetTargetFPS(60) # // Set our game to run at 60 frames-per-second
+# --------------------------------------------------------------------------------------
-SetCameraMode(camera, CAMERA_ORBITAL) #// Set an orbital camera mode
+# Main game loop
+while not rl.WindowShouldClose(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ if rl.IsKeyPressed(rl.KEY_W): lights0.enabled = not lights0.enabled
+ if rl.IsKeyPressed(rl.KEY_R): lights1.enabled = not lights1.enabled
+ if rl.IsKeyPressed(rl.KEY_G): lights2.enabled = not lights2.enabled
+ if rl.IsKeyPressed(rl.KEY_B): lights3.enabled = not lights3.enabled
-SetTargetFPS(60) # // Set our game to run at 60 frames-per-second
-#//--------------------------------------------------------------------------------------
+ rl.UpdateCamera(camera, rl.CAMERA_ORBITAL) # Update camera
-#// Main game loop
-while not WindowShouldClose(): #// Detect window close button or ESC key
- #// Update
- #//----------------------------------------------------------------------------------
- if IsKeyPressed(KEY_W): lights0.enabled = not lights0.enabled
- if IsKeyPressed(KEY_R): lights1.enabled = not lights1.enabled
- if IsKeyPressed(KEY_G): lights2.enabled = not lights2.enabled
- if IsKeyPressed(KEY_B): lights3.enabled = not lights3.enabled
-
- UpdateCamera(cameraPtr); #// Update camera
-
- #// Make the lights do differing orbits
+ # Make the lights do differing orbits
angle -= 0.02
- lights0.position.x = math.cos(angle)*4.0
- lights0.position.z = math.sin(angle)*4.0
- lights1.position.x = math.cos(-angle*0.6)*4.0
- lights1.position.z = math.sin(-angle*0.6)*4.0
- lights2.position.y = math.cos(angle*0.2)*4.0
- lights2.position.z = math.sin(angle*0.2)*4.0
- lights3.position.y = math.cos(-angle*0.35)*4.0
- lights3.position.z = math.sin(-angle*0.35)*4.0
+ lights0.position.x = math.cos(angle) * 4.0
+ lights0.position.z = math.sin(angle) * 4.0
+ lights1.position.x = math.cos(-angle * 0.6) * 4.0
+ lights1.position.z = math.sin(-angle * 0.6) * 4.0
+ lights2.position.y = math.cos(angle * 0.2) * 4.0
+ lights2.position.z = math.sin(angle * 0.2) * 4.0
+ lights3.position.y = math.cos(-angle * 0.35) * 4.0
+ lights3.position.z = math.sin(-angle * 0.35) * 4.0
- #// Update the light shader with the camera view position
+ # Update the light shader with the camera view position
lightSystem.update(camera.position)
+ # ffi.cast('wchar_t', x)
+ # modelA.transform = ffi.cast('Matrix *', MatrixRotateY(angle*1.7))[0]
+ # modelA.transform = MatrixRotateY(angle*1.7)
+ # Rotate the torus
+ # modelA.transform = MatrixMultiply(modelA.transform, MatrixRotateX(-0.025)[0])[0]
+ # modelA.transform = MatrixMultiply(modelA.transform, MatrixRotateZ(0.012)[0])[0]
+ modelA.transform = rl.ffi.cast('Matrix *', MatrixMultiply(modelA.transform, MatrixRotateX(-0.025)))[0]
+ modelA.transform = rl.ffi.cast('Matrix *', MatrixMultiply(modelA.transform, MatrixRotateZ(0.012)))[0]
+ if (rl.IsKeyPressed(rl.KEY_F)):
+ rl.ToggleFullscreen()
- #// Rotate the torus
+ # ----------------------------------------------------------------------------------
- modelA.transform = MatrixMultiply(modelA.transform, MatrixRotateX(-0.025))[0]
- modelA.transform = MatrixMultiply(modelA.transform, MatrixRotateZ(0.012))[0]
+ # Draw
+ # ----------------------------------------------------------------------------------
+ rl.BeginDrawing()
+ rl.ClearBackground(RAYWHITE)
+ rl.BeginMode3D(camera[0])
+ # Draw the three models
+ rl.DrawModel(modelA, [0, 0, 0], 1.0, WHITE)
+ rl.DrawModel(modelB, [-1.6, 0, 0], 1.0, WHITE)
+ rl.DrawModel(modelC, [1.6, 0, 0], 1.0, WHITE)
- #//----------------------------------------------------------------------------------
-
- #// Draw
- #//----------------------------------------------------------------------------------
- BeginDrawing()
-
- ClearBackground(RAYWHITE)
-
- BeginMode3D(camera)
-
- #// Draw the three models
- DrawModel(modelA, [0,0,0], 1.0, WHITE)
- DrawModel(modelB, [-1.6,0,0], 1.0, WHITE)
- DrawModel(modelC, [ 1.6,0,0], 1.0, WHITE)
-
- #// Draw markers to show where the lights are
+ # Draw markers to show where the lights are
lightSystem.draw()
+ rl.DrawGrid(10, 1.0)
- DrawGrid(10, 1.0)
+ rl.EndMode3D()
- EndMode3D()
+ rl.DrawFPS(10, 10)
- DrawFPS(10, 10)
+ rl.DrawText(b"Keys RGB & W toggle lights", 10, 30, 20, DARKGRAY)
- DrawText(b"Keys RGB & W toggle lights", 10, 30, 20, DARKGRAY)
-
- EndDrawing()
-#//----------------------------------------------------------------------------------
+ rl.EndDrawing()
+# ----------------------------------------------------------------------------------
-#// De-Initialization
-#//--------------------------------------------------------------------------------------
-UnloadModel(modelA) # // Unload the modelA
-UnloadModel(modelB) # // Unload the modelB
-UnloadModel(modelC) # // Unload the modelC
+# De-Initialization
+# --------------------------------------------------------------------------------------
+rl.UnloadModel(modelA) # Unload the modelA
+rl.UnloadModel(modelB) # Unload the modelB
+rl.UnloadModel(modelC) # Unload the modelC
-UnloadTexture(texture) #// Unload the texture
-UnloadShader(shader) #// Unload shader
+rl.UnloadTexture(texture) # Unload the texture
-CloseWindow(); #// Close window and OpenGL context
+rl.UnloadShader(lightSystem.shader)
+
+rl.CloseWindow() # Close window and OpenGL context
diff --git a/examples/shaders/shaders_custom_uniform.py b/examples/shaders/shaders_custom_uniform.py
new file mode 100755
index 0000000..cf90cd9
--- /dev/null
+++ b/examples/shaders/shaders_custom_uniform.py
@@ -0,0 +1,125 @@
+# /*******************************************************************************************
+# *
+# * raylib [shaders] example - custom uniform
+# *
+# * NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support,
+# * OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version.
+# *
+# * NOTE: Shaders used in this example are #version 330 (OpenGL 3.3).
+# *
+# * This example has been created using raylib 2.5 (www.raylib.com)
+# * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+# *
+# * Example contributed by Chris Camacho (@codifies) and reviewed by Ramon Santamaria (@raysan5)
+# *
+# * Chris Camacho (@codifies - http://bedroomcoders.co.uk/) notes:
+# *
+# * This is based on the PBR lighting example, but greatly simplified to aid learning...
+# * actually there is very little of the PBR example left!
+# * When I first looked at the bewildering complexity of the PBR example I feared
+# * I would never understand how I could do simple lighting with raylib however its
+# * a testement to the authors of raylib (including rlights.h) that the example
+# * came together fairly quickly.
+# *
+# * Copyright (c) 2019 Chris Camacho (@codifies) and Ramon Santamaria (@raysan5)
+# *
+# *
+# ********************************************************************************************/
+
+
+import raylib as rl
+from raylib.colors import *
+import math
+
+# a few functions ported from raymath
+from rlmath import *
+
+
+#// Initialization
+#//--------------------------------------------------------------------------------------
+screenWidth = 800;
+screenHeight = 450;
+
+rl.SetConfigFlags(rl.FLAG_MSAA_4X_HINT| rl.FLAG_WINDOW_RESIZABLE); # Enable Multi Sampling Anti Aliasing 4x (if available)
+rl.InitWindow(screenWidth, screenHeight, b"raylib [shaders] example - custom uniform")
+
+camera = rl.ffi.new('struct Camera3D *', [
+ [2, 12, 6],
+ [0, .5, 0],
+ [0, 1, 0],
+ 45,
+ rl.CAMERA_PERSPECTIVE
+])
+
+model = rl.LoadModel(b"resources/models/barracks.obj") # // Load OBJ model
+texture = rl.LoadTexture(b"resources/models/barracks_diffuse.png") # // Load model texture (diffuse map)
+
+#// Assign texture to default model material
+model.materials[0].maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
+#// NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader
+shader = rl.LoadShader(b"", b"resources/shaders/glsl330/swirl.fs")
+swirlCenterLoc = rl.GetShaderLocation(shader, b"center")
+angle = 6.282;
+
+
+
+swirl = rl.ffi.new("struct Vector2 *", [0,0])
+
+target = rl.LoadRenderTexture(screenWidth, screenHeight)
+
+rl.SetTargetFPS(60) # // Set our game to run at 60 frames-per-second
+#//--------------------------------------------------------------------------------------
+
+#// Main game loop
+while not rl.WindowShouldClose(): #// Detect window close button or ESC key
+ #// Update
+ #//----------------------------------------------------------------------------------
+
+ angle -= 0.002
+ camera.position.x = math.sin(angle) * 30.0
+ camera.position.z = math.cos(angle) * 30.0
+ rl.UpdateCamera(camera, rl.CAMERA_PERSPECTIVE) #// Update camera
+
+ swirl.x = rl.GetMouseX()
+ swirl.y = screenHeight - rl.GetMouseY()
+ rl.SetShaderValue(shader, swirlCenterLoc, swirl, rl.SHADER_UNIFORM_VEC2);
+ #//----------------------------------------------------------------------------------
+
+ #// Draw
+ #//----------------------------------------------------------------------------------
+ rl.BeginDrawing()
+
+
+ rl.BeginTextureMode(target)
+ rl.ClearBackground(RAYWHITE)
+ rl.BeginMode3D(camera[0])
+
+ #// Draw the three models
+ rl.DrawModel(model, [0,0,0], 1.0, WHITE)
+
+ rl.DrawGrid(10, 1.0)
+
+ rl.EndTextureMode()
+ rl.EndMode3D()
+
+ rl.BeginShaderMode(shader)
+ #// NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom)
+ rl.DrawTextureRec(target.texture, [ 0, 0, target.texture.width,-target.texture.height], [0.0], WHITE)
+ rl.EndShaderMode()
+ #// Draw some 2d text over drawn texture
+ rl.DrawText(b"(c) Barracks 3D model by Alberto Cano", screenWidth - 220, screenHeight - 20, 10, GRAY);
+
+
+ rl.DrawFPS(10, 10)
+
+ rl.EndDrawing()
+#//----------------------------------------------------------------------------------
+
+
+#// De-Initialization
+#//--------------------------------------------------------------------------------------
+rl.UnloadModel(model) # // Unload the model
+
+rl.UnloadTexture(texture) #// Unload the texture
+
+rl.CloseWindow() #// Close window and OpenGL context
diff --git a/examples/shaders/shaders_fog.py b/examples/shaders/shaders_fog.py
new file mode 100755
index 0000000..34ff1c1
--- /dev/null
+++ b/examples/shaders/shaders_fog.py
@@ -0,0 +1,109 @@
+"""
+
+Example converted to Python from:
+http://bedroomcoders.co.uk/raylib-fog/
+
+ port to python completed by codifies - dont know who started it
+
+
+"""
+
+import raylib as rl
+
+from raylib.colors import *
+import math
+
+from rlmath import *
+from light_system import *
+
+rl.SetConfigFlags(rl.FLAG_MSAA_4X_HINT | rl.FLAG_WINDOW_RESIZABLE)
+rl.InitWindow(1280, 768, b'Fog Test')
+
+camera = rl.ffi.new('struct Camera3D *', [
+ [6, 2, 6],
+ [0, .5, 0],
+ [0, 1, 0],
+ 45,
+ rl.CAMERA_PERSPECTIVE
+])
+
+model = rl.LoadModelFromMesh(rl.GenMeshTorus(0.4, 1, 16, 32))
+model2 = rl.LoadModelFromMesh(rl.GenMeshCube(1, 1, 1))
+model3 = rl.LoadModelFromMesh(rl.GenMeshSphere(0.5, 32, 32))
+
+texture = rl.LoadTexture(b'resources/test.png')
+
+model.materials[0].maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
+model2.materials[0].maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
+model3.materials[0].maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
+
+light = Light(LIGHT_POINT, [0, 4, 0], Vector3Zero(), WHITE)
+lightSystem = LightSystem([0.2, 0.2, 0.2, 1.0], light)
+
+fog_color = rl.ffi.new('float[]', [0.2, 0.2, 1.0, 1.0])
+fogC = rl.GetShaderLocation(lightSystem.shader, b'fogColor')
+rl.SetShaderValue(lightSystem.shader, fogC, fog_color, rl.SHADER_UNIFORM_VEC4);
+
+fogC = rl.GetShaderLocation(lightSystem.shader, b'fogColor')
+rl.SetShaderValue(lightSystem.shader, fogC, fog_color, rl.SHADER_UNIFORM_VEC4);
+
+fogD = rl.GetShaderLocation(lightSystem.shader, b'FogDensity')
+fogDensity = 0.12
+
+model.materials[0].shader = lightSystem.shader
+model2.materials[0].shader = lightSystem.shader
+model3.materials[0].shader = lightSystem.shader
+
+rl.SetTargetFPS(60)
+a = 0.0
+while not rl.WindowShouldClose():
+
+ a += 0.01
+ camera.position.x = math.sin(a) * 6
+ camera.position.z = math.cos(a) * 6
+ rl.UpdateCamera(camera, rl.CAMERA_PERSPECTIVE)
+
+ lightSystem.update(camera.position)
+
+ model.transform = rl.ffi.cast("Matrix *", MatrixMultiply(model.transform, MatrixRotateX(-0.025)))[0]
+ model.transform = rl.ffi.cast("Matrix *", MatrixMultiply(model.transform, MatrixRotateZ(0.012)))[0]
+
+ if rl.IsKeyDown(rl.KEY_UP):
+ fogDensity = min(fogDensity + 0.001, 1)
+
+ if rl.IsKeyDown(rl.KEY_DOWN):
+ fogDensity = max(fogDensity - 0.001, 0)
+
+ rl.SetShaderValue(lightSystem.shader, fogD, rl.ffi.new('float[]', [fogDensity]), rl.SHADER_UNIFORM_FLOAT)
+
+ rl.BeginDrawing()
+
+ rl.ClearBackground([int(255 * i) for i in fog_color])
+
+ if rl.IsKeyDown(rl.KEY_SPACE):
+ rl.ClearBackground(BLACK)
+
+ rl.BeginMode3D(camera[0])
+ rl.DrawModel(model, [0] * 3, 1, WHITE)
+ rl.DrawModel(model2, [-2.6, 0, 0], 1, WHITE)
+ rl.DrawModel(model3, [2.6, 0, 0], 1, WHITE)
+
+ for i in range(-20, 20, 2):
+ rl.DrawModel(model, [i, 0, 2], 1, WHITE)
+
+ # Raylib removed this function
+ # rl.DrawGizmo([1000, 1000, 1000])
+
+ rl.EndMode3D()
+
+ rl.DrawFPS(10, 10)
+ rl.DrawText(f'Up/Down to change fog density: {fogDensity}'.encode('utf-8'), 10, 30, 20, WHITE)
+
+ rl.EndDrawing()
+
+rl.UnloadModel(model)
+rl.UnloadModel(model2)
+rl.UnloadModel(model3)
+rl.UnloadTexture(texture)
+rl.UnloadShader(lightSystem.shader)
+rl.CloseWindow()
diff --git a/examples/shaders/shaders_texture_drawing.py b/examples/shaders/shaders_texture_drawing.py
new file mode 100755
index 0000000..ea36518
--- /dev/null
+++ b/examples/shaders/shaders_texture_drawing.py
@@ -0,0 +1,69 @@
+import raylib as rl
+
+
+
+
+#// Initialization
+#//--------------------------------------------------------------------------------------
+screenWidth = 800;
+screenHeight = 450;
+
+rl.SetConfigFlags(rl.FLAG_MSAA_4X_HINT| rl.FLAG_WINDOW_RESIZABLE); # Enable Multi Sampling Anti Aliasing 4x (if available)
+rl.InitWindow(screenWidth, screenHeight, b"raylib [shaders] example - basic lighting")
+
+camera = rl.ffi.new('struct Camera3D *', [
+ [2, 12, 6],
+ [0, .5, 0],
+ [0, 1, 0],
+ 45,
+ rl.CAMERA_PERSPECTIVE
+])
+
+imBlank = rl.GenImageColor(1024, 1024, rl.BLANK)
+texture = rl.LoadTextureFromImage(imBlank) #// Load blank texture to fill on shader
+rl.UnloadImage(imBlank);
+
+#// NOTE: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version
+shader = rl.LoadShader(b"", b"resources/shaders/glsl330/cubes_panning.fs");
+
+time = rl.ffi.new("float *", 0.0)
+timeLoc = rl.GetShaderLocation(shader, b"uTime");
+rl.SetShaderValue(shader, timeLoc, time, rl.SHADER_UNIFORM_FLOAT);
+
+
+rl.SetTargetFPS(60) # // Set our game to run at 60 frames-per-second
+#//--------------------------------------------------------------------------------------
+
+#// Main game loop
+while not rl.WindowShouldClose(): #// Detect window close button or ESC key
+ #// Update
+ #//----------------------------------------------------------------------------------
+ time[0] = rl.GetTime();
+ rl.SetShaderValue(shader, timeLoc, time, rl.SHADER_UNIFORM_FLOAT);
+
+ #//----------------------------------------------------------------------------------
+
+ #// Draw
+ #//----------------------------------------------------------------------------------
+ rl.BeginDrawing()
+
+ rl.ClearBackground(rl.RAYWHITE)
+
+ rl.BeginShaderMode(shader) #// Enable our custom shader for next shapes/textures drawings
+ rl.DrawTexture(texture, 0, 0, rl.WHITE) #// Drawing BLANK texture, all magic happens on shader
+ rl.EndShaderMode() #// Disable our custom shader, return to default shader
+
+ rl.DrawText(b"BACKGROUND is PAINTED and ANIMATED on SHADER!", 10, 10, 20, rl.MAROON);
+
+
+ rl.EndDrawing()
+#//----------------------------------------------------------------------------------
+
+
+#// De-Initialization
+#//--------------------------------------------------------------------------------------
+
+
+rl.UnloadTexture(texture) #// Unload the texture
+
+rl.CloseWindow() #// Close window and OpenGL context
diff --git a/examples/shaders/shaders_texture_waves.py b/examples/shaders/shaders_texture_waves.py
new file mode 100755
index 0000000..5b977b8
--- /dev/null
+++ b/examples/shaders/shaders_texture_waves.py
@@ -0,0 +1,88 @@
+import raylib as rl
+from raylib.colors import *
+import math
+
+# a few functions ported from raymath
+from rlmath import *
+
+from ctypes import byref
+
+#// Initialization
+#//--------------------------------------------------------------------------------------
+screenWidth = 800;
+screenHeight = 450;
+
+rl.SetConfigFlags(rl.FLAG_MSAA_4X_HINT| rl.FLAG_WINDOW_RESIZABLE); # Enable Multi Sampling Anti Aliasing 4x (if available)
+rl.InitWindow(screenWidth, screenHeight, b"raylib [shaders]")
+
+camera = rl.ffi.new('struct Camera3D *', [
+ [2, 12, 6],
+ [0, .5, 0],
+ [0, 1, 0],
+ 45,
+ rl.CAMERA_PERSPECTIVE
+])
+
+texture = rl.LoadTexture(b"resources/space.png")
+
+shader = rl.LoadShader(b"", b"resources/shaders/glsl330/wave.fs")
+secondsLoc = rl.GetShaderLocation(shader, b"secondes")
+freqXLoc = rl.GetShaderLocation(shader, b"freqX")
+freqYLoc = rl.GetShaderLocation(shader, b"freqY")
+ampXLoc = rl.GetShaderLocation(shader, b"ampX")
+ampYLoc = rl.GetShaderLocation(shader, b"ampY")
+speedXLoc = rl.GetShaderLocation(shader, b"speedX")
+speedYLoc = rl.GetShaderLocation(shader, b"speedY")
+
+freqX = rl.ffi.new("float *", 25.0)
+freqY = rl.ffi.new("float *", 25.0)
+ampX = rl.ffi.new("float *", 5.0)
+ampY = rl.ffi.new("float *", 5.0)
+speedX = rl.ffi.new("float *", 8.0)
+speedY = rl.ffi.new("float *", 8.0)
+
+screenSize = rl.ffi.new("struct Vector2 *",[ rl.GetScreenWidth(), rl.GetScreenHeight() ])
+rl.SetShaderValue(shader, rl.GetShaderLocation(shader, b"size"), screenSize, rl.SHADER_UNIFORM_VEC2)
+
+rl.SetShaderValue(shader, freqXLoc, freqX, rl.SHADER_UNIFORM_FLOAT)
+rl.SetShaderValue(shader, freqYLoc, freqY, rl.SHADER_UNIFORM_FLOAT)
+rl.SetShaderValue(shader, ampXLoc, ampX, rl.SHADER_UNIFORM_FLOAT)
+rl.SetShaderValue(shader, ampYLoc, ampY, rl.SHADER_UNIFORM_FLOAT)
+rl.SetShaderValue(shader, speedXLoc, speedX, rl.SHADER_UNIFORM_FLOAT)
+rl.SetShaderValue(shader, speedYLoc, speedY, rl.SHADER_UNIFORM_FLOAT)
+
+seconds = rl.ffi.new("float *", 0.0)
+
+rl.SetTargetFPS(60) # // Set our game to run at 60 frames-per-second
+#//--------------------------------------------------------------------------------------
+
+#// Main game loop
+while not rl.WindowShouldClose(): #// Detect window close button or ESC key
+ #// Update
+ #//----------------------------------------------------------------------------------
+ seconds[0] += rl.GetFrameTime()
+ rl.SetShaderValue(shader, secondsLoc, seconds, rl.SHADER_UNIFORM_FLOAT)
+ #//----------------------------------------------------------------------------------
+
+ #// Draw
+ #//----------------------------------------------------------------------------------
+ rl.BeginDrawing()
+
+
+ rl.ClearBackground(RAYWHITE)
+ rl.BeginShaderMode(shader);
+
+ rl.DrawTexture(texture, 0, 0, WHITE);
+ rl.DrawTexture(texture, texture.width, 0, WHITE);
+
+ rl.EndShaderMode();
+
+ rl.EndDrawing()
+#//----------------------------------------------------------------------------------
+
+
+#// De-Initialization
+#//--------------------------------------------------------------------------------------
+
+
+rl.CloseWindow() #// Close window and OpenGL context
diff --git a/examples/shaders/shaders_write_depth.py b/examples/shaders/shaders_write_depth.py
new file mode 100644
index 0000000..4c51249
--- /dev/null
+++ b/examples/shaders/shaders_write_depth.py
@@ -0,0 +1,123 @@
+from pyray import *
+import raylib as rl
+
+#------------------------------------------------------------------------------------
+# Define custom functions required for the example
+#------------------------------------------------------------------------------------
+# Load custom render texture, create a writable depth texture buffer
+def LoadRenderTextureDepthTex(width, height):
+
+ target = RenderTexture()
+
+ target.id = rl_load_framebuffer() # Load an empty framebuffer
+
+ if target.id > 0:
+
+ rl_enable_framebuffer(target.id)
+
+ # Create color texture (default to RGBA)
+ target.texture.id = rl_load_texture(None, width, height, PixelFormat.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, 1)
+ target.texture.width = width
+ target.texture.height = height
+ target.texture.format = PixelFormat.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8
+ target.texture.mipmaps = 1
+
+ # Create depth texture buffer (instead of raylib default renderbuffer)
+ target.depth.id = rl_load_texture_depth(width, height, False)
+ target.depth.width = width
+ target.depth.height = height
+ target.depth.format = 19 #DEPTH_COMPONENT_24BIT?
+ target.depth.mipmaps = 1
+
+ # Attach color texture and depth texture to FBO
+ rl_framebuffer_attach(target.id, target.texture.id, rl.RL_ATTACHMENT_COLOR_CHANNEL0, rl.RL_ATTACHMENT_TEXTURE2D, 0)
+ rl_framebuffer_attach(target.id, target.depth.id, rl.RL_ATTACHMENT_DEPTH, rl.RL_ATTACHMENT_TEXTURE2D, 0)
+
+ # Check if fbo is complete with attachments (valid)
+ if rl_framebuffer_complete(target.id):
+ print(f"FBO: [{target.id}] Framebuffer object created successfully")
+
+ rl_disable_framebuffer()
+
+ else:
+ print("FBO: Framebuffer object can not be created")
+
+ return target
+
+
+# Unload render texture from GPU memory (VRAM)
+def UnloadRenderTextureDepthTex(target):
+
+ if target.id > 0:
+
+ # Color texture attached to FBO is deleted
+ rl_unload_texture(target.texture.id)
+ rl_unload_texture(target.depth.id)
+
+ # NOTE: Depth texture is automatically
+ # queried and deleted before deleting framebuffer
+ rl_unload_framebuffer(target.id)
+
+
+
+screenWidth = 800
+screenHeight = 450
+
+init_window(screenWidth, screenHeight, "raylib [shaders] example - write depth buffer")
+
+# The shader inverts the depth buffer by writing into it by `gl_FragDepth = 1 - gl_FragCoord.z`
+shader = load_shader("","resources/shaders/glsl330/write_depth.fs")
+
+# Use Customized function to create writable depth texture buffer
+target = LoadRenderTextureDepthTex(screenWidth, screenHeight)
+
+# Define the camera to look into our 3d world
+camera = Camera3D((2.0, 2.0, 3.0),(0.0, 0.5, 0.0),(0.0, 1.0, 0.0),45.0, CameraProjection.CAMERA_PERSPECTIVE)
+
+
+set_target_fps(60) # Set our game to run at 60 frames-per-second
+#--------------------------------------------------------------------------------------
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+
+ # Update
+ #----------------------------------------------------------------------------------
+ update_camera(camera, CameraMode.CAMERA_ORBITAL)
+ #----------------------------------------------------------------------------------
+
+ # Draw
+ #----------------------------------------------------------------------------------
+
+ # Draw into our custom render texture (framebuffer)
+ begin_texture_mode(target)
+ clear_background(WHITE)
+
+ begin_mode_3d(camera)
+ begin_shader_mode(shader)
+ draw_cube_wires_v((0.0, 0.5, 1.0) , (1.0,1.0, 1.0), RED)
+ draw_cube_v((0.0, 0.5, 1.0) , (1.0, 1.0, 1.0) , PURPLE)
+ draw_cube_wires_v((0.0, 0.5, -1.0), (1.0, 1.0, 1.0) , DARKGREEN)
+ draw_cube_v((0.0, 0.5, -1.0) , (1.0, 1.0, 1.0) , YELLOW)
+ draw_grid(10, 1.0)
+ end_shader_mode()
+ end_mode_3d()
+ end_texture_mode()
+
+ # Draw into screen our custom render texture
+ begin_drawing()
+ clear_background(RAYWHITE)
+
+ draw_texture_rec(target.texture, Rectangle(0, 0, screenWidth, -screenHeight) , (0, 0) , WHITE)
+ draw_fps(10, 10)
+ end_drawing()
+
+
+# De-Initialization
+#--------------------------------------------------------------------------------------
+UnloadRenderTextureDepthTex(target)
+unload_shader(shader)
+
+close_window() # Close window and OpenGL context
+
+
diff --git a/examples/shapes/shapes_basic_shapes.py b/examples/shapes/shapes_basic_shapes.py
new file mode 100644
index 0000000..5f039a3
--- /dev/null
+++ b/examples/shapes/shapes_basic_shapes.py
@@ -0,0 +1,56 @@
+import pyray
+
+
+# Initialization
+screenWidth = 800
+screenHeight = 450
+pyray.init_window(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing")
+
+rotation = 0.0
+
+pyray.set_target_fps(60)
+
+# Main game loop
+while not pyray.window_should_close():
+ # Update
+ rotation += 0.2
+
+ # Draw
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+
+ pyray.draw_text("some basic shapes available on raylib", 20, 20, 20, pyray.DARKGRAY)
+
+ # Circle shapes and lines
+ pyray.draw_circle(screenWidth // 5, 120, 35, pyray.DARKBLUE)
+ pyray.draw_circle_gradient(screenWidth // 5, 220, 60, pyray.GREEN, pyray.SKYBLUE)
+ pyray.draw_circle_lines(screenWidth // 5, 340, 80, pyray.DARKBLUE)
+
+ # Rectangle shapes and lines
+ pyray.draw_rectangle(screenWidth // 4 * 2 - 60, 100, 120, 60, pyray.RED)
+ pyray.draw_rectangle_gradient_h(screenWidth // 4 * 2 - 90, 170, 180, 130, pyray.MAROON, pyray.GOLD)
+ pyray.draw_rectangle_lines(screenWidth // 4 * 2 - 40, 320, 80, 60, pyray.ORANGE)
+
+ # Triangle shapes and lines
+ pyray.draw_triangle(pyray.Vector2(screenWidth / 4.0 * 3.0, 80.0),
+ pyray.Vector2(screenWidth / 4.0 * 3.0 - 60.0, 150.0),
+ pyray.Vector2(screenWidth / 4.0 * 3.0 + 60.0, 150.0), pyray.VIOLET)
+
+ pyray.draw_triangle_lines(pyray.Vector2(screenWidth / 4.0 * 3.0, 160.0),
+ pyray.Vector2(screenWidth / 4.0 * 3.0 - 20.0, 230.0),
+ pyray.Vector2(screenWidth / 4.0 * 3.0 + 20.0, 230.0), pyray.DARKBLUE)
+
+ # Polygon shapes and lines
+ pyray.draw_poly(pyray.Vector2(screenWidth / 4.0 * 3, 330), 6, 80, rotation, pyray.BROWN)
+ pyray.draw_poly_lines(pyray.Vector2(screenWidth / 4.0 * 3, 330), 6, 90, rotation, pyray.BROWN)
+ pyray.draw_poly_lines_ex(pyray.Vector2(screenWidth / 4.0 * 3, 330), 6, 85, rotation, 6, pyray.BEIGE)
+
+ # NOTE: We draw all LINES based shapes together to optimize internal drawing,
+ # this way, all LINES are rendered in a single draw pass
+ pyray.draw_line(18, 42, screenWidth - 18, 42, pyray.BLACK)
+
+ pyray.end_drawing()
+
+# De-Initialization
+pyray.close_window()
diff --git a/examples/shapes/shapes_bouncing_ball.py b/examples/shapes/shapes_bouncing_ball.py
new file mode 100644
index 0000000..cc38371
--- /dev/null
+++ b/examples/shapes/shapes_bouncing_ball.py
@@ -0,0 +1,52 @@
+import pyray
+
+# Initialization
+screenWidth = 800
+screenHeight = 450
+pyray.init_window(screenWidth, screenHeight, "pyray [shapes] example - bouncing ball")
+
+ballPosition = pyray.Vector2(pyray.get_screen_width() / 2.0, pyray.get_screen_height() / 2.0)
+ballSpeed = pyray.Vector2(5.0, 4.0)
+ballRadius = 20
+
+pause = False
+framesCounter = 0
+
+pyray.set_target_fps(60)
+
+# Main game loop
+while not pyray.window_should_close():
+ # Update
+ if pyray.is_key_pressed(pyray.KeyboardKey.KEY_SPACE):
+ pause = not pause
+
+ if not pause:
+ ballPosition.x += ballSpeed.x
+ ballPosition.y += ballSpeed.y
+
+ # Check walls collision for bouncing
+ if (ballPosition.x >= (pyray.get_screen_width() - ballRadius)) or (ballPosition.x <= ballRadius):
+ ballSpeed.x *= -1.0
+ if (ballPosition.y >= (pyray.get_screen_height() - ballRadius)) or (ballPosition.y <= ballRadius):
+ ballSpeed.y *= -1.0
+ else:
+ framesCounter += 1
+
+ # Draw
+ pyray.begin_drawing()
+
+ pyray.clear_background(pyray.RAYWHITE)
+
+ pyray.draw_circle_v(ballPosition, ballRadius, pyray.MAROON)
+ pyray.draw_text("PRESS SPACE to PAUSE BALL MOVEMENT", 10, pyray.get_screen_height() - 25, 20, pyray.LIGHTGRAY)
+
+ # On pause, we draw a blinking message
+ if pause and (framesCounter // 30) % 2:
+ pyray.draw_text("PAUSED", 350, 200, 30, pyray.GRAY)
+
+ pyray.draw_fps(10, 10)
+
+ pyray.end_drawing()
+
+# De-Initialization
+pyray.close_window()
diff --git a/examples/shapes/shapes_draw_rounded_rectangle_incomplete.py b/examples/shapes/shapes_draw_rounded_rectangle_incomplete.py
new file mode 100644
index 0000000..d20d98b
--- /dev/null
+++ b/examples/shapes/shapes_draw_rounded_rectangle_incomplete.py
@@ -0,0 +1,81 @@
+#/*******************************************************************************************
+#*
+#* raylib [shapes] example - draw rectangle rounded (with gui options)
+#*
+#* This example has been created using raylib 2.5 (www.raylib.com)
+#* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+#*
+#* Example contributed by Vlad Adrian (@demizdor) and reviewed by Ramon Santamaria (@raysan5)
+#*
+#* Copyright (c) 2018 Vlad Adrian (@demizdor) and Ramon Santamaria (@raysan5)
+#*
+#********************************************************************************************/
+
+import pyray
+
+
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+pyray.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [shapes] example - draw rectangle rounded")
+
+
+
+drawRect = False
+drawRoundedRect = True
+drawRoundedLines = False
+
+pyray.set_target_fps(60)
+width = pyray.ffi.new('float *', 200)
+# these need to be changed to pointers for new raygui format
+roundness = 0.2
+height = 100
+segments = 0
+lineThick = 1
+#// Main game loop
+while not pyray.window_should_close(): #// Detect window close button or ESC key
+
+ #// Update
+ #//----------------------------------------------------------------------------------
+ rec = pyray.Rectangle( (pyray.get_screen_width()-width[0]-250)/2, (pyray.get_screen_height()-height)/2, width[0], height )
+ #//----------------------------------------------------------------------------------
+
+ #// Draw
+ #//----------------------------------------------------------------------------------
+ pyray.begin_drawing()
+ pyray.clear_background(pyray.RAYWHITE)
+
+ pyray.draw_line(560,0,560,pyray.get_screen_height(),pyray.fade(pyray.LIGHTGRAY,0.6))
+ pyray.draw_rectangle(560,0,pyray.get_screen_width()-500,pyray.get_screen_height(),pyray.fade(pyray.LIGHTGRAY,0.3))
+
+ if drawRect:
+ pyray.draw_rectangle_rec(rec,pyray.fade(pyray.GOLD,0.6))
+ if drawRoundedRect:
+ pyray.draw_rectangle_rounded(rec,roundness,segments,pyray.fade(pyray.MAROON,0.2))
+ if drawRoundedLines:
+ pyray.draw_rectangle_rounded_lines(rec,roundness,segments,pyray.fade(pyray.MAROON,0.4))
+
+ #// Draw GUI controls
+ #//------------------------------------------------------------------------------
+
+ pyray.gui_slider_bar(pyray.Rectangle(640,40,105,20),"Width","",width,0,pyray.get_screen_width()-300)
+
+ # these need to be updated to new raygui format like above like
+
+ # height = int( pyray.gui_slider_bar(pyray.Rectangle(640,70,105,20),"Height",0,height,0,pyray.get_screen_height()-50) )
+ # roundness = pyray.gui_slider_bar(pyray.Rectangle(640,140,105,20),"Roundness",0,roundness,0,1)
+ # lineThick = int( pyray.gui_slider_bar(pyray.Rectangle(640,170,105,20),"Thickness",0,lineThick,0,20) )
+ # segments = int( pyray.gui_slider_bar(pyray.Rectangle(640,240,105,20),"Segments",0,segments,0,60) )
+ #
+ # drawRoundedRect = pyray.gui_check_box(pyray.Rectangle(640,320,20,20),"DrawRoundedRect",drawRoundedRect)
+ # drawRoundedLines = pyray.gui_check_box(pyray.Rectangle(640,350,20,20),"DrawRoundedLines",drawRoundedLines)
+ # drawRect = pyray.gui_check_box(pyray.Rectangle(640,380,20,20),"DrawRect",drawRect)
+ #//------------------------------------------------------------------------------
+
+ pyray.draw_text( "MANUAL" if segments >= 4 else "AUTO" , 640, 280, 10, pyray.MAROON if segments >= 4 else pyray.DARKGRAY)
+ pyray.draw_fps(10,10)
+ pyray.end_drawing()
+ #//------------------------------------------------------------------------------
+
+# De-Initialization
+pyray.close_window() # Close window and OpenGL context
\ No newline at end of file
diff --git a/examples/shapes/shapes_following_eyes.py b/examples/shapes/shapes_following_eyes.py
new file mode 100644
index 0000000..66568eb
--- /dev/null
+++ b/examples/shapes/shapes_following_eyes.py
@@ -0,0 +1,90 @@
+"""
+
+raylib [shapes] example - Following Eyes
+
+"""
+
+from pyray import *
+
+from math import (
+ atan2,
+ cos,
+ sin
+)
+
+# Initialization
+# ----------------------------------------------------------------------------------
+screenWidth = 800
+screenHeight = 450
+
+init_window(screenWidth, screenHeight, "raylib [shapes] example - following eyes")
+
+scleraLeftPosition = Vector2(screenWidth / 2.0 - 100.0, screenHeight / 2.0)
+scleraRightPosition = Vector2(screenWidth / 2.0 + 100.0, screenHeight / 2.0)
+scleraRadius = 80.0
+
+irisLeftPosition = Vector2(screenWidth / 2.0 - 100.0, screenHeight / 2.0)
+irisRightPosition = Vector2(screenWidth / 2.0 - 100.0, screenHeight / 2.0)
+irisRadius = 24.0
+
+angle = 0.0
+dx, dy, dxx, dyy = 0.0, 0.0, 0.0, 0.0
+
+set_target_fps(60)
+# ----------------------------------------------------------------------------------
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ irisLeftPosition = get_mouse_position()
+ irisRightPosition = get_mouse_position()
+
+ # Check not inside the left eye sclera
+ if not check_collision_point_circle(irisLeftPosition, scleraLeftPosition, scleraRadius - 20):
+ dx = irisLeftPosition.x - scleraLeftPosition.x
+ dy = irisLeftPosition.y - scleraLeftPosition.y
+
+ angle = atan2(dy, dx)
+
+ dxx = (scleraRadius - irisRadius)*cos(angle)
+ dyy = (scleraRadius - irisRadius)*sin(angle)
+
+ irisLeftPosition.x = scleraLeftPosition.x + dxx
+ irisLeftPosition.y = scleraLeftPosition.y + dyy
+
+ # Check not inside the right eye sclera
+ if not check_collision_point_circle(irisRightPosition, scleraRightPosition, scleraRadius - 20):
+ dx = irisRightPosition.x - scleraRightPosition.x
+ dy = irisRightPosition.y - scleraRightPosition.y
+
+ angle = atan2(dy, dx)
+
+ dxx = (scleraRadius - irisRadius)*cos(angle)
+ dyy = (scleraRadius - irisRadius)*sin(angle)
+
+ irisRightPosition.x = scleraRightPosition.x + dxx
+ irisRightPosition.y = scleraRightPosition.y + dyy
+
+ # ----------------------------------------------------------------------------------
+
+ # draw
+ # ----------------------------------------------------------------------------------
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+
+ draw_circle_v(scleraLeftPosition, scleraRadius, LIGHTGRAY)
+ draw_circle_v(irisLeftPosition, irisRadius, BROWN)
+ draw_circle_v(irisLeftPosition, 10, BLACK)
+
+ draw_circle_v(scleraRightPosition, scleraRadius, LIGHTGRAY)
+ draw_circle_v(irisRightPosition, irisRadius, DARKGREEN)
+ draw_circle_v(irisRightPosition, 10, BLACK)
+
+ draw_fps(10, 10)
+
+ end_drawing()
+
+# De-Initialization
+close_window() # Close window and OpenGL context
diff --git a/examples/shapes/shapes_lines_bezier.py b/examples/shapes/shapes_lines_bezier.py
new file mode 100644
index 0000000..2b3d0af
--- /dev/null
+++ b/examples/shapes/shapes_lines_bezier.py
@@ -0,0 +1,56 @@
+"""
+
+raylib [shapes] example - Lines Bezier
+
+"""
+
+from pyray import *
+
+
+# ------------------------------------------------------------------------------------
+# Program main entry point
+# ------------------------------------------------------------------------------------
+def main():
+ # Initialization
+ # ------------------------------------------------------------------------------------
+ screenWidth = 800
+ screenHeight = 450
+
+ set_config_flags(ConfigFlags.FLAG_MSAA_4X_HINT)
+ init_window(screenWidth, screenHeight, "raylib [shapes] example - cubic-bezier lines")
+
+ start = Vector2(0, 0)
+ end = Vector2(screenWidth, screenHeight)
+
+ set_target_fps(60) # Set our game to run at 60 frames-per-second
+ # -------------------------------------------------------------------------------------
+
+ # Main game loop
+ while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ if is_mouse_button_down(MouseButton.MOUSE_BUTTON_LEFT): start = get_mouse_position()
+ if is_mouse_button_down(MouseButton.MOUSE_BUTTON_RIGHT): end = get_mouse_position()
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+
+ draw_text("USE MOUSE LEFT-RIGHT CLICK to DEFINE LINE START and END POINTS", 15, 20, 20, GRAY)
+
+ draw_line_bezier(start, end, 2.0, RED)
+
+ end_drawing()
+ # ----------------------------------------------------------------------------------
+
+ # De-Initialization
+ # ----------------------------------------------------------------------------------
+ close_window() # Close window and OpenGL context
+ # ----------------------------------------------------------------------------------
+
+# execute the main function
+if __name__ == '__main__':
+ main()
diff --git a/examples/shapes/shapes_logo_raylib.py b/examples/shapes/shapes_logo_raylib.py
new file mode 100644
index 0000000..77579fc
--- /dev/null
+++ b/examples/shapes/shapes_logo_raylib.py
@@ -0,0 +1,39 @@
+"""
+
+raylib [shapes] example - Logo Raylib
+
+"""
+from pyray import *
+
+
+# Initialization
+screenWidth = 800
+screenHeight = 450
+
+init_window(screenWidth, screenHeight, 'raylib [shapes] example - raylib logo using shapes')
+
+set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ # TODO: Update your variables here
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+
+ draw_rectangle(int(screenWidth/2 - 128), int(screenHeight/2 - 128), 256, 256, BLACK)
+ draw_rectangle(int(screenWidth/2 - 112), int(screenHeight/2 - 112), 224, 224, RAYWHITE)
+ draw_text("raylib", int(screenWidth/2 - 44), int(screenHeight/2 + 48), 50, BLACK)
+
+ draw_text("this is NOT a texture!", 350, 370, 10, GRAY)
+
+ end_drawing()
+
+# De-Initialization
+close_window() # Close window and OpenGL context
diff --git a/examples/textures/resources/raylib_logo.jpg b/examples/textures/resources/raylib_logo.jpg
new file mode 100644
index 0000000..cb4ee4c
Binary files /dev/null and b/examples/textures/resources/raylib_logo.jpg differ
diff --git a/examples/textures/resources/raylib_logo.png b/examples/textures/resources/raylib_logo.png
new file mode 100644
index 0000000..15bbaa2
Binary files /dev/null and b/examples/textures/resources/raylib_logo.png differ
diff --git a/examples/textures/resources/scarfy.png b/examples/textures/resources/scarfy.png
new file mode 100644
index 0000000..885a470
Binary files /dev/null and b/examples/textures/resources/scarfy.png differ
diff --git a/examples/textures/resources/wabbit_alpha.png b/examples/textures/resources/wabbit_alpha.png
new file mode 100644
index 0000000..db4081f
Binary files /dev/null and b/examples/textures/resources/wabbit_alpha.png differ
diff --git a/examples/textures/textures_bunnymark.py b/examples/textures/textures_bunnymark.py
new file mode 100644
index 0000000..0b8c7c2
--- /dev/null
+++ b/examples/textures/textures_bunnymark.py
@@ -0,0 +1,111 @@
+# /*******************************************************************************************
+# *
+# * raylib [textures] example - Bunnymark
+# *
+# * This example has been created using raylib 1.6 (www.raylib.com)
+# * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+# *
+# * Copyright (c) 2014-2019 Ramon Santamaria (@raysan5)
+# *
+# ********************************************************************************************/
+
+from raylib import *
+MAX_BUNNIES = 500000
+
+# This is the maximum amount of elements (quads) per batch
+# NOTE: This value is defined in [rlgl] module and can be changed there
+MAX_BATCH_ELEMENTS = 8192
+
+
+class Bunny:
+ def __init__(self):
+ self.position = ffi.new('struct Vector2 *', [0.0, 0.0])
+ self.speed = ffi.new('struct Vector2 *', [0.0, 0.0])
+ self.color = ffi.new('struct Color *', [0, 0, 0, 0])
+
+
+# // Initialization
+# //--------------------------------------------------------------------------------------
+screenWidth = 1920;
+screenHeight = 1080;
+
+InitWindow(screenWidth, screenHeight, b"raylib [textures] example - bunnymark")
+
+# // Load bunny texture
+texBunny = LoadTexture(b"resources/wabbit_alpha.png")
+
+bunnies = []
+for i in range(0, MAX_BUNNIES):
+ bunnies.append(Bunny())
+
+bunniesCount = 0 # Bunnies counter
+
+SetTargetFPS(60) # Set our game to run at 60 frames-per-second
+#//--------------------------------------------------------------------------------------
+
+#// Main game loop
+while not WindowShouldClose(): #// Detect window close button or ESC key
+ #// Update
+ #//----------------------------------------------------------------------------------
+ if IsMouseButtonDown(MOUSE_BUTTON_LEFT):
+ #// Create more bunnies
+ for i in range(0, 100):
+ if bunniesCount < MAX_BUNNIES:
+ bunnies[bunniesCount].position = GetMousePosition()
+ bunnies[bunniesCount].speed.x = GetRandomValue(-250, 250)/60.0
+ bunnies[bunniesCount].speed.y = GetRandomValue(-250, 250)/60.0
+ bunnies[bunniesCount].color = (GetRandomValue(50, 240),
+ GetRandomValue(80, 240),
+ GetRandomValue(100, 240), 255 )
+
+ bunniesCount+=1
+
+
+ # // Update bunnies
+ for i in range(0, bunniesCount):
+ bunnies[i].position.x += bunnies[i].speed.x
+ bunnies[i].position.y += bunnies[i].speed.y
+
+ if ((bunnies[i].position.x + texBunny.width/2) > GetScreenWidth()) or ((bunnies[i].position.x + texBunny.width/2) < 0):
+ bunnies[i].speed.x *= -1
+ if ((bunnies[i].position.y + texBunny.height/2) > GetScreenHeight()) or ((bunnies[i].position.y + texBunny.height/2 - 40) < 0):
+ bunnies[i].speed.y *= -1
+
+ # //----------------------------------------------------------------------------------
+ #
+ # // Draw
+ # //----------------------------------------------------------------------------------
+ BeginDrawing()
+
+ ClearBackground(RAYWHITE)
+
+ for i in range(0, bunniesCount):
+ # // NOTE: When internal batch buffer limit is reached (MAX_BATCH_ELEMENTS),
+ # // a draw call is launched and buffer starts being filled again;
+ # // before issuing a draw call, updated vertex data from internal CPU buffer is send to GPU...
+ # // Process of sending data is costly and it could happen that GPU data has not been completely
+ # // processed for drawing while new data is tried to be sent (updating current in-use buffers)
+ # // it could generates a stall and consequently a frame drop, limiting the number of drawn bunnies
+ DrawTexture(texBunny, int(bunnies[i].position.x), int(bunnies[i].position.y), bunnies[i].color)
+
+ DrawRectangle(0, 0, screenWidth, 40, BLACK)
+ text = f"bunnies {bunniesCount}"
+ DrawText(text.encode('utf-8'), 120, 10, 20, GREEN)
+ text = f"batched draw calls: { 1 + int(bunniesCount/MAX_BATCH_ELEMENTS)}"
+ DrawText(text.encode('utf-8'), 320, 10, 20, MAROON)
+
+ DrawFPS(10, 10)
+
+ EndDrawing()
+ #//----------------------------------------------------------------------------------
+
+
+#// De-Initialization
+#//--------------------------------------------------------------------------------------
+
+
+UnloadTexture(texBunny) #Unload bunny texture
+
+CloseWindow() # Close window and OpenGL context
+#//--------------------------------------------------------------------------------------
+
diff --git a/examples/textures/textures_bunnymark_more_pythonic.py b/examples/textures/textures_bunnymark_more_pythonic.py
new file mode 100644
index 0000000..9792da8
--- /dev/null
+++ b/examples/textures/textures_bunnymark_more_pythonic.py
@@ -0,0 +1,110 @@
+# Dont use C data structures when we can avoid it. Makes Pypy slightly faster.
+
+from raylib import *
+import random
+
+MAX_BUNNIES = 500000
+
+# This is the maximum amount of elements (quads) per batch
+# NOTE: This value is defined in [rlgl] module and can be changed there
+MAX_BATCH_ELEMENTS = 8192
+
+
+class Bunny:
+ def __init__(self):
+ self.position_x = 0.0
+ self.position_y = 0.0
+ self.speed_x = 0.0
+ self.speed_y = 0.0
+ self.color_r = 0
+ self.color_g = 0
+ self.color_b = 0
+ self.color_a = 0
+
+
+# // Initialization
+# //--------------------------------------------------------------------------------------
+screenWidth = 1920;
+screenHeight = 1080;
+
+InitWindow(screenWidth, screenHeight, b"raylib [textures] example - bunnymark")
+
+# // Load bunny texture
+texBunny = LoadTexture(b"resources/wabbit_alpha.png")
+
+bunnies = []
+for i in range(0, MAX_BUNNIES):
+ bunnies.append(Bunny())
+
+bunniesCount = 0 # Bunnies counter
+
+SetTargetFPS(60) # Set our game to run at 60 frames-per-second
+#//--------------------------------------------------------------------------------------
+
+#// Main game loop
+while not WindowShouldClose(): #// Detect window close button or ESC key
+ #// Update
+ #//----------------------------------------------------------------------------------
+ if IsMouseButtonDown(MOUSE_BUTTON_LEFT):
+ #// Create more bunnies
+ for i in range(0, 100):
+ if bunniesCount < MAX_BUNNIES:
+ bunnies[bunniesCount].position_x = GetMousePosition().x
+ bunnies[bunniesCount].position_y = GetMousePosition().y
+ bunnies[bunniesCount].speed_x = random.randint(-250, 250)/60.0
+ bunnies[bunniesCount].speed_y = random.randint(-250, 250)/60.0
+ bunnies[bunniesCount].color_r = random.randint(50,240)
+ bunnies[bunniesCount].color_g = random.randint(80, 240)
+ bunnies[bunniesCount].color_b = random.randint(100, 240)
+ bunnies[bunniesCount].color_a = 255
+ bunniesCount+=1
+
+
+ # // Update bunnies
+ for i in range(0, bunniesCount):
+ bunnies[i].position_x += bunnies[i].speed_x
+ bunnies[i].position_y += bunnies[i].speed_y
+
+ if ((bunnies[i].position_x + texBunny.width/2) > GetScreenWidth()) or ((bunnies[i].position_x + texBunny.width/2) < 0):
+ bunnies[i].speed_x *= -1
+ if ((bunnies[i].position_y + texBunny.height/2) > GetScreenHeight()) or ((bunnies[i].position_y + texBunny.height/2 - 40) < 0):
+ bunnies[i].speed_y *= -1
+
+ # //----------------------------------------------------------------------------------
+ #
+ # // Draw
+ # //----------------------------------------------------------------------------------
+ BeginDrawing()
+
+ ClearBackground(RAYWHITE)
+
+ for i in range(0, bunniesCount):
+ # // NOTE: When internal batch buffer limit is reached (MAX_BATCH_ELEMENTS),
+ # // a draw call is launched and buffer starts being filled again;
+ # // before issuing a draw call, updated vertex data from internal CPU buffer is send to GPU...
+ # // Process of sending data is costly and it could happen that GPU data has not been completely
+ # // processed for drawing while new data is tried to be sent (updating current in-use buffers)
+ # // it could generates a stall and consequently a frame drop, limiting the number of drawn bunnies
+ DrawTexture(texBunny, int(bunnies[i].position_x), int(bunnies[i].position_y), (bunnies[i].color_r,bunnies[i].color_g,bunnies[i].color_b,bunnies[i].color_a))
+
+ DrawRectangle(0, 0, screenWidth, 40, BLACK)
+ text = f"bunnies {bunniesCount}"
+ DrawText(text.encode('utf-8'), 120, 10, 20, GREEN)
+ text = f"batched draw calls: { 1 + int(bunniesCount/MAX_BATCH_ELEMENTS)}"
+ DrawText(text.encode('utf-8'), 320, 10, 20, MAROON)
+
+ DrawFPS(10, 10)
+
+ EndDrawing()
+ #//----------------------------------------------------------------------------------
+
+
+#// De-Initialization
+#//--------------------------------------------------------------------------------------
+
+
+UnloadTexture(texBunny); #Unload bunny texture
+
+CloseWindow() # Close window and OpenGL context
+#//--------------------------------------------------------------------------------------
+
diff --git a/examples/textures/textures_image_loading.py b/examples/textures/textures_image_loading.py
new file mode 100644
index 0000000..889c099
--- /dev/null
+++ b/examples/textures/textures_image_loading.py
@@ -0,0 +1,27 @@
+from raylib import *
+
+screenWidth = 800
+screenHeight = 450
+
+InitWindow(screenWidth, screenHeight, b"raylib [textures] example - image loading")
+
+image = LoadImage(b"resources/raylib_logo.png")
+texture = LoadTextureFromImage(image)
+
+UnloadImage(image)
+
+while not WindowShouldClose():
+
+ BeginDrawing()
+
+ ClearBackground(RAYWHITE)
+
+ DrawTexture(texture, int(screenWidth/2 - texture.width/2), int(screenHeight/2 - texture.height/2), WHITE)
+
+ DrawText(b"this IS a texture loaded from an image!", 300, 370, 10, GRAY)
+
+ EndDrawing()
+
+UnloadTexture(texture)
+
+CloseWindow()
diff --git a/examples/textures/textures_mouse_painting.py b/examples/textures/textures_mouse_painting.py
new file mode 100644
index 0000000..787b332
--- /dev/null
+++ b/examples/textures/textures_mouse_painting.py
@@ -0,0 +1,186 @@
+"""
+
+raylib [texture] example - Mouse Painting
+
+"""
+from pyray import *
+
+MAX_COLORS_COUNT = 23 # Number of colors available
+
+# Initialization
+screenWidth = 800
+screenHeight = 450
+
+init_window(screenWidth, screenHeight, "raylib [textures] example - mouse painting")
+
+# Colours to choose from
+colors = [RAYWHITE, YELLOW, GOLD, ORANGE, PINK, RED, MAROON, GREEN, LIME, DARKGREEN,
+ SKYBLUE, BLUE, DARKBLUE, PURPLE, VIOLET, DARKPURPLE, BEIGE, BROWN, DARKBROWN,
+ LIGHTGRAY, GRAY, DARKGRAY, BLACK]
+
+colorsRecs = []
+
+# Define colorsRecs data (for every rectangle)
+for i in range(MAX_COLORS_COUNT):
+ colorsRecs.append(Rectangle(10 + 30.0 * i + 2 * i, 10, 30, 30))
+
+colorSelected = 0
+colorSelectedPrev = colorSelected
+colorMouseHover = 0
+brushSize = 20.0
+mouseWasPressed = False
+
+btnSaveRec = Rectangle(750, 10, 40, 30)
+btnSaveMouseHover = False
+showSaveMessage = False
+saveMessageCounter = 0
+
+# Create a RenderTexture2D to use as a canvas
+target = load_render_texture(screenWidth, screenHeight)
+
+# Clear render texture before entering the game loop
+begin_texture_mode(target)
+clear_background(colors[0])
+end_texture_mode()
+
+set_target_fps(120) # Set our game to run at 120 frames-per-second
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ mousePos = get_mouse_position()
+
+ # Move between colors with keys
+ if is_key_pressed(KeyboardKey.KEY_RIGHT):
+ colorSelected += 1
+ elif is_key_pressed(KeyboardKey.KEY_LEFT):
+ colorSelected -= 1
+
+ if colorSelected >= MAX_COLORS_COUNT:
+ colorSelected = MAX_COLORS_COUNT - 1
+ elif colorSelected < 0:
+ colorSelected = 0
+
+ # Choose color with mouse
+ for i in range(MAX_COLORS_COUNT):
+ if check_collision_point_rec(mousePos, colorsRecs[i]):
+ colorMouseHover = i
+ break
+ else:
+ colorMouseHover = -1
+
+ if colorMouseHover >= 0 and is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_LEFT):
+ colorSelected = colorMouseHover
+ colorSelectedPrev = colorSelected
+
+ # Change brush size
+ brushSize += get_mouse_wheel_move() * 5
+ if brushSize < 2: brushSize = 2
+ if brushSize > 50: brushSize = 50
+
+ if is_key_pressed(KeyboardKey.KEY_C):
+ # Clear render texture to clear color
+ begin_texture_mode(target)
+ clear_background(colors[0])
+ end_texture_mode()
+
+ if is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_LEFT) or get_gesture_detected() == Gesture.GESTURE_DRAG:
+
+ # Paint circle into render texture
+ # NOTE: To avoid discontinuous circles, we could store
+ # previous-next mouse points and just draw a line using brush size
+ begin_texture_mode(target)
+ if mousePos.y > 50:
+ draw_circle(int(mousePos.x), int(mousePos.y), brushSize, colors[colorSelected])
+ end_texture_mode()
+ if is_mouse_button_down(MouseButton.MOUSE_BUTTON_RIGHT):
+
+ if not mouseWasPressed:
+ colorSelectedPrev = colorSelected
+ colorSelected = 0
+
+ mouseWasPressed = True
+
+ # Erase circle from render texture
+ begin_texture_mode(target)
+ if mousePos.y > 50: draw_circle(int(mousePos.x), int(mousePos.y), brushSize, colors[0])
+ end_texture_mode()
+
+ elif is_mouse_button_released(MouseButton.MOUSE_BUTTON_RIGHT) and mouseWasPressed:
+
+ colorSelected = colorSelectedPrev
+ mouseWasPressed = False
+
+ # Check mouse hover save button
+ if check_collision_point_rec(mousePos, btnSaveRec):
+ btnSaveMouseHover = True
+ else:
+ btnSaveMouseHover = False
+
+ # Image saving logic
+ # NOTE: Saving painted texture to a default named image
+ if (btnSaveMouseHover and is_mouse_button_released(MouseButton.MOUSE_BUTTON_LEFT)) or is_key_pressed(KeyboardKey.KEY_S):
+ image = load_image_from_texture(target.texture)
+ image_flip_vertical(image)
+ export_image(image, "my_amazing_texture_painting.png")
+ unload_image(image)
+ showSaveMessage = True
+
+ if showSaveMessage:
+ # On saving, show a full screen message for 2 seconds
+ saveMessageCounter += 1
+ if saveMessageCounter > 240:
+ showSaveMessage = False
+ saveMessageCounter = 0
+
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ begin_drawing()
+ clear_background(RAYWHITE)
+
+ # NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom)
+ draw_texture_rec(target.texture, Rectangle(0, 0, float(target.texture.width), float(-target.texture.height)),
+ Vector2(0, 0), WHITE)
+
+ # Draw drawing circle for reference
+ if mousePos.y > 50:
+ if is_mouse_button_down(MouseButton.MOUSE_BUTTON_RIGHT):
+ draw_circle_lines(int(mousePos.x), int(mousePos.y), brushSize, GRAY)
+ else:
+ draw_circle(get_mouse_x(), get_mouse_y(), brushSize, colors[colorSelected])
+ # Draw top panel
+ draw_rectangle(0, 0, get_screen_width(), 50, RAYWHITE)
+ draw_line(0, 50, get_screen_width(), 50, LIGHTGRAY)
+
+ # Draw color selection rectangles
+ for i in range(MAX_COLORS_COUNT):
+ draw_rectangle_rec(colorsRecs[i], colors[i])
+ draw_rectangle_lines(10, 10, 30, 30, LIGHTGRAY)
+
+ if colorMouseHover >= 0: draw_rectangle_rec(colorsRecs[colorMouseHover], fade(WHITE, 0.6))
+
+ draw_rectangle_lines_ex(
+ Rectangle(colorsRecs[colorSelected].x - 2, colorsRecs[colorSelected].y - 2, colorsRecs[colorSelected].width + 4,
+ colorsRecs[colorSelected].height + 4), 2, BLACK)
+
+ # Draw save image button
+ draw_rectangle_lines_ex(btnSaveRec, 2, RED if btnSaveMouseHover else BLACK)
+ draw_text("SAVE!", 755, 20, 10, RED if btnSaveMouseHover else BLACK)
+
+ if showSaveMessage:
+ draw_rectangle(0, 0, get_screen_width(), get_screen_height(), fade(RAYWHITE, 0.8))
+ draw_rectangle(0, 150, get_screen_width(), 80, BLACK)
+ draw_text("IMAGE SAVED: my_amazing_texture_painting.png", 150, 180, 20, RAYWHITE)
+
+ end_drawing()
+
+ # ----------------------------------------------------------------------------------
+
+# De-Initialization
+# ----------------------------------------------------------------------------------
+unload_render_texture(target) # Unload render texture
+
+close_window() # Close window and OpenGL context
diff --git a/examples/textures/textures_sprite_anim.py b/examples/textures/textures_sprite_anim.py
new file mode 100644
index 0000000..c2b9788
--- /dev/null
+++ b/examples/textures/textures_sprite_anim.py
@@ -0,0 +1,78 @@
+# Tested with version: 5.5.0.2
+# by @Lightnet
+
+from pyray import *
+
+
+currentFrame = 0
+framesCounter = 0
+framesSpeed = 8
+# Initialization
+SCREEN_WIDTH = 800
+SCREEN_HEIGHT = 450
+
+MAX_FRAME_SPEED = 15
+MIN_FRAME_SPEED = 1
+
+init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [texture] example - sprite anim")
+
+#need to set in case of animation snyc
+set_target_fps(60) # Set our game to run at 60 frames-per-second
+
+scarfy = load_texture("resources/scarfy.png") # Texture loading
+
+frameRec = Rectangle(0.0, 0.0, scarfy.width/6, scarfy.height)
+
+position = Vector2(350.0, 280.0)
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+
+ framesCounter += 1
+
+ if framesCounter >= 60/framesSpeed:
+ framesCounter = 0
+ currentFrame += 1
+ if currentFrame > 5:
+ currentFrame = 0
+
+ frameRec.x = float(currentFrame) * float(scarfy.width/6)
+ # Control speed animation
+ if (is_key_pressed(KeyboardKey.KEY_RIGHT)):
+ framesSpeed += 1
+ elif is_key_pressed(KeyboardKey.KEY_LEFT):
+ framesSpeed -= 1
+
+ if framesSpeed > MAX_FRAME_SPEED:
+ framesSpeed = MAX_FRAME_SPEED
+ elif framesSpeed < MIN_FRAME_SPEED:
+ framesSpeed = MIN_FRAME_SPEED
+
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+ #draw sheet block
+ draw_rectangle_lines(15, 40, scarfy.width, scarfy.height, LIME)
+ #draw current frame render
+ draw_rectangle_lines(15 + int(frameRec.x), 40 + int(frameRec.y), int(frameRec.width), int(frameRec.height), RED)
+ draw_text("FRAME SPEED: ", 165, 210, 10, DARKGRAY)
+ draw_text(f" FPS {framesSpeed}", 575, 210, 10, DARKGRAY) #format string
+ draw_text("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 240, 10, DARKGRAY)
+ #display bar framesSpeed cap
+ for i in range(MAX_FRAME_SPEED):
+ if i < framesSpeed:
+ draw_rectangle(250 + 21*i, 205, 20, 20, RED)
+ draw_rectangle_lines(250 + 21*i, 205, 20, 20, MAROON)
+ #draw sprite sheet texture
+ draw_texture(scarfy, 15, 40, WHITE)
+ #draw sprite animation
+ draw_texture_rec(scarfy, frameRec, position,WHITE)
+
+ draw_text("(c) Scarfy sprite by Eiden Marsal", SCREEN_WIDTH - 200, SCREEN_HEIGHT - 20, 10, GRAY)
+
+ end_drawing()
+
+# De-Initialization
+unload_texture(scarfy)
+
+close_window() # Close window and OpenGL context
diff --git a/examples/textures/textures_to_image.py b/examples/textures/textures_to_image.py
new file mode 100644
index 0000000..87ec5ab
--- /dev/null
+++ b/examples/textures/textures_to_image.py
@@ -0,0 +1,55 @@
+"""
+
+raylib [texture] example - To image
+
+"""
+from pyray import *
+
+# Initialization
+screenWidth = 800
+screenHeight = 450
+
+init_window(screenWidth, screenHeight, "raylib [textures] example - texture to image")
+
+# NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
+
+image = load_image("resources/raylib_logo.png") # Load image data into CPU memory (RAM)
+texture = load_texture_from_image(image) # Image converted to texture, GPU memory (RAM -> VRAM)
+unload_image(image) # Unload image data from CPU memory (RAM)
+
+image = load_image_from_texture(texture) # Load image from GPU texture (VRAM -> RAM)
+unload_texture(texture) # Unload texture from GPU memory (VRAM)
+
+texture = load_texture_from_image(image) # Recreate texture from retrieved image data (RAM -> VRAM)
+unload_image(image) # Unload retrieved image data from CPU memory (RAM)
+# ---------------------------------------------------------------------------------------
+
+
+# Main game loop
+while not window_should_close(): # Detect window close button or ESC key
+
+ # Update
+ # ----------------------------------------------------------------------------------
+ # TODO: Update your variables here
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+
+ texture.width
+
+ draw_texture(texture, int(screenWidth/2 - texture.width/2), int(screenHeight/2 - texture.height/2), WHITE)
+
+ draw_text("this IS a texture loaded from an image!", 300, 370, 10, GRAY)
+
+ end_drawing()
+ # ----------------------------------------------------------------------------------
+
+# De-Initialization
+# ----------------------------------------------------------------------------------
+unload_texture(texture) # Unload render texture
+
+close_window() # Close window and OpenGL context
diff --git a/examples/textures/texures_srcrec_dstrec.py b/examples/textures/texures_srcrec_dstrec.py
new file mode 100644
index 0000000..9ab4650
--- /dev/null
+++ b/examples/textures/texures_srcrec_dstrec.py
@@ -0,0 +1,81 @@
+"""
+
+raylib [textures] example - Texture source and destination rectangles
+
+"""
+
+# Import
+# ------------------------------------------------------------------------------------
+from pyray import *
+# ------------------------------------------------------------------------------------
+
+# ------------------------------------------------------------------------------------
+# Program main entry point
+# ------------------------------------------------------------------------------------
+def main():
+ # Initialization
+ # ------------------------------------------------------------------------------------
+ SCREEN_WIDTH = 800
+ SCREEN_HEIGHT = 450
+
+ init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [textures] examples - texture source and destination rectangles")
+
+ # NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
+
+ scarfy = load_texture("resources/scarfy.png") # Texture loading
+
+ frame_width = scarfy.width / 6
+ frame_height = scarfy.height
+
+ # Source rectangle (part of the texture to use for drawing)
+ source_rec = Rectangle(0, 0, frame_width, frame_height)
+
+ # Destination rectangle (screen rectangle where drawing part of texture)
+ dest_rec = Rectangle(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, frame_width*2, frame_height*2)
+
+ # Origin of the texture (rotation/scale point), it's relative to destination rectangle size
+ origin = Vector2(frame_width, frame_height)
+
+ rotation = 0
+
+ set_target_fps(60) # Set our game to run at 60 frames-per-second
+ # ------------------------------------------------------------------------------------
+
+ # Main game loop
+ while not window_should_close(): # Detect window close button or ESC key
+ # Update
+ # ----------------------------------------------------------------------------------
+ rotation += 1
+ # ----------------------------------------------------------------------------------
+
+ # Draw
+ # ----------------------------------------------------------------------------------
+ begin_drawing()
+
+ clear_background(RAYWHITE)
+
+ # NOTE: Using DrawTexturePro() we can easily rotate and scale the part of the texture we draw
+ # sourceRec defines the part of the texture we use for drawing
+ # destRec defines the rectangle where our texture part will fit (scaling it to fit)
+ # origin defines the point of the texture used as reference for rotation and scaling
+ # rotation defines the texture rotation (using origin as rotation point)
+
+ draw_texture_pro(scarfy, source_rec, dest_rec, origin, rotation, WHITE)
+
+ draw_line(int(dest_rec.x), 0, int(dest_rec.x), SCREEN_HEIGHT, GRAY)
+ draw_line(0, int(dest_rec.y), SCREEN_WIDTH, int(dest_rec.y), GRAY)
+
+ draw_text("(c) Scarfy sprite by Eiden Marsal", SCREEN_WIDTH - 200, SCREEN_HEIGHT - 20, 10, GRAY)
+
+ end_drawing()
+ # ----------------------------------------------------------------------------------
+
+ # De-Initialization
+ # ----------------------------------------------------------------------------------
+ close_window() # Close window and OpenGL context
+ # ----------------------------------------------------------------------------------
+
+
+# Execute the main function
+if __name__ == '__main__':
+ main()
diff --git a/libraylib_mac.a b/libraylib_mac.a
deleted file mode 100644
index 37418a7..0000000
Binary files a/libraylib_mac.a and /dev/null differ
diff --git a/make_docs.sh b/make_docs.sh
new file mode 100755
index 0000000..fa748bc
--- /dev/null
+++ b/make_docs.sh
@@ -0,0 +1,68 @@
+#!/usr/bin/env bash
+
+echo "building and installing raylib"
+cd raylib-c
+rm -rf build
+mkdir build
+cd build
+cmake -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release ..
+make -j2
+sudo make install
+cd ../..
+
+echo "installing raylib headers to /usr/local/include"
+
+sudo cp -v ./raylib-c/src/raylib.h /usr/local/include/
+sudo cp -v ./raylib-c/src/rlgl.h /usr/local/include/
+sudo cp -v ./raylib-c/src/raymath.h /usr/local/include/
+sudo cp -v ./raygui/src/raygui.h /usr/local/include/
+sudo cp -v ./physac/src/physac.h /usr/local/include/
+sudo cp -rv ./raylib-c/src/external/glfw/include/GLFW /usr/local/include/
+
+echo "building raylib_parser"
+
+gcc raylib-c/parser/raylib_parser.c
+
+echo "running parser"
+
+./a.out -i raygui/src/raygui.h -d RAYGUIAPI -o raygui.json -f JSON
+./a.out -i physac/src/physac.h -d PHYSACDEF -o physac.json -f JSON
+./a.out -i raylib-c/src/raylib.h -o raylib.json -f JSON
+./a.out -i raylib-c/src/rlgl.h -o rlgl.json -f JSON
+./a.out -i raylib-c/src/raymath.h -d RMAPI -o raymath.json -f JSON
+./a.out -i raylib-c/src/external/glfw/include/GLFW/glfw3.h -d GLFWAPI -o glfw3.json -f JSON
+sed -i "s|\/\*.*,$|,|g" glfw3.json
+
+echo "building raylib_python_cffi"
+
+python3 raylib/build.py
+
+echo "creating enums.py"
+
+python3 -m pip install inflection --break-system-packages # TODO: venv
+python3 create_enums.py > raylib/enums.py
+python3 create_enums.py > dynamic/raylib/enums.py
+
+echo "creating defines.py"
+
+python3 create_define_consts.py | awk '!seen[$0]++' > raylib/defines.py
+python3 create_define_consts.py | awk '!seen[$0]++' > dynamic/raylib/defines.py
+
+
+echo "creating pyi files"
+
+python3 create_stub_pyray.py > pyray/__init__.pyi
+python3 create_stub_static.py >raylib/__init__.pyi
+python3 create_stub_static.py >dynamic/raylib/__init__.pyi
+
+echo "installing sphinx modules"
+
+python3 -m venv venv
+source venv/bin/activate
+pip3 install sphinx-autoapi myst_parser sphinx_rtd_theme
+
+echo "building docs"
+rm -r docs
+cd docs-src
+make clean ; make html ; mv _build/html/ ../docs/
+touch ../docs/.nojekyll
diff --git a/physac b/physac
new file mode 160000
index 0000000..587b639
--- /dev/null
+++ b/physac
@@ -0,0 +1 @@
+Subproject commit 587b63926010593eedf29ef74e3aa22c1a507925
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..fed528d
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools"]
+build-backend = "setuptools.build_meta"
diff --git a/pyray/__init__.py b/pyray/__init__.py
new file mode 100644
index 0000000..4a28587
--- /dev/null
+++ b/pyray/__init__.py
@@ -0,0 +1,159 @@
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+import re
+import weakref
+from array import array
+
+from raylib import rl, ffi
+from raylib.colors import *
+
+try:
+ from raylib.defines import *
+except AttributeError:
+ print("sorry deprecated enums dont work on dynamic version")
+
+from inspect import getmembers, isbuiltin
+
+current_module = __import__(__name__)
+
+
+def _underscore(word: str) -> str:
+ word = re.sub('2D$', '_2d', word)
+ word = re.sub('3D$', '_3d', word)
+ word = re.sub(r"([A-Z]+)([A-Z][a-z])", r'\1_\2', word)
+ word = re.sub(r"([a-z\d])([A-Z])", r'\1_\2', word)
+ word = word.replace("-", "_")
+ return word.lower()
+
+
+def _wrap_function(original_func):
+ c_args = [str(x) for x in ffi.typeof(original_func).args]
+ number_of_args = len(c_args)
+ c_arg_is_pointer = [x.kind == 'pointer' for x in ffi.typeof(original_func).args]
+ c_arg_is_string = [str(x) == "" for x in ffi.typeof(original_func).args]
+ # c_arg_is_void_pointer = [str(x) == "" for x in ffi.typeof(original_func).args]
+
+ def wrapped_func(*args):
+ args = list(args) # tuple is immutable, converting it to mutable list is faster than constructing new list!
+ for i in range(number_of_args):
+ try:
+ arg = args[i]
+ except IndexError:
+ raise RuntimeError(f"function requires {number_of_args} arguments but you supplied {len(args)}")
+ if c_arg_is_pointer[i]:
+ if c_arg_is_string[i]: # we assume c_arg is 'const char *'
+ try: # if it's a non-const 'char *' then user should be supplying a ctype pointer, not a Python
+ # string
+ args[i] = arg.encode('utf-8') # in that case this conversion will fail
+ except AttributeError: # but those functions are uncommon, so quicker on average to try the
+ # conversion
+ pass # and ignore the exception
+ # if user supplied a Python string but c_arg is a 'char *' not a 'const char *' then we ought to raise
+ # exception because its an out
+ # parameter and user should supply a ctype pointer, but we cant because cffi cant detect 'const'
+ # so we would have to get the info from raylib.json
+ elif c_args[i] == "" and type(arg) is list:
+ args[i] = [ffi.new("char[]", x.encode('utf-8')) for x in arg]
+ elif is_cdata(arg) and "*" not in str(arg):
+ args[i] = ffi.addressof(arg)
+ elif arg is None:
+ args[i] = ffi.NULL
+ elif not is_cdata(arg):
+ if c_args[i] == "":
+ raise TypeError(
+ f"Argument {i} ({arg}) must be a ctype bool, please create one with: pyray.ffi.new('bool "
+ f"*', True)")
+ elif c_args[i] == "":
+ raise TypeError(
+ f"Argument {i} ({arg}) must be a ctype int, please create one with: pyray.ffi.new('int "
+ f"*', 1)")
+ elif c_args[i] == "":
+ raise TypeError(
+ f"Argument {i} ({arg}) must be a ctype float, please create one with: pyray.ffi.new("
+ f"'float *', 1.0)")
+ elif c_args[i] == "":
+ # we could assume it's a string and try to convert it but we would have to be sure it's
+ # const. that seems reasonable assumption for char* but i'm not confident it is for void*
+ raise TypeError(
+ f"Argument {i} ({arg}) must be a cdata pointer. Type is void so I don't know what type it "
+ f"should be."
+ "If it's a const string you can create it with pyray.ffi.new('char []', b\"whatever\") . "
+ "If it's a float you can create it with pyray.ffi.new('float *', 1.0)")
+
+ result = original_func(*args)
+ if result is None:
+ return
+ elif is_cdata(result) and str(result).startswith("":
+ return ""
+ else:
+ return ffi.string(result).decode('utf-8')
+ else:
+ return result
+
+ # apparently pypy and cpython produce different types so check for both
+ def is_cdata(arg):
+ return str(type(arg)) == "" or str(
+ type(arg)) == ""
+
+ return wrapped_func
+
+
+global_weakkeydict = weakref.WeakKeyDictionary()
+
+
+def _make_struct_constructor_function(struct):
+ def func(*args):
+ # print(struct, args)
+ modified_args = []
+ for (field, arg) in zip(ffi.typeof(struct).fields, args):
+ # print("arg:", str(arg), "field:", field[1], "field type:", field[1].type, "type(arg):", str(type(arg)))
+ if arg is None:
+ arg = ffi.NULL
+ elif (field[1].type.kind == 'pointer'
+ and (str(type(arg)) == ""
+ or isinstance(arg, (array, bytes, bytearray, memoryview)))):
+ arg = ffi.from_buffer(field[1].type, arg)
+ modified_args.append(arg)
+ s = ffi.new(f"{struct} *", modified_args)[0]
+ global_weakkeydict[s] = modified_args
+ return s
+
+ return func
+
+
+for name, attr in getmembers(rl):
+ # print(name, attr)
+ uname = _underscore(name)
+ if isbuiltin(attr) or str(type(attr)) == "" or str(
+ type(attr)) == "":
+ # print(attr.__call__)
+ # print(attr.__doc__)
+ # print(dir(attr))
+ # print(dir(attr.__repr__))
+ f = _wrap_function(attr)
+ setattr(current_module, uname, f)
+ else:
+ setattr(current_module, name, attr)
+
+for struct in ffi.list_types()[0]:
+ f = _make_struct_constructor_function(struct)
+ setattr(current_module, struct, f)
+
+# overwrite ffi enums with our own
+from raylib.enums import *
+
+
+def text_format(*args):
+ raise RuntimeError("Use Python f-strings etc rather than calling text_format().")
diff --git a/pyray/__init__.pyi b/pyray/__init__.pyi
new file mode 100644
index 0000000..e8e8acb
--- /dev/null
+++ b/pyray/__init__.pyi
@@ -0,0 +1,4555 @@
+class ConfigFlags(int):
+ """System/Window config flags."""
+ 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_WINDOW_MOUSE_PASSTHROUGH = 16384
+ FLAG_BORDERLESS_WINDOWED_MODE = 32768
+ FLAG_MSAA_4X_HINT = 32
+ FLAG_INTERLACED_HINT = 65536
+
+class TraceLogLevel(int):
+ """Trace log level."""
+ LOG_ALL = 0
+ LOG_TRACE = 1
+ LOG_DEBUG = 2
+ LOG_INFO = 3
+ LOG_WARNING = 4
+ LOG_ERROR = 5
+ LOG_FATAL = 6
+ LOG_NONE = 7
+
+class KeyboardKey(int):
+ """Keyboard keys (US keyboard layout)."""
+ 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_LEFT_BRACKET = 91
+ KEY_BACKSLASH = 92
+ KEY_RIGHT_BRACKET = 93
+ KEY_GRAVE = 96
+ 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_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_MENU = 5
+ KEY_VOLUME_UP = 24
+ KEY_VOLUME_DOWN = 25
+
+class MouseButton(int):
+ """Mouse buttons."""
+ MOUSE_BUTTON_LEFT = 0
+ MOUSE_BUTTON_RIGHT = 1
+ MOUSE_BUTTON_MIDDLE = 2
+ MOUSE_BUTTON_SIDE = 3
+ MOUSE_BUTTON_EXTRA = 4
+ MOUSE_BUTTON_FORWARD = 5
+ MOUSE_BUTTON_BACK = 6
+
+class MouseCursor(int):
+ """Mouse cursor."""
+ 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
+
+class GamepadButton(int):
+ """Gamepad buttons."""
+ 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
+
+class GamepadAxis(int):
+ """Gamepad axis."""
+ 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
+
+class MaterialMapIndex(int):
+ """Material map index."""
+ 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_CUBEMAP = 7
+ MATERIAL_MAP_IRRADIANCE = 8
+ MATERIAL_MAP_PREFILTER = 9
+ MATERIAL_MAP_BRDF = 10
+
+class ShaderLocationIndex(int):
+ """Shader location index."""
+ 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
+ SHADER_LOC_VERTEX_BONEIDS = 26
+ SHADER_LOC_VERTEX_BONEWEIGHTS = 27
+ SHADER_LOC_BONE_MATRICES = 28
+
+class ShaderUniformDataType(int):
+ """Shader uniform data type."""
+ 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
+
+class ShaderAttributeDataType(int):
+ """Shader attribute data types."""
+ SHADER_ATTRIB_FLOAT = 0
+ SHADER_ATTRIB_VEC2 = 1
+ SHADER_ATTRIB_VEC3 = 2
+ SHADER_ATTRIB_VEC4 = 3
+
+class PixelFormat(int):
+ """Pixel formats."""
+ 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_UNCOMPRESSED_R8G8B8A8 = 7
+ PIXELFORMAT_UNCOMPRESSED_R32 = 8
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10
+ PIXELFORMAT_UNCOMPRESSED_R16 = 11
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16 = 12
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 = 13
+ PIXELFORMAT_COMPRESSED_DXT1_RGB = 14
+ PIXELFORMAT_COMPRESSED_DXT1_RGBA = 15
+ PIXELFORMAT_COMPRESSED_DXT3_RGBA = 16
+ PIXELFORMAT_COMPRESSED_DXT5_RGBA = 17
+ PIXELFORMAT_COMPRESSED_ETC1_RGB = 18
+ PIXELFORMAT_COMPRESSED_ETC2_RGB = 19
+ PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 20
+ PIXELFORMAT_COMPRESSED_PVRT_RGB = 21
+ PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22
+ PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 23
+ PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 24
+
+class TextureFilter(int):
+ """Texture parameters: filter mode."""
+ 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
+
+class TextureWrap(int):
+ """Texture parameters: wrap mode."""
+ TEXTURE_WRAP_REPEAT = 0
+ TEXTURE_WRAP_CLAMP = 1
+ TEXTURE_WRAP_MIRROR_REPEAT = 2
+ TEXTURE_WRAP_MIRROR_CLAMP = 3
+
+class CubemapLayout(int):
+ """Cubemap layouts."""
+ 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
+
+class FontType(int):
+ """Font type, defines generation method."""
+ FONT_DEFAULT = 0
+ FONT_BITMAP = 1
+ FONT_SDF = 2
+
+class BlendMode(int):
+ """Color blending modes (pre-defined)."""
+ BLEND_ALPHA = 0
+ BLEND_ADDITIVE = 1
+ BLEND_MULTIPLIED = 2
+ BLEND_ADD_COLORS = 3
+ BLEND_SUBTRACT_COLORS = 4
+ BLEND_ALPHA_PREMULTIPLY = 5
+ BLEND_CUSTOM = 6
+ BLEND_CUSTOM_SEPARATE = 7
+
+class Gesture(int):
+ """Gesture."""
+ 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
+
+class CameraMode(int):
+ """Camera system modes."""
+ CAMERA_CUSTOM = 0
+ CAMERA_FREE = 1
+ CAMERA_ORBITAL = 2
+ CAMERA_FIRST_PERSON = 3
+ CAMERA_THIRD_PERSON = 4
+
+class CameraProjection(int):
+ """Camera projection."""
+ CAMERA_PERSPECTIVE = 0
+ CAMERA_ORTHOGRAPHIC = 1
+
+class NPatchLayout(int):
+ """N-patch layout."""
+ NPATCH_NINE_PATCH = 0
+ NPATCH_THREE_PATCH_VERTICAL = 1
+ NPATCH_THREE_PATCH_HORIZONTAL = 2
+
+class rlGlVersion(int):
+ """OpenGL version."""
+ RL_OPENGL_11 = 1
+ RL_OPENGL_21 = 2
+ RL_OPENGL_33 = 3
+ RL_OPENGL_43 = 4
+ RL_OPENGL_ES_20 = 5
+ RL_OPENGL_ES_30 = 6
+
+class rlTraceLogLevel(int):
+ """Trace log level."""
+ RL_LOG_ALL = 0
+ RL_LOG_TRACE = 1
+ RL_LOG_DEBUG = 2
+ RL_LOG_INFO = 3
+ RL_LOG_WARNING = 4
+ RL_LOG_ERROR = 5
+ RL_LOG_FATAL = 6
+ RL_LOG_NONE = 7
+
+class rlPixelFormat(int):
+ """Texture pixel formats."""
+ RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1
+ RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2
+ RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3
+ RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4
+ RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5
+ RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6
+ RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7
+ RL_PIXELFORMAT_UNCOMPRESSED_R32 = 8
+ RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9
+ RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10
+ RL_PIXELFORMAT_UNCOMPRESSED_R16 = 11
+ RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16 = 12
+ RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 = 13
+ RL_PIXELFORMAT_COMPRESSED_DXT1_RGB = 14
+ RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA = 15
+ RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA = 16
+ RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA = 17
+ RL_PIXELFORMAT_COMPRESSED_ETC1_RGB = 18
+ RL_PIXELFORMAT_COMPRESSED_ETC2_RGB = 19
+ RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 20
+ RL_PIXELFORMAT_COMPRESSED_PVRT_RGB = 21
+ RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22
+ RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 23
+ RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 24
+
+class rlTextureFilter(int):
+ """Texture parameters: filter mode."""
+ RL_TEXTURE_FILTER_POINT = 0
+ RL_TEXTURE_FILTER_BILINEAR = 1
+ RL_TEXTURE_FILTER_TRILINEAR = 2
+ RL_TEXTURE_FILTER_ANISOTROPIC_4X = 3
+ RL_TEXTURE_FILTER_ANISOTROPIC_8X = 4
+ RL_TEXTURE_FILTER_ANISOTROPIC_16X = 5
+
+class rlBlendMode(int):
+ """Color blending modes (pre-defined)."""
+ RL_BLEND_ALPHA = 0
+ RL_BLEND_ADDITIVE = 1
+ RL_BLEND_MULTIPLIED = 2
+ RL_BLEND_ADD_COLORS = 3
+ RL_BLEND_SUBTRACT_COLORS = 4
+ RL_BLEND_ALPHA_PREMULTIPLY = 5
+ RL_BLEND_CUSTOM = 6
+ RL_BLEND_CUSTOM_SEPARATE = 7
+
+class rlShaderLocationIndex(int):
+ """Shader location point type."""
+ RL_SHADER_LOC_VERTEX_POSITION = 0
+ RL_SHADER_LOC_VERTEX_TEXCOORD01 = 1
+ RL_SHADER_LOC_VERTEX_TEXCOORD02 = 2
+ RL_SHADER_LOC_VERTEX_NORMAL = 3
+ RL_SHADER_LOC_VERTEX_TANGENT = 4
+ RL_SHADER_LOC_VERTEX_COLOR = 5
+ RL_SHADER_LOC_MATRIX_MVP = 6
+ RL_SHADER_LOC_MATRIX_VIEW = 7
+ RL_SHADER_LOC_MATRIX_PROJECTION = 8
+ RL_SHADER_LOC_MATRIX_MODEL = 9
+ RL_SHADER_LOC_MATRIX_NORMAL = 10
+ RL_SHADER_LOC_VECTOR_VIEW = 11
+ RL_SHADER_LOC_COLOR_DIFFUSE = 12
+ RL_SHADER_LOC_COLOR_SPECULAR = 13
+ RL_SHADER_LOC_COLOR_AMBIENT = 14
+ RL_SHADER_LOC_MAP_ALBEDO = 15
+ RL_SHADER_LOC_MAP_METALNESS = 16
+ RL_SHADER_LOC_MAP_NORMAL = 17
+ RL_SHADER_LOC_MAP_ROUGHNESS = 18
+ RL_SHADER_LOC_MAP_OCCLUSION = 19
+ RL_SHADER_LOC_MAP_EMISSION = 20
+ RL_SHADER_LOC_MAP_HEIGHT = 21
+ RL_SHADER_LOC_MAP_CUBEMAP = 22
+ RL_SHADER_LOC_MAP_IRRADIANCE = 23
+ RL_SHADER_LOC_MAP_PREFILTER = 24
+ RL_SHADER_LOC_MAP_BRDF = 25
+
+class rlShaderUniformDataType(int):
+ """Shader uniform data type."""
+ RL_SHADER_UNIFORM_FLOAT = 0
+ RL_SHADER_UNIFORM_VEC2 = 1
+ RL_SHADER_UNIFORM_VEC3 = 2
+ RL_SHADER_UNIFORM_VEC4 = 3
+ RL_SHADER_UNIFORM_INT = 4
+ RL_SHADER_UNIFORM_IVEC2 = 5
+ RL_SHADER_UNIFORM_IVEC3 = 6
+ RL_SHADER_UNIFORM_IVEC4 = 7
+ RL_SHADER_UNIFORM_UINT = 8
+ RL_SHADER_UNIFORM_UIVEC2 = 9
+ RL_SHADER_UNIFORM_UIVEC3 = 10
+ RL_SHADER_UNIFORM_UIVEC4 = 11
+ RL_SHADER_UNIFORM_SAMPLER2D = 12
+
+class rlShaderAttributeDataType(int):
+ """Shader attribute data types."""
+ RL_SHADER_ATTRIB_FLOAT = 0
+ RL_SHADER_ATTRIB_VEC2 = 1
+ RL_SHADER_ATTRIB_VEC3 = 2
+ RL_SHADER_ATTRIB_VEC4 = 3
+
+class rlFramebufferAttachType(int):
+ """Framebuffer attachment type."""
+ 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
+
+class rlFramebufferAttachTextureType(int):
+ """Framebuffer texture attachment type."""
+ 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
+
+class rlCullMode(int):
+ """Face culling mode."""
+ RL_CULL_FACE_FRONT = 0
+ RL_CULL_FACE_BACK = 1
+
+class GuiState(int):
+ """Gui control state."""
+ STATE_NORMAL = 0
+ STATE_FOCUSED = 1
+ STATE_PRESSED = 2
+ STATE_DISABLED = 3
+
+class GuiTextAlignment(int):
+ """Gui control text alignment."""
+ TEXT_ALIGN_LEFT = 0
+ TEXT_ALIGN_CENTER = 1
+ TEXT_ALIGN_RIGHT = 2
+
+class GuiTextAlignmentVertical(int):
+ """Gui control text alignment vertical."""
+ TEXT_ALIGN_TOP = 0
+ TEXT_ALIGN_MIDDLE = 1
+ TEXT_ALIGN_BOTTOM = 2
+
+class GuiTextWrapMode(int):
+ """Gui control text wrap mode."""
+ TEXT_WRAP_NONE = 0
+ TEXT_WRAP_CHAR = 1
+ TEXT_WRAP_WORD = 2
+
+class GuiControl(int):
+ """Gui controls."""
+ 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
+
+class GuiControlProperty(int):
+ """Gui base properties for every control."""
+ 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
+
+class GuiDefaultProperty(int):
+ """DEFAULT extended properties."""
+ TEXT_SIZE = 16
+ TEXT_SPACING = 17
+ LINE_COLOR = 18
+ BACKGROUND_COLOR = 19
+ TEXT_LINE_SPACING = 20
+ TEXT_ALIGNMENT_VERTICAL = 21
+ TEXT_WRAP_MODE = 22
+
+class GuiToggleProperty(int):
+ """Toggle/ToggleGroup."""
+ GROUP_PADDING = 16
+
+class GuiSliderProperty(int):
+ """Slider/SliderBar."""
+ SLIDER_WIDTH = 16
+ SLIDER_PADDING = 17
+
+class GuiProgressBarProperty(int):
+ """ProgressBar."""
+ PROGRESS_PADDING = 16
+
+class GuiScrollBarProperty(int):
+ """ScrollBar."""
+ ARROWS_SIZE = 16
+ ARROWS_VISIBLE = 17
+ SCROLL_SLIDER_PADDING = 18
+ SCROLL_SLIDER_SIZE = 19
+ SCROLL_PADDING = 20
+ SCROLL_SPEED = 21
+
+class GuiCheckBoxProperty(int):
+ """CheckBox."""
+ CHECK_PADDING = 16
+
+class GuiComboBoxProperty(int):
+ """ComboBox."""
+ COMBO_BUTTON_WIDTH = 16
+ COMBO_BUTTON_SPACING = 17
+
+class GuiDropdownBoxProperty(int):
+ """DropdownBox."""
+ ARROW_PADDING = 16
+ DROPDOWN_ITEMS_SPACING = 17
+ DROPDOWN_ARROW_HIDDEN = 18
+ DROPDOWN_ROLL_UP = 19
+
+class GuiTextBoxProperty(int):
+ """TextBox/TextBoxMulti/ValueBox/Spinner."""
+ TEXT_READONLY = 16
+
+class GuiSpinnerProperty(int):
+ """Spinner."""
+ SPIN_BUTTON_WIDTH = 16
+ SPIN_BUTTON_SPACING = 17
+
+class GuiListViewProperty(int):
+ """ListView."""
+ LIST_ITEMS_HEIGHT = 16
+ LIST_ITEMS_SPACING = 17
+ SCROLLBAR_WIDTH = 18
+ SCROLLBAR_SIDE = 19
+ LIST_ITEMS_BORDER_WIDTH = 20
+
+class GuiColorPickerProperty(int):
+ """ColorPicker."""
+ COLOR_SELECTOR_SIZE = 16
+ HUEBAR_WIDTH = 17
+ HUEBAR_PADDING = 18
+ HUEBAR_SELECTOR_HEIGHT = 19
+ HUEBAR_SELECTOR_OVERFLOW = 20
+
+class GuiIconName(int):
+ """."""
+ ICON_NONE = 0
+ ICON_FOLDER_FILE_OPEN = 1
+ ICON_FILE_SAVE_CLASSIC = 2
+ ICON_FOLDER_OPEN = 3
+ ICON_FOLDER_SAVE = 4
+ ICON_FILE_OPEN = 5
+ ICON_FILE_SAVE = 6
+ ICON_FILE_EXPORT = 7
+ ICON_FILE_ADD = 8
+ ICON_FILE_DELETE = 9
+ ICON_FILETYPE_TEXT = 10
+ ICON_FILETYPE_AUDIO = 11
+ ICON_FILETYPE_IMAGE = 12
+ ICON_FILETYPE_PLAY = 13
+ ICON_FILETYPE_VIDEO = 14
+ ICON_FILETYPE_INFO = 15
+ ICON_FILE_COPY = 16
+ ICON_FILE_CUT = 17
+ ICON_FILE_PASTE = 18
+ ICON_CURSOR_HAND = 19
+ ICON_CURSOR_POINTER = 20
+ ICON_CURSOR_CLASSIC = 21
+ ICON_PENCIL = 22
+ ICON_PENCIL_BIG = 23
+ ICON_BRUSH_CLASSIC = 24
+ ICON_BRUSH_PAINTER = 25
+ ICON_WATER_DROP = 26
+ ICON_COLOR_PICKER = 27
+ ICON_RUBBER = 28
+ ICON_COLOR_BUCKET = 29
+ ICON_TEXT_T = 30
+ ICON_TEXT_A = 31
+ ICON_SCALE = 32
+ ICON_RESIZE = 33
+ ICON_FILTER_POINT = 34
+ ICON_FILTER_BILINEAR = 35
+ ICON_CROP = 36
+ ICON_CROP_ALPHA = 37
+ ICON_SQUARE_TOGGLE = 38
+ ICON_SYMMETRY = 39
+ ICON_SYMMETRY_HORIZONTAL = 40
+ ICON_SYMMETRY_VERTICAL = 41
+ ICON_LENS = 42
+ ICON_LENS_BIG = 43
+ ICON_EYE_ON = 44
+ ICON_EYE_OFF = 45
+ ICON_FILTER_TOP = 46
+ ICON_FILTER = 47
+ ICON_TARGET_POINT = 48
+ ICON_TARGET_SMALL = 49
+ ICON_TARGET_BIG = 50
+ ICON_TARGET_MOVE = 51
+ ICON_CURSOR_MOVE = 52
+ ICON_CURSOR_SCALE = 53
+ ICON_CURSOR_SCALE_RIGHT = 54
+ ICON_CURSOR_SCALE_LEFT = 55
+ ICON_UNDO = 56
+ ICON_REDO = 57
+ ICON_REREDO = 58
+ ICON_MUTATE = 59
+ ICON_ROTATE = 60
+ ICON_REPEAT = 61
+ ICON_SHUFFLE = 62
+ ICON_EMPTYBOX = 63
+ ICON_TARGET = 64
+ ICON_TARGET_SMALL_FILL = 65
+ ICON_TARGET_BIG_FILL = 66
+ ICON_TARGET_MOVE_FILL = 67
+ ICON_CURSOR_MOVE_FILL = 68
+ ICON_CURSOR_SCALE_FILL = 69
+ ICON_CURSOR_SCALE_RIGHT_FILL = 70
+ ICON_CURSOR_SCALE_LEFT_FILL = 71
+ ICON_UNDO_FILL = 72
+ ICON_REDO_FILL = 73
+ ICON_REREDO_FILL = 74
+ ICON_MUTATE_FILL = 75
+ ICON_ROTATE_FILL = 76
+ ICON_REPEAT_FILL = 77
+ ICON_SHUFFLE_FILL = 78
+ ICON_EMPTYBOX_SMALL = 79
+ ICON_BOX = 80
+ ICON_BOX_TOP = 81
+ ICON_BOX_TOP_RIGHT = 82
+ ICON_BOX_RIGHT = 83
+ ICON_BOX_BOTTOM_RIGHT = 84
+ ICON_BOX_BOTTOM = 85
+ ICON_BOX_BOTTOM_LEFT = 86
+ ICON_BOX_LEFT = 87
+ ICON_BOX_TOP_LEFT = 88
+ ICON_BOX_CENTER = 89
+ ICON_BOX_CIRCLE_MASK = 90
+ ICON_POT = 91
+ ICON_ALPHA_MULTIPLY = 92
+ ICON_ALPHA_CLEAR = 93
+ ICON_DITHERING = 94
+ ICON_MIPMAPS = 95
+ ICON_BOX_GRID = 96
+ ICON_GRID = 97
+ ICON_BOX_CORNERS_SMALL = 98
+ ICON_BOX_CORNERS_BIG = 99
+ ICON_FOUR_BOXES = 100
+ ICON_GRID_FILL = 101
+ ICON_BOX_MULTISIZE = 102
+ ICON_ZOOM_SMALL = 103
+ ICON_ZOOM_MEDIUM = 104
+ ICON_ZOOM_BIG = 105
+ ICON_ZOOM_ALL = 106
+ ICON_ZOOM_CENTER = 107
+ ICON_BOX_DOTS_SMALL = 108
+ ICON_BOX_DOTS_BIG = 109
+ ICON_BOX_CONCENTRIC = 110
+ ICON_BOX_GRID_BIG = 111
+ ICON_OK_TICK = 112
+ ICON_CROSS = 113
+ ICON_ARROW_LEFT = 114
+ ICON_ARROW_RIGHT = 115
+ ICON_ARROW_DOWN = 116
+ ICON_ARROW_UP = 117
+ ICON_ARROW_LEFT_FILL = 118
+ ICON_ARROW_RIGHT_FILL = 119
+ ICON_ARROW_DOWN_FILL = 120
+ ICON_ARROW_UP_FILL = 121
+ ICON_AUDIO = 122
+ ICON_FX = 123
+ ICON_WAVE = 124
+ ICON_WAVE_SINUS = 125
+ ICON_WAVE_SQUARE = 126
+ ICON_WAVE_TRIANGULAR = 127
+ ICON_CROSS_SMALL = 128
+ ICON_PLAYER_PREVIOUS = 129
+ ICON_PLAYER_PLAY_BACK = 130
+ ICON_PLAYER_PLAY = 131
+ ICON_PLAYER_PAUSE = 132
+ ICON_PLAYER_STOP = 133
+ ICON_PLAYER_NEXT = 134
+ ICON_PLAYER_RECORD = 135
+ ICON_MAGNET = 136
+ ICON_LOCK_CLOSE = 137
+ ICON_LOCK_OPEN = 138
+ ICON_CLOCK = 139
+ ICON_TOOLS = 140
+ ICON_GEAR = 141
+ ICON_GEAR_BIG = 142
+ ICON_BIN = 143
+ ICON_HAND_POINTER = 144
+ ICON_LASER = 145
+ ICON_COIN = 146
+ ICON_EXPLOSION = 147
+ ICON_1UP = 148
+ ICON_PLAYER = 149
+ ICON_PLAYER_JUMP = 150
+ ICON_KEY = 151
+ ICON_DEMON = 152
+ ICON_TEXT_POPUP = 153
+ ICON_GEAR_EX = 154
+ ICON_CRACK = 155
+ ICON_CRACK_POINTS = 156
+ ICON_STAR = 157
+ ICON_DOOR = 158
+ ICON_EXIT = 159
+ ICON_MODE_2D = 160
+ ICON_MODE_3D = 161
+ ICON_CUBE = 162
+ ICON_CUBE_FACE_TOP = 163
+ ICON_CUBE_FACE_LEFT = 164
+ ICON_CUBE_FACE_FRONT = 165
+ ICON_CUBE_FACE_BOTTOM = 166
+ ICON_CUBE_FACE_RIGHT = 167
+ ICON_CUBE_FACE_BACK = 168
+ ICON_CAMERA = 169
+ ICON_SPECIAL = 170
+ ICON_LINK_NET = 171
+ ICON_LINK_BOXES = 172
+ ICON_LINK_MULTI = 173
+ ICON_LINK = 174
+ ICON_LINK_BROKE = 175
+ ICON_TEXT_NOTES = 176
+ ICON_NOTEBOOK = 177
+ ICON_SUITCASE = 178
+ ICON_SUITCASE_ZIP = 179
+ ICON_MAILBOX = 180
+ ICON_MONITOR = 181
+ ICON_PRINTER = 182
+ ICON_PHOTO_CAMERA = 183
+ ICON_PHOTO_CAMERA_FLASH = 184
+ ICON_HOUSE = 185
+ ICON_HEART = 186
+ ICON_CORNER = 187
+ ICON_VERTICAL_BARS = 188
+ ICON_VERTICAL_BARS_FILL = 189
+ ICON_LIFE_BARS = 190
+ ICON_INFO = 191
+ ICON_CROSSLINE = 192
+ ICON_HELP = 193
+ ICON_FILETYPE_ALPHA = 194
+ ICON_FILETYPE_HOME = 195
+ ICON_LAYERS_VISIBLE = 196
+ ICON_LAYERS = 197
+ ICON_WINDOW = 198
+ ICON_HIDPI = 199
+ ICON_FILETYPE_BINARY = 200
+ ICON_HEX = 201
+ ICON_SHIELD = 202
+ ICON_FILE_NEW = 203
+ ICON_FOLDER_ADD = 204
+ ICON_ALARM = 205
+ ICON_CPU = 206
+ ICON_ROM = 207
+ ICON_STEP_OVER = 208
+ ICON_STEP_INTO = 209
+ ICON_STEP_OUT = 210
+ ICON_RESTART = 211
+ ICON_BREAKPOINT_ON = 212
+ ICON_BREAKPOINT_OFF = 213
+ ICON_BURGER_MENU = 214
+ ICON_CASE_SENSITIVE = 215
+ ICON_REG_EXP = 216
+ ICON_FOLDER = 217
+ ICON_FILE = 218
+ ICON_SAND_TIMER = 219
+ ICON_WARNING = 220
+ ICON_HELP_BOX = 221
+ ICON_INFO_BOX = 222
+ ICON_PRIORITY = 223
+ ICON_LAYERS_ISO = 224
+ ICON_LAYERS2 = 225
+ ICON_MLAYERS = 226
+ ICON_MAPS = 227
+ ICON_HOT = 228
+ ICON_229 = 229
+ ICON_230 = 230
+ ICON_231 = 231
+ ICON_232 = 232
+ ICON_233 = 233
+ ICON_234 = 234
+ ICON_235 = 235
+ ICON_236 = 236
+ ICON_237 = 237
+ ICON_238 = 238
+ ICON_239 = 239
+ ICON_240 = 240
+ ICON_241 = 241
+ ICON_242 = 242
+ ICON_243 = 243
+ ICON_244 = 244
+ ICON_245 = 245
+ ICON_246 = 246
+ ICON_247 = 247
+ ICON_248 = 248
+ ICON_249 = 249
+ ICON_250 = 250
+ ICON_251 = 251
+ ICON_252 = 252
+ ICON_253 = 253
+ ICON_254 = 254
+ ICON_255 = 255
+
+from typing import Any
+from warnings import deprecated
+import _cffi_backend # type: ignore
+
+ffi: _cffi_backend.FFI
+PhysicsShapeType = int
+
+def attach_audio_mixed_processor(processor: Any,) -> None:
+ """Attach audio stream processor to the entire audio pipeline, receives the samples as 'float'."""
+ ...
+def attach_audio_stream_processor(stream: AudioStream|list|tuple,processor: Any,) -> None:
+ """Attach audio stream processor to stream, receives the samples as 'float'."""
+ ...
+def begin_blend_mode(mode: int,) -> None:
+ """Begin blending mode (alpha, additive, multiplied, subtract, custom)."""
+ ...
+def begin_drawing() -> None:
+ """Setup canvas (framebuffer) to start drawing."""
+ ...
+def begin_mode_2d(camera: Camera2D|list|tuple,) -> None:
+ """Begin 2D mode with custom camera (2D)."""
+ ...
+def begin_mode_3d(camera: Camera3D|list|tuple,) -> None:
+ """Begin 3D mode with custom camera (3D)."""
+ ...
+def begin_scissor_mode(x: int,y: int,width: int,height: int,) -> None:
+ """Begin scissor mode (define screen area for following drawing)."""
+ ...
+def begin_shader_mode(shader: Shader|list|tuple,) -> None:
+ """Begin custom shader drawing."""
+ ...
+def begin_texture_mode(target: RenderTexture|list|tuple,) -> None:
+ """Begin drawing to render texture."""
+ ...
+def begin_vr_stereo_mode(config: VrStereoConfig|list|tuple,) -> None:
+ """Begin stereo rendering (requires VR simulator)."""
+ ...
+def change_directory(dir: str,) -> bool:
+ """Change working directory, return true on success."""
+ ...
+def check_collision_box_sphere(box: BoundingBox|list|tuple,center: Vector3|list|tuple,radius: float,) -> bool:
+ """Check collision between box and sphere."""
+ ...
+def check_collision_boxes(box1: BoundingBox|list|tuple,box2: BoundingBox|list|tuple,) -> bool:
+ """Check collision between two bounding boxes."""
+ ...
+def check_collision_circle_line(center: Vector2|list|tuple,radius: float,p1: Vector2|list|tuple,p2: Vector2|list|tuple,) -> bool:
+ """Check if circle collides with a line created betweeen two points [p1] and [p2]."""
+ ...
+def check_collision_circle_rec(center: Vector2|list|tuple,radius: float,rec: Rectangle|list|tuple,) -> bool:
+ """Check collision between circle and rectangle."""
+ ...
+def check_collision_circles(center1: Vector2|list|tuple,radius1: float,center2: Vector2|list|tuple,radius2: float,) -> bool:
+ """Check collision between two circles."""
+ ...
+def check_collision_lines(startPos1: Vector2|list|tuple,endPos1: Vector2|list|tuple,startPos2: Vector2|list|tuple,endPos2: Vector2|list|tuple,collisionPoint: Any|list|tuple,) -> bool:
+ """Check the collision between two lines defined by two points each, returns collision point by reference."""
+ ...
+def check_collision_point_circle(point: Vector2|list|tuple,center: Vector2|list|tuple,radius: float,) -> bool:
+ """Check if point is inside circle."""
+ ...
+def check_collision_point_line(point: Vector2|list|tuple,p1: Vector2|list|tuple,p2: Vector2|list|tuple,threshold: int,) -> bool:
+ """Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]."""
+ ...
+def check_collision_point_poly(point: Vector2|list|tuple,points: Any|list|tuple,pointCount: int,) -> bool:
+ """Check if point is within a polygon described by array of vertices."""
+ ...
+def check_collision_point_rec(point: Vector2|list|tuple,rec: Rectangle|list|tuple,) -> bool:
+ """Check if point is inside rectangle."""
+ ...
+def check_collision_point_triangle(point: Vector2|list|tuple,p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,) -> bool:
+ """Check if point is inside a triangle."""
+ ...
+def check_collision_recs(rec1: Rectangle|list|tuple,rec2: Rectangle|list|tuple,) -> bool:
+ """Check collision between two rectangles."""
+ ...
+def check_collision_spheres(center1: Vector3|list|tuple,radius1: float,center2: Vector3|list|tuple,radius2: float,) -> bool:
+ """Check collision between two spheres."""
+ ...
+def clamp(value: float,min_1: float,max_2: float,) -> float:
+ """."""
+ ...
+def clear_background(color: Color|list|tuple,) -> None:
+ """Set background color (framebuffer clear color)."""
+ ...
+def clear_window_state(flags: int,) -> None:
+ """Clear window configuration state flags."""
+ ...
+def close_audio_device() -> None:
+ """Close the audio device and context."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def close_physics() -> None:
+ """Unitializes physics pointers and closes physics loop thread."""
+ ...
+def close_window() -> None:
+ """Close window and unload OpenGL context."""
+ ...
+def codepoint_to_utf8(codepoint: int,utf8Size: Any,) -> str:
+ """Encode one codepoint into UTF-8 byte array (array length returned as parameter)."""
+ ...
+def color_alpha(color: Color|list|tuple,alpha: float,) -> Color:
+ """Get color with alpha applied, alpha goes from 0.0f to 1.0f."""
+ ...
+def color_alpha_blend(dst: Color|list|tuple,src: Color|list|tuple,tint: Color|list|tuple,) -> Color:
+ """Get src alpha-blended into dst color with tint."""
+ ...
+def color_brightness(color: Color|list|tuple,factor: float,) -> Color:
+ """Get color with brightness correction, brightness factor goes from -1.0f to 1.0f."""
+ ...
+def color_contrast(color: Color|list|tuple,contrast: float,) -> Color:
+ """Get color with contrast correction, contrast values between -1.0f and 1.0f."""
+ ...
+def color_from_hsv(hue: float,saturation: float,value: float,) -> Color:
+ """Get a Color from HSV values, hue [0..360], saturation/value [0..1]."""
+ ...
+def color_from_normalized(normalized: Vector4|list|tuple,) -> Color:
+ """Get Color from normalized values [0..1]."""
+ ...
+def color_is_equal(col1: Color|list|tuple,col2: Color|list|tuple,) -> bool:
+ """Check if two colors are equal."""
+ ...
+def color_lerp(color1: Color|list|tuple,color2: Color|list|tuple,factor: float,) -> Color:
+ """Get color lerp interpolation between two colors, factor [0.0f..1.0f]."""
+ ...
+def color_normalize(color: Color|list|tuple,) -> Vector4:
+ """Get Color normalized as float [0..1]."""
+ ...
+def color_tint(color: Color|list|tuple,tint: Color|list|tuple,) -> Color:
+ """Get color multiplied with another color."""
+ ...
+def color_to_hsv(color: Color|list|tuple,) -> Vector3:
+ """Get HSV values for a Color, hue [0..360], saturation/value [0..1]."""
+ ...
+def color_to_int(color: Color|list|tuple,) -> int:
+ """Get hexadecimal value for a Color (0xRRGGBBAA)."""
+ ...
+def compress_data(data: str,dataSize: int,compDataSize: Any,) -> str:
+ """Compress data (DEFLATE algorithm), memory must be MemFree()."""
+ ...
+def compute_crc32(data: str,dataSize: int,) -> int:
+ """Compute CRC32 hash code."""
+ ...
+def compute_md5(data: str,dataSize: int,) -> Any:
+ """Compute MD5 hash code, returns static int[4] (16 bytes)."""
+ ...
+def compute_sha1(data: str,dataSize: int,) -> Any:
+ """Compute SHA1 hash code, returns static int[5] (20 bytes)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def create_physics_body_circle(pos: Vector2|list|tuple,radius: float,density: float,) -> Any:
+ """Creates a new circle physics body with generic parameters."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def create_physics_body_polygon(pos: Vector2|list|tuple,radius: float,sides: int,density: float,) -> Any:
+ """Creates a new polygon physics body with generic parameters."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def create_physics_body_rectangle(pos: Vector2|list|tuple,width: float,height: float,density: float,) -> Any:
+ """Creates a new rectangle physics body with generic parameters."""
+ ...
+def decode_data_base64(data: str,outputSize: Any,) -> str:
+ """Decode Base64 string data, memory must be MemFree()."""
+ ...
+def decompress_data(compData: str,compDataSize: int,dataSize: Any,) -> str:
+ """Decompress data (DEFLATE algorithm), memory must be MemFree()."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def destroy_physics_body(body: Any|list|tuple,) -> None:
+ """Unitializes and destroy a physics body."""
+ ...
+def detach_audio_mixed_processor(processor: Any,) -> None:
+ """Detach audio stream processor from the entire audio pipeline."""
+ ...
+def detach_audio_stream_processor(stream: AudioStream|list|tuple,processor: Any,) -> None:
+ """Detach audio stream processor from stream."""
+ ...
+def directory_exists(dirPath: str,) -> bool:
+ """Check if a directory path exists."""
+ ...
+def disable_cursor() -> None:
+ """Disables cursor (lock cursor)."""
+ ...
+def disable_event_waiting() -> None:
+ """Disable waiting for events on EndDrawing(), automatic events polling."""
+ ...
+def draw_billboard(camera: Camera3D|list|tuple,texture: Texture|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a billboard texture."""
+ ...
+def draw_billboard_pro(camera: Camera3D|list|tuple,texture: Texture|list|tuple,source: Rectangle|list|tuple,position: Vector3|list|tuple,up: Vector3|list|tuple,size: Vector2|list|tuple,origin: Vector2|list|tuple,rotation: float,tint: Color|list|tuple,) -> None:
+ """Draw a billboard texture defined by source and rotation."""
+ ...
+def draw_billboard_rec(camera: Camera3D|list|tuple,texture: Texture|list|tuple,source: Rectangle|list|tuple,position: Vector3|list|tuple,size: Vector2|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a billboard texture defined by source."""
+ ...
+def draw_bounding_box(box: BoundingBox|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw bounding box (wires)."""
+ ...
+def draw_capsule(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,radius: float,slices: int,rings: int,color: Color|list|tuple,) -> None:
+ """Draw a capsule with the center of its sphere caps at startPos and endPos."""
+ ...
+def draw_capsule_wires(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,radius: float,slices: int,rings: int,color: Color|list|tuple,) -> None:
+ """Draw capsule wireframe with the center of its sphere caps at startPos and endPos."""
+ ...
+def draw_circle(centerX: int,centerY: int,radius: float,color: Color|list|tuple,) -> None:
+ """Draw a color-filled circle."""
+ ...
+def draw_circle_3d(center: Vector3|list|tuple,radius: float,rotationAxis: Vector3|list|tuple,rotationAngle: float,color: Color|list|tuple,) -> None:
+ """Draw a circle in 3D world space."""
+ ...
+def draw_circle_gradient(centerX: int,centerY: int,radius: float,inner: Color|list|tuple,outer: Color|list|tuple,) -> None:
+ """Draw a gradient-filled circle."""
+ ...
+def draw_circle_lines(centerX: int,centerY: int,radius: float,color: Color|list|tuple,) -> None:
+ """Draw circle outline."""
+ ...
+def draw_circle_lines_v(center: Vector2|list|tuple,radius: float,color: Color|list|tuple,) -> None:
+ """Draw circle outline (Vector version)."""
+ ...
+def draw_circle_sector(center: Vector2|list|tuple,radius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw a piece of a circle."""
+ ...
+def draw_circle_sector_lines(center: Vector2|list|tuple,radius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw circle sector outline."""
+ ...
+def draw_circle_v(center: Vector2|list|tuple,radius: float,color: Color|list|tuple,) -> None:
+ """Draw a color-filled circle (Vector version)."""
+ ...
+def draw_cube(position: Vector3|list|tuple,width: float,height: float,length: float,color: Color|list|tuple,) -> None:
+ """Draw cube."""
+ ...
+def draw_cube_v(position: Vector3|list|tuple,size: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw cube (Vector version)."""
+ ...
+def draw_cube_wires(position: Vector3|list|tuple,width: float,height: float,length: float,color: Color|list|tuple,) -> None:
+ """Draw cube wires."""
+ ...
+def draw_cube_wires_v(position: Vector3|list|tuple,size: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw cube wires (Vector version)."""
+ ...
+def draw_cylinder(position: Vector3|list|tuple,radiusTop: float,radiusBottom: float,height: float,slices: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder/cone."""
+ ...
+def draw_cylinder_ex(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,startRadius: float,endRadius: float,sides: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder with base at startPos and top at endPos."""
+ ...
+def draw_cylinder_wires(position: Vector3|list|tuple,radiusTop: float,radiusBottom: float,height: float,slices: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder/cone wires."""
+ ...
+def draw_cylinder_wires_ex(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,startRadius: float,endRadius: float,sides: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder wires with base at startPos and top at endPos."""
+ ...
+def draw_ellipse(centerX: int,centerY: int,radiusH: float,radiusV: float,color: Color|list|tuple,) -> None:
+ """Draw ellipse."""
+ ...
+def draw_ellipse_lines(centerX: int,centerY: int,radiusH: float,radiusV: float,color: Color|list|tuple,) -> None:
+ """Draw ellipse outline."""
+ ...
+def draw_fps(posX: int,posY: int,) -> None:
+ """Draw current FPS."""
+ ...
+def draw_grid(slices: int,spacing: float,) -> None:
+ """Draw a grid (centered at (0, 0, 0))."""
+ ...
+def draw_line(startPosX: int,startPosY: int,endPosX: int,endPosY: int,color: Color|list|tuple,) -> None:
+ """Draw a line."""
+ ...
+def draw_line_3d(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a line in 3D world space."""
+ ...
+def draw_line_bezier(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw line segment cubic-bezier in-out interpolation."""
+ ...
+def draw_line_ex(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw a line (using triangles/quads)."""
+ ...
+def draw_line_strip(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw lines sequence (using gl lines)."""
+ ...
+def draw_line_v(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a line (using gl lines)."""
+ ...
+def draw_mesh(mesh: Mesh|list|tuple,material: Material|list|tuple,transform: Matrix|list|tuple,) -> None:
+ """Draw a 3d mesh with material and transform."""
+ ...
+def draw_mesh_instanced(mesh: Mesh|list|tuple,material: Material|list|tuple,transforms: Any|list|tuple,instances: int,) -> None:
+ """Draw multiple mesh instances with material and different transforms."""
+ ...
+def draw_model(model: Model|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a model (with texture if set)."""
+ ...
+def draw_model_ex(model: Model|list|tuple,position: Vector3|list|tuple,rotationAxis: Vector3|list|tuple,rotationAngle: float,scale: Vector3|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a model with extended parameters."""
+ ...
+def draw_model_points(model: Model|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a model as points."""
+ ...
+def draw_model_points_ex(model: Model|list|tuple,position: Vector3|list|tuple,rotationAxis: Vector3|list|tuple,rotationAngle: float,scale: Vector3|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a model as points with extended parameters."""
+ ...
+def draw_model_wires(model: Model|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a model wires (with texture if set)."""
+ ...
+def draw_model_wires_ex(model: Model|list|tuple,position: Vector3|list|tuple,rotationAxis: Vector3|list|tuple,rotationAngle: float,scale: Vector3|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a model wires (with texture if set) with extended parameters."""
+ ...
+def draw_pixel(posX: int,posY: int,color: Color|list|tuple,) -> None:
+ """Draw a pixel using geometry [Can be slow, use with care]."""
+ ...
+def draw_pixel_v(position: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a pixel using geometry (Vector version) [Can be slow, use with care]."""
+ ...
+def draw_plane(centerPos: Vector3|list|tuple,size: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a plane XZ."""
+ ...
+def draw_point_3d(position: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a point in 3D space, actually a small line."""
+ ...
+def draw_poly(center: Vector2|list|tuple,sides: int,radius: float,rotation: float,color: Color|list|tuple,) -> None:
+ """Draw a regular polygon (Vector version)."""
+ ...
+def draw_poly_lines(center: Vector2|list|tuple,sides: int,radius: float,rotation: float,color: Color|list|tuple,) -> None:
+ """Draw a polygon outline of n sides."""
+ ...
+def draw_poly_lines_ex(center: Vector2|list|tuple,sides: int,radius: float,rotation: float,lineThick: float,color: Color|list|tuple,) -> None:
+ """Draw a polygon outline of n sides with extended parameters."""
+ ...
+def draw_ray(ray: Ray|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a ray line."""
+ ...
+def draw_rectangle(posX: int,posY: int,width: int,height: int,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle."""
+ ...
+def draw_rectangle_gradient_ex(rec: Rectangle|list|tuple,topLeft: Color|list|tuple,bottomLeft: Color|list|tuple,topRight: Color|list|tuple,bottomRight: Color|list|tuple,) -> None:
+ """Draw a gradient-filled rectangle with custom vertex colors."""
+ ...
+def draw_rectangle_gradient_h(posX: int,posY: int,width: int,height: int,left: Color|list|tuple,right: Color|list|tuple,) -> None:
+ """Draw a horizontal-gradient-filled rectangle."""
+ ...
+def draw_rectangle_gradient_v(posX: int,posY: int,width: int,height: int,top: Color|list|tuple,bottom: Color|list|tuple,) -> None:
+ """Draw a vertical-gradient-filled rectangle."""
+ ...
+def draw_rectangle_lines(posX: int,posY: int,width: int,height: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle outline."""
+ ...
+def draw_rectangle_lines_ex(rec: Rectangle|list|tuple,lineThick: float,color: Color|list|tuple,) -> None:
+ """Draw rectangle outline with extended parameters."""
+ ...
+def draw_rectangle_pro(rec: Rectangle|list|tuple,origin: Vector2|list|tuple,rotation: float,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle with pro parameters."""
+ ...
+def draw_rectangle_rec(rec: Rectangle|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle."""
+ ...
+def draw_rectangle_rounded(rec: Rectangle|list|tuple,roundness: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle with rounded edges."""
+ ...
+def draw_rectangle_rounded_lines(rec: Rectangle|list|tuple,roundness: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle lines with rounded edges."""
+ ...
+def draw_rectangle_rounded_lines_ex(rec: Rectangle|list|tuple,roundness: float,segments: int,lineThick: float,color: Color|list|tuple,) -> None:
+ """Draw rectangle with rounded edges outline."""
+ ...
+def draw_rectangle_v(position: Vector2|list|tuple,size: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle (Vector version)."""
+ ...
+def draw_ring(center: Vector2|list|tuple,innerRadius: float,outerRadius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw ring."""
+ ...
+def draw_ring_lines(center: Vector2|list|tuple,innerRadius: float,outerRadius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw ring outline."""
+ ...
+def draw_sphere(centerPos: Vector3|list|tuple,radius: float,color: Color|list|tuple,) -> None:
+ """Draw sphere."""
+ ...
+def draw_sphere_ex(centerPos: Vector3|list|tuple,radius: float,rings: int,slices: int,color: Color|list|tuple,) -> None:
+ """Draw sphere with extended parameters."""
+ ...
+def draw_sphere_wires(centerPos: Vector3|list|tuple,radius: float,rings: int,slices: int,color: Color|list|tuple,) -> None:
+ """Draw sphere wires."""
+ ...
+def draw_spline_basis(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: B-Spline, minimum 4 points."""
+ ...
+def draw_spline_bezier_cubic(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]."""
+ ...
+def draw_spline_bezier_quadratic(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]."""
+ ...
+def draw_spline_catmull_rom(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Catmull-Rom, minimum 4 points."""
+ ...
+def draw_spline_linear(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Linear, minimum 2 points."""
+ ...
+def draw_spline_segment_basis(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: B-Spline, 4 points."""
+ ...
+def draw_spline_segment_bezier_cubic(p1: Vector2|list|tuple,c2: Vector2|list|tuple,c3: Vector2|list|tuple,p4: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Cubic Bezier, 2 points, 2 control points."""
+ ...
+def draw_spline_segment_bezier_quadratic(p1: Vector2|list|tuple,c2: Vector2|list|tuple,p3: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Quadratic Bezier, 2 points, 1 control point."""
+ ...
+def draw_spline_segment_catmull_rom(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Catmull-Rom, 4 points."""
+ ...
+def draw_spline_segment_linear(p1: Vector2|list|tuple,p2: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Linear, 2 points."""
+ ...
+def draw_text(text: str,posX: int,posY: int,fontSize: int,color: Color|list|tuple,) -> None:
+ """Draw text (using default font)."""
+ ...
+def draw_text_codepoint(font: Font|list|tuple,codepoint: int,position: Vector2|list|tuple,fontSize: float,tint: Color|list|tuple,) -> None:
+ """Draw one character (codepoint)."""
+ ...
+def draw_text_codepoints(font: Font|list|tuple,codepoints: Any,codepointCount: int,position: Vector2|list|tuple,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw multiple character (codepoint)."""
+ ...
+def draw_text_ex(font: Font|list|tuple,text: str,position: Vector2|list|tuple,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw text using font and additional parameters."""
+ ...
+def draw_text_pro(font: Font|list|tuple,text: str,position: Vector2|list|tuple,origin: Vector2|list|tuple,rotation: float,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw text using Font and pro parameters (rotation)."""
+ ...
+def draw_texture(texture: Texture|list|tuple,posX: int,posY: int,tint: Color|list|tuple,) -> None:
+ """Draw a Texture2D."""
+ ...
+def draw_texture_ex(texture: Texture|list|tuple,position: Vector2|list|tuple,rotation: float,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a Texture2D with extended parameters."""
+ ...
+def draw_texture_n_patch(texture: Texture|list|tuple,nPatchInfo: NPatchInfo|list|tuple,dest: Rectangle|list|tuple,origin: Vector2|list|tuple,rotation: float,tint: Color|list|tuple,) -> None:
+ """Draws a texture (or part of it) that stretches or shrinks nicely."""
+ ...
+def draw_texture_pro(texture: Texture|list|tuple,source: Rectangle|list|tuple,dest: Rectangle|list|tuple,origin: Vector2|list|tuple,rotation: float,tint: Color|list|tuple,) -> None:
+ """Draw a part of a texture defined by a rectangle with 'pro' parameters."""
+ ...
+def draw_texture_rec(texture: Texture|list|tuple,source: Rectangle|list|tuple,position: Vector2|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a part of a texture defined by a rectangle."""
+ ...
+def draw_texture_v(texture: Texture|list|tuple,position: Vector2|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a Texture2D with position defined as Vector2."""
+ ...
+def draw_triangle(v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled triangle (vertex in counter-clockwise order!)."""
+ ...
+def draw_triangle_3d(v1: Vector3|list|tuple,v2: Vector3|list|tuple,v3: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled triangle (vertex in counter-clockwise order!)."""
+ ...
+def draw_triangle_fan(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle fan defined by points (first vertex is the center)."""
+ ...
+def draw_triangle_lines(v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw triangle outline (vertex in counter-clockwise order!)."""
+ ...
+def draw_triangle_strip(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle strip defined by points."""
+ ...
+def draw_triangle_strip_3d(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle strip defined by points."""
+ ...
+def enable_cursor() -> None:
+ """Enables cursor (unlock cursor)."""
+ ...
+def enable_event_waiting() -> None:
+ """Enable waiting for events on EndDrawing(), no automatic event polling."""
+ ...
+def encode_data_base64(data: str,dataSize: int,outputSize: Any,) -> str:
+ """Encode data to Base64 string, memory must be MemFree()."""
+ ...
+def end_blend_mode() -> None:
+ """End blending mode (reset to default: alpha blending)."""
+ ...
+def end_drawing() -> None:
+ """End canvas drawing and swap buffers (double buffering)."""
+ ...
+def end_mode_2d() -> None:
+ """Ends 2D mode with custom camera."""
+ ...
+def end_mode_3d() -> None:
+ """Ends 3D mode and returns to default 2D orthographic mode."""
+ ...
+def end_scissor_mode() -> None:
+ """End scissor mode."""
+ ...
+def end_shader_mode() -> None:
+ """End custom shader drawing (use default shader)."""
+ ...
+def end_texture_mode() -> None:
+ """Ends drawing to render texture."""
+ ...
+def end_vr_stereo_mode() -> None:
+ """End stereo rendering (requires VR simulator)."""
+ ...
+def export_automation_event_list(list_0: AutomationEventList|list|tuple,fileName: str,) -> bool:
+ """Export automation events list as text file."""
+ ...
+def export_data_as_code(data: str,dataSize: int,fileName: str,) -> bool:
+ """Export data to code (.h), returns true on success."""
+ ...
+def export_font_as_code(font: Font|list|tuple,fileName: str,) -> bool:
+ """Export font as code file, returns true on success."""
+ ...
+def export_image(image: Image|list|tuple,fileName: str,) -> bool:
+ """Export image data to file, returns true on success."""
+ ...
+def export_image_as_code(image: Image|list|tuple,fileName: str,) -> bool:
+ """Export image as code file defining an array of bytes, returns true on success."""
+ ...
+def export_image_to_memory(image: Image|list|tuple,fileType: str,fileSize: Any,) -> str:
+ """Export image to memory buffer."""
+ ...
+def export_mesh(mesh: Mesh|list|tuple,fileName: str,) -> bool:
+ """Export mesh data to file, returns true on success."""
+ ...
+def export_mesh_as_code(mesh: Mesh|list|tuple,fileName: str,) -> bool:
+ """Export mesh as code file (.h) defining multiple arrays of vertex attributes."""
+ ...
+def export_wave(wave: Wave|list|tuple,fileName: str,) -> bool:
+ """Export wave data to file, returns true on success."""
+ ...
+def export_wave_as_code(wave: Wave|list|tuple,fileName: str,) -> bool:
+ """Export wave sample data to code (.h), returns true on success."""
+ ...
+def fade(color: Color|list|tuple,alpha: float,) -> Color:
+ """Get color with alpha applied, alpha goes from 0.0f to 1.0f."""
+ ...
+def file_exists(fileName: str,) -> bool:
+ """Check if file exists."""
+ ...
+def float_equals(x: float,y: float,) -> int:
+ """."""
+ ...
+def gen_image_cellular(width: int,height: int,tileSize: int,) -> Image:
+ """Generate image: cellular algorithm, bigger tileSize means bigger cells."""
+ ...
+def gen_image_checked(width: int,height: int,checksX: int,checksY: int,col1: Color|list|tuple,col2: Color|list|tuple,) -> Image:
+ """Generate image: checked."""
+ ...
+def gen_image_color(width: int,height: int,color: Color|list|tuple,) -> Image:
+ """Generate image: plain color."""
+ ...
+def gen_image_font_atlas(glyphs: Any|list|tuple,glyphRecs: Any|list|tuple,glyphCount: int,fontSize: int,padding: int,packMethod: int,) -> Image:
+ """Generate image font atlas using chars info."""
+ ...
+def gen_image_gradient_linear(width: int,height: int,direction: int,start: Color|list|tuple,end: Color|list|tuple,) -> Image:
+ """Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient."""
+ ...
+def gen_image_gradient_radial(width: int,height: int,density: float,inner: Color|list|tuple,outer: Color|list|tuple,) -> Image:
+ """Generate image: radial gradient."""
+ ...
+def gen_image_gradient_square(width: int,height: int,density: float,inner: Color|list|tuple,outer: Color|list|tuple,) -> Image:
+ """Generate image: square gradient."""
+ ...
+def gen_image_perlin_noise(width: int,height: int,offsetX: int,offsetY: int,scale: float,) -> Image:
+ """Generate image: perlin noise."""
+ ...
+def gen_image_text(width: int,height: int,text: str,) -> Image:
+ """Generate image: grayscale image from text data."""
+ ...
+def gen_image_white_noise(width: int,height: int,factor: float,) -> Image:
+ """Generate image: white noise."""
+ ...
+def gen_mesh_cone(radius: float,height: float,slices: int,) -> Mesh:
+ """Generate cone/pyramid mesh."""
+ ...
+def gen_mesh_cube(width: float,height: float,length: float,) -> Mesh:
+ """Generate cuboid mesh."""
+ ...
+def gen_mesh_cubicmap(cubicmap: Image|list|tuple,cubeSize: Vector3|list|tuple,) -> Mesh:
+ """Generate cubes-based map mesh from image data."""
+ ...
+def gen_mesh_cylinder(radius: float,height: float,slices: int,) -> Mesh:
+ """Generate cylinder mesh."""
+ ...
+def gen_mesh_heightmap(heightmap: Image|list|tuple,size: Vector3|list|tuple,) -> Mesh:
+ """Generate heightmap mesh from image data."""
+ ...
+def gen_mesh_hemi_sphere(radius: float,rings: int,slices: int,) -> Mesh:
+ """Generate half-sphere mesh (no bottom cap)."""
+ ...
+def gen_mesh_knot(radius: float,size: float,radSeg: int,sides: int,) -> Mesh:
+ """Generate trefoil knot mesh."""
+ ...
+def gen_mesh_plane(width: float,length: float,resX: int,resZ: int,) -> Mesh:
+ """Generate plane mesh (with subdivisions)."""
+ ...
+def gen_mesh_poly(sides: int,radius: float,) -> Mesh:
+ """Generate polygonal mesh."""
+ ...
+def gen_mesh_sphere(radius: float,rings: int,slices: int,) -> Mesh:
+ """Generate sphere mesh (standard sphere)."""
+ ...
+def gen_mesh_tangents(mesh: Any|list|tuple,) -> None:
+ """Compute mesh tangents."""
+ ...
+def gen_mesh_torus(radius: float,size: float,radSeg: int,sides: int,) -> Mesh:
+ """Generate torus mesh."""
+ ...
+def gen_texture_mipmaps(texture: Any|list|tuple,) -> None:
+ """Generate GPU mipmaps for a texture."""
+ ...
+def get_application_directory() -> str:
+ """Get the directory of the running application (uses static string)."""
+ ...
+def get_camera_matrix(camera: Camera3D|list|tuple,) -> Matrix:
+ """Get camera transform matrix (view matrix)."""
+ ...
+def get_camera_matrix_2d(camera: Camera2D|list|tuple,) -> Matrix:
+ """Get camera 2d transform matrix."""
+ ...
+def get_char_pressed() -> int:
+ """Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty."""
+ ...
+def get_clipboard_image() -> Image:
+ """Get clipboard image content."""
+ ...
+def get_clipboard_text() -> str:
+ """Get clipboard text content."""
+ ...
+def get_codepoint(text: str,codepointSize: Any,) -> int:
+ """Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure."""
+ ...
+def get_codepoint_count(text: str,) -> int:
+ """Get total number of codepoints in a UTF-8 encoded string."""
+ ...
+def get_codepoint_next(text: str,codepointSize: Any,) -> int:
+ """Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure."""
+ ...
+def get_codepoint_previous(text: str,codepointSize: Any,) -> int:
+ """Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure."""
+ ...
+def get_collision_rec(rec1: Rectangle|list|tuple,rec2: Rectangle|list|tuple,) -> Rectangle:
+ """Get collision rectangle for two rectangles collision."""
+ ...
+def get_color(hexValue: int,) -> Color:
+ """Get Color structure from hexadecimal value."""
+ ...
+def get_current_monitor() -> int:
+ """Get current monitor where window is placed."""
+ ...
+def get_directory_path(filePath: str,) -> str:
+ """Get full path for a given fileName with path (uses static string)."""
+ ...
+def get_fps() -> int:
+ """Get current FPS."""
+ ...
+def get_file_extension(fileName: str,) -> str:
+ """Get pointer to extension for a filename string (includes dot: '.png')."""
+ ...
+def get_file_length(fileName: str,) -> int:
+ """Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)."""
+ ...
+def get_file_mod_time(fileName: str,) -> int:
+ """Get file modification time (last write time)."""
+ ...
+def get_file_name(filePath: str,) -> str:
+ """Get pointer to filename for a path string."""
+ ...
+def get_file_name_without_ext(filePath: str,) -> str:
+ """Get filename string without extension (uses static string)."""
+ ...
+def get_font_default() -> Font:
+ """Get the default Font."""
+ ...
+def get_frame_time() -> float:
+ """Get time in seconds for last frame drawn (delta time)."""
+ ...
+def get_gamepad_axis_count(gamepad: int,) -> int:
+ """Get gamepad axis count for a gamepad."""
+ ...
+def get_gamepad_axis_movement(gamepad: int,axis: int,) -> float:
+ """Get axis movement value for a gamepad axis."""
+ ...
+def get_gamepad_button_pressed() -> int:
+ """Get the last gamepad button pressed."""
+ ...
+def get_gamepad_name(gamepad: int,) -> str:
+ """Get gamepad internal name id."""
+ ...
+def get_gesture_detected() -> int:
+ """Get latest detected gesture."""
+ ...
+def get_gesture_drag_angle() -> float:
+ """Get gesture drag angle."""
+ ...
+def get_gesture_drag_vector() -> Vector2:
+ """Get gesture drag vector."""
+ ...
+def get_gesture_hold_duration() -> float:
+ """Get gesture hold time in seconds."""
+ ...
+def get_gesture_pinch_angle() -> float:
+ """Get gesture pinch angle."""
+ ...
+def get_gesture_pinch_vector() -> Vector2:
+ """Get gesture pinch delta."""
+ ...
+def get_glyph_atlas_rec(font: Font|list|tuple,codepoint: int,) -> Rectangle:
+ """Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found."""
+ ...
+def get_glyph_index(font: Font|list|tuple,codepoint: int,) -> int:
+ """Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found."""
+ ...
+def get_glyph_info(font: Font|list|tuple,codepoint: int,) -> GlyphInfo:
+ """Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found."""
+ ...
+def get_image_alpha_border(image: Image|list|tuple,threshold: float,) -> Rectangle:
+ """Get image alpha border rectangle."""
+ ...
+def get_image_color(image: Image|list|tuple,x: int,y: int,) -> Color:
+ """Get image pixel color at (x, y) position."""
+ ...
+def get_key_pressed() -> int:
+ """Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty."""
+ ...
+def get_master_volume() -> float:
+ """Get master volume (listener)."""
+ ...
+def get_mesh_bounding_box(mesh: Mesh|list|tuple,) -> BoundingBox:
+ """Compute mesh bounding box limits."""
+ ...
+def get_model_bounding_box(model: Model|list|tuple,) -> BoundingBox:
+ """Compute model bounding box limits (considers all meshes)."""
+ ...
+def get_monitor_count() -> int:
+ """Get number of connected monitors."""
+ ...
+def get_monitor_height(monitor: int,) -> int:
+ """Get specified monitor height (current video mode used by monitor)."""
+ ...
+def get_monitor_name(monitor: int,) -> str:
+ """Get the human-readable, UTF-8 encoded name of the specified monitor."""
+ ...
+def get_monitor_physical_height(monitor: int,) -> int:
+ """Get specified monitor physical height in millimetres."""
+ ...
+def get_monitor_physical_width(monitor: int,) -> int:
+ """Get specified monitor physical width in millimetres."""
+ ...
+def get_monitor_position(monitor: int,) -> Vector2:
+ """Get specified monitor position."""
+ ...
+def get_monitor_refresh_rate(monitor: int,) -> int:
+ """Get specified monitor refresh rate."""
+ ...
+def get_monitor_width(monitor: int,) -> int:
+ """Get specified monitor width (current video mode used by monitor)."""
+ ...
+def get_mouse_delta() -> Vector2:
+ """Get mouse delta between frames."""
+ ...
+def get_mouse_position() -> Vector2:
+ """Get mouse position XY."""
+ ...
+def get_mouse_wheel_move() -> float:
+ """Get mouse wheel movement for X or Y, whichever is larger."""
+ ...
+def get_mouse_wheel_move_v() -> Vector2:
+ """Get mouse wheel movement for both X and Y."""
+ ...
+def get_mouse_x() -> int:
+ """Get mouse position X."""
+ ...
+def get_mouse_y() -> int:
+ """Get mouse position Y."""
+ ...
+def get_music_time_length(music: Music|list|tuple,) -> float:
+ """Get music time length (in seconds)."""
+ ...
+def get_music_time_played(music: Music|list|tuple,) -> float:
+ """Get current music time played (in seconds)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def get_physics_bodies_count() -> int:
+ """Returns the current amount of created physics bodies."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def get_physics_body(index: int,) -> Any:
+ """Returns a physics body of the bodies pool at a specific index."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def get_physics_shape_type(index: int,) -> int:
+ """Returns the physics body shape type (PHYSICS_CIRCLE or PHYSICS_POLYGON)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def get_physics_shape_vertex(body: Any|list|tuple,vertex: int,) -> Vector2:
+ """Returns transformed position of a body shape (body position + vertex transformed position)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def get_physics_shape_vertices_count(index: int,) -> int:
+ """Returns the amount of vertices of a physics body shape."""
+ ...
+def get_pixel_color(srcPtr: Any,format: int,) -> Color:
+ """Get Color from a source pixel pointer of certain format."""
+ ...
+def get_pixel_data_size(width: int,height: int,format: int,) -> int:
+ """Get pixel data size in bytes for certain format."""
+ ...
+def get_prev_directory_path(dirPath: str,) -> str:
+ """Get previous directory path for a given path (uses static string)."""
+ ...
+def get_random_value(min_0: int,max_1: int,) -> int:
+ """Get a random value between min and max (both included)."""
+ ...
+def get_ray_collision_box(ray: Ray|list|tuple,box: BoundingBox|list|tuple,) -> RayCollision:
+ """Get collision info between ray and box."""
+ ...
+def get_ray_collision_mesh(ray: Ray|list|tuple,mesh: Mesh|list|tuple,transform: Matrix|list|tuple,) -> RayCollision:
+ """Get collision info between ray and mesh."""
+ ...
+def get_ray_collision_quad(ray: Ray|list|tuple,p1: Vector3|list|tuple,p2: Vector3|list|tuple,p3: Vector3|list|tuple,p4: Vector3|list|tuple,) -> RayCollision:
+ """Get collision info between ray and quad."""
+ ...
+def get_ray_collision_sphere(ray: Ray|list|tuple,center: Vector3|list|tuple,radius: float,) -> RayCollision:
+ """Get collision info between ray and sphere."""
+ ...
+def get_ray_collision_triangle(ray: Ray|list|tuple,p1: Vector3|list|tuple,p2: Vector3|list|tuple,p3: Vector3|list|tuple,) -> RayCollision:
+ """Get collision info between ray and triangle."""
+ ...
+def get_render_height() -> int:
+ """Get current render height (it considers HiDPI)."""
+ ...
+def get_render_width() -> int:
+ """Get current render width (it considers HiDPI)."""
+ ...
+def get_screen_height() -> int:
+ """Get current screen height."""
+ ...
+def get_screen_to_world_2d(position: Vector2|list|tuple,camera: Camera2D|list|tuple,) -> Vector2:
+ """Get the world space position for a 2d camera screen space position."""
+ ...
+def get_screen_to_world_ray(position: Vector2|list|tuple,camera: Camera3D|list|tuple,) -> Ray:
+ """Get a ray trace from screen position (i.e mouse)."""
+ ...
+def get_screen_to_world_ray_ex(position: Vector2|list|tuple,camera: Camera3D|list|tuple,width: int,height: int,) -> Ray:
+ """Get a ray trace from screen position (i.e mouse) in a viewport."""
+ ...
+def get_screen_width() -> int:
+ """Get current screen width."""
+ ...
+def get_shader_location(shader: Shader|list|tuple,uniformName: str,) -> int:
+ """Get shader uniform location."""
+ ...
+def get_shader_location_attrib(shader: Shader|list|tuple,attribName: str,) -> int:
+ """Get shader attribute location."""
+ ...
+def get_shapes_texture() -> Texture:
+ """Get texture that is used for shapes drawing."""
+ ...
+def get_shapes_texture_rectangle() -> Rectangle:
+ """Get texture source rectangle that is used for shapes drawing."""
+ ...
+def get_spline_point_basis(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: B-Spline."""
+ ...
+def get_spline_point_bezier_cubic(p1: Vector2|list|tuple,c2: Vector2|list|tuple,c3: Vector2|list|tuple,p4: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Cubic Bezier."""
+ ...
+def get_spline_point_bezier_quad(p1: Vector2|list|tuple,c2: Vector2|list|tuple,p3: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Quadratic Bezier."""
+ ...
+def get_spline_point_catmull_rom(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Catmull-Rom."""
+ ...
+def get_spline_point_linear(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Linear."""
+ ...
+def get_time() -> float:
+ """Get elapsed time in seconds since InitWindow()."""
+ ...
+def get_touch_point_count() -> int:
+ """Get number of touch points."""
+ ...
+def get_touch_point_id(index: int,) -> int:
+ """Get touch point identifier for given index."""
+ ...
+def get_touch_position(index: int,) -> Vector2:
+ """Get touch position XY for a touch point index (relative to screen size)."""
+ ...
+def get_touch_x() -> int:
+ """Get touch position X for touch point 0 (relative to screen size)."""
+ ...
+def get_touch_y() -> int:
+ """Get touch position Y for touch point 0 (relative to screen size)."""
+ ...
+def get_window_handle() -> Any:
+ """Get native window handle."""
+ ...
+def get_window_position() -> Vector2:
+ """Get window position XY on monitor."""
+ ...
+def get_window_scale_dpi() -> Vector2:
+ """Get window scale DPI factor."""
+ ...
+def get_working_directory() -> str:
+ """Get current working directory (uses static string)."""
+ ...
+def get_world_to_screen(position: Vector3|list|tuple,camera: Camera3D|list|tuple,) -> Vector2:
+ """Get the screen space position for a 3d world space position."""
+ ...
+def get_world_to_screen_2d(position: Vector2|list|tuple,camera: Camera2D|list|tuple,) -> Vector2:
+ """Get the screen space position for a 2d camera world space position."""
+ ...
+def get_world_to_screen_ex(position: Vector3|list|tuple,camera: Camera3D|list|tuple,width: int,height: int,) -> Vector2:
+ """Get size position for a 3d world space position."""
+ ...
+def gui_button(bounds: Rectangle|list|tuple,text: str,) -> int:
+ """Button control, returns true when clicked."""
+ ...
+def gui_check_box(bounds: Rectangle|list|tuple,text: str,checked: Any,) -> int:
+ """Check Box control, returns true when active."""
+ ...
+def gui_color_bar_alpha(bounds: Rectangle|list|tuple,text: str,alpha: Any,) -> int:
+ """Color Bar Alpha control."""
+ ...
+def gui_color_bar_hue(bounds: Rectangle|list|tuple,text: str,value: Any,) -> int:
+ """Color Bar Hue control."""
+ ...
+def gui_color_panel(bounds: Rectangle|list|tuple,text: str,color: Any|list|tuple,) -> int:
+ """Color Panel control."""
+ ...
+def gui_color_panel_hsv(bounds: Rectangle|list|tuple,text: str,colorHsv: Any|list|tuple,) -> int:
+ """Color Panel control that updates Hue-Saturation-Value color value, used by GuiColorPickerHSV()."""
+ ...
+def gui_color_picker(bounds: Rectangle|list|tuple,text: str,color: Any|list|tuple,) -> int:
+ """Color Picker control (multiple color controls)."""
+ ...
+def gui_color_picker_hsv(bounds: Rectangle|list|tuple,text: str,colorHsv: Any|list|tuple,) -> int:
+ """Color Picker control that avoids conversion to RGB on each call (multiple color controls)."""
+ ...
+def gui_combo_box(bounds: Rectangle|list|tuple,text: str,active: Any,) -> int:
+ """Combo Box control."""
+ ...
+def gui_disable() -> None:
+ """Disable gui controls (global state)."""
+ ...
+def gui_disable_tooltip() -> None:
+ """Disable gui tooltips (global state)."""
+ ...
+def gui_draw_icon(iconId: int,posX: int,posY: int,pixelSize: int,color: Color|list|tuple,) -> None:
+ """Draw icon using pixel size at specified position."""
+ ...
+def gui_dropdown_box(bounds: Rectangle|list|tuple,text: str,active: Any,editMode: bool,) -> int:
+ """Dropdown Box control."""
+ ...
+def gui_dummy_rec(bounds: Rectangle|list|tuple,text: str,) -> int:
+ """Dummy control for placeholders."""
+ ...
+def gui_enable() -> None:
+ """Enable gui controls (global state)."""
+ ...
+def gui_enable_tooltip() -> None:
+ """Enable gui tooltips (global state)."""
+ ...
+def gui_get_font() -> Font:
+ """Get gui custom font (global state)."""
+ ...
+def gui_get_icons() -> Any:
+ """Get raygui icons data pointer."""
+ ...
+def gui_get_state() -> int:
+ """Get gui state (global state)."""
+ ...
+def gui_get_style(control: int,property: int,) -> int:
+ """Get one style property."""
+ ...
+def gui_grid(bounds: Rectangle|list|tuple,text: str,spacing: float,subdivs: int,mouseCell: Any|list|tuple,) -> int:
+ """Grid control."""
+ ...
+def gui_group_box(bounds: Rectangle|list|tuple,text: str,) -> int:
+ """Group Box control with text name."""
+ ...
+def gui_icon_text(iconId: int,text: str,) -> str:
+ """Get text with icon id prepended (if supported)."""
+ ...
+def gui_is_locked() -> bool:
+ """Check if gui is locked (global state)."""
+ ...
+def gui_label(bounds: Rectangle|list|tuple,text: str,) -> int:
+ """Label control."""
+ ...
+def gui_label_button(bounds: Rectangle|list|tuple,text: str,) -> int:
+ """Label button control, returns true when clicked."""
+ ...
+def gui_line(bounds: Rectangle|list|tuple,text: str,) -> int:
+ """Line separator control, could contain text."""
+ ...
+def gui_list_view(bounds: Rectangle|list|tuple,text: str,scrollIndex: Any,active: Any,) -> int:
+ """List View control."""
+ ...
+def gui_list_view_ex(bounds: Rectangle|list|tuple,text: list[str],count: int,scrollIndex: Any,active: Any,focus: Any,) -> int:
+ """List View with extended parameters."""
+ ...
+def gui_load_icons(fileName: str,loadIconsName: bool,) -> list[str]:
+ """Load raygui icons file (.rgi) into internal icons data."""
+ ...
+def gui_load_style(fileName: str,) -> None:
+ """Load style file over global style variable (.rgs)."""
+ ...
+def gui_load_style_default() -> None:
+ """Load style default over global style."""
+ ...
+def gui_lock() -> None:
+ """Lock gui controls (global state)."""
+ ...
+def gui_message_box(bounds: Rectangle|list|tuple,title: str,message: str,buttons: str,) -> int:
+ """Message Box control, displays a message."""
+ ...
+def gui_panel(bounds: Rectangle|list|tuple,text: str,) -> int:
+ """Panel control, useful to group controls."""
+ ...
+def gui_progress_bar(bounds: Rectangle|list|tuple,textLeft: str,textRight: str,value: Any,minValue: float,maxValue: float,) -> int:
+ """Progress Bar control."""
+ ...
+def gui_scroll_panel(bounds: Rectangle|list|tuple,text: str,content: Rectangle|list|tuple,scroll: Any|list|tuple,view: Any|list|tuple,) -> int:
+ """Scroll Panel control."""
+ ...
+def gui_set_alpha(alpha: float,) -> None:
+ """Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f."""
+ ...
+def gui_set_font(font: Font|list|tuple,) -> None:
+ """Set gui custom font (global state)."""
+ ...
+def gui_set_icon_scale(scale: int,) -> None:
+ """Set default icon drawing size."""
+ ...
+def gui_set_state(state: int,) -> None:
+ """Set gui state (global state)."""
+ ...
+def gui_set_style(control: int,property: int,value: int,) -> None:
+ """Set one style property."""
+ ...
+def gui_set_tooltip(tooltip: str,) -> None:
+ """Set tooltip string."""
+ ...
+def gui_slider(bounds: Rectangle|list|tuple,textLeft: str,textRight: str,value: Any,minValue: float,maxValue: float,) -> int:
+ """Slider control."""
+ ...
+def gui_slider_bar(bounds: Rectangle|list|tuple,textLeft: str,textRight: str,value: Any,minValue: float,maxValue: float,) -> int:
+ """Slider Bar control."""
+ ...
+def gui_spinner(bounds: Rectangle|list|tuple,text: str,value: Any,minValue: int,maxValue: int,editMode: bool,) -> int:
+ """Spinner control."""
+ ...
+def gui_status_bar(bounds: Rectangle|list|tuple,text: str,) -> int:
+ """Status Bar control, shows info text."""
+ ...
+def gui_tab_bar(bounds: Rectangle|list|tuple,text: list[str],count: int,active: Any,) -> int:
+ """Tab Bar control, returns TAB to be closed or -1."""
+ ...
+def gui_text_box(bounds: Rectangle|list|tuple,text: str,textSize: int,editMode: bool,) -> int:
+ """Text Box control, updates input text."""
+ ...
+def gui_text_input_box(bounds: Rectangle|list|tuple,title: str,message: str,buttons: str,text: str,textMaxSize: int,secretViewActive: Any,) -> int:
+ """Text Input Box control, ask for text, supports secret."""
+ ...
+def gui_toggle(bounds: Rectangle|list|tuple,text: str,active: Any,) -> int:
+ """Toggle Button control."""
+ ...
+def gui_toggle_group(bounds: Rectangle|list|tuple,text: str,active: Any,) -> int:
+ """Toggle Group control."""
+ ...
+def gui_toggle_slider(bounds: Rectangle|list|tuple,text: str,active: Any,) -> int:
+ """Toggle Slider control."""
+ ...
+def gui_unlock() -> None:
+ """Unlock gui controls (global state)."""
+ ...
+def gui_value_box(bounds: Rectangle|list|tuple,text: str,value: Any,minValue: int,maxValue: int,editMode: bool,) -> int:
+ """Value Box control, updates input text with numbers."""
+ ...
+def gui_value_box_float(bounds: Rectangle|list|tuple,text: str,textValue: str,value: Any,editMode: bool,) -> int:
+ """Value box control for float values."""
+ ...
+def gui_window_box(bounds: Rectangle|list|tuple,title: str,) -> int:
+ """Window Box control, shows a window that can be closed."""
+ ...
+def hide_cursor() -> None:
+ """Hides cursor."""
+ ...
+def image_alpha_clear(image: Any|list|tuple,color: Color|list|tuple,threshold: float,) -> None:
+ """Clear alpha channel to desired color."""
+ ...
+def image_alpha_crop(image: Any|list|tuple,threshold: float,) -> None:
+ """Crop image depending on alpha value."""
+ ...
+def image_alpha_mask(image: Any|list|tuple,alphaMask: Image|list|tuple,) -> None:
+ """Apply alpha mask to image."""
+ ...
+def image_alpha_premultiply(image: Any|list|tuple,) -> None:
+ """Premultiply alpha channel."""
+ ...
+def image_blur_gaussian(image: Any|list|tuple,blurSize: int,) -> None:
+ """Apply Gaussian blur using a box blur approximation."""
+ ...
+def image_clear_background(dst: Any|list|tuple,color: Color|list|tuple,) -> None:
+ """Clear image background with given color."""
+ ...
+def image_color_brightness(image: Any|list|tuple,brightness: int,) -> None:
+ """Modify image color: brightness (-255 to 255)."""
+ ...
+def image_color_contrast(image: Any|list|tuple,contrast: float,) -> None:
+ """Modify image color: contrast (-100 to 100)."""
+ ...
+def image_color_grayscale(image: Any|list|tuple,) -> None:
+ """Modify image color: grayscale."""
+ ...
+def image_color_invert(image: Any|list|tuple,) -> None:
+ """Modify image color: invert."""
+ ...
+def image_color_replace(image: Any|list|tuple,color: Color|list|tuple,replace: Color|list|tuple,) -> None:
+ """Modify image color: replace color."""
+ ...
+def image_color_tint(image: Any|list|tuple,color: Color|list|tuple,) -> None:
+ """Modify image color: tint."""
+ ...
+def image_copy(image: Image|list|tuple,) -> Image:
+ """Create an image duplicate (useful for transformations)."""
+ ...
+def image_crop(image: Any|list|tuple,crop: Rectangle|list|tuple,) -> None:
+ """Crop an image to a defined rectangle."""
+ ...
+def image_dither(image: Any|list|tuple,rBpp: int,gBpp: int,bBpp: int,aBpp: int,) -> None:
+ """Dither image data to 16bpp or lower (Floyd-Steinberg dithering)."""
+ ...
+def image_draw(dst: Any|list|tuple,src: Image|list|tuple,srcRec: Rectangle|list|tuple,dstRec: Rectangle|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a source image within a destination image (tint applied to source)."""
+ ...
+def image_draw_circle(dst: Any|list|tuple,centerX: int,centerY: int,radius: int,color: Color|list|tuple,) -> None:
+ """Draw a filled circle within an image."""
+ ...
+def image_draw_circle_lines(dst: Any|list|tuple,centerX: int,centerY: int,radius: int,color: Color|list|tuple,) -> None:
+ """Draw circle outline within an image."""
+ ...
+def image_draw_circle_lines_v(dst: Any|list|tuple,center: Vector2|list|tuple,radius: int,color: Color|list|tuple,) -> None:
+ """Draw circle outline within an image (Vector version)."""
+ ...
+def image_draw_circle_v(dst: Any|list|tuple,center: Vector2|list|tuple,radius: int,color: Color|list|tuple,) -> None:
+ """Draw a filled circle within an image (Vector version)."""
+ ...
+def image_draw_line(dst: Any|list|tuple,startPosX: int,startPosY: int,endPosX: int,endPosY: int,color: Color|list|tuple,) -> None:
+ """Draw line within an image."""
+ ...
+def image_draw_line_ex(dst: Any|list|tuple,start: Vector2|list|tuple,end: Vector2|list|tuple,thick: int,color: Color|list|tuple,) -> None:
+ """Draw a line defining thickness within an image."""
+ ...
+def image_draw_line_v(dst: Any|list|tuple,start: Vector2|list|tuple,end: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw line within an image (Vector version)."""
+ ...
+def image_draw_pixel(dst: Any|list|tuple,posX: int,posY: int,color: Color|list|tuple,) -> None:
+ """Draw pixel within an image."""
+ ...
+def image_draw_pixel_v(dst: Any|list|tuple,position: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw pixel within an image (Vector version)."""
+ ...
+def image_draw_rectangle(dst: Any|list|tuple,posX: int,posY: int,width: int,height: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle within an image."""
+ ...
+def image_draw_rectangle_lines(dst: Any|list|tuple,rec: Rectangle|list|tuple,thick: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle lines within an image."""
+ ...
+def image_draw_rectangle_rec(dst: Any|list|tuple,rec: Rectangle|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw rectangle within an image."""
+ ...
+def image_draw_rectangle_v(dst: Any|list|tuple,position: Vector2|list|tuple,size: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw rectangle within an image (Vector version)."""
+ ...
+def image_draw_text(dst: Any|list|tuple,text: str,posX: int,posY: int,fontSize: int,color: Color|list|tuple,) -> None:
+ """Draw text (using default font) within an image (destination)."""
+ ...
+def image_draw_text_ex(dst: Any|list|tuple,font: Font|list|tuple,text: str,position: Vector2|list|tuple,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw text (custom sprite font) within an image (destination)."""
+ ...
+def image_draw_triangle(dst: Any|list|tuple,v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw triangle within an image."""
+ ...
+def image_draw_triangle_ex(dst: Any|list|tuple,v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,c1: Color|list|tuple,c2: Color|list|tuple,c3: Color|list|tuple,) -> None:
+ """Draw triangle with interpolated colors within an image."""
+ ...
+def image_draw_triangle_fan(dst: Any|list|tuple,points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle fan defined by points within an image (first vertex is the center)."""
+ ...
+def image_draw_triangle_lines(dst: Any|list|tuple,v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw triangle outline within an image."""
+ ...
+def image_draw_triangle_strip(dst: Any|list|tuple,points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle strip defined by points within an image."""
+ ...
+def image_flip_horizontal(image: Any|list|tuple,) -> None:
+ """Flip image horizontally."""
+ ...
+def image_flip_vertical(image: Any|list|tuple,) -> None:
+ """Flip image vertically."""
+ ...
+def image_format(image: Any|list|tuple,newFormat: int,) -> None:
+ """Convert image data to desired format."""
+ ...
+def image_from_channel(image: Image|list|tuple,selectedChannel: int,) -> Image:
+ """Create an image from a selected channel of another image (GRAYSCALE)."""
+ ...
+def image_from_image(image: Image|list|tuple,rec: Rectangle|list|tuple,) -> Image:
+ """Create an image from another image piece."""
+ ...
+def image_kernel_convolution(image: Any|list|tuple,kernel: Any,kernelSize: int,) -> None:
+ """Apply custom square convolution kernel to image."""
+ ...
+def image_mipmaps(image: Any|list|tuple,) -> None:
+ """Compute all mipmap levels for a provided image."""
+ ...
+def image_resize(image: Any|list|tuple,newWidth: int,newHeight: int,) -> None:
+ """Resize image (Bicubic scaling algorithm)."""
+ ...
+def image_resize_canvas(image: Any|list|tuple,newWidth: int,newHeight: int,offsetX: int,offsetY: int,fill: Color|list|tuple,) -> None:
+ """Resize canvas and fill with color."""
+ ...
+def image_resize_nn(image: Any|list|tuple,newWidth: int,newHeight: int,) -> None:
+ """Resize image (Nearest-Neighbor scaling algorithm)."""
+ ...
+def image_rotate(image: Any|list|tuple,degrees: int,) -> None:
+ """Rotate image by input angle in degrees (-359 to 359)."""
+ ...
+def image_rotate_ccw(image: Any|list|tuple,) -> None:
+ """Rotate image counter-clockwise 90deg."""
+ ...
+def image_rotate_cw(image: Any|list|tuple,) -> None:
+ """Rotate image clockwise 90deg."""
+ ...
+def image_text(text: str,fontSize: int,color: Color|list|tuple,) -> Image:
+ """Create an image from text (default font)."""
+ ...
+def image_text_ex(font: Font|list|tuple,text: str,fontSize: float,spacing: float,tint: Color|list|tuple,) -> Image:
+ """Create an image from text (custom sprite font)."""
+ ...
+def image_to_pot(image: Any|list|tuple,fill: Color|list|tuple,) -> None:
+ """Convert image to POT (power-of-two)."""
+ ...
+def init_audio_device() -> None:
+ """Initialize audio device and context."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def init_physics() -> None:
+ """Initializes physics values, pointers and creates physics loop thread."""
+ ...
+def init_window(width: int,height: int,title: str,) -> None:
+ """Initialize window and OpenGL context."""
+ ...
+def is_audio_device_ready() -> bool:
+ """Check if audio device has been initialized successfully."""
+ ...
+def is_audio_stream_playing(stream: AudioStream|list|tuple,) -> bool:
+ """Check if audio stream is playing."""
+ ...
+def is_audio_stream_processed(stream: AudioStream|list|tuple,) -> bool:
+ """Check if any audio stream buffers requires refill."""
+ ...
+def is_audio_stream_valid(stream: AudioStream|list|tuple,) -> bool:
+ """Checks if an audio stream is valid (buffers initialized)."""
+ ...
+def is_cursor_hidden() -> bool:
+ """Check if cursor is not visible."""
+ ...
+def is_cursor_on_screen() -> bool:
+ """Check if cursor is on the screen."""
+ ...
+def is_file_dropped() -> bool:
+ """Check if a file has been dropped into window."""
+ ...
+def is_file_extension(fileName: str,ext: str,) -> bool:
+ """Check file extension (including point: .png, .wav)."""
+ ...
+def is_file_name_valid(fileName: str,) -> bool:
+ """Check if fileName is valid for the platform/OS."""
+ ...
+def is_font_valid(font: Font|list|tuple,) -> bool:
+ """Check if a font is valid (font data loaded, WARNING: GPU texture not checked)."""
+ ...
+def is_gamepad_available(gamepad: int,) -> bool:
+ """Check if a gamepad is available."""
+ ...
+def is_gamepad_button_down(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button is being pressed."""
+ ...
+def is_gamepad_button_pressed(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button has been pressed once."""
+ ...
+def is_gamepad_button_released(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button has been released once."""
+ ...
+def is_gamepad_button_up(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button is NOT being pressed."""
+ ...
+def is_gesture_detected(gesture: int,) -> bool:
+ """Check if a gesture have been detected."""
+ ...
+def is_image_valid(image: Image|list|tuple,) -> bool:
+ """Check if an image is valid (data and parameters)."""
+ ...
+def is_key_down(key: int,) -> bool:
+ """Check if a key is being pressed."""
+ ...
+def is_key_pressed(key: int,) -> bool:
+ """Check if a key has been pressed once."""
+ ...
+def is_key_pressed_repeat(key: int,) -> bool:
+ """Check if a key has been pressed again."""
+ ...
+def is_key_released(key: int,) -> bool:
+ """Check if a key has been released once."""
+ ...
+def is_key_up(key: int,) -> bool:
+ """Check if a key is NOT being pressed."""
+ ...
+def is_material_valid(material: Material|list|tuple,) -> bool:
+ """Check if a material is valid (shader assigned, map textures loaded in GPU)."""
+ ...
+def is_model_animation_valid(model: Model|list|tuple,anim: ModelAnimation|list|tuple,) -> bool:
+ """Check model animation skeleton match."""
+ ...
+def is_model_valid(model: Model|list|tuple,) -> bool:
+ """Check if a model is valid (loaded in GPU, VAO/VBOs)."""
+ ...
+def is_mouse_button_down(button: int,) -> bool:
+ """Check if a mouse button is being pressed."""
+ ...
+def is_mouse_button_pressed(button: int,) -> bool:
+ """Check if a mouse button has been pressed once."""
+ ...
+def is_mouse_button_released(button: int,) -> bool:
+ """Check if a mouse button has been released once."""
+ ...
+def is_mouse_button_up(button: int,) -> bool:
+ """Check if a mouse button is NOT being pressed."""
+ ...
+def is_music_stream_playing(music: Music|list|tuple,) -> bool:
+ """Check if music is playing."""
+ ...
+def is_music_valid(music: Music|list|tuple,) -> bool:
+ """Checks if a music stream is valid (context and buffers initialized)."""
+ ...
+def is_path_file(path: str,) -> bool:
+ """Check if a given path is a file or a directory."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def is_physics_enabled() -> bool:
+ """Returns true if physics thread is currently enabled."""
+ ...
+def is_render_texture_valid(target: RenderTexture|list|tuple,) -> bool:
+ """Check if a render texture is valid (loaded in GPU)."""
+ ...
+def is_shader_valid(shader: Shader|list|tuple,) -> bool:
+ """Check if a shader is valid (loaded on GPU)."""
+ ...
+def is_sound_playing(sound: Sound|list|tuple,) -> bool:
+ """Check if a sound is currently playing."""
+ ...
+def is_sound_valid(sound: Sound|list|tuple,) -> bool:
+ """Checks if a sound is valid (data loaded and buffers initialized)."""
+ ...
+def is_texture_valid(texture: Texture|list|tuple,) -> bool:
+ """Check if a texture is valid (loaded in GPU)."""
+ ...
+def is_wave_valid(wave: Wave|list|tuple,) -> bool:
+ """Checks if wave data is valid (data loaded and parameters)."""
+ ...
+def is_window_focused() -> bool:
+ """Check if window is currently focused."""
+ ...
+def is_window_fullscreen() -> bool:
+ """Check if window is currently fullscreen."""
+ ...
+def is_window_hidden() -> bool:
+ """Check if window is currently hidden."""
+ ...
+def is_window_maximized() -> bool:
+ """Check if window is currently maximized."""
+ ...
+def is_window_minimized() -> bool:
+ """Check if window is currently minimized."""
+ ...
+def is_window_ready() -> bool:
+ """Check if window has been initialized successfully."""
+ ...
+def is_window_resized() -> bool:
+ """Check if window has been resized last frame."""
+ ...
+def is_window_state(flag: int,) -> bool:
+ """Check if one specific window flag is enabled."""
+ ...
+def lerp(start: float,end: float,amount: float,) -> float:
+ """."""
+ ...
+def load_audio_stream(sampleRate: int,sampleSize: int,channels: int,) -> AudioStream:
+ """Load audio stream (to stream raw audio pcm data)."""
+ ...
+def load_automation_event_list(fileName: str,) -> AutomationEventList:
+ """Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS."""
+ ...
+def load_codepoints(text: str,count: Any,) -> Any:
+ """Load all codepoints from a UTF-8 text string, codepoints count returned by parameter."""
+ ...
+def load_directory_files(dirPath: str,) -> FilePathList:
+ """Load directory filepaths."""
+ ...
+def load_directory_files_ex(basePath: str,filter: str,scanSubdirs: bool,) -> FilePathList:
+ """Load directory filepaths with extension filtering and recursive directory scan. Use 'DIR' in the filter string to include directories in the result."""
+ ...
+def load_dropped_files() -> FilePathList:
+ """Load dropped filepaths."""
+ ...
+def load_file_data(fileName: str,dataSize: Any,) -> str:
+ """Load file data as byte array (read)."""
+ ...
+def load_file_text(fileName: str,) -> str:
+ """Load text data from file (read), returns a '\0' terminated string."""
+ ...
+def load_font(fileName: str,) -> Font:
+ """Load font from file into GPU memory (VRAM)."""
+ ...
+def load_font_data(fileData: str,dataSize: int,fontSize: int,codepoints: Any,codepointCount: int,type: int,) -> Any:
+ """Load font data for further use."""
+ ...
+def load_font_ex(fileName: str,fontSize: int,codepoints: Any,codepointCount: int,) -> Font:
+ """Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set, font size is provided in pixels height."""
+ ...
+def load_font_from_image(image: Image|list|tuple,key: Color|list|tuple,firstChar: int,) -> Font:
+ """Load font from Image (XNA style)."""
+ ...
+def load_font_from_memory(fileType: str,fileData: str,dataSize: int,fontSize: int,codepoints: Any,codepointCount: int,) -> Font:
+ """Load font from memory buffer, fileType refers to extension: i.e. '.ttf'."""
+ ...
+def load_image(fileName: str,) -> Image:
+ """Load image from file into CPU memory (RAM)."""
+ ...
+def load_image_anim(fileName: str,frames: Any,) -> Image:
+ """Load image sequence from file (frames appended to image.data)."""
+ ...
+def load_image_anim_from_memory(fileType: str,fileData: str,dataSize: int,frames: Any,) -> Image:
+ """Load image sequence from memory buffer."""
+ ...
+def load_image_colors(image: Image|list|tuple,) -> Any:
+ """Load color data from image as a Color array (RGBA - 32bit)."""
+ ...
+def load_image_from_memory(fileType: str,fileData: str,dataSize: int,) -> Image:
+ """Load image from memory buffer, fileType refers to extension: i.e. '.png'."""
+ ...
+def load_image_from_screen() -> Image:
+ """Load image from screen buffer and (screenshot)."""
+ ...
+def load_image_from_texture(texture: Texture|list|tuple,) -> Image:
+ """Load image from GPU texture data."""
+ ...
+def load_image_palette(image: Image|list|tuple,maxPaletteSize: int,colorCount: Any,) -> Any:
+ """Load colors palette from image as a Color array (RGBA - 32bit)."""
+ ...
+def load_image_raw(fileName: str,width: int,height: int,format: int,headerSize: int,) -> Image:
+ """Load image from RAW file data."""
+ ...
+def load_material_default() -> Material:
+ """Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)."""
+ ...
+def load_materials(fileName: str,materialCount: Any,) -> Any:
+ """Load materials from model file."""
+ ...
+def load_model(fileName: str,) -> Model:
+ """Load model from files (meshes and materials)."""
+ ...
+def load_model_animations(fileName: str,animCount: Any,) -> Any:
+ """Load model animations from file."""
+ ...
+def load_model_from_mesh(mesh: Mesh|list|tuple,) -> Model:
+ """Load model from generated mesh (default material)."""
+ ...
+def load_music_stream(fileName: str,) -> Music:
+ """Load music stream from file."""
+ ...
+def load_music_stream_from_memory(fileType: str,data: str,dataSize: int,) -> Music:
+ """Load music stream from data."""
+ ...
+def load_random_sequence(count: int,min_1: int,max_2: int,) -> Any:
+ """Load random values sequence, no values repeated."""
+ ...
+def load_render_texture(width: int,height: int,) -> RenderTexture:
+ """Load texture for rendering (framebuffer)."""
+ ...
+def load_shader(vsFileName: str,fsFileName: str,) -> Shader:
+ """Load shader from files and bind default locations."""
+ ...
+def load_shader_from_memory(vsCode: str,fsCode: str,) -> Shader:
+ """Load shader from code strings and bind default locations."""
+ ...
+def load_sound(fileName: str,) -> Sound:
+ """Load sound from file."""
+ ...
+def load_sound_alias(source: Sound|list|tuple,) -> Sound:
+ """Create a new sound that shares the same sample data as the source sound, does not own the sound data."""
+ ...
+def load_sound_from_wave(wave: Wave|list|tuple,) -> Sound:
+ """Load sound from wave data."""
+ ...
+def load_texture(fileName: str,) -> Texture:
+ """Load texture from file into GPU memory (VRAM)."""
+ ...
+def load_texture_cubemap(image: Image|list|tuple,layout: int,) -> Texture:
+ """Load cubemap from image, multiple image cubemap layouts supported."""
+ ...
+def load_texture_from_image(image: Image|list|tuple,) -> Texture:
+ """Load texture from image data."""
+ ...
+def load_utf8(codepoints: Any,length: int,) -> str:
+ """Load UTF-8 text encoded from codepoints array."""
+ ...
+def load_vr_stereo_config(device: VrDeviceInfo|list|tuple,) -> VrStereoConfig:
+ """Load VR stereo config for VR simulator device parameters."""
+ ...
+def load_wave(fileName: str,) -> Wave:
+ """Load wave data from file."""
+ ...
+def load_wave_from_memory(fileType: str,fileData: str,dataSize: int,) -> Wave:
+ """Load wave from memory buffer, fileType refers to extension: i.e. '.wav'."""
+ ...
+def load_wave_samples(wave: Wave|list|tuple,) -> Any:
+ """Load samples data from wave as a 32bit float data array."""
+ ...
+def make_directory(dirPath: str,) -> int:
+ """Create directories (including full path requested), returns 0 on success."""
+ ...
+def matrix_add(left: Matrix|list|tuple,right: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def matrix_decompose(mat: Matrix|list|tuple,translation: Any|list|tuple,rotation: Any|list|tuple,scale: Any|list|tuple,) -> None:
+ """."""
+ ...
+def matrix_determinant(mat: Matrix|list|tuple,) -> float:
+ """."""
+ ...
+def matrix_frustum(left: float,right: float,bottom: float,top: float,nearPlane: float,farPlane: float,) -> Matrix:
+ """."""
+ ...
+def matrix_identity() -> Matrix:
+ """."""
+ ...
+def matrix_invert(mat: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def matrix_look_at(eye: Vector3|list|tuple,target: Vector3|list|tuple,up: Vector3|list|tuple,) -> Matrix:
+ """."""
+ ...
+def matrix_multiply(left: Matrix|list|tuple,right: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def matrix_ortho(left: float,right: float,bottom: float,top: float,nearPlane: float,farPlane: float,) -> Matrix:
+ """."""
+ ...
+def matrix_perspective(fovY: float,aspect: float,nearPlane: float,farPlane: float,) -> Matrix:
+ """."""
+ ...
+def matrix_rotate(axis: Vector3|list|tuple,angle: float,) -> Matrix:
+ """."""
+ ...
+def matrix_rotate_x(angle: float,) -> Matrix:
+ """."""
+ ...
+def matrix_rotate_xyz(angle: Vector3|list|tuple,) -> Matrix:
+ """."""
+ ...
+def matrix_rotate_y(angle: float,) -> Matrix:
+ """."""
+ ...
+def matrix_rotate_z(angle: float,) -> Matrix:
+ """."""
+ ...
+def matrix_rotate_zyx(angle: Vector3|list|tuple,) -> Matrix:
+ """."""
+ ...
+def matrix_scale(x: float,y: float,z: float,) -> Matrix:
+ """."""
+ ...
+def matrix_subtract(left: Matrix|list|tuple,right: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def matrix_to_float_v(mat: Matrix|list|tuple,) -> float16:
+ """."""
+ ...
+def matrix_trace(mat: Matrix|list|tuple,) -> float:
+ """."""
+ ...
+def matrix_translate(x: float,y: float,z: float,) -> Matrix:
+ """."""
+ ...
+def matrix_transpose(mat: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def maximize_window() -> None:
+ """Set window state: maximized, if resizable."""
+ ...
+def measure_text(text: str,fontSize: int,) -> int:
+ """Measure string width for default font."""
+ ...
+def measure_text_ex(font: Font|list|tuple,text: str,fontSize: float,spacing: float,) -> Vector2:
+ """Measure string size for Font."""
+ ...
+def mem_alloc(size: int,) -> Any:
+ """Internal memory allocator."""
+ ...
+def mem_free(ptr: Any,) -> None:
+ """Internal memory free."""
+ ...
+def mem_realloc(ptr: Any,size: int,) -> Any:
+ """Internal memory reallocator."""
+ ...
+def minimize_window() -> None:
+ """Set window state: minimized, if resizable."""
+ ...
+def normalize(value: float,start: float,end: float,) -> float:
+ """."""
+ ...
+def open_url(url: str,) -> None:
+ """Open URL with default system browser (if available)."""
+ ...
+def pause_audio_stream(stream: AudioStream|list|tuple,) -> None:
+ """Pause audio stream."""
+ ...
+def pause_music_stream(music: Music|list|tuple,) -> None:
+ """Pause music playing."""
+ ...
+def pause_sound(sound: Sound|list|tuple,) -> None:
+ """Pause a sound."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def physics_add_force(body: Any|list|tuple,force: Vector2|list|tuple,) -> None:
+ """Adds a force to a physics body."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def physics_add_torque(body: Any|list|tuple,amount: float,) -> None:
+ """Adds an angular force to a physics body."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def physics_shatter(body: Any|list|tuple,position: Vector2|list|tuple,force: float,) -> None:
+ """Shatters a polygon shape physics body to little physics bodies with explosion force."""
+ ...
+def play_audio_stream(stream: AudioStream|list|tuple,) -> None:
+ """Play audio stream."""
+ ...
+def play_automation_event(event: AutomationEvent|list|tuple,) -> None:
+ """Play a recorded automation event."""
+ ...
+def play_music_stream(music: Music|list|tuple,) -> None:
+ """Start music playing."""
+ ...
+def play_sound(sound: Sound|list|tuple,) -> None:
+ """Play a sound."""
+ ...
+def poll_input_events() -> None:
+ """Register all input events."""
+ ...
+def quaternion_add(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def quaternion_add_value(q: Vector4|list|tuple,add: float,) -> Vector4:
+ """."""
+ ...
+def quaternion_cubic_hermite_spline(q1: Vector4|list|tuple,outTangent1: Vector4|list|tuple,q2: Vector4|list|tuple,inTangent2: Vector4|list|tuple,t: float,) -> Vector4:
+ """."""
+ ...
+def quaternion_divide(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def quaternion_equals(p: Vector4|list|tuple,q: Vector4|list|tuple,) -> int:
+ """."""
+ ...
+def quaternion_from_axis_angle(axis: Vector3|list|tuple,angle: float,) -> Vector4:
+ """."""
+ ...
+def quaternion_from_euler(pitch: float,yaw: float,roll: float,) -> Vector4:
+ """."""
+ ...
+def quaternion_from_matrix(mat: Matrix|list|tuple,) -> Vector4:
+ """."""
+ ...
+def quaternion_from_vector3_to_vector3(from_0: Vector3|list|tuple,to: Vector3|list|tuple,) -> Vector4:
+ """."""
+ ...
+def quaternion_identity() -> Vector4:
+ """."""
+ ...
+def quaternion_invert(q: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def quaternion_length(q: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def quaternion_lerp(q1: Vector4|list|tuple,q2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def quaternion_multiply(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def quaternion_nlerp(q1: Vector4|list|tuple,q2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def quaternion_normalize(q: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def quaternion_scale(q: Vector4|list|tuple,mul: float,) -> Vector4:
+ """."""
+ ...
+def quaternion_slerp(q1: Vector4|list|tuple,q2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def quaternion_subtract(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def quaternion_subtract_value(q: Vector4|list|tuple,sub: float,) -> Vector4:
+ """."""
+ ...
+def quaternion_to_axis_angle(q: Vector4|list|tuple,outAxis: Any|list|tuple,outAngle: Any,) -> None:
+ """."""
+ ...
+def quaternion_to_euler(q: Vector4|list|tuple,) -> Vector3:
+ """."""
+ ...
+def quaternion_to_matrix(q: Vector4|list|tuple,) -> Matrix:
+ """."""
+ ...
+def quaternion_transform(q: Vector4|list|tuple,mat: Matrix|list|tuple,) -> Vector4:
+ """."""
+ ...
+def remap(value: float,inputStart: float,inputEnd: float,outputStart: float,outputEnd: float,) -> float:
+ """."""
+ ...
+def restore_window() -> None:
+ """Set window state: not minimized/maximized."""
+ ...
+def resume_audio_stream(stream: AudioStream|list|tuple,) -> None:
+ """Resume audio stream."""
+ ...
+def resume_music_stream(music: Music|list|tuple,) -> None:
+ """Resume playing paused music."""
+ ...
+def resume_sound(sound: Sound|list|tuple,) -> None:
+ """Resume a paused sound."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def run_physics_step() -> None:
+ """Run physics step, to be used if PHYSICS_NO_THREADS is set in your main loop."""
+ ...
+def save_file_data(fileName: str,data: Any,dataSize: int,) -> bool:
+ """Save data to file from byte array (write), returns true on success."""
+ ...
+def save_file_text(fileName: str,text: str,) -> bool:
+ """Save text data to file (write), string must be '\0' terminated, returns true on success."""
+ ...
+def seek_music_stream(music: Music|list|tuple,position: float,) -> None:
+ """Seek music to a position (in seconds)."""
+ ...
+def set_audio_stream_buffer_size_default(size: int,) -> None:
+ """Default size for new audio streams."""
+ ...
+def set_audio_stream_callback(stream: AudioStream|list|tuple,callback: Any,) -> None:
+ """Audio thread callback to request new data."""
+ ...
+def set_audio_stream_pan(stream: AudioStream|list|tuple,pan: float,) -> None:
+ """Set pan for audio stream (0.5 is centered)."""
+ ...
+def set_audio_stream_pitch(stream: AudioStream|list|tuple,pitch: float,) -> None:
+ """Set pitch for audio stream (1.0 is base level)."""
+ ...
+def set_audio_stream_volume(stream: AudioStream|list|tuple,volume: float,) -> None:
+ """Set volume for audio stream (1.0 is max level)."""
+ ...
+def set_automation_event_base_frame(frame: int,) -> None:
+ """Set automation event internal base frame to start recording."""
+ ...
+def set_automation_event_list(list_0: Any|list|tuple,) -> None:
+ """Set automation event list to record to."""
+ ...
+def set_clipboard_text(text: str,) -> None:
+ """Set clipboard text content."""
+ ...
+def set_config_flags(flags: int,) -> None:
+ """Setup init configuration flags (view FLAGS)."""
+ ...
+def set_exit_key(key: int,) -> None:
+ """Set a custom key to exit program (default is ESC)."""
+ ...
+def set_gamepad_mappings(mappings: str,) -> int:
+ """Set internal gamepad mappings (SDL_GameControllerDB)."""
+ ...
+def set_gamepad_vibration(gamepad: int,leftMotor: float,rightMotor: float,duration: float,) -> None:
+ """Set gamepad vibration for both motors (duration in seconds)."""
+ ...
+def set_gestures_enabled(flags: int,) -> None:
+ """Enable a set of gestures using flags."""
+ ...
+def set_load_file_data_callback(callback: str,) -> None:
+ """Set custom file binary data loader."""
+ ...
+def set_load_file_text_callback(callback: str,) -> None:
+ """Set custom file text data loader."""
+ ...
+def set_master_volume(volume: float,) -> None:
+ """Set master volume (listener)."""
+ ...
+def set_material_texture(material: Any|list|tuple,mapType: int,texture: Texture|list|tuple,) -> None:
+ """Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)."""
+ ...
+def set_model_mesh_material(model: Any|list|tuple,meshId: int,materialId: int,) -> None:
+ """Set material for a mesh."""
+ ...
+def set_mouse_cursor(cursor: int,) -> None:
+ """Set mouse cursor."""
+ ...
+def set_mouse_offset(offsetX: int,offsetY: int,) -> None:
+ """Set mouse offset."""
+ ...
+def set_mouse_position(x: int,y: int,) -> None:
+ """Set mouse position XY."""
+ ...
+def set_mouse_scale(scaleX: float,scaleY: float,) -> None:
+ """Set mouse scaling."""
+ ...
+def set_music_pan(music: Music|list|tuple,pan: float,) -> None:
+ """Set pan for a music (0.5 is center)."""
+ ...
+def set_music_pitch(music: Music|list|tuple,pitch: float,) -> None:
+ """Set pitch for a music (1.0 is base level)."""
+ ...
+def set_music_volume(music: Music|list|tuple,volume: float,) -> None:
+ """Set volume for music (1.0 is max level)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def set_physics_body_rotation(body: Any|list|tuple,radians: float,) -> None:
+ """Sets physics body shape transform based on radians parameter."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def set_physics_gravity(x: float,y: float,) -> None:
+ """Sets physics global gravity force."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def set_physics_time_step(delta: float,) -> None:
+ """Sets physics fixed time step in milliseconds. 1.666666 by default."""
+ ...
+def set_pixel_color(dstPtr: Any,color: Color|list|tuple,format: int,) -> None:
+ """Set color formatted into destination pixel pointer."""
+ ...
+def set_random_seed(seed: int,) -> None:
+ """Set the seed for the random number generator."""
+ ...
+def set_save_file_data_callback(callback: str,) -> None:
+ """Set custom file binary data saver."""
+ ...
+def set_save_file_text_callback(callback: str,) -> None:
+ """Set custom file text data saver."""
+ ...
+def set_shader_value(shader: Shader|list|tuple,locIndex: int,value: Any,uniformType: int,) -> None:
+ """Set shader uniform value."""
+ ...
+def set_shader_value_matrix(shader: Shader|list|tuple,locIndex: int,mat: Matrix|list|tuple,) -> None:
+ """Set shader uniform value (matrix 4x4)."""
+ ...
+def set_shader_value_texture(shader: Shader|list|tuple,locIndex: int,texture: Texture|list|tuple,) -> None:
+ """Set shader uniform value for texture (sampler2d)."""
+ ...
+def set_shader_value_v(shader: Shader|list|tuple,locIndex: int,value: Any,uniformType: int,count: int,) -> None:
+ """Set shader uniform value vector."""
+ ...
+def set_shapes_texture(texture: Texture|list|tuple,source: Rectangle|list|tuple,) -> None:
+ """Set texture and rectangle to be used on shapes drawing."""
+ ...
+def set_sound_pan(sound: Sound|list|tuple,pan: float,) -> None:
+ """Set pan for a sound (0.5 is center)."""
+ ...
+def set_sound_pitch(sound: Sound|list|tuple,pitch: float,) -> None:
+ """Set pitch for a sound (1.0 is base level)."""
+ ...
+def set_sound_volume(sound: Sound|list|tuple,volume: float,) -> None:
+ """Set volume for a sound (1.0 is max level)."""
+ ...
+def set_target_fps(fps: int,) -> None:
+ """Set target FPS (maximum)."""
+ ...
+def set_text_line_spacing(spacing: int,) -> None:
+ """Set vertical line spacing when drawing with line-breaks."""
+ ...
+def set_texture_filter(texture: Texture|list|tuple,filter: int,) -> None:
+ """Set texture scaling filter mode."""
+ ...
+def set_texture_wrap(texture: Texture|list|tuple,wrap: int,) -> None:
+ """Set texture wrapping mode."""
+ ...
+def set_trace_log_callback(callback: str,) -> None:
+ """Set custom trace log."""
+ ...
+def set_trace_log_level(logLevel: int,) -> None:
+ """Set the current threshold (minimum) log level."""
+ ...
+def set_window_focused() -> None:
+ """Set window focused."""
+ ...
+def set_window_icon(image: Image|list|tuple,) -> None:
+ """Set icon for window (single image, RGBA 32bit)."""
+ ...
+def set_window_icons(images: Any|list|tuple,count: int,) -> None:
+ """Set icon for window (multiple images, RGBA 32bit)."""
+ ...
+def set_window_max_size(width: int,height: int,) -> None:
+ """Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)."""
+ ...
+def set_window_min_size(width: int,height: int,) -> None:
+ """Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)."""
+ ...
+def set_window_monitor(monitor: int,) -> None:
+ """Set monitor for the current window."""
+ ...
+def set_window_opacity(opacity: float,) -> None:
+ """Set window opacity [0.0f..1.0f]."""
+ ...
+def set_window_position(x: int,y: int,) -> None:
+ """Set window position on screen."""
+ ...
+def set_window_size(width: int,height: int,) -> None:
+ """Set window dimensions."""
+ ...
+def set_window_state(flags: int,) -> None:
+ """Set window configuration state using flags."""
+ ...
+def set_window_title(title: str,) -> None:
+ """Set title for window."""
+ ...
+def show_cursor() -> None:
+ """Shows cursor."""
+ ...
+def start_automation_event_recording() -> None:
+ """Start recording automation events (AutomationEventList must be set)."""
+ ...
+def stop_audio_stream(stream: AudioStream|list|tuple,) -> None:
+ """Stop audio stream."""
+ ...
+def stop_automation_event_recording() -> None:
+ """Stop recording automation events."""
+ ...
+def stop_music_stream(music: Music|list|tuple,) -> None:
+ """Stop music playing."""
+ ...
+def stop_sound(sound: Sound|list|tuple,) -> None:
+ """Stop playing a sound."""
+ ...
+def swap_screen_buffer() -> None:
+ """Swap back buffer with front buffer (screen drawing)."""
+ ...
+def take_screenshot(fileName: str,) -> None:
+ """Takes a screenshot of current screen (filename extension defines format)."""
+ ...
+def text_append(text: str,append: str,position: Any,) -> None:
+ """Append text at specific position and move cursor!."""
+ ...
+def text_copy(dst: str,src: str,) -> int:
+ """Copy one string to another, returns bytes copied."""
+ ...
+def text_find_index(text: str,find: str,) -> int:
+ """Find first text occurrence within a string."""
+ ...
+def text_format(*args) -> str:
+ """VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI"""
+ ...
+def text_insert(text: str,insert: str,position: int,) -> str:
+ """Insert text in a position (WARNING: memory must be freed!)."""
+ ...
+def text_is_equal(text1: str,text2: str,) -> bool:
+ """Check if two text string are equal."""
+ ...
+def text_join(textList: list[str],count: int,delimiter: str,) -> str:
+ """Join text strings with delimiter."""
+ ...
+def text_length(text: str,) -> int:
+ """Get text length, checks for '\0' ending."""
+ ...
+def text_replace(text: str,replace: str,by: str,) -> str:
+ """Replace text string (WARNING: memory must be freed!)."""
+ ...
+def text_split(text: str,delimiter: str,count: Any,) -> list[str]:
+ """Split text into multiple strings."""
+ ...
+def text_subtext(text: str,position: int,length: int,) -> str:
+ """Get a piece of a text string."""
+ ...
+def text_to_camel(text: str,) -> str:
+ """Get Camel case notation version of provided string."""
+ ...
+def text_to_float(text: str,) -> float:
+ """Get float value from text (negative values not supported)."""
+ ...
+def text_to_integer(text: str,) -> int:
+ """Get integer value from text (negative values not supported)."""
+ ...
+def text_to_lower(text: str,) -> str:
+ """Get lower case version of provided string."""
+ ...
+def text_to_pascal(text: str,) -> str:
+ """Get Pascal case notation version of provided string."""
+ ...
+def text_to_snake(text: str,) -> str:
+ """Get Snake case notation version of provided string."""
+ ...
+def text_to_upper(text: str,) -> str:
+ """Get upper case version of provided string."""
+ ...
+def toggle_borderless_windowed() -> None:
+ """Toggle window state: borderless windowed, resizes window to match monitor resolution."""
+ ...
+def toggle_fullscreen() -> None:
+ """Toggle window state: fullscreen/windowed, resizes monitor to match window resolution."""
+ ...
+def trace_log(*args) -> None:
+ """VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI"""
+ ...
+def unload_audio_stream(stream: AudioStream|list|tuple,) -> None:
+ """Unload audio stream and free memory."""
+ ...
+def unload_automation_event_list(list_0: AutomationEventList|list|tuple,) -> None:
+ """Unload automation events list from file."""
+ ...
+def unload_codepoints(codepoints: Any,) -> None:
+ """Unload codepoints data from memory."""
+ ...
+def unload_directory_files(files: FilePathList|list|tuple,) -> None:
+ """Unload filepaths."""
+ ...
+def unload_dropped_files(files: FilePathList|list|tuple,) -> None:
+ """Unload dropped filepaths."""
+ ...
+def unload_file_data(data: str,) -> None:
+ """Unload file data allocated by LoadFileData()."""
+ ...
+def unload_file_text(text: str,) -> None:
+ """Unload file text data allocated by LoadFileText()."""
+ ...
+def unload_font(font: Font|list|tuple,) -> None:
+ """Unload font from GPU memory (VRAM)."""
+ ...
+def unload_font_data(glyphs: Any|list|tuple,glyphCount: int,) -> None:
+ """Unload font chars info data (RAM)."""
+ ...
+def unload_image(image: Image|list|tuple,) -> None:
+ """Unload image from CPU memory (RAM)."""
+ ...
+def unload_image_colors(colors: Any|list|tuple,) -> None:
+ """Unload color data loaded with LoadImageColors()."""
+ ...
+def unload_image_palette(colors: Any|list|tuple,) -> None:
+ """Unload colors palette loaded with LoadImagePalette()."""
+ ...
+def unload_material(material: Material|list|tuple,) -> None:
+ """Unload material from GPU memory (VRAM)."""
+ ...
+def unload_mesh(mesh: Mesh|list|tuple,) -> None:
+ """Unload mesh data from CPU and GPU."""
+ ...
+def unload_model(model: Model|list|tuple,) -> None:
+ """Unload model (including meshes) from memory (RAM and/or VRAM)."""
+ ...
+def unload_model_animation(anim: ModelAnimation|list|tuple,) -> None:
+ """Unload animation data."""
+ ...
+def unload_model_animations(animations: Any|list|tuple,animCount: int,) -> None:
+ """Unload animation array data."""
+ ...
+def unload_music_stream(music: Music|list|tuple,) -> None:
+ """Unload music stream."""
+ ...
+def unload_random_sequence(sequence: Any,) -> None:
+ """Unload random values sequence."""
+ ...
+def unload_render_texture(target: RenderTexture|list|tuple,) -> None:
+ """Unload render texture from GPU memory (VRAM)."""
+ ...
+def unload_shader(shader: Shader|list|tuple,) -> None:
+ """Unload shader from GPU memory (VRAM)."""
+ ...
+def unload_sound(sound: Sound|list|tuple,) -> None:
+ """Unload sound."""
+ ...
+def unload_sound_alias(alias: Sound|list|tuple,) -> None:
+ """Unload a sound alias (does not deallocate sample data)."""
+ ...
+def unload_texture(texture: Texture|list|tuple,) -> None:
+ """Unload texture from GPU memory (VRAM)."""
+ ...
+def unload_utf8(text: str,) -> None:
+ """Unload UTF-8 text encoded from codepoints array."""
+ ...
+def unload_vr_stereo_config(config: VrStereoConfig|list|tuple,) -> None:
+ """Unload VR stereo config."""
+ ...
+def unload_wave(wave: Wave|list|tuple,) -> None:
+ """Unload wave data."""
+ ...
+def unload_wave_samples(samples: Any,) -> None:
+ """Unload samples data loaded with LoadWaveSamples()."""
+ ...
+def update_audio_stream(stream: AudioStream|list|tuple,data: Any,frameCount: int,) -> None:
+ """Update audio stream buffers with data."""
+ ...
+def update_camera(camera: Any|list|tuple,mode: int,) -> None:
+ """Update camera position for selected mode."""
+ ...
+def update_camera_pro(camera: Any|list|tuple,movement: Vector3|list|tuple,rotation: Vector3|list|tuple,zoom: float,) -> None:
+ """Update camera movement/rotation."""
+ ...
+def update_mesh_buffer(mesh: Mesh|list|tuple,index: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update mesh vertex data in GPU for a specific buffer index."""
+ ...
+def update_model_animation(model: Model|list|tuple,anim: ModelAnimation|list|tuple,frame: int,) -> None:
+ """Update model animation pose (CPU)."""
+ ...
+def update_model_animation_bones(model: Model|list|tuple,anim: ModelAnimation|list|tuple,frame: int,) -> None:
+ """Update model animation mesh bone matrices (GPU skinning)."""
+ ...
+def update_music_stream(music: Music|list|tuple,) -> None:
+ """Updates buffers for music streaming."""
+ ...
+def update_sound(sound: Sound|list|tuple,data: Any,sampleCount: int,) -> None:
+ """Update sound buffer with new data."""
+ ...
+def update_texture(texture: Texture|list|tuple,pixels: Any,) -> None:
+ """Update GPU texture with new data."""
+ ...
+def update_texture_rec(texture: Texture|list|tuple,rec: Rectangle|list|tuple,pixels: Any,) -> None:
+ """Update GPU texture rectangle with new data."""
+ ...
+def upload_mesh(mesh: Any|list|tuple,dynamic: bool,) -> None:
+ """Upload mesh vertex data in GPU and provide VAO/VBO ids."""
+ ...
+def vector2_add(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_add_value(v: Vector2|list|tuple,add: float,) -> Vector2:
+ """."""
+ ...
+def vector2_angle(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def vector2_clamp(v: Vector2|list|tuple,min_1: Vector2|list|tuple,max_2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_clamp_value(v: Vector2|list|tuple,min_1: float,max_2: float,) -> Vector2:
+ """."""
+ ...
+def vector2_distance(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def vector2_distance_sqr(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def vector2_divide(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_dot_product(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def vector2_equals(p: Vector2|list|tuple,q: Vector2|list|tuple,) -> int:
+ """."""
+ ...
+def vector2_invert(v: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_length(v: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def vector2_length_sqr(v: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def vector2_lerp(v1: Vector2|list|tuple,v2: Vector2|list|tuple,amount: float,) -> Vector2:
+ """."""
+ ...
+def vector2_line_angle(start: Vector2|list|tuple,end: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def vector2_max(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_min(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_move_towards(v: Vector2|list|tuple,target: Vector2|list|tuple,maxDistance: float,) -> Vector2:
+ """."""
+ ...
+def vector2_multiply(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_negate(v: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_normalize(v: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_one() -> Vector2:
+ """."""
+ ...
+def vector2_reflect(v: Vector2|list|tuple,normal: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_refract(v: Vector2|list|tuple,n: Vector2|list|tuple,r: float,) -> Vector2:
+ """."""
+ ...
+def vector2_rotate(v: Vector2|list|tuple,angle: float,) -> Vector2:
+ """."""
+ ...
+def vector2_scale(v: Vector2|list|tuple,scale: float,) -> Vector2:
+ """."""
+ ...
+def vector2_subtract(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_subtract_value(v: Vector2|list|tuple,sub: float,) -> Vector2:
+ """."""
+ ...
+def vector2_transform(v: Vector2|list|tuple,mat: Matrix|list|tuple,) -> Vector2:
+ """."""
+ ...
+def vector2_zero() -> Vector2:
+ """."""
+ ...
+def vector3_add(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_add_value(v: Vector3|list|tuple,add: float,) -> Vector3:
+ """."""
+ ...
+def vector3_angle(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def vector3_barycenter(p: Vector3|list|tuple,a: Vector3|list|tuple,b: Vector3|list|tuple,c: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_clamp(v: Vector3|list|tuple,min_1: Vector3|list|tuple,max_2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_clamp_value(v: Vector3|list|tuple,min_1: float,max_2: float,) -> Vector3:
+ """."""
+ ...
+def vector3_cross_product(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_cubic_hermite(v1: Vector3|list|tuple,tangent1: Vector3|list|tuple,v2: Vector3|list|tuple,tangent2: Vector3|list|tuple,amount: float,) -> Vector3:
+ """."""
+ ...
+def vector3_distance(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def vector3_distance_sqr(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def vector3_divide(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_dot_product(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def vector3_equals(p: Vector3|list|tuple,q: Vector3|list|tuple,) -> int:
+ """."""
+ ...
+def vector3_invert(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_length(v: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def vector3_length_sqr(v: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def vector3_lerp(v1: Vector3|list|tuple,v2: Vector3|list|tuple,amount: float,) -> Vector3:
+ """."""
+ ...
+def vector3_max(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_min(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_move_towards(v: Vector3|list|tuple,target: Vector3|list|tuple,maxDistance: float,) -> Vector3:
+ """."""
+ ...
+def vector3_multiply(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_negate(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_normalize(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_one() -> Vector3:
+ """."""
+ ...
+def vector3_ortho_normalize(v1: Any|list|tuple,v2: Any|list|tuple,) -> None:
+ """."""
+ ...
+def vector3_perpendicular(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_project(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_reflect(v: Vector3|list|tuple,normal: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_refract(v: Vector3|list|tuple,n: Vector3|list|tuple,r: float,) -> Vector3:
+ """."""
+ ...
+def vector3_reject(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_rotate_by_axis_angle(v: Vector3|list|tuple,axis: Vector3|list|tuple,angle: float,) -> Vector3:
+ """."""
+ ...
+def vector3_rotate_by_quaternion(v: Vector3|list|tuple,q: Vector4|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_scale(v: Vector3|list|tuple,scalar: float,) -> Vector3:
+ """."""
+ ...
+def vector3_subtract(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_subtract_value(v: Vector3|list|tuple,sub: float,) -> Vector3:
+ """."""
+ ...
+def vector3_to_float_v(v: Vector3|list|tuple,) -> float3:
+ """."""
+ ...
+def vector3_transform(v: Vector3|list|tuple,mat: Matrix|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_unproject(source: Vector3|list|tuple,projection: Matrix|list|tuple,view: Matrix|list|tuple,) -> Vector3:
+ """."""
+ ...
+def vector3_zero() -> Vector3:
+ """."""
+ ...
+def vector4_add(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def vector4_add_value(v: Vector4|list|tuple,add: float,) -> Vector4:
+ """."""
+ ...
+def vector4_distance(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def vector4_distance_sqr(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def vector4_divide(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def vector4_dot_product(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def vector4_equals(p: Vector4|list|tuple,q: Vector4|list|tuple,) -> int:
+ """."""
+ ...
+def vector4_invert(v: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def vector4_length(v: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def vector4_length_sqr(v: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def vector4_lerp(v1: Vector4|list|tuple,v2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def vector4_max(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def vector4_min(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def vector4_move_towards(v: Vector4|list|tuple,target: Vector4|list|tuple,maxDistance: float,) -> Vector4:
+ """."""
+ ...
+def vector4_multiply(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def vector4_negate(v: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def vector4_normalize(v: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def vector4_one() -> Vector4:
+ """."""
+ ...
+def vector4_scale(v: Vector4|list|tuple,scale: float,) -> Vector4:
+ """."""
+ ...
+def vector4_subtract(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def vector4_subtract_value(v: Vector4|list|tuple,add: float,) -> Vector4:
+ """."""
+ ...
+def vector4_zero() -> Vector4:
+ """."""
+ ...
+def wait_time(seconds: float,) -> None:
+ """Wait for some time (halt program execution)."""
+ ...
+def wave_copy(wave: Wave|list|tuple,) -> Wave:
+ """Copy a wave to a new wave."""
+ ...
+def wave_crop(wave: Any|list|tuple,initFrame: int,finalFrame: int,) -> None:
+ """Crop a wave to defined frames range."""
+ ...
+def wave_format(wave: Any|list|tuple,sampleRate: int,sampleSize: int,channels: int,) -> None:
+ """Convert wave data to desired format."""
+ ...
+def window_should_close() -> bool:
+ """Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)."""
+ ...
+def wrap(value: float,min_1: float,max_2: float,) -> float:
+ """."""
+ ...
+def glfw_create_cursor(image: Any|list|tuple,xhot: int,yhot: int,) -> Any:
+ """."""
+ ...
+def glfw_create_standard_cursor(shape: int,) -> Any:
+ """."""
+ ...
+def glfw_create_window(width: int,height: int,title: str,monitor: Any|list|tuple,share: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_default_window_hints() -> None:
+ """."""
+ ...
+def glfw_destroy_cursor(cursor: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_destroy_window(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_extension_supported(extension: str,) -> int:
+ """."""
+ ...
+def glfw_focus_window(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_get_clipboard_string(window: Any|list|tuple,) -> str:
+ """."""
+ ...
+def glfw_get_current_context() -> Any:
+ """."""
+ ...
+def glfw_get_cursor_pos(window: Any|list|tuple,xpos: Any,ypos: Any,) -> None:
+ """."""
+ ...
+def glfw_get_error(description: list[str],) -> int:
+ """."""
+ ...
+def glfw_get_framebuffer_size(window: Any|list|tuple,width: Any,height: Any,) -> None:
+ """."""
+ ...
+def glfw_get_gamepad_name(jid: int,) -> str:
+ """."""
+ ...
+def glfw_get_gamepad_state(jid: int,state: Any|list|tuple,) -> int:
+ """."""
+ ...
+def glfw_get_gamma_ramp(monitor: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_get_input_mode(window: Any|list|tuple,mode: int,) -> int:
+ """."""
+ ...
+def glfw_get_joystick_axes(jid: int,count: Any,) -> Any:
+ """."""
+ ...
+def glfw_get_joystick_buttons(jid: int,count: Any,) -> str:
+ """."""
+ ...
+def glfw_get_joystick_guid(jid: int,) -> str:
+ """."""
+ ...
+def glfw_get_joystick_hats(jid: int,count: Any,) -> str:
+ """."""
+ ...
+def glfw_get_joystick_name(jid: int,) -> str:
+ """."""
+ ...
+def glfw_get_joystick_user_pointer(jid: int,) -> Any:
+ """."""
+ ...
+def glfw_get_key(window: Any|list|tuple,key: int,) -> int:
+ """."""
+ ...
+def glfw_get_key_name(key: int,scancode: int,) -> str:
+ """."""
+ ...
+def glfw_get_key_scancode(key: int,) -> int:
+ """."""
+ ...
+def glfw_get_monitor_content_scale(monitor: Any|list|tuple,xscale: Any,yscale: Any,) -> None:
+ """."""
+ ...
+def glfw_get_monitor_name(monitor: Any|list|tuple,) -> str:
+ """."""
+ ...
+def glfw_get_monitor_physical_size(monitor: Any|list|tuple,widthMM: Any,heightMM: Any,) -> None:
+ """."""
+ ...
+def glfw_get_monitor_pos(monitor: Any|list|tuple,xpos: Any,ypos: Any,) -> None:
+ """."""
+ ...
+def glfw_get_monitor_user_pointer(monitor: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_get_monitor_workarea(monitor: Any|list|tuple,xpos: Any,ypos: Any,width: Any,height: Any,) -> None:
+ """."""
+ ...
+def glfw_get_monitors(count: Any,) -> Any:
+ """."""
+ ...
+def glfw_get_mouse_button(window: Any|list|tuple,button: int,) -> int:
+ """."""
+ ...
+def glfw_get_platform() -> int:
+ """."""
+ ...
+def glfw_get_primary_monitor() -> Any:
+ """."""
+ ...
+def glfw_get_proc_address(procname: str,) -> Any:
+ """."""
+ ...
+def glfw_get_required_instance_extensions(count: Any,) -> list[str]:
+ """."""
+ ...
+def glfw_get_time() -> float:
+ """."""
+ ...
+def glfw_get_timer_frequency() -> int:
+ """."""
+ ...
+def glfw_get_timer_value() -> int:
+ """."""
+ ...
+def glfw_get_version(major: Any,minor: Any,rev: Any,) -> None:
+ """."""
+ ...
+def glfw_get_version_string() -> str:
+ """."""
+ ...
+def glfw_get_video_mode(monitor: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_get_video_modes(monitor: Any|list|tuple,count: Any,) -> Any:
+ """."""
+ ...
+def glfw_get_window_attrib(window: Any|list|tuple,attrib: int,) -> int:
+ """."""
+ ...
+def glfw_get_window_content_scale(window: Any|list|tuple,xscale: Any,yscale: Any,) -> None:
+ """."""
+ ...
+def glfw_get_window_frame_size(window: Any|list|tuple,left: Any,top: Any,right: Any,bottom: Any,) -> None:
+ """."""
+ ...
+def glfw_get_window_monitor(window: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_get_window_opacity(window: Any|list|tuple,) -> float:
+ """."""
+ ...
+def glfw_get_window_pos(window: Any|list|tuple,xpos: Any,ypos: Any,) -> None:
+ """."""
+ ...
+def glfw_get_window_size(window: Any|list|tuple,width: Any,height: Any,) -> None:
+ """."""
+ ...
+def glfw_get_window_title(window: Any|list|tuple,) -> str:
+ """."""
+ ...
+def glfw_get_window_user_pointer(window: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_hide_window(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_iconify_window(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_init() -> int:
+ """."""
+ ...
+def glfw_init_allocator(allocator: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_init_hint(hint: int,value: int,) -> None:
+ """."""
+ ...
+def glfw_joystick_is_gamepad(jid: int,) -> int:
+ """."""
+ ...
+def glfw_joystick_present(jid: int,) -> int:
+ """."""
+ ...
+def glfw_make_context_current(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_maximize_window(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_platform_supported(platform: int,) -> int:
+ """."""
+ ...
+def glfw_poll_events() -> None:
+ """."""
+ ...
+def glfw_post_empty_event() -> None:
+ """."""
+ ...
+def glfw_raw_mouse_motion_supported() -> int:
+ """."""
+ ...
+def glfw_request_window_attention(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_restore_window(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_set_char_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_char_mods_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_clipboard_string(window: Any|list|tuple,string: str,) -> None:
+ """."""
+ ...
+def glfw_set_cursor(window: Any|list|tuple,cursor: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_set_cursor_enter_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_cursor_pos(window: Any|list|tuple,xpos: float,ypos: float,) -> None:
+ """."""
+ ...
+def glfw_set_cursor_pos_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_drop_callback(window: Any|list|tuple,callback: list[str]|list|tuple,) -> list[str]:
+ """."""
+ ...
+def glfw_set_error_callback(callback: str,) -> str:
+ """."""
+ ...
+def glfw_set_framebuffer_size_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_gamma(monitor: Any|list|tuple,gamma: float,) -> None:
+ """."""
+ ...
+def glfw_set_gamma_ramp(monitor: Any|list|tuple,ramp: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_set_input_mode(window: Any|list|tuple,mode: int,value: int,) -> None:
+ """."""
+ ...
+def glfw_set_joystick_callback(callback: Any,) -> Any:
+ """."""
+ ...
+def glfw_set_joystick_user_pointer(jid: int,pointer: Any,) -> None:
+ """."""
+ ...
+def glfw_set_key_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_monitor_callback(callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_monitor_user_pointer(monitor: Any|list|tuple,pointer: Any,) -> None:
+ """."""
+ ...
+def glfw_set_mouse_button_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_scroll_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_time(time: float,) -> None:
+ """."""
+ ...
+def glfw_set_window_aspect_ratio(window: Any|list|tuple,numer: int,denom: int,) -> None:
+ """."""
+ ...
+def glfw_set_window_attrib(window: Any|list|tuple,attrib: int,value: int,) -> None:
+ """."""
+ ...
+def glfw_set_window_close_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_window_content_scale_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_window_focus_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_window_icon(window: Any|list|tuple,count: int,images: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_set_window_iconify_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_window_maximize_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_window_monitor(window: Any|list|tuple,monitor: Any|list|tuple,xpos: int,ypos: int,width: int,height: int,refreshRate: int,) -> None:
+ """."""
+ ...
+def glfw_set_window_opacity(window: Any|list|tuple,opacity: float,) -> None:
+ """."""
+ ...
+def glfw_set_window_pos(window: Any|list|tuple,xpos: int,ypos: int,) -> None:
+ """."""
+ ...
+def glfw_set_window_pos_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_window_refresh_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_window_should_close(window: Any|list|tuple,value: int,) -> None:
+ """."""
+ ...
+def glfw_set_window_size(window: Any|list|tuple,width: int,height: int,) -> None:
+ """."""
+ ...
+def glfw_set_window_size_callback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfw_set_window_size_limits(window: Any|list|tuple,minwidth: int,minheight: int,maxwidth: int,maxheight: int,) -> None:
+ """."""
+ ...
+def glfw_set_window_title(window: Any|list|tuple,title: str,) -> None:
+ """."""
+ ...
+def glfw_set_window_user_pointer(window: Any|list|tuple,pointer: Any,) -> None:
+ """."""
+ ...
+def glfw_show_window(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_swap_buffers(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfw_swap_interval(interval: int,) -> None:
+ """."""
+ ...
+def glfw_terminate() -> None:
+ """."""
+ ...
+def glfw_update_gamepad_mappings(string: str,) -> int:
+ """."""
+ ...
+def glfw_vulkan_supported() -> int:
+ """."""
+ ...
+def glfw_wait_events() -> None:
+ """."""
+ ...
+def glfw_wait_events_timeout(timeout: float,) -> None:
+ """."""
+ ...
+def glfw_window_hint(hint: int,value: int,) -> None:
+ """."""
+ ...
+def glfw_window_hint_string(hint: int,value: str,) -> None:
+ """."""
+ ...
+def glfw_window_should_close(window: Any|list|tuple,) -> int:
+ """."""
+ ...
+def rl_active_draw_buffers(count: int,) -> None:
+ """Activate multiple draw color buffers."""
+ ...
+def rl_active_texture_slot(slot: int,) -> None:
+ """Select and active a texture slot."""
+ ...
+def rl_begin(mode: int,) -> None:
+ """Initialize drawing mode (how to organize vertex)."""
+ ...
+def rl_bind_framebuffer(target: int,framebuffer: int,) -> None:
+ """Bind framebuffer (FBO)."""
+ ...
+def rl_bind_image_texture(id: int,index: int,format: int,readonly: bool,) -> None:
+ """Bind image texture."""
+ ...
+def rl_bind_shader_buffer(id: int,index: int,) -> None:
+ """Bind SSBO buffer."""
+ ...
+def rl_blit_framebuffer(srcX: int,srcY: int,srcWidth: int,srcHeight: int,dstX: int,dstY: int,dstWidth: int,dstHeight: int,bufferMask: int,) -> None:
+ """Blit active framebuffer to main framebuffer."""
+ ...
+def rl_check_errors() -> None:
+ """Check and log OpenGL error codes."""
+ ...
+def rl_check_render_batch_limit(vCount: int,) -> bool:
+ """Check internal buffer overflow for a given number of vertex."""
+ ...
+def rl_clear_color(r: int,g: int,b: int,a: int,) -> None:
+ """Clear color buffer with color."""
+ ...
+def rl_clear_screen_buffers() -> None:
+ """Clear used screen buffers (color and depth)."""
+ ...
+def rl_color3f(x: float,y: float,z: float,) -> None:
+ """Define one vertex (color) - 3 float."""
+ ...
+def rl_color4f(x: float,y: float,z: float,w: float,) -> None:
+ """Define one vertex (color) - 4 float."""
+ ...
+def rl_color4ub(r: int,g: int,b: int,a: int,) -> None:
+ """Define one vertex (color) - 4 byte."""
+ ...
+def rl_color_mask(r: bool,g: bool,b: bool,a: bool,) -> None:
+ """Color mask control."""
+ ...
+def rl_compile_shader(shaderCode: str,type: int,) -> int:
+ """Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)."""
+ ...
+def rl_compute_shader_dispatch(groupX: int,groupY: int,groupZ: int,) -> None:
+ """Dispatch compute shader (equivalent to *draw* for graphics pipeline)."""
+ ...
+def rl_copy_shader_buffer(destId: int,srcId: int,destOffset: int,srcOffset: int,count: int,) -> None:
+ """Copy SSBO data between buffers."""
+ ...
+def rl_cubemap_parameters(id: int,param: int,value: int,) -> None:
+ """Set cubemap parameters (filter, wrap)."""
+ ...
+def rl_disable_backface_culling() -> None:
+ """Disable backface culling."""
+ ...
+def rl_disable_color_blend() -> None:
+ """Disable color blending."""
+ ...
+def rl_disable_depth_mask() -> None:
+ """Disable depth write."""
+ ...
+def rl_disable_depth_test() -> None:
+ """Disable depth test."""
+ ...
+def rl_disable_framebuffer() -> None:
+ """Disable render texture (fbo), return to default framebuffer."""
+ ...
+def rl_disable_scissor_test() -> None:
+ """Disable scissor test."""
+ ...
+def rl_disable_shader() -> None:
+ """Disable shader program."""
+ ...
+def rl_disable_smooth_lines() -> None:
+ """Disable line aliasing."""
+ ...
+def rl_disable_stereo_render() -> None:
+ """Disable stereo rendering."""
+ ...
+def rl_disable_texture() -> None:
+ """Disable texture."""
+ ...
+def rl_disable_texture_cubemap() -> None:
+ """Disable texture cubemap."""
+ ...
+def rl_disable_vertex_array() -> None:
+ """Disable vertex array (VAO, if supported)."""
+ ...
+def rl_disable_vertex_attribute(index: int,) -> None:
+ """Disable vertex attribute index."""
+ ...
+def rl_disable_vertex_buffer() -> None:
+ """Disable vertex buffer (VBO)."""
+ ...
+def rl_disable_vertex_buffer_element() -> None:
+ """Disable vertex buffer element (VBO element)."""
+ ...
+def rl_disable_wire_mode() -> None:
+ """Disable wire (and point) mode."""
+ ...
+def rl_draw_render_batch(batch: Any|list|tuple,) -> None:
+ """Draw render batch data (Update->Draw->Reset)."""
+ ...
+def rl_draw_render_batch_active() -> None:
+ """Update and draw internal render batch."""
+ ...
+def rl_draw_vertex_array(offset: int,count: int,) -> None:
+ """Draw vertex array (currently active vao)."""
+ ...
+def rl_draw_vertex_array_elements(offset: int,count: int,buffer: Any,) -> None:
+ """Draw vertex array elements."""
+ ...
+def rl_draw_vertex_array_elements_instanced(offset: int,count: int,buffer: Any,instances: int,) -> None:
+ """Draw vertex array elements with instancing."""
+ ...
+def rl_draw_vertex_array_instanced(offset: int,count: int,instances: int,) -> None:
+ """Draw vertex array (currently active vao) with instancing."""
+ ...
+def rl_enable_backface_culling() -> None:
+ """Enable backface culling."""
+ ...
+def rl_enable_color_blend() -> None:
+ """Enable color blending."""
+ ...
+def rl_enable_depth_mask() -> None:
+ """Enable depth write."""
+ ...
+def rl_enable_depth_test() -> None:
+ """Enable depth test."""
+ ...
+def rl_enable_framebuffer(id: int,) -> None:
+ """Enable render texture (fbo)."""
+ ...
+def rl_enable_point_mode() -> None:
+ """Enable point mode."""
+ ...
+def rl_enable_scissor_test() -> None:
+ """Enable scissor test."""
+ ...
+def rl_enable_shader(id: int,) -> None:
+ """Enable shader program."""
+ ...
+def rl_enable_smooth_lines() -> None:
+ """Enable line aliasing."""
+ ...
+def rl_enable_stereo_render() -> None:
+ """Enable stereo rendering."""
+ ...
+def rl_enable_texture(id: int,) -> None:
+ """Enable texture."""
+ ...
+def rl_enable_texture_cubemap(id: int,) -> None:
+ """Enable texture cubemap."""
+ ...
+def rl_enable_vertex_array(vaoId: int,) -> bool:
+ """Enable vertex array (VAO, if supported)."""
+ ...
+def rl_enable_vertex_attribute(index: int,) -> None:
+ """Enable vertex attribute index."""
+ ...
+def rl_enable_vertex_buffer(id: int,) -> None:
+ """Enable vertex buffer (VBO)."""
+ ...
+def rl_enable_vertex_buffer_element(id: int,) -> None:
+ """Enable vertex buffer element (VBO element)."""
+ ...
+def rl_enable_wire_mode() -> None:
+ """Enable wire mode."""
+ ...
+def rl_end() -> None:
+ """Finish vertex providing."""
+ ...
+def rl_framebuffer_attach(fboId: int,texId: int,attachType: int,texType: int,mipLevel: int,) -> None:
+ """Attach texture/renderbuffer to a framebuffer."""
+ ...
+def rl_framebuffer_complete(id: int,) -> bool:
+ """Verify framebuffer is complete."""
+ ...
+def rl_frustum(left: float,right: float,bottom: float,top: float,znear: float,zfar: float,) -> None:
+ """."""
+ ...
+def rl_gen_texture_mipmaps(id: int,width: int,height: int,format: int,mipmaps: Any,) -> None:
+ """Generate mipmap data for selected texture."""
+ ...
+def rl_get_active_framebuffer() -> int:
+ """Get the currently active render texture (fbo), 0 for default framebuffer."""
+ ...
+def rl_get_cull_distance_far() -> float:
+ """Get cull plane distance far."""
+ ...
+def rl_get_cull_distance_near() -> float:
+ """Get cull plane distance near."""
+ ...
+def rl_get_framebuffer_height() -> int:
+ """Get default framebuffer height."""
+ ...
+def rl_get_framebuffer_width() -> int:
+ """Get default framebuffer width."""
+ ...
+def rl_get_gl_texture_formats(format: int,glInternalFormat: Any,glFormat: Any,glType: Any,) -> None:
+ """Get OpenGL internal formats."""
+ ...
+def rl_get_line_width() -> float:
+ """Get the line drawing width."""
+ ...
+def rl_get_location_attrib(shaderId: int,attribName: str,) -> int:
+ """Get shader location attribute."""
+ ...
+def rl_get_location_uniform(shaderId: int,uniformName: str,) -> int:
+ """Get shader location uniform."""
+ ...
+def rl_get_matrix_modelview() -> Matrix:
+ """Get internal modelview matrix."""
+ ...
+def rl_get_matrix_projection() -> Matrix:
+ """Get internal projection matrix."""
+ ...
+def rl_get_matrix_projection_stereo(eye: int,) -> Matrix:
+ """Get internal projection matrix for stereo render (selected eye)."""
+ ...
+def rl_get_matrix_transform() -> Matrix:
+ """Get internal accumulated transform matrix."""
+ ...
+def rl_get_matrix_view_offset_stereo(eye: int,) -> Matrix:
+ """Get internal view offset matrix for stereo render (selected eye)."""
+ ...
+def rl_get_pixel_format_name(format: int,) -> str:
+ """Get name string for pixel format."""
+ ...
+def rl_get_shader_buffer_size(id: int,) -> int:
+ """Get SSBO buffer size."""
+ ...
+def rl_get_shader_id_default() -> int:
+ """Get default shader id."""
+ ...
+def rl_get_shader_locs_default() -> Any:
+ """Get default shader locations."""
+ ...
+def rl_get_texture_id_default() -> int:
+ """Get default texture id."""
+ ...
+def rl_get_version() -> int:
+ """Get current OpenGL version."""
+ ...
+def rl_is_stereo_render_enabled() -> bool:
+ """Check if stereo render is enabled."""
+ ...
+def rl_load_compute_shader_program(shaderId: int,) -> int:
+ """Load compute shader program."""
+ ...
+def rl_load_draw_cube() -> None:
+ """Load and draw a cube."""
+ ...
+def rl_load_draw_quad() -> None:
+ """Load and draw a quad."""
+ ...
+def rl_load_extensions(loader: Any,) -> None:
+ """Load OpenGL extensions (loader function required)."""
+ ...
+def rl_load_framebuffer() -> int:
+ """Load an empty framebuffer."""
+ ...
+def rl_load_identity() -> None:
+ """Reset current matrix to identity matrix."""
+ ...
+def rl_load_render_batch(numBuffers: int,bufferElements: int,) -> rlRenderBatch:
+ """Load a render batch system."""
+ ...
+def rl_load_shader_buffer(size: int,data: Any,usageHint: int,) -> int:
+ """Load shader storage buffer object (SSBO)."""
+ ...
+def rl_load_shader_code(vsCode: str,fsCode: str,) -> int:
+ """Load shader from code strings."""
+ ...
+def rl_load_shader_program(vShaderId: int,fShaderId: int,) -> int:
+ """Load custom shader program."""
+ ...
+def rl_load_texture(data: Any,width: int,height: int,format: int,mipmapCount: int,) -> int:
+ """Load texture data."""
+ ...
+def rl_load_texture_cubemap(data: Any,size: int,format: int,mipmapCount: int,) -> int:
+ """Load texture cubemap data."""
+ ...
+def rl_load_texture_depth(width: int,height: int,useRenderBuffer: bool,) -> int:
+ """Load depth texture/renderbuffer (to be attached to fbo)."""
+ ...
+def rl_load_vertex_array() -> int:
+ """Load vertex array (vao) if supported."""
+ ...
+def rl_load_vertex_buffer(buffer: Any,size: int,dynamic: bool,) -> int:
+ """Load a vertex buffer object."""
+ ...
+def rl_load_vertex_buffer_element(buffer: Any,size: int,dynamic: bool,) -> int:
+ """Load vertex buffer elements object."""
+ ...
+def rl_matrix_mode(mode: int,) -> None:
+ """Choose the current matrix to be transformed."""
+ ...
+def rl_mult_matrixf(matf: Any,) -> None:
+ """Multiply the current matrix by another matrix."""
+ ...
+def rl_normal3f(x: float,y: float,z: float,) -> None:
+ """Define one vertex (normal) - 3 float."""
+ ...
+def rl_ortho(left: float,right: float,bottom: float,top: float,znear: float,zfar: float,) -> None:
+ """."""
+ ...
+def rl_pop_matrix() -> None:
+ """Pop latest inserted matrix from stack."""
+ ...
+def rl_push_matrix() -> None:
+ """Push the current matrix to stack."""
+ ...
+def rl_read_screen_pixels(width: int,height: int,) -> str:
+ """Read screen pixel data (color buffer)."""
+ ...
+def rl_read_shader_buffer(id: int,dest: Any,count: int,offset: int,) -> None:
+ """Read SSBO buffer data (GPU->CPU)."""
+ ...
+def rl_read_texture_pixels(id: int,width: int,height: int,format: int,) -> Any:
+ """Read texture pixel data."""
+ ...
+def rl_rotatef(angle: float,x: float,y: float,z: float,) -> None:
+ """Multiply the current matrix by a rotation matrix."""
+ ...
+def rl_scalef(x: float,y: float,z: float,) -> None:
+ """Multiply the current matrix by a scaling matrix."""
+ ...
+def rl_scissor(x: int,y: int,width: int,height: int,) -> None:
+ """Scissor test."""
+ ...
+def rl_set_blend_factors(glSrcFactor: int,glDstFactor: int,glEquation: int,) -> None:
+ """Set blending mode factor and equation (using OpenGL factors)."""
+ ...
+def rl_set_blend_factors_separate(glSrcRGB: int,glDstRGB: int,glSrcAlpha: int,glDstAlpha: int,glEqRGB: int,glEqAlpha: int,) -> None:
+ """Set blending mode factors and equations separately (using OpenGL factors)."""
+ ...
+def rl_set_blend_mode(mode: int,) -> None:
+ """Set blending mode."""
+ ...
+def rl_set_clip_planes(nearPlane: float,farPlane: float,) -> None:
+ """Set clip planes distances."""
+ ...
+def rl_set_cull_face(mode: int,) -> None:
+ """Set face culling mode."""
+ ...
+def rl_set_framebuffer_height(height: int,) -> None:
+ """Set current framebuffer height."""
+ ...
+def rl_set_framebuffer_width(width: int,) -> None:
+ """Set current framebuffer width."""
+ ...
+def rl_set_line_width(width: float,) -> None:
+ """Set the line drawing width."""
+ ...
+def rl_set_matrix_modelview(view: Matrix|list|tuple,) -> None:
+ """Set a custom modelview matrix (replaces internal modelview matrix)."""
+ ...
+def rl_set_matrix_projection(proj: Matrix|list|tuple,) -> None:
+ """Set a custom projection matrix (replaces internal projection matrix)."""
+ ...
+def rl_set_matrix_projection_stereo(right: Matrix|list|tuple,left: Matrix|list|tuple,) -> None:
+ """Set eyes projection matrices for stereo rendering."""
+ ...
+def rl_set_matrix_view_offset_stereo(right: Matrix|list|tuple,left: Matrix|list|tuple,) -> None:
+ """Set eyes view offsets matrices for stereo rendering."""
+ ...
+def rl_set_render_batch_active(batch: Any|list|tuple,) -> None:
+ """Set the active render batch for rlgl (NULL for default internal)."""
+ ...
+def rl_set_shader(id: int,locs: Any,) -> None:
+ """Set shader currently active (id and locations)."""
+ ...
+def rl_set_texture(id: int,) -> None:
+ """Set current texture for render batch and check buffers limits."""
+ ...
+def rl_set_uniform(locIndex: int,value: Any,uniformType: int,count: int,) -> None:
+ """Set shader value uniform."""
+ ...
+def rl_set_uniform_matrices(locIndex: int,mat: Any|list|tuple,count: int,) -> None:
+ """Set shader value matrices."""
+ ...
+def rl_set_uniform_matrix(locIndex: int,mat: Matrix|list|tuple,) -> None:
+ """Set shader value matrix."""
+ ...
+def rl_set_uniform_sampler(locIndex: int,textureId: int,) -> None:
+ """Set shader value sampler."""
+ ...
+def rl_set_vertex_attribute(index: int,compSize: int,type: int,normalized: bool,stride: int,offset: int,) -> None:
+ """Set vertex attribute data configuration."""
+ ...
+def rl_set_vertex_attribute_default(locIndex: int,value: Any,attribType: int,count: int,) -> None:
+ """Set vertex attribute default value, when attribute to provided."""
+ ...
+def rl_set_vertex_attribute_divisor(index: int,divisor: int,) -> None:
+ """Set vertex attribute data divisor."""
+ ...
+def rl_tex_coord2f(x: float,y: float,) -> None:
+ """Define one vertex (texture coordinate) - 2 float."""
+ ...
+def rl_texture_parameters(id: int,param: int,value: int,) -> None:
+ """Set texture parameters (filter, wrap)."""
+ ...
+def rl_translatef(x: float,y: float,z: float,) -> None:
+ """Multiply the current matrix by a translation matrix."""
+ ...
+def rl_unload_framebuffer(id: int,) -> None:
+ """Delete framebuffer from GPU."""
+ ...
+def rl_unload_render_batch(batch: rlRenderBatch|list|tuple,) -> None:
+ """Unload render batch system."""
+ ...
+def rl_unload_shader_buffer(ssboId: int,) -> None:
+ """Unload shader storage buffer object (SSBO)."""
+ ...
+def rl_unload_shader_program(id: int,) -> None:
+ """Unload shader program."""
+ ...
+def rl_unload_texture(id: int,) -> None:
+ """Unload texture from GPU memory."""
+ ...
+def rl_unload_vertex_array(vaoId: int,) -> None:
+ """Unload vertex array (vao)."""
+ ...
+def rl_unload_vertex_buffer(vboId: int,) -> None:
+ """Unload vertex buffer object."""
+ ...
+def rl_update_shader_buffer(id: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update SSBO buffer data."""
+ ...
+def rl_update_texture(id: int,offsetX: int,offsetY: int,width: int,height: int,format: int,data: Any,) -> None:
+ """Update texture with new data on GPU."""
+ ...
+def rl_update_vertex_buffer(bufferId: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update vertex buffer object data on GPU buffer."""
+ ...
+def rl_update_vertex_buffer_elements(id: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update vertex buffer elements data on GPU buffer."""
+ ...
+def rl_vertex2f(x: float,y: float,) -> None:
+ """Define one vertex (position) - 2 float."""
+ ...
+def rl_vertex2i(x: int,y: int,) -> None:
+ """Define one vertex (position) - 2 int."""
+ ...
+def rl_vertex3f(x: float,y: float,z: float,) -> None:
+ """Define one vertex (position) - 3 float."""
+ ...
+def rl_viewport(x: int,y: int,width: int,height: int,) -> None:
+ """Set the viewport area."""
+ ...
+def rlgl_close() -> None:
+ """De-initialize rlgl (buffers, shaders, textures)."""
+ ...
+def rlgl_init(width: int,height: int,) -> None:
+ """Initialize rlgl (buffers, shaders, textures, states)."""
+ ...
+class AudioStream:
+ """AudioStream, custom audio stream."""
+ def __init__(self, buffer: Any|None = None, processor: Any|None = None, sampleRate: int|None = None, sampleSize: int|None = None, channels: int|None = None):
+ self.buffer:Any = buffer # type: ignore
+ self.processor:Any = processor # type: ignore
+ self.sampleRate:int = sampleRate # type: ignore
+ self.sampleSize:int = sampleSize # type: ignore
+ self.channels:int = channels # type: ignore
+class AutomationEvent:
+ """Automation event."""
+ def __init__(self, frame: int|None = None, type: int|None = None, params: list|None = None):
+ self.frame:int = frame # type: ignore
+ self.type:int = type # type: ignore
+ self.params:list = params # type: ignore
+class AutomationEventList:
+ """Automation event list."""
+ def __init__(self, capacity: int|None = None, count: int|None = None, events: Any|None = None):
+ self.capacity:int = capacity # type: ignore
+ self.count:int = count # type: ignore
+ self.events:Any = events # type: ignore
+class BoneInfo:
+ """Bone, skeletal animation bone."""
+ def __init__(self, name: list|None = None, parent: int|None = None):
+ self.name:list = name # type: ignore
+ self.parent:int = parent # type: ignore
+class BoundingBox:
+ """BoundingBox."""
+ def __init__(self, min: Vector3|list|tuple|None = None, max: Vector3|list|tuple|None = None):
+ self.min:Vector3 = min # type: ignore
+ self.max:Vector3 = max # type: ignore
+class Camera2D:
+ """Camera2D, defines position/orientation in 2d space."""
+ def __init__(self, offset: Vector2|list|tuple|None = None, target: Vector2|list|tuple|None = None, rotation: float|None = None, zoom: float|None = None):
+ self.offset:Vector2 = offset # type: ignore
+ self.target:Vector2 = target # type: ignore
+ self.rotation:float = rotation # type: ignore
+ self.zoom:float = zoom # type: ignore
+class Camera3D:
+ """Camera, defines position/orientation in 3d space."""
+ def __init__(self, position: Vector3|list|tuple|None = None, target: Vector3|list|tuple|None = None, up: Vector3|list|tuple|None = None, fovy: float|None = None, projection: int|None = None):
+ self.position:Vector3 = position # type: ignore
+ self.target:Vector3 = target # type: ignore
+ self.up:Vector3 = up # type: ignore
+ self.fovy:float = fovy # type: ignore
+ self.projection:int = projection # type: ignore
+class Color:
+ """Color, 4 components, R8G8B8A8 (32bit)."""
+ def __init__(self, r: int|None = None, g: int|None = None, b: int|None = None, a: int|None = None):
+ self.r:int = r # type: ignore
+ self.g:int = g # type: ignore
+ self.b:int = b # type: ignore
+ self.a:int = a # type: ignore
+class FilePathList:
+ """File path list."""
+ def __init__(self, capacity: int|None = None, count: int|None = None, paths: list[str]|None = None):
+ self.capacity:int = capacity # type: ignore
+ self.count:int = count # type: ignore
+ self.paths:list[str] = paths # type: ignore
+class Font:
+ """Font, font texture and GlyphInfo array data."""
+ def __init__(self, baseSize: int|None = None, glyphCount: int|None = None, glyphPadding: int|None = None, texture: Texture|list|tuple|None = None, recs: Any|None = None, glyphs: Any|None = None):
+ self.baseSize:int = baseSize # type: ignore
+ self.glyphCount:int = glyphCount # type: ignore
+ self.glyphPadding:int = glyphPadding # type: ignore
+ self.texture:Texture = texture # type: ignore
+ self.recs:Any = recs # type: ignore
+ self.glyphs:Any = glyphs # type: ignore
+class GlyphInfo:
+ """GlyphInfo, font characters glyphs info."""
+ def __init__(self, value: int|None = None, offsetX: int|None = None, offsetY: int|None = None, advanceX: int|None = None, image: Image|list|tuple|None = None):
+ self.value:int = value # type: ignore
+ self.offsetX:int = offsetX # type: ignore
+ self.offsetY:int = offsetY # type: ignore
+ self.advanceX:int = advanceX # type: ignore
+ self.image:Image = image # type: ignore
+class GuiStyleProp:
+ """NOTE: Used when exporting style as code for convenience."""
+ def __init__(self, controlId: int|None = None, propertyId: int|None = None, propertyValue: int|None = None):
+ self.controlId:int = controlId # type: ignore
+ self.propertyId:int = propertyId # type: ignore
+ self.propertyValue:int = propertyValue # type: ignore
+class Image:
+ """Image, pixel data stored in CPU memory (RAM)."""
+ def __init__(self, data: Any|None = None, width: int|None = None, height: int|None = None, mipmaps: int|None = None, format: int|None = None):
+ self.data:Any = data # type: ignore
+ self.width:int = width # type: ignore
+ self.height:int = height # type: ignore
+ self.mipmaps:int = mipmaps # type: ignore
+ self.format:int = format # type: ignore
+class Mat2:
+ """Mat2 type (used for polygon shape rotation matrix)."""
+ def __init__(self, m00: float|None = None, m01: float|None = None, m10: float|None = None, m11: float|None = None):
+ self.m00:float = m00 # type: ignore
+ self.m01:float = m01 # type: ignore
+ self.m10:float = m10 # type: ignore
+ self.m11:float = m11 # type: ignore
+class Material:
+ """Material, includes shader and maps."""
+ def __init__(self, shader: Shader|list|tuple|None = None, maps: Any|None = None, params: list|None = None):
+ self.shader:Shader = shader # type: ignore
+ self.maps:Any = maps # type: ignore
+ self.params:list = params # type: ignore
+class MaterialMap:
+ """MaterialMap."""
+ def __init__(self, texture: Texture|list|tuple|None = None, color: Color|list|tuple|None = None, value: float|None = None):
+ self.texture:Texture = texture # type: ignore
+ self.color:Color = color # type: ignore
+ self.value:float = value # type: ignore
+class Matrix:
+ """Matrix, 4x4 components, column major, OpenGL style, right-handed."""
+ def __init__(self, m0: float|None = None, m4: float|None = None, m8: float|None = None, m12: float|None = None, m1: float|None = None, m5: float|None = None, m9: float|None = None, m13: float|None = None, m2: float|None = None, m6: float|None = None, m10: float|None = None, m14: float|None = None, m3: float|None = None, m7: float|None = None, m11: float|None = None, m15: float|None = None):
+ self.m0:float = m0 # type: ignore
+ self.m4:float = m4 # type: ignore
+ self.m8:float = m8 # type: ignore
+ self.m12:float = m12 # type: ignore
+ self.m1:float = m1 # type: ignore
+ self.m5:float = m5 # type: ignore
+ self.m9:float = m9 # type: ignore
+ self.m13:float = m13 # type: ignore
+ self.m2:float = m2 # type: ignore
+ self.m6:float = m6 # type: ignore
+ self.m10:float = m10 # type: ignore
+ self.m14:float = m14 # type: ignore
+ self.m3:float = m3 # type: ignore
+ self.m7:float = m7 # type: ignore
+ self.m11:float = m11 # type: ignore
+ self.m15:float = m15 # type: ignore
+class Mesh:
+ """Mesh, vertex data and vao/vbo."""
+ def __init__(self, vertexCount: int|None = None, triangleCount: int|None = None, vertices: Any|None = None, texcoords: Any|None = None, texcoords2: Any|None = None, normals: Any|None = None, tangents: Any|None = None, colors: str|None = None, indices: Any|None = None, animVertices: Any|None = None, animNormals: Any|None = None, boneIds: str|None = None, boneWeights: Any|None = None, boneMatrices: Any|None = None, boneCount: int|None = None, vaoId: int|None = None, vboId: Any|None = None):
+ self.vertexCount:int = vertexCount # type: ignore
+ self.triangleCount:int = triangleCount # type: ignore
+ self.vertices:Any = vertices # type: ignore
+ self.texcoords:Any = texcoords # type: ignore
+ self.texcoords2:Any = texcoords2 # type: ignore
+ self.normals:Any = normals # type: ignore
+ self.tangents:Any = tangents # type: ignore
+ self.colors:str = colors # type: ignore
+ self.indices:Any = indices # type: ignore
+ self.animVertices:Any = animVertices # type: ignore
+ self.animNormals:Any = animNormals # type: ignore
+ self.boneIds:str = boneIds # type: ignore
+ self.boneWeights:Any = boneWeights # type: ignore
+ self.boneMatrices:Any = boneMatrices # type: ignore
+ self.boneCount:int = boneCount # type: ignore
+ self.vaoId:int = vaoId # type: ignore
+ self.vboId:Any = vboId # type: ignore
+class Model:
+ """Model, meshes, materials and animation data."""
+ def __init__(self, transform: Matrix|list|tuple|None = None, meshCount: int|None = None, materialCount: int|None = None, meshes: Any|None = None, materials: Any|None = None, meshMaterial: Any|None = None, boneCount: int|None = None, bones: Any|None = None, bindPose: Any|None = None):
+ self.transform:Matrix = transform # type: ignore
+ self.meshCount:int = meshCount # type: ignore
+ self.materialCount:int = materialCount # type: ignore
+ self.meshes:Any = meshes # type: ignore
+ self.materials:Any = materials # type: ignore
+ self.meshMaterial:Any = meshMaterial # type: ignore
+ self.boneCount:int = boneCount # type: ignore
+ self.bones:Any = bones # type: ignore
+ self.bindPose:Any = bindPose # type: ignore
+class ModelAnimation:
+ """ModelAnimation."""
+ def __init__(self, boneCount: int|None = None, frameCount: int|None = None, bones: Any|None = None, framePoses: Any|None = None, name: list|None = None):
+ self.boneCount:int = boneCount # type: ignore
+ self.frameCount:int = frameCount # type: ignore
+ self.bones:Any = bones # type: ignore
+ self.framePoses:Any = framePoses # type: ignore
+ self.name:list = name # type: ignore
+class Music:
+ """Music, audio stream, anything longer than ~10 seconds should be streamed."""
+ def __init__(self, stream: AudioStream|list|tuple|None = None, frameCount: int|None = None, looping: bool|None = None, ctxType: int|None = None, ctxData: Any|None = None):
+ self.stream:AudioStream = stream # type: ignore
+ self.frameCount:int = frameCount # type: ignore
+ self.looping:bool = looping # type: ignore
+ self.ctxType:int = ctxType # type: ignore
+ self.ctxData:Any = ctxData # type: ignore
+class NPatchInfo:
+ """NPatchInfo, n-patch layout info."""
+ def __init__(self, source: Rectangle|list|tuple|None = None, left: int|None = None, top: int|None = None, right: int|None = None, bottom: int|None = None, layout: int|None = None):
+ self.source:Rectangle = source # type: ignore
+ self.left:int = left # type: ignore
+ self.top:int = top # type: ignore
+ self.right:int = right # type: ignore
+ self.bottom:int = bottom # type: ignore
+ self.layout:int = layout # type: ignore
+class PhysicsBodyData:
+ """."""
+ def __init__(self, id: int|None = None, enabled: bool|None = None, position: Vector2|list|tuple|None = None, velocity: Vector2|list|tuple|None = None, force: Vector2|list|tuple|None = None, angularVelocity: float|None = None, torque: float|None = None, orient: float|None = None, inertia: float|None = None, inverseInertia: float|None = None, mass: float|None = None, inverseMass: float|None = None, staticFriction: float|None = None, dynamicFriction: float|None = None, restitution: float|None = None, useGravity: bool|None = None, isGrounded: bool|None = None, freezeOrient: bool|None = None, shape: PhysicsShape|list|tuple|None = None):
+ self.id:int = id # type: ignore
+ self.enabled:bool = enabled # type: ignore
+ self.position:Vector2 = position # type: ignore
+ self.velocity:Vector2 = velocity # type: ignore
+ self.force:Vector2 = force # type: ignore
+ self.angularVelocity:float = angularVelocity # type: ignore
+ self.torque:float = torque # type: ignore
+ self.orient:float = orient # type: ignore
+ self.inertia:float = inertia # type: ignore
+ self.inverseInertia:float = inverseInertia # type: ignore
+ self.mass:float = mass # type: ignore
+ self.inverseMass:float = inverseMass # type: ignore
+ self.staticFriction:float = staticFriction # type: ignore
+ self.dynamicFriction:float = dynamicFriction # type: ignore
+ self.restitution:float = restitution # type: ignore
+ self.useGravity:bool = useGravity # type: ignore
+ self.isGrounded:bool = isGrounded # type: ignore
+ self.freezeOrient:bool = freezeOrient # type: ignore
+ self.shape:PhysicsShape = shape # type: ignore
+class PhysicsManifoldData:
+ """."""
+ def __init__(self, id: int|None = None, bodyA: Any|None = None, bodyB: Any|None = None, penetration: float|None = None, normal: Vector2|list|tuple|None = None, contacts: list|None = None, contactsCount: int|None = None, restitution: float|None = None, dynamicFriction: float|None = None, staticFriction: float|None = None):
+ self.id:int = id # type: ignore
+ self.bodyA:Any = bodyA # type: ignore
+ self.bodyB:Any = bodyB # type: ignore
+ self.penetration:float = penetration # type: ignore
+ self.normal:Vector2 = normal # type: ignore
+ self.contacts:list = contacts # type: ignore
+ self.contactsCount:int = contactsCount # type: ignore
+ self.restitution:float = restitution # type: ignore
+ self.dynamicFriction:float = dynamicFriction # type: ignore
+ self.staticFriction:float = staticFriction # type: ignore
+class PhysicsShape:
+ """."""
+ def __init__(self, type: PhysicsShapeType|None = None, body: Any|None = None, radius: float|None = None, transform: Mat2|list|tuple|None = None, vertexData: PolygonData|list|tuple|None = None):
+ self.type:PhysicsShapeType = type # type: ignore
+ self.body:Any = body # type: ignore
+ self.radius:float = radius # type: ignore
+ self.transform:Mat2 = transform # type: ignore
+ self.vertexData:PolygonData = vertexData # type: ignore
+class PolygonData:
+ """."""
+ def __init__(self, vertexCount: int|None = None, positions: list|None = None, normals: list|None = None):
+ self.vertexCount:int = vertexCount # type: ignore
+ self.positions:list = positions # type: ignore
+ self.normals:list = normals # type: ignore
+class Ray:
+ """Ray, ray for raycasting."""
+ def __init__(self, position: Vector3|list|tuple|None = None, direction: Vector3|list|tuple|None = None):
+ self.position:Vector3 = position # type: ignore
+ self.direction:Vector3 = direction # type: ignore
+class RayCollision:
+ """RayCollision, ray hit information."""
+ def __init__(self, hit: bool|None = None, distance: float|None = None, point: Vector3|list|tuple|None = None, normal: Vector3|list|tuple|None = None):
+ self.hit:bool = hit # type: ignore
+ self.distance:float = distance # type: ignore
+ self.point:Vector3 = point # type: ignore
+ self.normal:Vector3 = normal # type: ignore
+class Rectangle:
+ """Rectangle, 4 components."""
+ def __init__(self, x: float|None = None, y: float|None = None, width: float|None = None, height: float|None = None):
+ self.x:float = x # type: ignore
+ self.y:float = y # type: ignore
+ self.width:float = width # type: ignore
+ self.height:float = height # type: ignore
+class RenderTexture:
+ """RenderTexture, fbo for texture rendering."""
+ def __init__(self, id: int|None = None, texture: Texture|list|tuple|None = None, depth: Texture|list|tuple|None = None):
+ self.id:int = id # type: ignore
+ self.texture:Texture = texture # type: ignore
+ self.depth:Texture = depth # type: ignore
+class Shader:
+ """Shader."""
+ def __init__(self, id: int|None = None, locs: Any|None = None):
+ self.id:int = id # type: ignore
+ self.locs:Any = locs # type: ignore
+class Sound:
+ """Sound."""
+ def __init__(self, stream: AudioStream|list|tuple|None = None, frameCount: int|None = None):
+ self.stream:AudioStream = stream # type: ignore
+ self.frameCount:int = frameCount # type: ignore
+class Texture:
+ """Texture, tex data stored in GPU memory (VRAM)."""
+ def __init__(self, id: int|None = None, width: int|None = None, height: int|None = None, mipmaps: int|None = None, format: int|None = None):
+ self.id:int = id # type: ignore
+ self.width:int = width # type: ignore
+ self.height:int = height # type: ignore
+ self.mipmaps:int = mipmaps # type: ignore
+ self.format:int = format # type: ignore
+class Texture2D:
+ """It should be redesigned to be provided by user."""
+ def __init__(self, id: int|None = None, width: int|None = None, height: int|None = None, mipmaps: int|None = None, format: int|None = None):
+ self.id:int = id # type: ignore
+ self.width:int = width # type: ignore
+ self.height:int = height # type: ignore
+ self.mipmaps:int = mipmaps # type: ignore
+ self.format:int = format # type: ignore
+class Transform:
+ """Transform, vertex transformation data."""
+ def __init__(self, translation: Vector3|list|tuple|None = None, rotation: Vector4|list|tuple|None = None, scale: Vector3|list|tuple|None = None):
+ self.translation:Vector3 = translation # type: ignore
+ self.rotation:Vector4 = rotation # type: ignore
+ self.scale:Vector3 = scale # type: ignore
+class Vector2:
+ """Vector2, 2 components."""
+ def __init__(self, x: float|None = None, y: float|None = None):
+ self.x:float = x # type: ignore
+ self.y:float = y # type: ignore
+class Vector3:
+ """Vector3, 3 components."""
+ def __init__(self, x: float|None = None, y: float|None = None, z: float|None = None):
+ self.x:float = x # type: ignore
+ self.y:float = y # type: ignore
+ self.z:float = z # type: ignore
+class Vector4:
+ """Vector4, 4 components."""
+ def __init__(self, x: float|None = None, y: float|None = None, z: float|None = None, w: float|None = None):
+ self.x:float = x # type: ignore
+ self.y:float = y # type: ignore
+ self.z:float = z # type: ignore
+ self.w:float = w # type: ignore
+class VrDeviceInfo:
+ """VrDeviceInfo, Head-Mounted-Display device parameters."""
+ def __init__(self, hResolution: int|None = None, vResolution: int|None = None, hScreenSize: float|None = None, vScreenSize: float|None = None, eyeToScreenDistance: float|None = None, lensSeparationDistance: float|None = None, interpupillaryDistance: float|None = None, lensDistortionValues: list|None = None, chromaAbCorrection: list|None = None):
+ self.hResolution:int = hResolution # type: ignore
+ self.vResolution:int = vResolution # type: ignore
+ self.hScreenSize:float = hScreenSize # type: ignore
+ self.vScreenSize:float = vScreenSize # type: ignore
+ self.eyeToScreenDistance:float = eyeToScreenDistance # type: ignore
+ self.lensSeparationDistance:float = lensSeparationDistance # type: ignore
+ self.interpupillaryDistance:float = interpupillaryDistance # type: ignore
+ self.lensDistortionValues:list = lensDistortionValues # type: ignore
+ self.chromaAbCorrection:list = chromaAbCorrection # type: ignore
+class VrStereoConfig:
+ """VrStereoConfig, VR stereo rendering configuration for simulator."""
+ def __init__(self, projection: list|None = None, viewOffset: list|None = None, leftLensCenter: list|None = None, rightLensCenter: list|None = None, leftScreenCenter: list|None = None, rightScreenCenter: list|None = None, scale: list|None = None, scaleIn: list|None = None):
+ self.projection:list = projection # type: ignore
+ self.viewOffset:list = viewOffset # type: ignore
+ self.leftLensCenter:list = leftLensCenter # type: ignore
+ self.rightLensCenter:list = rightLensCenter # type: ignore
+ self.leftScreenCenter:list = leftScreenCenter # type: ignore
+ self.rightScreenCenter:list = rightScreenCenter # type: ignore
+ self.scale:list = scale # type: ignore
+ self.scaleIn:list = scaleIn # type: ignore
+class Wave:
+ """Wave, audio wave data."""
+ def __init__(self, frameCount: int|None = None, sampleRate: int|None = None, sampleSize: int|None = None, channels: int|None = None, data: Any|None = None):
+ self.frameCount:int = frameCount # type: ignore
+ self.sampleRate:int = sampleRate # type: ignore
+ self.sampleSize:int = sampleSize # type: ignore
+ self.channels:int = channels # type: ignore
+ self.data:Any = data # type: ignore
+class float16:
+ """."""
+ def __init__(self, v: list|None = None):
+ self.v:list = v # type: ignore
+class float3:
+ """NOTE: Helper types to be used instead of array return types for *ToFloat functions."""
+ def __init__(self, v: list|None = None):
+ self.v:list = v # type: ignore
+class rlDrawCall:
+ """of those state-change happens (this is done in core module)."""
+ def __init__(self, mode: int|None = None, vertexCount: int|None = None, vertexAlignment: int|None = None, textureId: int|None = None):
+ self.mode:int = mode # type: ignore
+ self.vertexCount:int = vertexCount # type: ignore
+ self.vertexAlignment:int = vertexAlignment # type: ignore
+ self.textureId:int = textureId # type: ignore
+class rlRenderBatch:
+ """rlRenderBatch type."""
+ def __init__(self, bufferCount: int|None = None, currentBuffer: int|None = None, vertexBuffer: Any|None = None, draws: Any|None = None, drawCounter: int|None = None, currentDepth: float|None = None):
+ self.bufferCount:int = bufferCount # type: ignore
+ self.currentBuffer:int = currentBuffer # type: ignore
+ self.vertexBuffer:Any = vertexBuffer # type: ignore
+ self.draws:Any = draws # type: ignore
+ self.drawCounter:int = drawCounter # type: ignore
+ self.currentDepth:float = currentDepth # type: ignore
+class rlVertexBuffer:
+ """Dynamic vertex buffers (position + texcoords + colors + indices arrays)."""
+ def __init__(self, elementCount: int|None = None, vertices: Any|None = None, texcoords: Any|None = None, normals: Any|None = None, colors: str|None = None, indices: Any|None = None, vaoId: int|None = None, vboId: list|None = None):
+ self.elementCount:int = elementCount # type: ignore
+ self.vertices:Any = vertices # type: ignore
+ self.texcoords:Any = texcoords # type: ignore
+ self.normals:Any = normals # type: ignore
+ self.colors:str = colors # type: ignore
+ self.indices:Any = indices # type: ignore
+ self.vaoId:int = vaoId # type: ignore
+ self.vboId:list = vboId # type: ignore
+
+LIGHTGRAY : Color
+GRAY : Color
+DARKGRAY : Color
+YELLOW : Color
+GOLD : Color
+ORANGE : Color
+PINK : Color
+RED : Color
+MAROON : Color
+GREEN : Color
+LIME : Color
+DARKGREEN : Color
+SKYBLUE : Color
+BLUE : Color
+DARKBLUE : Color
+PURPLE : Color
+VIOLET : Color
+DARKPURPLE : Color
+BEIGE : Color
+BROWN : Color
+DARKBROWN : Color
+WHITE : Color
+BLACK : Color
+BLANK : Color
+MAGENTA : Color
+RAYWHITE : Color
+
diff --git a/pyray/py.typed b/pyray/py.typed
new file mode 100644
index 0000000..e69de29
diff --git a/raygui b/raygui
new file mode 160000
index 0000000..1e03efc
--- /dev/null
+++ b/raygui
@@ -0,0 +1 @@
+Subproject commit 1e03efca48c50c5ea4b4a053d5bf04bad58d3e43
diff --git a/raylib-c b/raylib-c
new file mode 160000
index 0000000..15afe89
--- /dev/null
+++ b/raylib-c
@@ -0,0 +1 @@
+Subproject commit 15afe89aff2fc7da96ab5de80bde7f6186971cde
diff --git a/raylib/__init__.py b/raylib/__init__.py
index c4d180d..786ad69 100644
--- a/raylib/__init__.py
+++ b/raylib/__init__.py
@@ -1 +1,34 @@
-__version__ = "2.5.0"
\ No newline at end of file
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+import sys
+import logging
+
+logger = logging.getLogger(__name__)
+
+try:
+ from ._raylib_cffi import ffi, lib as rl
+except ModuleNotFoundError:
+ logger.error("*** ERROR LOADING NATIVE CODE ***")
+ logger.error("See https://github.com/electronstudio/raylib-python-cffi/issues/142")
+ logger.error("Your Python is: %s", str(sys.implementation))
+ raise
+
+from raylib._raylib_cffi.lib import *
+from raylib.colors import *
+from raylib.defines import *
+import cffi
+from .version import __version__
+
+logger.warning("RAYLIB STATIC %s LOADED", __version__)
diff --git a/raylib/__init__.pyi b/raylib/__init__.pyi
new file mode 100644
index 0000000..c1b492f
--- /dev/null
+++ b/raylib/__init__.pyi
@@ -0,0 +1,4423 @@
+from typing import Any
+from warnings import deprecated
+import _cffi_backend # type: ignore
+
+ffi: _cffi_backend.FFI
+rl: _cffi_backend.Lib
+PhysicsShapeType = int
+
+class struct: ...
+
+
+ARROWS_SIZE: int
+ARROWS_VISIBLE: int
+ARROW_PADDING: int
+def AttachAudioMixedProcessor(processor: Any,) -> None:
+ """Attach audio stream processor to the entire audio pipeline, receives the samples as 'float'."""
+ ...
+def AttachAudioStreamProcessor(stream: AudioStream|list|tuple,processor: Any,) -> None:
+ """Attach audio stream processor to stream, receives the samples as 'float'."""
+ ...
+BACKGROUND_COLOR: int
+BASE_COLOR_DISABLED: int
+BASE_COLOR_FOCUSED: int
+BASE_COLOR_NORMAL: int
+BASE_COLOR_PRESSED: int
+BLEND_ADDITIVE: int
+BLEND_ADD_COLORS: int
+BLEND_ALPHA: int
+BLEND_ALPHA_PREMULTIPLY: int
+BLEND_CUSTOM: int
+BLEND_CUSTOM_SEPARATE: int
+BLEND_MULTIPLIED: int
+BLEND_SUBTRACT_COLORS: int
+BORDER_COLOR_DISABLED: int
+BORDER_COLOR_FOCUSED: int
+BORDER_COLOR_NORMAL: int
+BORDER_COLOR_PRESSED: int
+BORDER_WIDTH: int
+BUTTON: int
+def BeginBlendMode(mode: int,) -> None:
+ """Begin blending mode (alpha, additive, multiplied, subtract, custom)."""
+ ...
+def BeginDrawing() -> None:
+ """Setup canvas (framebuffer) to start drawing."""
+ ...
+def BeginMode2D(camera: Camera2D|list|tuple,) -> None:
+ """Begin 2D mode with custom camera (2D)."""
+ ...
+def BeginMode3D(camera: Camera3D|list|tuple,) -> None:
+ """Begin 3D mode with custom camera (3D)."""
+ ...
+def BeginScissorMode(x: int,y: int,width: int,height: int,) -> None:
+ """Begin scissor mode (define screen area for following drawing)."""
+ ...
+def BeginShaderMode(shader: Shader|list|tuple,) -> None:
+ """Begin custom shader drawing."""
+ ...
+def BeginTextureMode(target: RenderTexture|list|tuple,) -> None:
+ """Begin drawing to render texture."""
+ ...
+def BeginVrStereoMode(config: VrStereoConfig|list|tuple,) -> None:
+ """Begin stereo rendering (requires VR simulator)."""
+ ...
+CAMERA_CUSTOM: int
+CAMERA_FIRST_PERSON: int
+CAMERA_FREE: int
+CAMERA_ORBITAL: int
+CAMERA_ORTHOGRAPHIC: int
+CAMERA_PERSPECTIVE: int
+CAMERA_THIRD_PERSON: int
+CHECKBOX: int
+CHECK_PADDING: int
+COLORPICKER: int
+COLOR_SELECTOR_SIZE: int
+COMBOBOX: int
+COMBO_BUTTON_SPACING: int
+COMBO_BUTTON_WIDTH: int
+CUBEMAP_LAYOUT_AUTO_DETECT: int
+CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE: int
+CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR: int
+CUBEMAP_LAYOUT_LINE_HORIZONTAL: int
+CUBEMAP_LAYOUT_LINE_VERTICAL: int
+def ChangeDirectory(dir: bytes,) -> bool:
+ """Change working directory, return true on success."""
+ ...
+def CheckCollisionBoxSphere(box: BoundingBox|list|tuple,center: Vector3|list|tuple,radius: float,) -> bool:
+ """Check collision between box and sphere."""
+ ...
+def CheckCollisionBoxes(box1: BoundingBox|list|tuple,box2: BoundingBox|list|tuple,) -> bool:
+ """Check collision between two bounding boxes."""
+ ...
+def CheckCollisionCircleLine(center: Vector2|list|tuple,radius: float,p1: Vector2|list|tuple,p2: Vector2|list|tuple,) -> bool:
+ """Check if circle collides with a line created betweeen two points [p1] and [p2]."""
+ ...
+def CheckCollisionCircleRec(center: Vector2|list|tuple,radius: float,rec: Rectangle|list|tuple,) -> bool:
+ """Check collision between circle and rectangle."""
+ ...
+def CheckCollisionCircles(center1: Vector2|list|tuple,radius1: float,center2: Vector2|list|tuple,radius2: float,) -> bool:
+ """Check collision between two circles."""
+ ...
+def CheckCollisionLines(startPos1: Vector2|list|tuple,endPos1: Vector2|list|tuple,startPos2: Vector2|list|tuple,endPos2: Vector2|list|tuple,collisionPoint: Any|list|tuple,) -> bool:
+ """Check the collision between two lines defined by two points each, returns collision point by reference."""
+ ...
+def CheckCollisionPointCircle(point: Vector2|list|tuple,center: Vector2|list|tuple,radius: float,) -> bool:
+ """Check if point is inside circle."""
+ ...
+def CheckCollisionPointLine(point: Vector2|list|tuple,p1: Vector2|list|tuple,p2: Vector2|list|tuple,threshold: int,) -> bool:
+ """Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]."""
+ ...
+def CheckCollisionPointPoly(point: Vector2|list|tuple,points: Any|list|tuple,pointCount: int,) -> bool:
+ """Check if point is within a polygon described by array of vertices."""
+ ...
+def CheckCollisionPointRec(point: Vector2|list|tuple,rec: Rectangle|list|tuple,) -> bool:
+ """Check if point is inside rectangle."""
+ ...
+def CheckCollisionPointTriangle(point: Vector2|list|tuple,p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,) -> bool:
+ """Check if point is inside a triangle."""
+ ...
+def CheckCollisionRecs(rec1: Rectangle|list|tuple,rec2: Rectangle|list|tuple,) -> bool:
+ """Check collision between two rectangles."""
+ ...
+def CheckCollisionSpheres(center1: Vector3|list|tuple,radius1: float,center2: Vector3|list|tuple,radius2: float,) -> bool:
+ """Check collision between two spheres."""
+ ...
+def Clamp(value: float,min_1: float,max_2: float,) -> float:
+ """."""
+ ...
+def ClearBackground(color: Color|list|tuple,) -> None:
+ """Set background color (framebuffer clear color)."""
+ ...
+def ClearWindowState(flags: int,) -> None:
+ """Clear window configuration state flags."""
+ ...
+def CloseAudioDevice() -> None:
+ """Close the audio device and context."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def ClosePhysics() -> None:
+ """Unitializes physics pointers and closes physics loop thread."""
+ ...
+def CloseWindow() -> None:
+ """Close window and unload OpenGL context."""
+ ...
+def CodepointToUTF8(codepoint: int,utf8Size: Any,) -> bytes:
+ """Encode one codepoint into UTF-8 byte array (array length returned as parameter)."""
+ ...
+def ColorAlpha(color: Color|list|tuple,alpha: float,) -> Color:
+ """Get color with alpha applied, alpha goes from 0.0f to 1.0f."""
+ ...
+def ColorAlphaBlend(dst: Color|list|tuple,src: Color|list|tuple,tint: Color|list|tuple,) -> Color:
+ """Get src alpha-blended into dst color with tint."""
+ ...
+def ColorBrightness(color: Color|list|tuple,factor: float,) -> Color:
+ """Get color with brightness correction, brightness factor goes from -1.0f to 1.0f."""
+ ...
+def ColorContrast(color: Color|list|tuple,contrast: float,) -> Color:
+ """Get color with contrast correction, contrast values between -1.0f and 1.0f."""
+ ...
+def ColorFromHSV(hue: float,saturation: float,value: float,) -> Color:
+ """Get a Color from HSV values, hue [0..360], saturation/value [0..1]."""
+ ...
+def ColorFromNormalized(normalized: Vector4|list|tuple,) -> Color:
+ """Get Color from normalized values [0..1]."""
+ ...
+def ColorIsEqual(col1: Color|list|tuple,col2: Color|list|tuple,) -> bool:
+ """Check if two colors are equal."""
+ ...
+def ColorLerp(color1: Color|list|tuple,color2: Color|list|tuple,factor: float,) -> Color:
+ """Get color lerp interpolation between two colors, factor [0.0f..1.0f]."""
+ ...
+def ColorNormalize(color: Color|list|tuple,) -> Vector4:
+ """Get Color normalized as float [0..1]."""
+ ...
+def ColorTint(color: Color|list|tuple,tint: Color|list|tuple,) -> Color:
+ """Get color multiplied with another color."""
+ ...
+def ColorToHSV(color: Color|list|tuple,) -> Vector3:
+ """Get HSV values for a Color, hue [0..360], saturation/value [0..1]."""
+ ...
+def ColorToInt(color: Color|list|tuple,) -> int:
+ """Get hexadecimal value for a Color (0xRRGGBBAA)."""
+ ...
+def CompressData(data: bytes,dataSize: int,compDataSize: Any,) -> bytes:
+ """Compress data (DEFLATE algorithm), memory must be MemFree()."""
+ ...
+def ComputeCRC32(data: bytes,dataSize: int,) -> int:
+ """Compute CRC32 hash code."""
+ ...
+def ComputeMD5(data: bytes,dataSize: int,) -> Any:
+ """Compute MD5 hash code, returns static int[4] (16 bytes)."""
+ ...
+def ComputeSHA1(data: bytes,dataSize: int,) -> Any:
+ """Compute SHA1 hash code, returns static int[5] (20 bytes)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def CreatePhysicsBodyCircle(pos: Vector2|list|tuple,radius: float,density: float,) -> Any:
+ """Creates a new circle physics body with generic parameters."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def CreatePhysicsBodyPolygon(pos: Vector2|list|tuple,radius: float,sides: int,density: float,) -> Any:
+ """Creates a new polygon physics body with generic parameters."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def CreatePhysicsBodyRectangle(pos: Vector2|list|tuple,width: float,height: float,density: float,) -> Any:
+ """Creates a new rectangle physics body with generic parameters."""
+ ...
+DEFAULT: int
+DROPDOWNBOX: int
+DROPDOWN_ARROW_HIDDEN: int
+DROPDOWN_ITEMS_SPACING: int
+DROPDOWN_ROLL_UP: int
+def DecodeDataBase64(data: bytes,outputSize: Any,) -> bytes:
+ """Decode Base64 string data, memory must be MemFree()."""
+ ...
+def DecompressData(compData: bytes,compDataSize: int,dataSize: Any,) -> bytes:
+ """Decompress data (DEFLATE algorithm), memory must be MemFree()."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def DestroyPhysicsBody(body: Any|list|tuple,) -> None:
+ """Unitializes and destroy a physics body."""
+ ...
+def DetachAudioMixedProcessor(processor: Any,) -> None:
+ """Detach audio stream processor from the entire audio pipeline."""
+ ...
+def DetachAudioStreamProcessor(stream: AudioStream|list|tuple,processor: Any,) -> None:
+ """Detach audio stream processor from stream."""
+ ...
+def DirectoryExists(dirPath: bytes,) -> bool:
+ """Check if a directory path exists."""
+ ...
+def DisableCursor() -> None:
+ """Disables cursor (lock cursor)."""
+ ...
+def DisableEventWaiting() -> None:
+ """Disable waiting for events on EndDrawing(), automatic events polling."""
+ ...
+def DrawBillboard(camera: Camera3D|list|tuple,texture: Texture|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a billboard texture."""
+ ...
+def DrawBillboardPro(camera: Camera3D|list|tuple,texture: Texture|list|tuple,source: Rectangle|list|tuple,position: Vector3|list|tuple,up: Vector3|list|tuple,size: Vector2|list|tuple,origin: Vector2|list|tuple,rotation: float,tint: Color|list|tuple,) -> None:
+ """Draw a billboard texture defined by source and rotation."""
+ ...
+def DrawBillboardRec(camera: Camera3D|list|tuple,texture: Texture|list|tuple,source: Rectangle|list|tuple,position: Vector3|list|tuple,size: Vector2|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a billboard texture defined by source."""
+ ...
+def DrawBoundingBox(box: BoundingBox|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw bounding box (wires)."""
+ ...
+def DrawCapsule(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,radius: float,slices: int,rings: int,color: Color|list|tuple,) -> None:
+ """Draw a capsule with the center of its sphere caps at startPos and endPos."""
+ ...
+def DrawCapsuleWires(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,radius: float,slices: int,rings: int,color: Color|list|tuple,) -> None:
+ """Draw capsule wireframe with the center of its sphere caps at startPos and endPos."""
+ ...
+def DrawCircle(centerX: int,centerY: int,radius: float,color: Color|list|tuple,) -> None:
+ """Draw a color-filled circle."""
+ ...
+def DrawCircle3D(center: Vector3|list|tuple,radius: float,rotationAxis: Vector3|list|tuple,rotationAngle: float,color: Color|list|tuple,) -> None:
+ """Draw a circle in 3D world space."""
+ ...
+def DrawCircleGradient(centerX: int,centerY: int,radius: float,inner: Color|list|tuple,outer: Color|list|tuple,) -> None:
+ """Draw a gradient-filled circle."""
+ ...
+def DrawCircleLines(centerX: int,centerY: int,radius: float,color: Color|list|tuple,) -> None:
+ """Draw circle outline."""
+ ...
+def DrawCircleLinesV(center: Vector2|list|tuple,radius: float,color: Color|list|tuple,) -> None:
+ """Draw circle outline (Vector version)."""
+ ...
+def DrawCircleSector(center: Vector2|list|tuple,radius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw a piece of a circle."""
+ ...
+def DrawCircleSectorLines(center: Vector2|list|tuple,radius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw circle sector outline."""
+ ...
+def DrawCircleV(center: Vector2|list|tuple,radius: float,color: Color|list|tuple,) -> None:
+ """Draw a color-filled circle (Vector version)."""
+ ...
+def DrawCube(position: Vector3|list|tuple,width: float,height: float,length: float,color: Color|list|tuple,) -> None:
+ """Draw cube."""
+ ...
+def DrawCubeV(position: Vector3|list|tuple,size: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw cube (Vector version)."""
+ ...
+def DrawCubeWires(position: Vector3|list|tuple,width: float,height: float,length: float,color: Color|list|tuple,) -> None:
+ """Draw cube wires."""
+ ...
+def DrawCubeWiresV(position: Vector3|list|tuple,size: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw cube wires (Vector version)."""
+ ...
+def DrawCylinder(position: Vector3|list|tuple,radiusTop: float,radiusBottom: float,height: float,slices: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder/cone."""
+ ...
+def DrawCylinderEx(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,startRadius: float,endRadius: float,sides: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder with base at startPos and top at endPos."""
+ ...
+def DrawCylinderWires(position: Vector3|list|tuple,radiusTop: float,radiusBottom: float,height: float,slices: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder/cone wires."""
+ ...
+def DrawCylinderWiresEx(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,startRadius: float,endRadius: float,sides: int,color: Color|list|tuple,) -> None:
+ """Draw a cylinder wires with base at startPos and top at endPos."""
+ ...
+def DrawEllipse(centerX: int,centerY: int,radiusH: float,radiusV: float,color: Color|list|tuple,) -> None:
+ """Draw ellipse."""
+ ...
+def DrawEllipseLines(centerX: int,centerY: int,radiusH: float,radiusV: float,color: Color|list|tuple,) -> None:
+ """Draw ellipse outline."""
+ ...
+def DrawFPS(posX: int,posY: int,) -> None:
+ """Draw current FPS."""
+ ...
+def DrawGrid(slices: int,spacing: float,) -> None:
+ """Draw a grid (centered at (0, 0, 0))."""
+ ...
+def DrawLine(startPosX: int,startPosY: int,endPosX: int,endPosY: int,color: Color|list|tuple,) -> None:
+ """Draw a line."""
+ ...
+def DrawLine3D(startPos: Vector3|list|tuple,endPos: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a line in 3D world space."""
+ ...
+def DrawLineBezier(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw line segment cubic-bezier in-out interpolation."""
+ ...
+def DrawLineEx(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw a line (using triangles/quads)."""
+ ...
+def DrawLineStrip(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw lines sequence (using gl lines)."""
+ ...
+def DrawLineV(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a line (using gl lines)."""
+ ...
+def DrawMesh(mesh: Mesh|list|tuple,material: Material|list|tuple,transform: Matrix|list|tuple,) -> None:
+ """Draw a 3d mesh with material and transform."""
+ ...
+def DrawMeshInstanced(mesh: Mesh|list|tuple,material: Material|list|tuple,transforms: Any|list|tuple,instances: int,) -> None:
+ """Draw multiple mesh instances with material and different transforms."""
+ ...
+def DrawModel(model: Model|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a model (with texture if set)."""
+ ...
+def DrawModelEx(model: Model|list|tuple,position: Vector3|list|tuple,rotationAxis: Vector3|list|tuple,rotationAngle: float,scale: Vector3|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a model with extended parameters."""
+ ...
+def DrawModelPoints(model: Model|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a model as points."""
+ ...
+def DrawModelPointsEx(model: Model|list|tuple,position: Vector3|list|tuple,rotationAxis: Vector3|list|tuple,rotationAngle: float,scale: Vector3|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a model as points with extended parameters."""
+ ...
+def DrawModelWires(model: Model|list|tuple,position: Vector3|list|tuple,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a model wires (with texture if set)."""
+ ...
+def DrawModelWiresEx(model: Model|list|tuple,position: Vector3|list|tuple,rotationAxis: Vector3|list|tuple,rotationAngle: float,scale: Vector3|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a model wires (with texture if set) with extended parameters."""
+ ...
+def DrawPixel(posX: int,posY: int,color: Color|list|tuple,) -> None:
+ """Draw a pixel using geometry [Can be slow, use with care]."""
+ ...
+def DrawPixelV(position: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a pixel using geometry (Vector version) [Can be slow, use with care]."""
+ ...
+def DrawPlane(centerPos: Vector3|list|tuple,size: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a plane XZ."""
+ ...
+def DrawPoint3D(position: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a point in 3D space, actually a small line."""
+ ...
+def DrawPoly(center: Vector2|list|tuple,sides: int,radius: float,rotation: float,color: Color|list|tuple,) -> None:
+ """Draw a regular polygon (Vector version)."""
+ ...
+def DrawPolyLines(center: Vector2|list|tuple,sides: int,radius: float,rotation: float,color: Color|list|tuple,) -> None:
+ """Draw a polygon outline of n sides."""
+ ...
+def DrawPolyLinesEx(center: Vector2|list|tuple,sides: int,radius: float,rotation: float,lineThick: float,color: Color|list|tuple,) -> None:
+ """Draw a polygon outline of n sides with extended parameters."""
+ ...
+def DrawRay(ray: Ray|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a ray line."""
+ ...
+def DrawRectangle(posX: int,posY: int,width: int,height: int,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle."""
+ ...
+def DrawRectangleGradientEx(rec: Rectangle|list|tuple,topLeft: Color|list|tuple,bottomLeft: Color|list|tuple,topRight: Color|list|tuple,bottomRight: Color|list|tuple,) -> None:
+ """Draw a gradient-filled rectangle with custom vertex colors."""
+ ...
+def DrawRectangleGradientH(posX: int,posY: int,width: int,height: int,left: Color|list|tuple,right: Color|list|tuple,) -> None:
+ """Draw a horizontal-gradient-filled rectangle."""
+ ...
+def DrawRectangleGradientV(posX: int,posY: int,width: int,height: int,top: Color|list|tuple,bottom: Color|list|tuple,) -> None:
+ """Draw a vertical-gradient-filled rectangle."""
+ ...
+def DrawRectangleLines(posX: int,posY: int,width: int,height: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle outline."""
+ ...
+def DrawRectangleLinesEx(rec: Rectangle|list|tuple,lineThick: float,color: Color|list|tuple,) -> None:
+ """Draw rectangle outline with extended parameters."""
+ ...
+def DrawRectanglePro(rec: Rectangle|list|tuple,origin: Vector2|list|tuple,rotation: float,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle with pro parameters."""
+ ...
+def DrawRectangleRec(rec: Rectangle|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle."""
+ ...
+def DrawRectangleRounded(rec: Rectangle|list|tuple,roundness: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle with rounded edges."""
+ ...
+def DrawRectangleRoundedLines(rec: Rectangle|list|tuple,roundness: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle lines with rounded edges."""
+ ...
+def DrawRectangleRoundedLinesEx(rec: Rectangle|list|tuple,roundness: float,segments: int,lineThick: float,color: Color|list|tuple,) -> None:
+ """Draw rectangle with rounded edges outline."""
+ ...
+def DrawRectangleV(position: Vector2|list|tuple,size: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled rectangle (Vector version)."""
+ ...
+def DrawRing(center: Vector2|list|tuple,innerRadius: float,outerRadius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw ring."""
+ ...
+def DrawRingLines(center: Vector2|list|tuple,innerRadius: float,outerRadius: float,startAngle: float,endAngle: float,segments: int,color: Color|list|tuple,) -> None:
+ """Draw ring outline."""
+ ...
+def DrawSphere(centerPos: Vector3|list|tuple,radius: float,color: Color|list|tuple,) -> None:
+ """Draw sphere."""
+ ...
+def DrawSphereEx(centerPos: Vector3|list|tuple,radius: float,rings: int,slices: int,color: Color|list|tuple,) -> None:
+ """Draw sphere with extended parameters."""
+ ...
+def DrawSphereWires(centerPos: Vector3|list|tuple,radius: float,rings: int,slices: int,color: Color|list|tuple,) -> None:
+ """Draw sphere wires."""
+ ...
+def DrawSplineBasis(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: B-Spline, minimum 4 points."""
+ ...
+def DrawSplineBezierCubic(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]."""
+ ...
+def DrawSplineBezierQuadratic(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]."""
+ ...
+def DrawSplineCatmullRom(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Catmull-Rom, minimum 4 points."""
+ ...
+def DrawSplineLinear(points: Any|list|tuple,pointCount: int,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline: Linear, minimum 2 points."""
+ ...
+def DrawSplineSegmentBasis(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: B-Spline, 4 points."""
+ ...
+def DrawSplineSegmentBezierCubic(p1: Vector2|list|tuple,c2: Vector2|list|tuple,c3: Vector2|list|tuple,p4: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Cubic Bezier, 2 points, 2 control points."""
+ ...
+def DrawSplineSegmentBezierQuadratic(p1: Vector2|list|tuple,c2: Vector2|list|tuple,p3: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Quadratic Bezier, 2 points, 1 control point."""
+ ...
+def DrawSplineSegmentCatmullRom(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Catmull-Rom, 4 points."""
+ ...
+def DrawSplineSegmentLinear(p1: Vector2|list|tuple,p2: Vector2|list|tuple,thick: float,color: Color|list|tuple,) -> None:
+ """Draw spline segment: Linear, 2 points."""
+ ...
+def DrawText(text: bytes,posX: int,posY: int,fontSize: int,color: Color|list|tuple,) -> None:
+ """Draw text (using default font)."""
+ ...
+def DrawTextCodepoint(font: Font|list|tuple,codepoint: int,position: Vector2|list|tuple,fontSize: float,tint: Color|list|tuple,) -> None:
+ """Draw one character (codepoint)."""
+ ...
+def DrawTextCodepoints(font: Font|list|tuple,codepoints: Any,codepointCount: int,position: Vector2|list|tuple,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw multiple character (codepoint)."""
+ ...
+def DrawTextEx(font: Font|list|tuple,text: bytes,position: Vector2|list|tuple,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw text using font and additional parameters."""
+ ...
+def DrawTextPro(font: Font|list|tuple,text: bytes,position: Vector2|list|tuple,origin: Vector2|list|tuple,rotation: float,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw text using Font and pro parameters (rotation)."""
+ ...
+def DrawTexture(texture: Texture|list|tuple,posX: int,posY: int,tint: Color|list|tuple,) -> None:
+ """Draw a Texture2D."""
+ ...
+def DrawTextureEx(texture: Texture|list|tuple,position: Vector2|list|tuple,rotation: float,scale: float,tint: Color|list|tuple,) -> None:
+ """Draw a Texture2D with extended parameters."""
+ ...
+def DrawTextureNPatch(texture: Texture|list|tuple,nPatchInfo: NPatchInfo|list|tuple,dest: Rectangle|list|tuple,origin: Vector2|list|tuple,rotation: float,tint: Color|list|tuple,) -> None:
+ """Draws a texture (or part of it) that stretches or shrinks nicely."""
+ ...
+def DrawTexturePro(texture: Texture|list|tuple,source: Rectangle|list|tuple,dest: Rectangle|list|tuple,origin: Vector2|list|tuple,rotation: float,tint: Color|list|tuple,) -> None:
+ """Draw a part of a texture defined by a rectangle with 'pro' parameters."""
+ ...
+def DrawTextureRec(texture: Texture|list|tuple,source: Rectangle|list|tuple,position: Vector2|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a part of a texture defined by a rectangle."""
+ ...
+def DrawTextureV(texture: Texture|list|tuple,position: Vector2|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a Texture2D with position defined as Vector2."""
+ ...
+def DrawTriangle(v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled triangle (vertex in counter-clockwise order!)."""
+ ...
+def DrawTriangle3D(v1: Vector3|list|tuple,v2: Vector3|list|tuple,v3: Vector3|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw a color-filled triangle (vertex in counter-clockwise order!)."""
+ ...
+def DrawTriangleFan(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle fan defined by points (first vertex is the center)."""
+ ...
+def DrawTriangleLines(v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw triangle outline (vertex in counter-clockwise order!)."""
+ ...
+def DrawTriangleStrip(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle strip defined by points."""
+ ...
+def DrawTriangleStrip3D(points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle strip defined by points."""
+ ...
+def EnableCursor() -> None:
+ """Enables cursor (unlock cursor)."""
+ ...
+def EnableEventWaiting() -> None:
+ """Enable waiting for events on EndDrawing(), no automatic event polling."""
+ ...
+def EncodeDataBase64(data: bytes,dataSize: int,outputSize: Any,) -> bytes:
+ """Encode data to Base64 string, memory must be MemFree()."""
+ ...
+def EndBlendMode() -> None:
+ """End blending mode (reset to default: alpha blending)."""
+ ...
+def EndDrawing() -> None:
+ """End canvas drawing and swap buffers (double buffering)."""
+ ...
+def EndMode2D() -> None:
+ """Ends 2D mode with custom camera."""
+ ...
+def EndMode3D() -> None:
+ """Ends 3D mode and returns to default 2D orthographic mode."""
+ ...
+def EndScissorMode() -> None:
+ """End scissor mode."""
+ ...
+def EndShaderMode() -> None:
+ """End custom shader drawing (use default shader)."""
+ ...
+def EndTextureMode() -> None:
+ """Ends drawing to render texture."""
+ ...
+def EndVrStereoMode() -> None:
+ """End stereo rendering (requires VR simulator)."""
+ ...
+def ExportAutomationEventList(list_0: AutomationEventList|list|tuple,fileName: bytes,) -> bool:
+ """Export automation events list as text file."""
+ ...
+def ExportDataAsCode(data: bytes,dataSize: int,fileName: bytes,) -> bool:
+ """Export data to code (.h), returns true on success."""
+ ...
+def ExportFontAsCode(font: Font|list|tuple,fileName: bytes,) -> bool:
+ """Export font as code file, returns true on success."""
+ ...
+def ExportImage(image: Image|list|tuple,fileName: bytes,) -> bool:
+ """Export image data to file, returns true on success."""
+ ...
+def ExportImageAsCode(image: Image|list|tuple,fileName: bytes,) -> bool:
+ """Export image as code file defining an array of bytes, returns true on success."""
+ ...
+def ExportImageToMemory(image: Image|list|tuple,fileType: bytes,fileSize: Any,) -> bytes:
+ """Export image to memory buffer."""
+ ...
+def ExportMesh(mesh: Mesh|list|tuple,fileName: bytes,) -> bool:
+ """Export mesh data to file, returns true on success."""
+ ...
+def ExportMeshAsCode(mesh: Mesh|list|tuple,fileName: bytes,) -> bool:
+ """Export mesh as code file (.h) defining multiple arrays of vertex attributes."""
+ ...
+def ExportWave(wave: Wave|list|tuple,fileName: bytes,) -> bool:
+ """Export wave data to file, returns true on success."""
+ ...
+def ExportWaveAsCode(wave: Wave|list|tuple,fileName: bytes,) -> bool:
+ """Export wave sample data to code (.h), returns true on success."""
+ ...
+FLAG_BORDERLESS_WINDOWED_MODE: int
+FLAG_FULLSCREEN_MODE: int
+FLAG_INTERLACED_HINT: int
+FLAG_MSAA_4X_HINT: int
+FLAG_VSYNC_HINT: int
+FLAG_WINDOW_ALWAYS_RUN: int
+FLAG_WINDOW_HIDDEN: int
+FLAG_WINDOW_HIGHDPI: int
+FLAG_WINDOW_MAXIMIZED: int
+FLAG_WINDOW_MINIMIZED: int
+FLAG_WINDOW_MOUSE_PASSTHROUGH: int
+FLAG_WINDOW_RESIZABLE: int
+FLAG_WINDOW_TOPMOST: int
+FLAG_WINDOW_TRANSPARENT: int
+FLAG_WINDOW_UNDECORATED: int
+FLAG_WINDOW_UNFOCUSED: int
+FONT_BITMAP: int
+FONT_DEFAULT: int
+FONT_SDF: int
+def Fade(color: Color|list|tuple,alpha: float,) -> Color:
+ """Get color with alpha applied, alpha goes from 0.0f to 1.0f."""
+ ...
+def FileExists(fileName: bytes,) -> bool:
+ """Check if file exists."""
+ ...
+def FloatEquals(x: float,y: float,) -> int:
+ """."""
+ ...
+GAMEPAD_AXIS_LEFT_TRIGGER: int
+GAMEPAD_AXIS_LEFT_X: int
+GAMEPAD_AXIS_LEFT_Y: int
+GAMEPAD_AXIS_RIGHT_TRIGGER: int
+GAMEPAD_AXIS_RIGHT_X: int
+GAMEPAD_AXIS_RIGHT_Y: int
+GAMEPAD_BUTTON_LEFT_FACE_DOWN: int
+GAMEPAD_BUTTON_LEFT_FACE_LEFT: int
+GAMEPAD_BUTTON_LEFT_FACE_RIGHT: int
+GAMEPAD_BUTTON_LEFT_FACE_UP: int
+GAMEPAD_BUTTON_LEFT_THUMB: int
+GAMEPAD_BUTTON_LEFT_TRIGGER_1: int
+GAMEPAD_BUTTON_LEFT_TRIGGER_2: int
+GAMEPAD_BUTTON_MIDDLE: int
+GAMEPAD_BUTTON_MIDDLE_LEFT: int
+GAMEPAD_BUTTON_MIDDLE_RIGHT: int
+GAMEPAD_BUTTON_RIGHT_FACE_DOWN: int
+GAMEPAD_BUTTON_RIGHT_FACE_LEFT: int
+GAMEPAD_BUTTON_RIGHT_FACE_RIGHT: int
+GAMEPAD_BUTTON_RIGHT_FACE_UP: int
+GAMEPAD_BUTTON_RIGHT_THUMB: int
+GAMEPAD_BUTTON_RIGHT_TRIGGER_1: int
+GAMEPAD_BUTTON_RIGHT_TRIGGER_2: int
+GAMEPAD_BUTTON_UNKNOWN: int
+GESTURE_DOUBLETAP: int
+GESTURE_DRAG: int
+GESTURE_HOLD: int
+GESTURE_NONE: int
+GESTURE_PINCH_IN: int
+GESTURE_PINCH_OUT: int
+GESTURE_SWIPE_DOWN: int
+GESTURE_SWIPE_LEFT: int
+GESTURE_SWIPE_RIGHT: int
+GESTURE_SWIPE_UP: int
+GESTURE_TAP: int
+GROUP_PADDING: int
+def GenImageCellular(width: int,height: int,tileSize: int,) -> Image:
+ """Generate image: cellular algorithm, bigger tileSize means bigger cells."""
+ ...
+def GenImageChecked(width: int,height: int,checksX: int,checksY: int,col1: Color|list|tuple,col2: Color|list|tuple,) -> Image:
+ """Generate image: checked."""
+ ...
+def GenImageColor(width: int,height: int,color: Color|list|tuple,) -> Image:
+ """Generate image: plain color."""
+ ...
+def GenImageFontAtlas(glyphs: Any|list|tuple,glyphRecs: Any|list|tuple,glyphCount: int,fontSize: int,padding: int,packMethod: int,) -> Image:
+ """Generate image font atlas using chars info."""
+ ...
+def GenImageGradientLinear(width: int,height: int,direction: int,start: Color|list|tuple,end: Color|list|tuple,) -> Image:
+ """Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient."""
+ ...
+def GenImageGradientRadial(width: int,height: int,density: float,inner: Color|list|tuple,outer: Color|list|tuple,) -> Image:
+ """Generate image: radial gradient."""
+ ...
+def GenImageGradientSquare(width: int,height: int,density: float,inner: Color|list|tuple,outer: Color|list|tuple,) -> Image:
+ """Generate image: square gradient."""
+ ...
+def GenImagePerlinNoise(width: int,height: int,offsetX: int,offsetY: int,scale: float,) -> Image:
+ """Generate image: perlin noise."""
+ ...
+def GenImageText(width: int,height: int,text: bytes,) -> Image:
+ """Generate image: grayscale image from text data."""
+ ...
+def GenImageWhiteNoise(width: int,height: int,factor: float,) -> Image:
+ """Generate image: white noise."""
+ ...
+def GenMeshCone(radius: float,height: float,slices: int,) -> Mesh:
+ """Generate cone/pyramid mesh."""
+ ...
+def GenMeshCube(width: float,height: float,length: float,) -> Mesh:
+ """Generate cuboid mesh."""
+ ...
+def GenMeshCubicmap(cubicmap: Image|list|tuple,cubeSize: Vector3|list|tuple,) -> Mesh:
+ """Generate cubes-based map mesh from image data."""
+ ...
+def GenMeshCylinder(radius: float,height: float,slices: int,) -> Mesh:
+ """Generate cylinder mesh."""
+ ...
+def GenMeshHeightmap(heightmap: Image|list|tuple,size: Vector3|list|tuple,) -> Mesh:
+ """Generate heightmap mesh from image data."""
+ ...
+def GenMeshHemiSphere(radius: float,rings: int,slices: int,) -> Mesh:
+ """Generate half-sphere mesh (no bottom cap)."""
+ ...
+def GenMeshKnot(radius: float,size: float,radSeg: int,sides: int,) -> Mesh:
+ """Generate trefoil knot mesh."""
+ ...
+def GenMeshPlane(width: float,length: float,resX: int,resZ: int,) -> Mesh:
+ """Generate plane mesh (with subdivisions)."""
+ ...
+def GenMeshPoly(sides: int,radius: float,) -> Mesh:
+ """Generate polygonal mesh."""
+ ...
+def GenMeshSphere(radius: float,rings: int,slices: int,) -> Mesh:
+ """Generate sphere mesh (standard sphere)."""
+ ...
+def GenMeshTangents(mesh: Any|list|tuple,) -> None:
+ """Compute mesh tangents."""
+ ...
+def GenMeshTorus(radius: float,size: float,radSeg: int,sides: int,) -> Mesh:
+ """Generate torus mesh."""
+ ...
+def GenTextureMipmaps(texture: Any|list|tuple,) -> None:
+ """Generate GPU mipmaps for a texture."""
+ ...
+def GetApplicationDirectory() -> bytes:
+ """Get the directory of the running application (uses static string)."""
+ ...
+def GetCameraMatrix(camera: Camera3D|list|tuple,) -> Matrix:
+ """Get camera transform matrix (view matrix)."""
+ ...
+def GetCameraMatrix2D(camera: Camera2D|list|tuple,) -> Matrix:
+ """Get camera 2d transform matrix."""
+ ...
+def GetCharPressed() -> int:
+ """Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty."""
+ ...
+def GetClipboardImage() -> Image:
+ """Get clipboard image content."""
+ ...
+def GetClipboardText() -> bytes:
+ """Get clipboard text content."""
+ ...
+def GetCodepoint(text: bytes,codepointSize: Any,) -> int:
+ """Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure."""
+ ...
+def GetCodepointCount(text: bytes,) -> int:
+ """Get total number of codepoints in a UTF-8 encoded string."""
+ ...
+def GetCodepointNext(text: bytes,codepointSize: Any,) -> int:
+ """Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure."""
+ ...
+def GetCodepointPrevious(text: bytes,codepointSize: Any,) -> int:
+ """Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure."""
+ ...
+def GetCollisionRec(rec1: Rectangle|list|tuple,rec2: Rectangle|list|tuple,) -> Rectangle:
+ """Get collision rectangle for two rectangles collision."""
+ ...
+def GetColor(hexValue: int,) -> Color:
+ """Get Color structure from hexadecimal value."""
+ ...
+def GetCurrentMonitor() -> int:
+ """Get current monitor where window is placed."""
+ ...
+def GetDirectoryPath(filePath: bytes,) -> bytes:
+ """Get full path for a given fileName with path (uses static string)."""
+ ...
+def GetFPS() -> int:
+ """Get current FPS."""
+ ...
+def GetFileExtension(fileName: bytes,) -> bytes:
+ """Get pointer to extension for a filename string (includes dot: '.png')."""
+ ...
+def GetFileLength(fileName: bytes,) -> int:
+ """Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)."""
+ ...
+def GetFileModTime(fileName: bytes,) -> int:
+ """Get file modification time (last write time)."""
+ ...
+def GetFileName(filePath: bytes,) -> bytes:
+ """Get pointer to filename for a path string."""
+ ...
+def GetFileNameWithoutExt(filePath: bytes,) -> bytes:
+ """Get filename string without extension (uses static string)."""
+ ...
+def GetFontDefault() -> Font:
+ """Get the default Font."""
+ ...
+def GetFrameTime() -> float:
+ """Get time in seconds for last frame drawn (delta time)."""
+ ...
+def GetGamepadAxisCount(gamepad: int,) -> int:
+ """Get gamepad axis count for a gamepad."""
+ ...
+def GetGamepadAxisMovement(gamepad: int,axis: int,) -> float:
+ """Get axis movement value for a gamepad axis."""
+ ...
+def GetGamepadButtonPressed() -> int:
+ """Get the last gamepad button pressed."""
+ ...
+def GetGamepadName(gamepad: int,) -> bytes:
+ """Get gamepad internal name id."""
+ ...
+def GetGestureDetected() -> int:
+ """Get latest detected gesture."""
+ ...
+def GetGestureDragAngle() -> float:
+ """Get gesture drag angle."""
+ ...
+def GetGestureDragVector() -> Vector2:
+ """Get gesture drag vector."""
+ ...
+def GetGestureHoldDuration() -> float:
+ """Get gesture hold time in seconds."""
+ ...
+def GetGesturePinchAngle() -> float:
+ """Get gesture pinch angle."""
+ ...
+def GetGesturePinchVector() -> Vector2:
+ """Get gesture pinch delta."""
+ ...
+def GetGlyphAtlasRec(font: Font|list|tuple,codepoint: int,) -> Rectangle:
+ """Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found."""
+ ...
+def GetGlyphIndex(font: Font|list|tuple,codepoint: int,) -> int:
+ """Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found."""
+ ...
+def GetGlyphInfo(font: Font|list|tuple,codepoint: int,) -> GlyphInfo:
+ """Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found."""
+ ...
+def GetImageAlphaBorder(image: Image|list|tuple,threshold: float,) -> Rectangle:
+ """Get image alpha border rectangle."""
+ ...
+def GetImageColor(image: Image|list|tuple,x: int,y: int,) -> Color:
+ """Get image pixel color at (x, y) position."""
+ ...
+def GetKeyPressed() -> int:
+ """Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty."""
+ ...
+def GetMasterVolume() -> float:
+ """Get master volume (listener)."""
+ ...
+def GetMeshBoundingBox(mesh: Mesh|list|tuple,) -> BoundingBox:
+ """Compute mesh bounding box limits."""
+ ...
+def GetModelBoundingBox(model: Model|list|tuple,) -> BoundingBox:
+ """Compute model bounding box limits (considers all meshes)."""
+ ...
+def GetMonitorCount() -> int:
+ """Get number of connected monitors."""
+ ...
+def GetMonitorHeight(monitor: int,) -> int:
+ """Get specified monitor height (current video mode used by monitor)."""
+ ...
+def GetMonitorName(monitor: int,) -> bytes:
+ """Get the human-readable, UTF-8 encoded name of the specified monitor."""
+ ...
+def GetMonitorPhysicalHeight(monitor: int,) -> int:
+ """Get specified monitor physical height in millimetres."""
+ ...
+def GetMonitorPhysicalWidth(monitor: int,) -> int:
+ """Get specified monitor physical width in millimetres."""
+ ...
+def GetMonitorPosition(monitor: int,) -> Vector2:
+ """Get specified monitor position."""
+ ...
+def GetMonitorRefreshRate(monitor: int,) -> int:
+ """Get specified monitor refresh rate."""
+ ...
+def GetMonitorWidth(monitor: int,) -> int:
+ """Get specified monitor width (current video mode used by monitor)."""
+ ...
+def GetMouseDelta() -> Vector2:
+ """Get mouse delta between frames."""
+ ...
+def GetMousePosition() -> Vector2:
+ """Get mouse position XY."""
+ ...
+def GetMouseWheelMove() -> float:
+ """Get mouse wheel movement for X or Y, whichever is larger."""
+ ...
+def GetMouseWheelMoveV() -> Vector2:
+ """Get mouse wheel movement for both X and Y."""
+ ...
+def GetMouseX() -> int:
+ """Get mouse position X."""
+ ...
+def GetMouseY() -> int:
+ """Get mouse position Y."""
+ ...
+def GetMusicTimeLength(music: Music|list|tuple,) -> float:
+ """Get music time length (in seconds)."""
+ ...
+def GetMusicTimePlayed(music: Music|list|tuple,) -> float:
+ """Get current music time played (in seconds)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsBodiesCount() -> int:
+ """Returns the current amount of created physics bodies."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsBody(index: int,) -> Any:
+ """Returns a physics body of the bodies pool at a specific index."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsShapeType(index: int,) -> int:
+ """Returns the physics body shape type (PHYSICS_CIRCLE or PHYSICS_POLYGON)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsShapeVertex(body: Any|list|tuple,vertex: int,) -> Vector2:
+ """Returns transformed position of a body shape (body position + vertex transformed position)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def GetPhysicsShapeVerticesCount(index: int,) -> int:
+ """Returns the amount of vertices of a physics body shape."""
+ ...
+def GetPixelColor(srcPtr: Any,format: int,) -> Color:
+ """Get Color from a source pixel pointer of certain format."""
+ ...
+def GetPixelDataSize(width: int,height: int,format: int,) -> int:
+ """Get pixel data size in bytes for certain format."""
+ ...
+def GetPrevDirectoryPath(dirPath: bytes,) -> bytes:
+ """Get previous directory path for a given path (uses static string)."""
+ ...
+def GetRandomValue(min_0: int,max_1: int,) -> int:
+ """Get a random value between min and max (both included)."""
+ ...
+def GetRayCollisionBox(ray: Ray|list|tuple,box: BoundingBox|list|tuple,) -> RayCollision:
+ """Get collision info between ray and box."""
+ ...
+def GetRayCollisionMesh(ray: Ray|list|tuple,mesh: Mesh|list|tuple,transform: Matrix|list|tuple,) -> RayCollision:
+ """Get collision info between ray and mesh."""
+ ...
+def GetRayCollisionQuad(ray: Ray|list|tuple,p1: Vector3|list|tuple,p2: Vector3|list|tuple,p3: Vector3|list|tuple,p4: Vector3|list|tuple,) -> RayCollision:
+ """Get collision info between ray and quad."""
+ ...
+def GetRayCollisionSphere(ray: Ray|list|tuple,center: Vector3|list|tuple,radius: float,) -> RayCollision:
+ """Get collision info between ray and sphere."""
+ ...
+def GetRayCollisionTriangle(ray: Ray|list|tuple,p1: Vector3|list|tuple,p2: Vector3|list|tuple,p3: Vector3|list|tuple,) -> RayCollision:
+ """Get collision info between ray and triangle."""
+ ...
+def GetRenderHeight() -> int:
+ """Get current render height (it considers HiDPI)."""
+ ...
+def GetRenderWidth() -> int:
+ """Get current render width (it considers HiDPI)."""
+ ...
+def GetScreenHeight() -> int:
+ """Get current screen height."""
+ ...
+def GetScreenToWorld2D(position: Vector2|list|tuple,camera: Camera2D|list|tuple,) -> Vector2:
+ """Get the world space position for a 2d camera screen space position."""
+ ...
+def GetScreenToWorldRay(position: Vector2|list|tuple,camera: Camera3D|list|tuple,) -> Ray:
+ """Get a ray trace from screen position (i.e mouse)."""
+ ...
+def GetScreenToWorldRayEx(position: Vector2|list|tuple,camera: Camera3D|list|tuple,width: int,height: int,) -> Ray:
+ """Get a ray trace from screen position (i.e mouse) in a viewport."""
+ ...
+def GetScreenWidth() -> int:
+ """Get current screen width."""
+ ...
+def GetShaderLocation(shader: Shader|list|tuple,uniformName: bytes,) -> int:
+ """Get shader uniform location."""
+ ...
+def GetShaderLocationAttrib(shader: Shader|list|tuple,attribName: bytes,) -> int:
+ """Get shader attribute location."""
+ ...
+def GetShapesTexture() -> Texture:
+ """Get texture that is used for shapes drawing."""
+ ...
+def GetShapesTextureRectangle() -> Rectangle:
+ """Get texture source rectangle that is used for shapes drawing."""
+ ...
+def GetSplinePointBasis(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: B-Spline."""
+ ...
+def GetSplinePointBezierCubic(p1: Vector2|list|tuple,c2: Vector2|list|tuple,c3: Vector2|list|tuple,p4: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Cubic Bezier."""
+ ...
+def GetSplinePointBezierQuad(p1: Vector2|list|tuple,c2: Vector2|list|tuple,p3: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Quadratic Bezier."""
+ ...
+def GetSplinePointCatmullRom(p1: Vector2|list|tuple,p2: Vector2|list|tuple,p3: Vector2|list|tuple,p4: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Catmull-Rom."""
+ ...
+def GetSplinePointLinear(startPos: Vector2|list|tuple,endPos: Vector2|list|tuple,t: float,) -> Vector2:
+ """Get (evaluate) spline point: Linear."""
+ ...
+def GetTime() -> float:
+ """Get elapsed time in seconds since InitWindow()."""
+ ...
+def GetTouchPointCount() -> int:
+ """Get number of touch points."""
+ ...
+def GetTouchPointId(index: int,) -> int:
+ """Get touch point identifier for given index."""
+ ...
+def GetTouchPosition(index: int,) -> Vector2:
+ """Get touch position XY for a touch point index (relative to screen size)."""
+ ...
+def GetTouchX() -> int:
+ """Get touch position X for touch point 0 (relative to screen size)."""
+ ...
+def GetTouchY() -> int:
+ """Get touch position Y for touch point 0 (relative to screen size)."""
+ ...
+def GetWindowHandle() -> Any:
+ """Get native window handle."""
+ ...
+def GetWindowPosition() -> Vector2:
+ """Get window position XY on monitor."""
+ ...
+def GetWindowScaleDPI() -> Vector2:
+ """Get window scale DPI factor."""
+ ...
+def GetWorkingDirectory() -> bytes:
+ """Get current working directory (uses static string)."""
+ ...
+def GetWorldToScreen(position: Vector3|list|tuple,camera: Camera3D|list|tuple,) -> Vector2:
+ """Get the screen space position for a 3d world space position."""
+ ...
+def GetWorldToScreen2D(position: Vector2|list|tuple,camera: Camera2D|list|tuple,) -> Vector2:
+ """Get the screen space position for a 2d camera world space position."""
+ ...
+def GetWorldToScreenEx(position: Vector3|list|tuple,camera: Camera3D|list|tuple,width: int,height: int,) -> Vector2:
+ """Get size position for a 3d world space position."""
+ ...
+def GuiButton(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Button control, returns true when clicked."""
+ ...
+def GuiCheckBox(bounds: Rectangle|list|tuple,text: bytes,checked: Any,) -> int:
+ """Check Box control, returns true when active."""
+ ...
+def GuiColorBarAlpha(bounds: Rectangle|list|tuple,text: bytes,alpha: Any,) -> int:
+ """Color Bar Alpha control."""
+ ...
+def GuiColorBarHue(bounds: Rectangle|list|tuple,text: bytes,value: Any,) -> int:
+ """Color Bar Hue control."""
+ ...
+def GuiColorPanel(bounds: Rectangle|list|tuple,text: bytes,color: Any|list|tuple,) -> int:
+ """Color Panel control."""
+ ...
+def GuiColorPanelHSV(bounds: Rectangle|list|tuple,text: bytes,colorHsv: Any|list|tuple,) -> int:
+ """Color Panel control that updates Hue-Saturation-Value color value, used by GuiColorPickerHSV()."""
+ ...
+def GuiColorPicker(bounds: Rectangle|list|tuple,text: bytes,color: Any|list|tuple,) -> int:
+ """Color Picker control (multiple color controls)."""
+ ...
+def GuiColorPickerHSV(bounds: Rectangle|list|tuple,text: bytes,colorHsv: Any|list|tuple,) -> int:
+ """Color Picker control that avoids conversion to RGB on each call (multiple color controls)."""
+ ...
+def GuiComboBox(bounds: Rectangle|list|tuple,text: bytes,active: Any,) -> int:
+ """Combo Box control."""
+ ...
+def GuiDisable() -> None:
+ """Disable gui controls (global state)."""
+ ...
+def GuiDisableTooltip() -> None:
+ """Disable gui tooltips (global state)."""
+ ...
+def GuiDrawIcon(iconId: int,posX: int,posY: int,pixelSize: int,color: Color|list|tuple,) -> None:
+ """Draw icon using pixel size at specified position."""
+ ...
+def GuiDropdownBox(bounds: Rectangle|list|tuple,text: bytes,active: Any,editMode: bool,) -> int:
+ """Dropdown Box control."""
+ ...
+def GuiDummyRec(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Dummy control for placeholders."""
+ ...
+def GuiEnable() -> None:
+ """Enable gui controls (global state)."""
+ ...
+def GuiEnableTooltip() -> None:
+ """Enable gui tooltips (global state)."""
+ ...
+def GuiGetFont() -> Font:
+ """Get gui custom font (global state)."""
+ ...
+def GuiGetIcons() -> Any:
+ """Get raygui icons data pointer."""
+ ...
+def GuiGetState() -> int:
+ """Get gui state (global state)."""
+ ...
+def GuiGetStyle(control: int,property: int,) -> int:
+ """Get one style property."""
+ ...
+def GuiGrid(bounds: Rectangle|list|tuple,text: bytes,spacing: float,subdivs: int,mouseCell: Any|list|tuple,) -> int:
+ """Grid control."""
+ ...
+def GuiGroupBox(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Group Box control with text name."""
+ ...
+def GuiIconText(iconId: int,text: bytes,) -> bytes:
+ """Get text with icon id prepended (if supported)."""
+ ...
+def GuiIsLocked() -> bool:
+ """Check if gui is locked (global state)."""
+ ...
+def GuiLabel(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Label control."""
+ ...
+def GuiLabelButton(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Label button control, returns true when clicked."""
+ ...
+def GuiLine(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Line separator control, could contain text."""
+ ...
+def GuiListView(bounds: Rectangle|list|tuple,text: bytes,scrollIndex: Any,active: Any,) -> int:
+ """List View control."""
+ ...
+def GuiListViewEx(bounds: Rectangle|list|tuple,text: list[bytes],count: int,scrollIndex: Any,active: Any,focus: Any,) -> int:
+ """List View with extended parameters."""
+ ...
+def GuiLoadIcons(fileName: bytes,loadIconsName: bool,) -> list[bytes]:
+ """Load raygui icons file (.rgi) into internal icons data."""
+ ...
+def GuiLoadStyle(fileName: bytes,) -> None:
+ """Load style file over global style variable (.rgs)."""
+ ...
+def GuiLoadStyleDefault() -> None:
+ """Load style default over global style."""
+ ...
+def GuiLock() -> None:
+ """Lock gui controls (global state)."""
+ ...
+def GuiMessageBox(bounds: Rectangle|list|tuple,title: bytes,message: bytes,buttons: bytes,) -> int:
+ """Message Box control, displays a message."""
+ ...
+def GuiPanel(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Panel control, useful to group controls."""
+ ...
+def GuiProgressBar(bounds: Rectangle|list|tuple,textLeft: bytes,textRight: bytes,value: Any,minValue: float,maxValue: float,) -> int:
+ """Progress Bar control."""
+ ...
+def GuiScrollPanel(bounds: Rectangle|list|tuple,text: bytes,content: Rectangle|list|tuple,scroll: Any|list|tuple,view: Any|list|tuple,) -> int:
+ """Scroll Panel control."""
+ ...
+def GuiSetAlpha(alpha: float,) -> None:
+ """Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f."""
+ ...
+def GuiSetFont(font: Font|list|tuple,) -> None:
+ """Set gui custom font (global state)."""
+ ...
+def GuiSetIconScale(scale: int,) -> None:
+ """Set default icon drawing size."""
+ ...
+def GuiSetState(state: int,) -> None:
+ """Set gui state (global state)."""
+ ...
+def GuiSetStyle(control: int,property: int,value: int,) -> None:
+ """Set one style property."""
+ ...
+def GuiSetTooltip(tooltip: bytes,) -> None:
+ """Set tooltip string."""
+ ...
+def GuiSlider(bounds: Rectangle|list|tuple,textLeft: bytes,textRight: bytes,value: Any,minValue: float,maxValue: float,) -> int:
+ """Slider control."""
+ ...
+def GuiSliderBar(bounds: Rectangle|list|tuple,textLeft: bytes,textRight: bytes,value: Any,minValue: float,maxValue: float,) -> int:
+ """Slider Bar control."""
+ ...
+def GuiSpinner(bounds: Rectangle|list|tuple,text: bytes,value: Any,minValue: int,maxValue: int,editMode: bool,) -> int:
+ """Spinner control."""
+ ...
+def GuiStatusBar(bounds: Rectangle|list|tuple,text: bytes,) -> int:
+ """Status Bar control, shows info text."""
+ ...
+def GuiTabBar(bounds: Rectangle|list|tuple,text: list[bytes],count: int,active: Any,) -> int:
+ """Tab Bar control, returns TAB to be closed or -1."""
+ ...
+def GuiTextBox(bounds: Rectangle|list|tuple,text: bytes,textSize: int,editMode: bool,) -> int:
+ """Text Box control, updates input text."""
+ ...
+def GuiTextInputBox(bounds: Rectangle|list|tuple,title: bytes,message: bytes,buttons: bytes,text: bytes,textMaxSize: int,secretViewActive: Any,) -> int:
+ """Text Input Box control, ask for text, supports secret."""
+ ...
+def GuiToggle(bounds: Rectangle|list|tuple,text: bytes,active: Any,) -> int:
+ """Toggle Button control."""
+ ...
+def GuiToggleGroup(bounds: Rectangle|list|tuple,text: bytes,active: Any,) -> int:
+ """Toggle Group control."""
+ ...
+def GuiToggleSlider(bounds: Rectangle|list|tuple,text: bytes,active: Any,) -> int:
+ """Toggle Slider control."""
+ ...
+def GuiUnlock() -> None:
+ """Unlock gui controls (global state)."""
+ ...
+def GuiValueBox(bounds: Rectangle|list|tuple,text: bytes,value: Any,minValue: int,maxValue: int,editMode: bool,) -> int:
+ """Value Box control, updates input text with numbers."""
+ ...
+def GuiValueBoxFloat(bounds: Rectangle|list|tuple,text: bytes,textValue: bytes,value: Any,editMode: bool,) -> int:
+ """Value box control for float values."""
+ ...
+def GuiWindowBox(bounds: Rectangle|list|tuple,title: bytes,) -> int:
+ """Window Box control, shows a window that can be closed."""
+ ...
+HUEBAR_PADDING: int
+HUEBAR_SELECTOR_HEIGHT: int
+HUEBAR_SELECTOR_OVERFLOW: int
+HUEBAR_WIDTH: int
+def HideCursor() -> None:
+ """Hides cursor."""
+ ...
+ICON_1UP: int
+ICON_229: int
+ICON_230: int
+ICON_231: int
+ICON_232: int
+ICON_233: int
+ICON_234: int
+ICON_235: int
+ICON_236: int
+ICON_237: int
+ICON_238: int
+ICON_239: int
+ICON_240: int
+ICON_241: int
+ICON_242: int
+ICON_243: int
+ICON_244: int
+ICON_245: int
+ICON_246: int
+ICON_247: int
+ICON_248: int
+ICON_249: int
+ICON_250: int
+ICON_251: int
+ICON_252: int
+ICON_253: int
+ICON_254: int
+ICON_255: int
+ICON_ALARM: int
+ICON_ALPHA_CLEAR: int
+ICON_ALPHA_MULTIPLY: int
+ICON_ARROW_DOWN: int
+ICON_ARROW_DOWN_FILL: int
+ICON_ARROW_LEFT: int
+ICON_ARROW_LEFT_FILL: int
+ICON_ARROW_RIGHT: int
+ICON_ARROW_RIGHT_FILL: int
+ICON_ARROW_UP: int
+ICON_ARROW_UP_FILL: int
+ICON_AUDIO: int
+ICON_BIN: int
+ICON_BOX: int
+ICON_BOX_BOTTOM: int
+ICON_BOX_BOTTOM_LEFT: int
+ICON_BOX_BOTTOM_RIGHT: int
+ICON_BOX_CENTER: int
+ICON_BOX_CIRCLE_MASK: int
+ICON_BOX_CONCENTRIC: int
+ICON_BOX_CORNERS_BIG: int
+ICON_BOX_CORNERS_SMALL: int
+ICON_BOX_DOTS_BIG: int
+ICON_BOX_DOTS_SMALL: int
+ICON_BOX_GRID: int
+ICON_BOX_GRID_BIG: int
+ICON_BOX_LEFT: int
+ICON_BOX_MULTISIZE: int
+ICON_BOX_RIGHT: int
+ICON_BOX_TOP: int
+ICON_BOX_TOP_LEFT: int
+ICON_BOX_TOP_RIGHT: int
+ICON_BREAKPOINT_OFF: int
+ICON_BREAKPOINT_ON: int
+ICON_BRUSH_CLASSIC: int
+ICON_BRUSH_PAINTER: int
+ICON_BURGER_MENU: int
+ICON_CAMERA: int
+ICON_CASE_SENSITIVE: int
+ICON_CLOCK: int
+ICON_COIN: int
+ICON_COLOR_BUCKET: int
+ICON_COLOR_PICKER: int
+ICON_CORNER: int
+ICON_CPU: int
+ICON_CRACK: int
+ICON_CRACK_POINTS: int
+ICON_CROP: int
+ICON_CROP_ALPHA: int
+ICON_CROSS: int
+ICON_CROSSLINE: int
+ICON_CROSS_SMALL: int
+ICON_CUBE: int
+ICON_CUBE_FACE_BACK: int
+ICON_CUBE_FACE_BOTTOM: int
+ICON_CUBE_FACE_FRONT: int
+ICON_CUBE_FACE_LEFT: int
+ICON_CUBE_FACE_RIGHT: int
+ICON_CUBE_FACE_TOP: int
+ICON_CURSOR_CLASSIC: int
+ICON_CURSOR_HAND: int
+ICON_CURSOR_MOVE: int
+ICON_CURSOR_MOVE_FILL: int
+ICON_CURSOR_POINTER: int
+ICON_CURSOR_SCALE: int
+ICON_CURSOR_SCALE_FILL: int
+ICON_CURSOR_SCALE_LEFT: int
+ICON_CURSOR_SCALE_LEFT_FILL: int
+ICON_CURSOR_SCALE_RIGHT: int
+ICON_CURSOR_SCALE_RIGHT_FILL: int
+ICON_DEMON: int
+ICON_DITHERING: int
+ICON_DOOR: int
+ICON_EMPTYBOX: int
+ICON_EMPTYBOX_SMALL: int
+ICON_EXIT: int
+ICON_EXPLOSION: int
+ICON_EYE_OFF: int
+ICON_EYE_ON: int
+ICON_FILE: int
+ICON_FILETYPE_ALPHA: int
+ICON_FILETYPE_AUDIO: int
+ICON_FILETYPE_BINARY: int
+ICON_FILETYPE_HOME: int
+ICON_FILETYPE_IMAGE: int
+ICON_FILETYPE_INFO: int
+ICON_FILETYPE_PLAY: int
+ICON_FILETYPE_TEXT: int
+ICON_FILETYPE_VIDEO: int
+ICON_FILE_ADD: int
+ICON_FILE_COPY: int
+ICON_FILE_CUT: int
+ICON_FILE_DELETE: int
+ICON_FILE_EXPORT: int
+ICON_FILE_NEW: int
+ICON_FILE_OPEN: int
+ICON_FILE_PASTE: int
+ICON_FILE_SAVE: int
+ICON_FILE_SAVE_CLASSIC: int
+ICON_FILTER: int
+ICON_FILTER_BILINEAR: int
+ICON_FILTER_POINT: int
+ICON_FILTER_TOP: int
+ICON_FOLDER: int
+ICON_FOLDER_ADD: int
+ICON_FOLDER_FILE_OPEN: int
+ICON_FOLDER_OPEN: int
+ICON_FOLDER_SAVE: int
+ICON_FOUR_BOXES: int
+ICON_FX: int
+ICON_GEAR: int
+ICON_GEAR_BIG: int
+ICON_GEAR_EX: int
+ICON_GRID: int
+ICON_GRID_FILL: int
+ICON_HAND_POINTER: int
+ICON_HEART: int
+ICON_HELP: int
+ICON_HELP_BOX: int
+ICON_HEX: int
+ICON_HIDPI: int
+ICON_HOT: int
+ICON_HOUSE: int
+ICON_INFO: int
+ICON_INFO_BOX: int
+ICON_KEY: int
+ICON_LASER: int
+ICON_LAYERS: int
+ICON_LAYERS2: int
+ICON_LAYERS_ISO: int
+ICON_LAYERS_VISIBLE: int
+ICON_LENS: int
+ICON_LENS_BIG: int
+ICON_LIFE_BARS: int
+ICON_LINK: int
+ICON_LINK_BOXES: int
+ICON_LINK_BROKE: int
+ICON_LINK_MULTI: int
+ICON_LINK_NET: int
+ICON_LOCK_CLOSE: int
+ICON_LOCK_OPEN: int
+ICON_MAGNET: int
+ICON_MAILBOX: int
+ICON_MAPS: int
+ICON_MIPMAPS: int
+ICON_MLAYERS: int
+ICON_MODE_2D: int
+ICON_MODE_3D: int
+ICON_MONITOR: int
+ICON_MUTATE: int
+ICON_MUTATE_FILL: int
+ICON_NONE: int
+ICON_NOTEBOOK: int
+ICON_OK_TICK: int
+ICON_PENCIL: int
+ICON_PENCIL_BIG: int
+ICON_PHOTO_CAMERA: int
+ICON_PHOTO_CAMERA_FLASH: int
+ICON_PLAYER: int
+ICON_PLAYER_JUMP: int
+ICON_PLAYER_NEXT: int
+ICON_PLAYER_PAUSE: int
+ICON_PLAYER_PLAY: int
+ICON_PLAYER_PLAY_BACK: int
+ICON_PLAYER_PREVIOUS: int
+ICON_PLAYER_RECORD: int
+ICON_PLAYER_STOP: int
+ICON_POT: int
+ICON_PRINTER: int
+ICON_PRIORITY: int
+ICON_REDO: int
+ICON_REDO_FILL: int
+ICON_REG_EXP: int
+ICON_REPEAT: int
+ICON_REPEAT_FILL: int
+ICON_REREDO: int
+ICON_REREDO_FILL: int
+ICON_RESIZE: int
+ICON_RESTART: int
+ICON_ROM: int
+ICON_ROTATE: int
+ICON_ROTATE_FILL: int
+ICON_RUBBER: int
+ICON_SAND_TIMER: int
+ICON_SCALE: int
+ICON_SHIELD: int
+ICON_SHUFFLE: int
+ICON_SHUFFLE_FILL: int
+ICON_SPECIAL: int
+ICON_SQUARE_TOGGLE: int
+ICON_STAR: int
+ICON_STEP_INTO: int
+ICON_STEP_OUT: int
+ICON_STEP_OVER: int
+ICON_SUITCASE: int
+ICON_SUITCASE_ZIP: int
+ICON_SYMMETRY: int
+ICON_SYMMETRY_HORIZONTAL: int
+ICON_SYMMETRY_VERTICAL: int
+ICON_TARGET: int
+ICON_TARGET_BIG: int
+ICON_TARGET_BIG_FILL: int
+ICON_TARGET_MOVE: int
+ICON_TARGET_MOVE_FILL: int
+ICON_TARGET_POINT: int
+ICON_TARGET_SMALL: int
+ICON_TARGET_SMALL_FILL: int
+ICON_TEXT_A: int
+ICON_TEXT_NOTES: int
+ICON_TEXT_POPUP: int
+ICON_TEXT_T: int
+ICON_TOOLS: int
+ICON_UNDO: int
+ICON_UNDO_FILL: int
+ICON_VERTICAL_BARS: int
+ICON_VERTICAL_BARS_FILL: int
+ICON_WARNING: int
+ICON_WATER_DROP: int
+ICON_WAVE: int
+ICON_WAVE_SINUS: int
+ICON_WAVE_SQUARE: int
+ICON_WAVE_TRIANGULAR: int
+ICON_WINDOW: int
+ICON_ZOOM_ALL: int
+ICON_ZOOM_BIG: int
+ICON_ZOOM_CENTER: int
+ICON_ZOOM_MEDIUM: int
+ICON_ZOOM_SMALL: int
+def ImageAlphaClear(image: Any|list|tuple,color: Color|list|tuple,threshold: float,) -> None:
+ """Clear alpha channel to desired color."""
+ ...
+def ImageAlphaCrop(image: Any|list|tuple,threshold: float,) -> None:
+ """Crop image depending on alpha value."""
+ ...
+def ImageAlphaMask(image: Any|list|tuple,alphaMask: Image|list|tuple,) -> None:
+ """Apply alpha mask to image."""
+ ...
+def ImageAlphaPremultiply(image: Any|list|tuple,) -> None:
+ """Premultiply alpha channel."""
+ ...
+def ImageBlurGaussian(image: Any|list|tuple,blurSize: int,) -> None:
+ """Apply Gaussian blur using a box blur approximation."""
+ ...
+def ImageClearBackground(dst: Any|list|tuple,color: Color|list|tuple,) -> None:
+ """Clear image background with given color."""
+ ...
+def ImageColorBrightness(image: Any|list|tuple,brightness: int,) -> None:
+ """Modify image color: brightness (-255 to 255)."""
+ ...
+def ImageColorContrast(image: Any|list|tuple,contrast: float,) -> None:
+ """Modify image color: contrast (-100 to 100)."""
+ ...
+def ImageColorGrayscale(image: Any|list|tuple,) -> None:
+ """Modify image color: grayscale."""
+ ...
+def ImageColorInvert(image: Any|list|tuple,) -> None:
+ """Modify image color: invert."""
+ ...
+def ImageColorReplace(image: Any|list|tuple,color: Color|list|tuple,replace: Color|list|tuple,) -> None:
+ """Modify image color: replace color."""
+ ...
+def ImageColorTint(image: Any|list|tuple,color: Color|list|tuple,) -> None:
+ """Modify image color: tint."""
+ ...
+def ImageCopy(image: Image|list|tuple,) -> Image:
+ """Create an image duplicate (useful for transformations)."""
+ ...
+def ImageCrop(image: Any|list|tuple,crop: Rectangle|list|tuple,) -> None:
+ """Crop an image to a defined rectangle."""
+ ...
+def ImageDither(image: Any|list|tuple,rBpp: int,gBpp: int,bBpp: int,aBpp: int,) -> None:
+ """Dither image data to 16bpp or lower (Floyd-Steinberg dithering)."""
+ ...
+def ImageDraw(dst: Any|list|tuple,src: Image|list|tuple,srcRec: Rectangle|list|tuple,dstRec: Rectangle|list|tuple,tint: Color|list|tuple,) -> None:
+ """Draw a source image within a destination image (tint applied to source)."""
+ ...
+def ImageDrawCircle(dst: Any|list|tuple,centerX: int,centerY: int,radius: int,color: Color|list|tuple,) -> None:
+ """Draw a filled circle within an image."""
+ ...
+def ImageDrawCircleLines(dst: Any|list|tuple,centerX: int,centerY: int,radius: int,color: Color|list|tuple,) -> None:
+ """Draw circle outline within an image."""
+ ...
+def ImageDrawCircleLinesV(dst: Any|list|tuple,center: Vector2|list|tuple,radius: int,color: Color|list|tuple,) -> None:
+ """Draw circle outline within an image (Vector version)."""
+ ...
+def ImageDrawCircleV(dst: Any|list|tuple,center: Vector2|list|tuple,radius: int,color: Color|list|tuple,) -> None:
+ """Draw a filled circle within an image (Vector version)."""
+ ...
+def ImageDrawLine(dst: Any|list|tuple,startPosX: int,startPosY: int,endPosX: int,endPosY: int,color: Color|list|tuple,) -> None:
+ """Draw line within an image."""
+ ...
+def ImageDrawLineEx(dst: Any|list|tuple,start: Vector2|list|tuple,end: Vector2|list|tuple,thick: int,color: Color|list|tuple,) -> None:
+ """Draw a line defining thickness within an image."""
+ ...
+def ImageDrawLineV(dst: Any|list|tuple,start: Vector2|list|tuple,end: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw line within an image (Vector version)."""
+ ...
+def ImageDrawPixel(dst: Any|list|tuple,posX: int,posY: int,color: Color|list|tuple,) -> None:
+ """Draw pixel within an image."""
+ ...
+def ImageDrawPixelV(dst: Any|list|tuple,position: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw pixel within an image (Vector version)."""
+ ...
+def ImageDrawRectangle(dst: Any|list|tuple,posX: int,posY: int,width: int,height: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle within an image."""
+ ...
+def ImageDrawRectangleLines(dst: Any|list|tuple,rec: Rectangle|list|tuple,thick: int,color: Color|list|tuple,) -> None:
+ """Draw rectangle lines within an image."""
+ ...
+def ImageDrawRectangleRec(dst: Any|list|tuple,rec: Rectangle|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw rectangle within an image."""
+ ...
+def ImageDrawRectangleV(dst: Any|list|tuple,position: Vector2|list|tuple,size: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw rectangle within an image (Vector version)."""
+ ...
+def ImageDrawText(dst: Any|list|tuple,text: bytes,posX: int,posY: int,fontSize: int,color: Color|list|tuple,) -> None:
+ """Draw text (using default font) within an image (destination)."""
+ ...
+def ImageDrawTextEx(dst: Any|list|tuple,font: Font|list|tuple,text: bytes,position: Vector2|list|tuple,fontSize: float,spacing: float,tint: Color|list|tuple,) -> None:
+ """Draw text (custom sprite font) within an image (destination)."""
+ ...
+def ImageDrawTriangle(dst: Any|list|tuple,v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw triangle within an image."""
+ ...
+def ImageDrawTriangleEx(dst: Any|list|tuple,v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,c1: Color|list|tuple,c2: Color|list|tuple,c3: Color|list|tuple,) -> None:
+ """Draw triangle with interpolated colors within an image."""
+ ...
+def ImageDrawTriangleFan(dst: Any|list|tuple,points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle fan defined by points within an image (first vertex is the center)."""
+ ...
+def ImageDrawTriangleLines(dst: Any|list|tuple,v1: Vector2|list|tuple,v2: Vector2|list|tuple,v3: Vector2|list|tuple,color: Color|list|tuple,) -> None:
+ """Draw triangle outline within an image."""
+ ...
+def ImageDrawTriangleStrip(dst: Any|list|tuple,points: Any|list|tuple,pointCount: int,color: Color|list|tuple,) -> None:
+ """Draw a triangle strip defined by points within an image."""
+ ...
+def ImageFlipHorizontal(image: Any|list|tuple,) -> None:
+ """Flip image horizontally."""
+ ...
+def ImageFlipVertical(image: Any|list|tuple,) -> None:
+ """Flip image vertically."""
+ ...
+def ImageFormat(image: Any|list|tuple,newFormat: int,) -> None:
+ """Convert image data to desired format."""
+ ...
+def ImageFromChannel(image: Image|list|tuple,selectedChannel: int,) -> Image:
+ """Create an image from a selected channel of another image (GRAYSCALE)."""
+ ...
+def ImageFromImage(image: Image|list|tuple,rec: Rectangle|list|tuple,) -> Image:
+ """Create an image from another image piece."""
+ ...
+def ImageKernelConvolution(image: Any|list|tuple,kernel: Any,kernelSize: int,) -> None:
+ """Apply custom square convolution kernel to image."""
+ ...
+def ImageMipmaps(image: Any|list|tuple,) -> None:
+ """Compute all mipmap levels for a provided image."""
+ ...
+def ImageResize(image: Any|list|tuple,newWidth: int,newHeight: int,) -> None:
+ """Resize image (Bicubic scaling algorithm)."""
+ ...
+def ImageResizeCanvas(image: Any|list|tuple,newWidth: int,newHeight: int,offsetX: int,offsetY: int,fill: Color|list|tuple,) -> None:
+ """Resize canvas and fill with color."""
+ ...
+def ImageResizeNN(image: Any|list|tuple,newWidth: int,newHeight: int,) -> None:
+ """Resize image (Nearest-Neighbor scaling algorithm)."""
+ ...
+def ImageRotate(image: Any|list|tuple,degrees: int,) -> None:
+ """Rotate image by input angle in degrees (-359 to 359)."""
+ ...
+def ImageRotateCCW(image: Any|list|tuple,) -> None:
+ """Rotate image counter-clockwise 90deg."""
+ ...
+def ImageRotateCW(image: Any|list|tuple,) -> None:
+ """Rotate image clockwise 90deg."""
+ ...
+def ImageText(text: bytes,fontSize: int,color: Color|list|tuple,) -> Image:
+ """Create an image from text (default font)."""
+ ...
+def ImageTextEx(font: Font|list|tuple,text: bytes,fontSize: float,spacing: float,tint: Color|list|tuple,) -> Image:
+ """Create an image from text (custom sprite font)."""
+ ...
+def ImageToPOT(image: Any|list|tuple,fill: Color|list|tuple,) -> None:
+ """Convert image to POT (power-of-two)."""
+ ...
+def InitAudioDevice() -> None:
+ """Initialize audio device and context."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def InitPhysics() -> None:
+ """Initializes physics values, pointers and creates physics loop thread."""
+ ...
+def InitWindow(width: int,height: int,title: bytes,) -> None:
+ """Initialize window and OpenGL context."""
+ ...
+def IsAudioDeviceReady() -> bool:
+ """Check if audio device has been initialized successfully."""
+ ...
+def IsAudioStreamPlaying(stream: AudioStream|list|tuple,) -> bool:
+ """Check if audio stream is playing."""
+ ...
+def IsAudioStreamProcessed(stream: AudioStream|list|tuple,) -> bool:
+ """Check if any audio stream buffers requires refill."""
+ ...
+def IsAudioStreamValid(stream: AudioStream|list|tuple,) -> bool:
+ """Checks if an audio stream is valid (buffers initialized)."""
+ ...
+def IsCursorHidden() -> bool:
+ """Check if cursor is not visible."""
+ ...
+def IsCursorOnScreen() -> bool:
+ """Check if cursor is on the screen."""
+ ...
+def IsFileDropped() -> bool:
+ """Check if a file has been dropped into window."""
+ ...
+def IsFileExtension(fileName: bytes,ext: bytes,) -> bool:
+ """Check file extension (including point: .png, .wav)."""
+ ...
+def IsFileNameValid(fileName: bytes,) -> bool:
+ """Check if fileName is valid for the platform/OS."""
+ ...
+def IsFontValid(font: Font|list|tuple,) -> bool:
+ """Check if a font is valid (font data loaded, WARNING: GPU texture not checked)."""
+ ...
+def IsGamepadAvailable(gamepad: int,) -> bool:
+ """Check if a gamepad is available."""
+ ...
+def IsGamepadButtonDown(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button is being pressed."""
+ ...
+def IsGamepadButtonPressed(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button has been pressed once."""
+ ...
+def IsGamepadButtonReleased(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button has been released once."""
+ ...
+def IsGamepadButtonUp(gamepad: int,button: int,) -> bool:
+ """Check if a gamepad button is NOT being pressed."""
+ ...
+def IsGestureDetected(gesture: int,) -> bool:
+ """Check if a gesture have been detected."""
+ ...
+def IsImageValid(image: Image|list|tuple,) -> bool:
+ """Check if an image is valid (data and parameters)."""
+ ...
+def IsKeyDown(key: int,) -> bool:
+ """Check if a key is being pressed."""
+ ...
+def IsKeyPressed(key: int,) -> bool:
+ """Check if a key has been pressed once."""
+ ...
+def IsKeyPressedRepeat(key: int,) -> bool:
+ """Check if a key has been pressed again."""
+ ...
+def IsKeyReleased(key: int,) -> bool:
+ """Check if a key has been released once."""
+ ...
+def IsKeyUp(key: int,) -> bool:
+ """Check if a key is NOT being pressed."""
+ ...
+def IsMaterialValid(material: Material|list|tuple,) -> bool:
+ """Check if a material is valid (shader assigned, map textures loaded in GPU)."""
+ ...
+def IsModelAnimationValid(model: Model|list|tuple,anim: ModelAnimation|list|tuple,) -> bool:
+ """Check model animation skeleton match."""
+ ...
+def IsModelValid(model: Model|list|tuple,) -> bool:
+ """Check if a model is valid (loaded in GPU, VAO/VBOs)."""
+ ...
+def IsMouseButtonDown(button: int,) -> bool:
+ """Check if a mouse button is being pressed."""
+ ...
+def IsMouseButtonPressed(button: int,) -> bool:
+ """Check if a mouse button has been pressed once."""
+ ...
+def IsMouseButtonReleased(button: int,) -> bool:
+ """Check if a mouse button has been released once."""
+ ...
+def IsMouseButtonUp(button: int,) -> bool:
+ """Check if a mouse button is NOT being pressed."""
+ ...
+def IsMusicStreamPlaying(music: Music|list|tuple,) -> bool:
+ """Check if music is playing."""
+ ...
+def IsMusicValid(music: Music|list|tuple,) -> bool:
+ """Checks if a music stream is valid (context and buffers initialized)."""
+ ...
+def IsPathFile(path: bytes,) -> bool:
+ """Check if a given path is a file or a directory."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def IsPhysicsEnabled() -> bool:
+ """Returns true if physics thread is currently enabled."""
+ ...
+def IsRenderTextureValid(target: RenderTexture|list|tuple,) -> bool:
+ """Check if a render texture is valid (loaded in GPU)."""
+ ...
+def IsShaderValid(shader: Shader|list|tuple,) -> bool:
+ """Check if a shader is valid (loaded on GPU)."""
+ ...
+def IsSoundPlaying(sound: Sound|list|tuple,) -> bool:
+ """Check if a sound is currently playing."""
+ ...
+def IsSoundValid(sound: Sound|list|tuple,) -> bool:
+ """Checks if a sound is valid (data loaded and buffers initialized)."""
+ ...
+def IsTextureValid(texture: Texture|list|tuple,) -> bool:
+ """Check if a texture is valid (loaded in GPU)."""
+ ...
+def IsWaveValid(wave: Wave|list|tuple,) -> bool:
+ """Checks if wave data is valid (data loaded and parameters)."""
+ ...
+def IsWindowFocused() -> bool:
+ """Check if window is currently focused."""
+ ...
+def IsWindowFullscreen() -> bool:
+ """Check if window is currently fullscreen."""
+ ...
+def IsWindowHidden() -> bool:
+ """Check if window is currently hidden."""
+ ...
+def IsWindowMaximized() -> bool:
+ """Check if window is currently maximized."""
+ ...
+def IsWindowMinimized() -> bool:
+ """Check if window is currently minimized."""
+ ...
+def IsWindowReady() -> bool:
+ """Check if window has been initialized successfully."""
+ ...
+def IsWindowResized() -> bool:
+ """Check if window has been resized last frame."""
+ ...
+def IsWindowState(flag: int,) -> bool:
+ """Check if one specific window flag is enabled."""
+ ...
+KEY_A: int
+KEY_APOSTROPHE: int
+KEY_B: int
+KEY_BACK: int
+KEY_BACKSLASH: int
+KEY_BACKSPACE: int
+KEY_C: int
+KEY_CAPS_LOCK: int
+KEY_COMMA: int
+KEY_D: int
+KEY_DELETE: int
+KEY_DOWN: int
+KEY_E: int
+KEY_EIGHT: int
+KEY_END: int
+KEY_ENTER: int
+KEY_EQUAL: int
+KEY_ESCAPE: int
+KEY_F: int
+KEY_F1: int
+KEY_F10: int
+KEY_F11: int
+KEY_F12: int
+KEY_F2: int
+KEY_F3: int
+KEY_F4: int
+KEY_F5: int
+KEY_F6: int
+KEY_F7: int
+KEY_F8: int
+KEY_F9: int
+KEY_FIVE: int
+KEY_FOUR: int
+KEY_G: int
+KEY_GRAVE: int
+KEY_H: int
+KEY_HOME: int
+KEY_I: int
+KEY_INSERT: int
+KEY_J: int
+KEY_K: int
+KEY_KB_MENU: int
+KEY_KP_0: int
+KEY_KP_1: int
+KEY_KP_2: int
+KEY_KP_3: int
+KEY_KP_4: int
+KEY_KP_5: int
+KEY_KP_6: int
+KEY_KP_7: int
+KEY_KP_8: int
+KEY_KP_9: int
+KEY_KP_ADD: int
+KEY_KP_DECIMAL: int
+KEY_KP_DIVIDE: int
+KEY_KP_ENTER: int
+KEY_KP_EQUAL: int
+KEY_KP_MULTIPLY: int
+KEY_KP_SUBTRACT: int
+KEY_L: int
+KEY_LEFT: int
+KEY_LEFT_ALT: int
+KEY_LEFT_BRACKET: int
+KEY_LEFT_CONTROL: int
+KEY_LEFT_SHIFT: int
+KEY_LEFT_SUPER: int
+KEY_M: int
+KEY_MENU: int
+KEY_MINUS: int
+KEY_N: int
+KEY_NINE: int
+KEY_NULL: int
+KEY_NUM_LOCK: int
+KEY_O: int
+KEY_ONE: int
+KEY_P: int
+KEY_PAGE_DOWN: int
+KEY_PAGE_UP: int
+KEY_PAUSE: int
+KEY_PERIOD: int
+KEY_PRINT_SCREEN: int
+KEY_Q: int
+KEY_R: int
+KEY_RIGHT: int
+KEY_RIGHT_ALT: int
+KEY_RIGHT_BRACKET: int
+KEY_RIGHT_CONTROL: int
+KEY_RIGHT_SHIFT: int
+KEY_RIGHT_SUPER: int
+KEY_S: int
+KEY_SCROLL_LOCK: int
+KEY_SEMICOLON: int
+KEY_SEVEN: int
+KEY_SIX: int
+KEY_SLASH: int
+KEY_SPACE: int
+KEY_T: int
+KEY_TAB: int
+KEY_THREE: int
+KEY_TWO: int
+KEY_U: int
+KEY_UP: int
+KEY_V: int
+KEY_VOLUME_DOWN: int
+KEY_VOLUME_UP: int
+KEY_W: int
+KEY_X: int
+KEY_Y: int
+KEY_Z: int
+KEY_ZERO: int
+LABEL: int
+LINE_COLOR: int
+LISTVIEW: int
+LIST_ITEMS_BORDER_WIDTH: int
+LIST_ITEMS_HEIGHT: int
+LIST_ITEMS_SPACING: int
+LOG_ALL: int
+LOG_DEBUG: int
+LOG_ERROR: int
+LOG_FATAL: int
+LOG_INFO: int
+LOG_NONE: int
+LOG_TRACE: int
+LOG_WARNING: int
+def Lerp(start: float,end: float,amount: float,) -> float:
+ """."""
+ ...
+def LoadAudioStream(sampleRate: int,sampleSize: int,channels: int,) -> AudioStream:
+ """Load audio stream (to stream raw audio pcm data)."""
+ ...
+def LoadAutomationEventList(fileName: bytes,) -> AutomationEventList:
+ """Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS."""
+ ...
+def LoadCodepoints(text: bytes,count: Any,) -> Any:
+ """Load all codepoints from a UTF-8 text string, codepoints count returned by parameter."""
+ ...
+def LoadDirectoryFiles(dirPath: bytes,) -> FilePathList:
+ """Load directory filepaths."""
+ ...
+def LoadDirectoryFilesEx(basePath: bytes,filter: bytes,scanSubdirs: bool,) -> FilePathList:
+ """Load directory filepaths with extension filtering and recursive directory scan. Use 'DIR' in the filter string to include directories in the result."""
+ ...
+def LoadDroppedFiles() -> FilePathList:
+ """Load dropped filepaths."""
+ ...
+def LoadFileData(fileName: bytes,dataSize: Any,) -> bytes:
+ """Load file data as byte array (read)."""
+ ...
+def LoadFileText(fileName: bytes,) -> bytes:
+ """Load text data from file (read), returns a '\0' terminated string."""
+ ...
+def LoadFont(fileName: bytes,) -> Font:
+ """Load font from file into GPU memory (VRAM)."""
+ ...
+def LoadFontData(fileData: bytes,dataSize: int,fontSize: int,codepoints: Any,codepointCount: int,type: int,) -> Any:
+ """Load font data for further use."""
+ ...
+def LoadFontEx(fileName: bytes,fontSize: int,codepoints: Any,codepointCount: int,) -> Font:
+ """Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set, font size is provided in pixels height."""
+ ...
+def LoadFontFromImage(image: Image|list|tuple,key: Color|list|tuple,firstChar: int,) -> Font:
+ """Load font from Image (XNA style)."""
+ ...
+def LoadFontFromMemory(fileType: bytes,fileData: bytes,dataSize: int,fontSize: int,codepoints: Any,codepointCount: int,) -> Font:
+ """Load font from memory buffer, fileType refers to extension: i.e. '.ttf'."""
+ ...
+def LoadImage(fileName: bytes,) -> Image:
+ """Load image from file into CPU memory (RAM)."""
+ ...
+def LoadImageAnim(fileName: bytes,frames: Any,) -> Image:
+ """Load image sequence from file (frames appended to image.data)."""
+ ...
+def LoadImageAnimFromMemory(fileType: bytes,fileData: bytes,dataSize: int,frames: Any,) -> Image:
+ """Load image sequence from memory buffer."""
+ ...
+def LoadImageColors(image: Image|list|tuple,) -> Any:
+ """Load color data from image as a Color array (RGBA - 32bit)."""
+ ...
+def LoadImageFromMemory(fileType: bytes,fileData: bytes,dataSize: int,) -> Image:
+ """Load image from memory buffer, fileType refers to extension: i.e. '.png'."""
+ ...
+def LoadImageFromScreen() -> Image:
+ """Load image from screen buffer and (screenshot)."""
+ ...
+def LoadImageFromTexture(texture: Texture|list|tuple,) -> Image:
+ """Load image from GPU texture data."""
+ ...
+def LoadImagePalette(image: Image|list|tuple,maxPaletteSize: int,colorCount: Any,) -> Any:
+ """Load colors palette from image as a Color array (RGBA - 32bit)."""
+ ...
+def LoadImageRaw(fileName: bytes,width: int,height: int,format: int,headerSize: int,) -> Image:
+ """Load image from RAW file data."""
+ ...
+def LoadMaterialDefault() -> Material:
+ """Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)."""
+ ...
+def LoadMaterials(fileName: bytes,materialCount: Any,) -> Any:
+ """Load materials from model file."""
+ ...
+def LoadModel(fileName: bytes,) -> Model:
+ """Load model from files (meshes and materials)."""
+ ...
+def LoadModelAnimations(fileName: bytes,animCount: Any,) -> Any:
+ """Load model animations from file."""
+ ...
+def LoadModelFromMesh(mesh: Mesh|list|tuple,) -> Model:
+ """Load model from generated mesh (default material)."""
+ ...
+def LoadMusicStream(fileName: bytes,) -> Music:
+ """Load music stream from file."""
+ ...
+def LoadMusicStreamFromMemory(fileType: bytes,data: bytes,dataSize: int,) -> Music:
+ """Load music stream from data."""
+ ...
+def LoadRandomSequence(count: int,min_1: int,max_2: int,) -> Any:
+ """Load random values sequence, no values repeated."""
+ ...
+def LoadRenderTexture(width: int,height: int,) -> RenderTexture:
+ """Load texture for rendering (framebuffer)."""
+ ...
+def LoadShader(vsFileName: bytes,fsFileName: bytes,) -> Shader:
+ """Load shader from files and bind default locations."""
+ ...
+def LoadShaderFromMemory(vsCode: bytes,fsCode: bytes,) -> Shader:
+ """Load shader from code strings and bind default locations."""
+ ...
+def LoadSound(fileName: bytes,) -> Sound:
+ """Load sound from file."""
+ ...
+def LoadSoundAlias(source: Sound|list|tuple,) -> Sound:
+ """Create a new sound that shares the same sample data as the source sound, does not own the sound data."""
+ ...
+def LoadSoundFromWave(wave: Wave|list|tuple,) -> Sound:
+ """Load sound from wave data."""
+ ...
+def LoadTexture(fileName: bytes,) -> Texture:
+ """Load texture from file into GPU memory (VRAM)."""
+ ...
+def LoadTextureCubemap(image: Image|list|tuple,layout: int,) -> Texture:
+ """Load cubemap from image, multiple image cubemap layouts supported."""
+ ...
+def LoadTextureFromImage(image: Image|list|tuple,) -> Texture:
+ """Load texture from image data."""
+ ...
+def LoadUTF8(codepoints: Any,length: int,) -> bytes:
+ """Load UTF-8 text encoded from codepoints array."""
+ ...
+def LoadVrStereoConfig(device: VrDeviceInfo|list|tuple,) -> VrStereoConfig:
+ """Load VR stereo config for VR simulator device parameters."""
+ ...
+def LoadWave(fileName: bytes,) -> Wave:
+ """Load wave data from file."""
+ ...
+def LoadWaveFromMemory(fileType: bytes,fileData: bytes,dataSize: int,) -> Wave:
+ """Load wave from memory buffer, fileType refers to extension: i.e. '.wav'."""
+ ...
+def LoadWaveSamples(wave: Wave|list|tuple,) -> Any:
+ """Load samples data from wave as a 32bit float data array."""
+ ...
+MATERIAL_MAP_ALBEDO: int
+MATERIAL_MAP_BRDF: int
+MATERIAL_MAP_CUBEMAP: int
+MATERIAL_MAP_EMISSION: int
+MATERIAL_MAP_HEIGHT: int
+MATERIAL_MAP_IRRADIANCE: int
+MATERIAL_MAP_METALNESS: int
+MATERIAL_MAP_NORMAL: int
+MATERIAL_MAP_OCCLUSION: int
+MATERIAL_MAP_PREFILTER: int
+MATERIAL_MAP_ROUGHNESS: int
+MOUSE_BUTTON_BACK: int
+MOUSE_BUTTON_EXTRA: int
+MOUSE_BUTTON_FORWARD: int
+MOUSE_BUTTON_LEFT: int
+MOUSE_BUTTON_MIDDLE: int
+MOUSE_BUTTON_RIGHT: int
+MOUSE_BUTTON_SIDE: int
+MOUSE_CURSOR_ARROW: int
+MOUSE_CURSOR_CROSSHAIR: int
+MOUSE_CURSOR_DEFAULT: int
+MOUSE_CURSOR_IBEAM: int
+MOUSE_CURSOR_NOT_ALLOWED: int
+MOUSE_CURSOR_POINTING_HAND: int
+MOUSE_CURSOR_RESIZE_ALL: int
+MOUSE_CURSOR_RESIZE_EW: int
+MOUSE_CURSOR_RESIZE_NESW: int
+MOUSE_CURSOR_RESIZE_NS: int
+MOUSE_CURSOR_RESIZE_NWSE: int
+def MakeDirectory(dirPath: bytes,) -> int:
+ """Create directories (including full path requested), returns 0 on success."""
+ ...
+def MatrixAdd(left: Matrix|list|tuple,right: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixDecompose(mat: Matrix|list|tuple,translation: Any|list|tuple,rotation: Any|list|tuple,scale: Any|list|tuple,) -> None:
+ """."""
+ ...
+def MatrixDeterminant(mat: Matrix|list|tuple,) -> float:
+ """."""
+ ...
+def MatrixFrustum(left: float,right: float,bottom: float,top: float,nearPlane: float,farPlane: float,) -> Matrix:
+ """."""
+ ...
+def MatrixIdentity() -> Matrix:
+ """."""
+ ...
+def MatrixInvert(mat: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixLookAt(eye: Vector3|list|tuple,target: Vector3|list|tuple,up: Vector3|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixMultiply(left: Matrix|list|tuple,right: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixOrtho(left: float,right: float,bottom: float,top: float,nearPlane: float,farPlane: float,) -> Matrix:
+ """."""
+ ...
+def MatrixPerspective(fovY: float,aspect: float,nearPlane: float,farPlane: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotate(axis: Vector3|list|tuple,angle: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateX(angle: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateXYZ(angle: Vector3|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateY(angle: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateZ(angle: float,) -> Matrix:
+ """."""
+ ...
+def MatrixRotateZYX(angle: Vector3|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixScale(x: float,y: float,z: float,) -> Matrix:
+ """."""
+ ...
+def MatrixSubtract(left: Matrix|list|tuple,right: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MatrixToFloatV(mat: Matrix|list|tuple,) -> float16:
+ """."""
+ ...
+def MatrixTrace(mat: Matrix|list|tuple,) -> float:
+ """."""
+ ...
+def MatrixTranslate(x: float,y: float,z: float,) -> Matrix:
+ """."""
+ ...
+def MatrixTranspose(mat: Matrix|list|tuple,) -> Matrix:
+ """."""
+ ...
+def MaximizeWindow() -> None:
+ """Set window state: maximized, if resizable."""
+ ...
+def MeasureText(text: bytes,fontSize: int,) -> int:
+ """Measure string width for default font."""
+ ...
+def MeasureTextEx(font: Font|list|tuple,text: bytes,fontSize: float,spacing: float,) -> Vector2:
+ """Measure string size for Font."""
+ ...
+def MemAlloc(size: int,) -> Any:
+ """Internal memory allocator."""
+ ...
+def MemFree(ptr: Any,) -> None:
+ """Internal memory free."""
+ ...
+def MemRealloc(ptr: Any,size: int,) -> Any:
+ """Internal memory reallocator."""
+ ...
+def MinimizeWindow() -> None:
+ """Set window state: minimized, if resizable."""
+ ...
+NPATCH_NINE_PATCH: int
+NPATCH_THREE_PATCH_HORIZONTAL: int
+NPATCH_THREE_PATCH_VERTICAL: int
+def Normalize(value: float,start: float,end: float,) -> float:
+ """."""
+ ...
+def OpenURL(url: bytes,) -> None:
+ """Open URL with default system browser (if available)."""
+ ...
+PHYSICS_CIRCLE: int
+PHYSICS_POLYGON: int
+PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: int
+PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: int
+PIXELFORMAT_COMPRESSED_DXT1_RGB: int
+PIXELFORMAT_COMPRESSED_DXT1_RGBA: int
+PIXELFORMAT_COMPRESSED_DXT3_RGBA: int
+PIXELFORMAT_COMPRESSED_DXT5_RGBA: int
+PIXELFORMAT_COMPRESSED_ETC1_RGB: int
+PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: int
+PIXELFORMAT_COMPRESSED_ETC2_RGB: int
+PIXELFORMAT_COMPRESSED_PVRT_RGB: int
+PIXELFORMAT_COMPRESSED_PVRT_RGBA: int
+PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: int
+PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: int
+PIXELFORMAT_UNCOMPRESSED_R16: int
+PIXELFORMAT_UNCOMPRESSED_R16G16B16: int
+PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: int
+PIXELFORMAT_UNCOMPRESSED_R32: int
+PIXELFORMAT_UNCOMPRESSED_R32G32B32: int
+PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: int
+PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: int
+PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: int
+PIXELFORMAT_UNCOMPRESSED_R5G6B5: int
+PIXELFORMAT_UNCOMPRESSED_R8G8B8: int
+PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: int
+PROGRESSBAR: int
+PROGRESS_PADDING: int
+def PauseAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Pause audio stream."""
+ ...
+def PauseMusicStream(music: Music|list|tuple,) -> None:
+ """Pause music playing."""
+ ...
+def PauseSound(sound: Sound|list|tuple,) -> None:
+ """Pause a sound."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def PhysicsAddForce(body: Any|list|tuple,force: Vector2|list|tuple,) -> None:
+ """Adds a force to a physics body."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def PhysicsAddTorque(body: Any|list|tuple,amount: float,) -> None:
+ """Adds an angular force to a physics body."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def PhysicsShatter(body: Any|list|tuple,position: Vector2|list|tuple,force: float,) -> None:
+ """Shatters a polygon shape physics body to little physics bodies with explosion force."""
+ ...
+def PlayAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Play audio stream."""
+ ...
+def PlayAutomationEvent(event: AutomationEvent|list|tuple,) -> None:
+ """Play a recorded automation event."""
+ ...
+def PlayMusicStream(music: Music|list|tuple,) -> None:
+ """Start music playing."""
+ ...
+def PlaySound(sound: Sound|list|tuple,) -> None:
+ """Play a sound."""
+ ...
+def PollInputEvents() -> None:
+ """Register all input events."""
+ ...
+def QuaternionAdd(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionAddValue(q: Vector4|list|tuple,add: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionCubicHermiteSpline(q1: Vector4|list|tuple,outTangent1: Vector4|list|tuple,q2: Vector4|list|tuple,inTangent2: Vector4|list|tuple,t: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionDivide(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionEquals(p: Vector4|list|tuple,q: Vector4|list|tuple,) -> int:
+ """."""
+ ...
+def QuaternionFromAxisAngle(axis: Vector3|list|tuple,angle: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionFromEuler(pitch: float,yaw: float,roll: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionFromMatrix(mat: Matrix|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionFromVector3ToVector3(from_0: Vector3|list|tuple,to: Vector3|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionIdentity() -> Vector4:
+ """."""
+ ...
+def QuaternionInvert(q: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionLength(q: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def QuaternionLerp(q1: Vector4|list|tuple,q2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionMultiply(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionNlerp(q1: Vector4|list|tuple,q2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionNormalize(q: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionScale(q: Vector4|list|tuple,mul: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionSlerp(q1: Vector4|list|tuple,q2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionSubtract(q1: Vector4|list|tuple,q2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def QuaternionSubtractValue(q: Vector4|list|tuple,sub: float,) -> Vector4:
+ """."""
+ ...
+def QuaternionToAxisAngle(q: Vector4|list|tuple,outAxis: Any|list|tuple,outAngle: Any,) -> None:
+ """."""
+ ...
+def QuaternionToEuler(q: Vector4|list|tuple,) -> Vector3:
+ """."""
+ ...
+def QuaternionToMatrix(q: Vector4|list|tuple,) -> Matrix:
+ """."""
+ ...
+def QuaternionTransform(q: Vector4|list|tuple,mat: Matrix|list|tuple,) -> Vector4:
+ """."""
+ ...
+RL_ATTACHMENT_COLOR_CHANNEL0: int
+RL_ATTACHMENT_COLOR_CHANNEL1: int
+RL_ATTACHMENT_COLOR_CHANNEL2: int
+RL_ATTACHMENT_COLOR_CHANNEL3: int
+RL_ATTACHMENT_COLOR_CHANNEL4: int
+RL_ATTACHMENT_COLOR_CHANNEL5: int
+RL_ATTACHMENT_COLOR_CHANNEL6: int
+RL_ATTACHMENT_COLOR_CHANNEL7: int
+RL_ATTACHMENT_CUBEMAP_NEGATIVE_X: int
+RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y: int
+RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z: int
+RL_ATTACHMENT_CUBEMAP_POSITIVE_X: int
+RL_ATTACHMENT_CUBEMAP_POSITIVE_Y: int
+RL_ATTACHMENT_CUBEMAP_POSITIVE_Z: int
+RL_ATTACHMENT_DEPTH: int
+RL_ATTACHMENT_RENDERBUFFER: int
+RL_ATTACHMENT_STENCIL: int
+RL_ATTACHMENT_TEXTURE2D: int
+RL_BLEND_ADDITIVE: int
+RL_BLEND_ADD_COLORS: int
+RL_BLEND_ALPHA: int
+RL_BLEND_ALPHA_PREMULTIPLY: int
+RL_BLEND_CUSTOM: int
+RL_BLEND_CUSTOM_SEPARATE: int
+RL_BLEND_MULTIPLIED: int
+RL_BLEND_SUBTRACT_COLORS: int
+RL_CULL_FACE_BACK: int
+RL_CULL_FACE_FRONT: int
+RL_LOG_ALL: int
+RL_LOG_DEBUG: int
+RL_LOG_ERROR: int
+RL_LOG_FATAL: int
+RL_LOG_INFO: int
+RL_LOG_NONE: int
+RL_LOG_TRACE: int
+RL_LOG_WARNING: int
+RL_OPENGL_11: int
+RL_OPENGL_21: int
+RL_OPENGL_33: int
+RL_OPENGL_43: int
+RL_OPENGL_ES_20: int
+RL_OPENGL_ES_30: int
+RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_DXT1_RGB: int
+RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_ETC1_RGB: int
+RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: int
+RL_PIXELFORMAT_COMPRESSED_ETC2_RGB: int
+RL_PIXELFORMAT_COMPRESSED_PVRT_RGB: int
+RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA: int
+RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: int
+RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: int
+RL_PIXELFORMAT_UNCOMPRESSED_R16: int
+RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: int
+RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: int
+RL_PIXELFORMAT_UNCOMPRESSED_R32: int
+RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: int
+RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: int
+RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: int
+RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: int
+RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5: int
+RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8: int
+RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: int
+RL_SHADER_ATTRIB_FLOAT: int
+RL_SHADER_ATTRIB_VEC2: int
+RL_SHADER_ATTRIB_VEC3: int
+RL_SHADER_ATTRIB_VEC4: int
+RL_SHADER_LOC_COLOR_AMBIENT: int
+RL_SHADER_LOC_COLOR_DIFFUSE: int
+RL_SHADER_LOC_COLOR_SPECULAR: int
+RL_SHADER_LOC_MAP_ALBEDO: int
+RL_SHADER_LOC_MAP_BRDF: int
+RL_SHADER_LOC_MAP_CUBEMAP: int
+RL_SHADER_LOC_MAP_EMISSION: int
+RL_SHADER_LOC_MAP_HEIGHT: int
+RL_SHADER_LOC_MAP_IRRADIANCE: int
+RL_SHADER_LOC_MAP_METALNESS: int
+RL_SHADER_LOC_MAP_NORMAL: int
+RL_SHADER_LOC_MAP_OCCLUSION: int
+RL_SHADER_LOC_MAP_PREFILTER: int
+RL_SHADER_LOC_MAP_ROUGHNESS: int
+RL_SHADER_LOC_MATRIX_MODEL: int
+RL_SHADER_LOC_MATRIX_MVP: int
+RL_SHADER_LOC_MATRIX_NORMAL: int
+RL_SHADER_LOC_MATRIX_PROJECTION: int
+RL_SHADER_LOC_MATRIX_VIEW: int
+RL_SHADER_LOC_VECTOR_VIEW: int
+RL_SHADER_LOC_VERTEX_COLOR: int
+RL_SHADER_LOC_VERTEX_NORMAL: int
+RL_SHADER_LOC_VERTEX_POSITION: int
+RL_SHADER_LOC_VERTEX_TANGENT: int
+RL_SHADER_LOC_VERTEX_TEXCOORD01: int
+RL_SHADER_LOC_VERTEX_TEXCOORD02: int
+RL_SHADER_UNIFORM_FLOAT: int
+RL_SHADER_UNIFORM_INT: int
+RL_SHADER_UNIFORM_IVEC2: int
+RL_SHADER_UNIFORM_IVEC3: int
+RL_SHADER_UNIFORM_IVEC4: int
+RL_SHADER_UNIFORM_SAMPLER2D: int
+RL_SHADER_UNIFORM_UINT: int
+RL_SHADER_UNIFORM_UIVEC2: int
+RL_SHADER_UNIFORM_UIVEC3: int
+RL_SHADER_UNIFORM_UIVEC4: int
+RL_SHADER_UNIFORM_VEC2: int
+RL_SHADER_UNIFORM_VEC3: int
+RL_SHADER_UNIFORM_VEC4: int
+RL_TEXTURE_FILTER_ANISOTROPIC_16X: int
+RL_TEXTURE_FILTER_ANISOTROPIC_4X: int
+RL_TEXTURE_FILTER_ANISOTROPIC_8X: int
+RL_TEXTURE_FILTER_BILINEAR: int
+RL_TEXTURE_FILTER_POINT: int
+RL_TEXTURE_FILTER_TRILINEAR: int
+def Remap(value: float,inputStart: float,inputEnd: float,outputStart: float,outputEnd: float,) -> float:
+ """."""
+ ...
+def RestoreWindow() -> None:
+ """Set window state: not minimized/maximized."""
+ ...
+def ResumeAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Resume audio stream."""
+ ...
+def ResumeMusicStream(music: Music|list|tuple,) -> None:
+ """Resume playing paused music."""
+ ...
+def ResumeSound(sound: Sound|list|tuple,) -> None:
+ """Resume a paused sound."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def RunPhysicsStep() -> None:
+ """Run physics step, to be used if PHYSICS_NO_THREADS is set in your main loop."""
+ ...
+SCROLLBAR: int
+SCROLLBAR_SIDE: int
+SCROLLBAR_WIDTH: int
+SCROLL_PADDING: int
+SCROLL_SLIDER_PADDING: int
+SCROLL_SLIDER_SIZE: int
+SCROLL_SPEED: int
+SHADER_ATTRIB_FLOAT: int
+SHADER_ATTRIB_VEC2: int
+SHADER_ATTRIB_VEC3: int
+SHADER_ATTRIB_VEC4: int
+SHADER_LOC_BONE_MATRICES: int
+SHADER_LOC_COLOR_AMBIENT: int
+SHADER_LOC_COLOR_DIFFUSE: int
+SHADER_LOC_COLOR_SPECULAR: int
+SHADER_LOC_MAP_ALBEDO: int
+SHADER_LOC_MAP_BRDF: int
+SHADER_LOC_MAP_CUBEMAP: int
+SHADER_LOC_MAP_EMISSION: int
+SHADER_LOC_MAP_HEIGHT: int
+SHADER_LOC_MAP_IRRADIANCE: int
+SHADER_LOC_MAP_METALNESS: int
+SHADER_LOC_MAP_NORMAL: int
+SHADER_LOC_MAP_OCCLUSION: int
+SHADER_LOC_MAP_PREFILTER: int
+SHADER_LOC_MAP_ROUGHNESS: int
+SHADER_LOC_MATRIX_MODEL: int
+SHADER_LOC_MATRIX_MVP: int
+SHADER_LOC_MATRIX_NORMAL: int
+SHADER_LOC_MATRIX_PROJECTION: int
+SHADER_LOC_MATRIX_VIEW: int
+SHADER_LOC_VECTOR_VIEW: int
+SHADER_LOC_VERTEX_BONEIDS: int
+SHADER_LOC_VERTEX_BONEWEIGHTS: int
+SHADER_LOC_VERTEX_COLOR: int
+SHADER_LOC_VERTEX_NORMAL: int
+SHADER_LOC_VERTEX_POSITION: int
+SHADER_LOC_VERTEX_TANGENT: int
+SHADER_LOC_VERTEX_TEXCOORD01: int
+SHADER_LOC_VERTEX_TEXCOORD02: int
+SHADER_UNIFORM_FLOAT: int
+SHADER_UNIFORM_INT: int
+SHADER_UNIFORM_IVEC2: int
+SHADER_UNIFORM_IVEC3: int
+SHADER_UNIFORM_IVEC4: int
+SHADER_UNIFORM_SAMPLER2D: int
+SHADER_UNIFORM_VEC2: int
+SHADER_UNIFORM_VEC3: int
+SHADER_UNIFORM_VEC4: int
+SLIDER: int
+SLIDER_PADDING: int
+SLIDER_WIDTH: int
+SPINNER: int
+SPIN_BUTTON_SPACING: int
+SPIN_BUTTON_WIDTH: int
+STATE_DISABLED: int
+STATE_FOCUSED: int
+STATE_NORMAL: int
+STATE_PRESSED: int
+STATUSBAR: int
+def SaveFileData(fileName: bytes,data: Any,dataSize: int,) -> bool:
+ """Save data to file from byte array (write), returns true on success."""
+ ...
+def SaveFileText(fileName: bytes,text: bytes,) -> bool:
+ """Save text data to file (write), string must be '\0' terminated, returns true on success."""
+ ...
+def SeekMusicStream(music: Music|list|tuple,position: float,) -> None:
+ """Seek music to a position (in seconds)."""
+ ...
+def SetAudioStreamBufferSizeDefault(size: int,) -> None:
+ """Default size for new audio streams."""
+ ...
+def SetAudioStreamCallback(stream: AudioStream|list|tuple,callback: Any,) -> None:
+ """Audio thread callback to request new data."""
+ ...
+def SetAudioStreamPan(stream: AudioStream|list|tuple,pan: float,) -> None:
+ """Set pan for audio stream (0.5 is centered)."""
+ ...
+def SetAudioStreamPitch(stream: AudioStream|list|tuple,pitch: float,) -> None:
+ """Set pitch for audio stream (1.0 is base level)."""
+ ...
+def SetAudioStreamVolume(stream: AudioStream|list|tuple,volume: float,) -> None:
+ """Set volume for audio stream (1.0 is max level)."""
+ ...
+def SetAutomationEventBaseFrame(frame: int,) -> None:
+ """Set automation event internal base frame to start recording."""
+ ...
+def SetAutomationEventList(list_0: Any|list|tuple,) -> None:
+ """Set automation event list to record to."""
+ ...
+def SetClipboardText(text: bytes,) -> None:
+ """Set clipboard text content."""
+ ...
+def SetConfigFlags(flags: int,) -> None:
+ """Setup init configuration flags (view FLAGS)."""
+ ...
+def SetExitKey(key: int,) -> None:
+ """Set a custom key to exit program (default is ESC)."""
+ ...
+def SetGamepadMappings(mappings: bytes,) -> int:
+ """Set internal gamepad mappings (SDL_GameControllerDB)."""
+ ...
+def SetGamepadVibration(gamepad: int,leftMotor: float,rightMotor: float,duration: float,) -> None:
+ """Set gamepad vibration for both motors (duration in seconds)."""
+ ...
+def SetGesturesEnabled(flags: int,) -> None:
+ """Enable a set of gestures using flags."""
+ ...
+def SetLoadFileDataCallback(callback: bytes,) -> None:
+ """Set custom file binary data loader."""
+ ...
+def SetLoadFileTextCallback(callback: bytes,) -> None:
+ """Set custom file text data loader."""
+ ...
+def SetMasterVolume(volume: float,) -> None:
+ """Set master volume (listener)."""
+ ...
+def SetMaterialTexture(material: Any|list|tuple,mapType: int,texture: Texture|list|tuple,) -> None:
+ """Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)."""
+ ...
+def SetModelMeshMaterial(model: Any|list|tuple,meshId: int,materialId: int,) -> None:
+ """Set material for a mesh."""
+ ...
+def SetMouseCursor(cursor: int,) -> None:
+ """Set mouse cursor."""
+ ...
+def SetMouseOffset(offsetX: int,offsetY: int,) -> None:
+ """Set mouse offset."""
+ ...
+def SetMousePosition(x: int,y: int,) -> None:
+ """Set mouse position XY."""
+ ...
+def SetMouseScale(scaleX: float,scaleY: float,) -> None:
+ """Set mouse scaling."""
+ ...
+def SetMusicPan(music: Music|list|tuple,pan: float,) -> None:
+ """Set pan for a music (0.5 is center)."""
+ ...
+def SetMusicPitch(music: Music|list|tuple,pitch: float,) -> None:
+ """Set pitch for a music (1.0 is base level)."""
+ ...
+def SetMusicVolume(music: Music|list|tuple,volume: float,) -> None:
+ """Set volume for music (1.0 is max level)."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def SetPhysicsBodyRotation(body: Any|list|tuple,radians: float,) -> None:
+ """Sets physics body shape transform based on radians parameter."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def SetPhysicsGravity(x: float,y: float,) -> None:
+ """Sets physics global gravity force."""
+ ...
+@deprecated("Raylib no longer recommends the use of Physac library")
+def SetPhysicsTimeStep(delta: float,) -> None:
+ """Sets physics fixed time step in milliseconds. 1.666666 by default."""
+ ...
+def SetPixelColor(dstPtr: Any,color: Color|list|tuple,format: int,) -> None:
+ """Set color formatted into destination pixel pointer."""
+ ...
+def SetRandomSeed(seed: int,) -> None:
+ """Set the seed for the random number generator."""
+ ...
+def SetSaveFileDataCallback(callback: bytes,) -> None:
+ """Set custom file binary data saver."""
+ ...
+def SetSaveFileTextCallback(callback: bytes,) -> None:
+ """Set custom file text data saver."""
+ ...
+def SetShaderValue(shader: Shader|list|tuple,locIndex: int,value: Any,uniformType: int,) -> None:
+ """Set shader uniform value."""
+ ...
+def SetShaderValueMatrix(shader: Shader|list|tuple,locIndex: int,mat: Matrix|list|tuple,) -> None:
+ """Set shader uniform value (matrix 4x4)."""
+ ...
+def SetShaderValueTexture(shader: Shader|list|tuple,locIndex: int,texture: Texture|list|tuple,) -> None:
+ """Set shader uniform value for texture (sampler2d)."""
+ ...
+def SetShaderValueV(shader: Shader|list|tuple,locIndex: int,value: Any,uniformType: int,count: int,) -> None:
+ """Set shader uniform value vector."""
+ ...
+def SetShapesTexture(texture: Texture|list|tuple,source: Rectangle|list|tuple,) -> None:
+ """Set texture and rectangle to be used on shapes drawing."""
+ ...
+def SetSoundPan(sound: Sound|list|tuple,pan: float,) -> None:
+ """Set pan for a sound (0.5 is center)."""
+ ...
+def SetSoundPitch(sound: Sound|list|tuple,pitch: float,) -> None:
+ """Set pitch for a sound (1.0 is base level)."""
+ ...
+def SetSoundVolume(sound: Sound|list|tuple,volume: float,) -> None:
+ """Set volume for a sound (1.0 is max level)."""
+ ...
+def SetTargetFPS(fps: int,) -> None:
+ """Set target FPS (maximum)."""
+ ...
+def SetTextLineSpacing(spacing: int,) -> None:
+ """Set vertical line spacing when drawing with line-breaks."""
+ ...
+def SetTextureFilter(texture: Texture|list|tuple,filter: int,) -> None:
+ """Set texture scaling filter mode."""
+ ...
+def SetTextureWrap(texture: Texture|list|tuple,wrap: int,) -> None:
+ """Set texture wrapping mode."""
+ ...
+def SetTraceLogCallback(callback: bytes,) -> None:
+ """Set custom trace log."""
+ ...
+def SetTraceLogLevel(logLevel: int,) -> None:
+ """Set the current threshold (minimum) log level."""
+ ...
+def SetWindowFocused() -> None:
+ """Set window focused."""
+ ...
+def SetWindowIcon(image: Image|list|tuple,) -> None:
+ """Set icon for window (single image, RGBA 32bit)."""
+ ...
+def SetWindowIcons(images: Any|list|tuple,count: int,) -> None:
+ """Set icon for window (multiple images, RGBA 32bit)."""
+ ...
+def SetWindowMaxSize(width: int,height: int,) -> None:
+ """Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)."""
+ ...
+def SetWindowMinSize(width: int,height: int,) -> None:
+ """Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)."""
+ ...
+def SetWindowMonitor(monitor: int,) -> None:
+ """Set monitor for the current window."""
+ ...
+def SetWindowOpacity(opacity: float,) -> None:
+ """Set window opacity [0.0f..1.0f]."""
+ ...
+def SetWindowPosition(x: int,y: int,) -> None:
+ """Set window position on screen."""
+ ...
+def SetWindowSize(width: int,height: int,) -> None:
+ """Set window dimensions."""
+ ...
+def SetWindowState(flags: int,) -> None:
+ """Set window configuration state using flags."""
+ ...
+def SetWindowTitle(title: bytes,) -> None:
+ """Set title for window."""
+ ...
+def ShowCursor() -> None:
+ """Shows cursor."""
+ ...
+def StartAutomationEventRecording() -> None:
+ """Start recording automation events (AutomationEventList must be set)."""
+ ...
+def StopAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Stop audio stream."""
+ ...
+def StopAutomationEventRecording() -> None:
+ """Stop recording automation events."""
+ ...
+def StopMusicStream(music: Music|list|tuple,) -> None:
+ """Stop music playing."""
+ ...
+def StopSound(sound: Sound|list|tuple,) -> None:
+ """Stop playing a sound."""
+ ...
+def SwapScreenBuffer() -> None:
+ """Swap back buffer with front buffer (screen drawing)."""
+ ...
+TEXTBOX: int
+TEXTURE_FILTER_ANISOTROPIC_16X: int
+TEXTURE_FILTER_ANISOTROPIC_4X: int
+TEXTURE_FILTER_ANISOTROPIC_8X: int
+TEXTURE_FILTER_BILINEAR: int
+TEXTURE_FILTER_POINT: int
+TEXTURE_FILTER_TRILINEAR: int
+TEXTURE_WRAP_CLAMP: int
+TEXTURE_WRAP_MIRROR_CLAMP: int
+TEXTURE_WRAP_MIRROR_REPEAT: int
+TEXTURE_WRAP_REPEAT: int
+TEXT_ALIGNMENT: int
+TEXT_ALIGNMENT_VERTICAL: int
+TEXT_ALIGN_BOTTOM: int
+TEXT_ALIGN_CENTER: int
+TEXT_ALIGN_LEFT: int
+TEXT_ALIGN_MIDDLE: int
+TEXT_ALIGN_RIGHT: int
+TEXT_ALIGN_TOP: int
+TEXT_COLOR_DISABLED: int
+TEXT_COLOR_FOCUSED: int
+TEXT_COLOR_NORMAL: int
+TEXT_COLOR_PRESSED: int
+TEXT_LINE_SPACING: int
+TEXT_PADDING: int
+TEXT_READONLY: int
+TEXT_SIZE: int
+TEXT_SPACING: int
+TEXT_WRAP_CHAR: int
+TEXT_WRAP_MODE: int
+TEXT_WRAP_NONE: int
+TEXT_WRAP_WORD: int
+TOGGLE: int
+def TakeScreenshot(fileName: bytes,) -> None:
+ """Takes a screenshot of current screen (filename extension defines format)."""
+ ...
+def TextAppend(text: bytes,append: bytes,position: Any,) -> None:
+ """Append text at specific position and move cursor!."""
+ ...
+def TextCopy(dst: bytes,src: bytes,) -> int:
+ """Copy one string to another, returns bytes copied."""
+ ...
+def TextFindIndex(text: bytes,find: bytes,) -> int:
+ """Find first text occurrence within a string."""
+ ...
+def TextFormat(*args) -> bytes:
+ """VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI"""
+ ...
+def TextInsert(text: bytes,insert: bytes,position: int,) -> bytes:
+ """Insert text in a position (WARNING: memory must be freed!)."""
+ ...
+def TextIsEqual(text1: bytes,text2: bytes,) -> bool:
+ """Check if two text string are equal."""
+ ...
+def TextJoin(textList: list[bytes],count: int,delimiter: bytes,) -> bytes:
+ """Join text strings with delimiter."""
+ ...
+def TextLength(text: bytes,) -> int:
+ """Get text length, checks for '\0' ending."""
+ ...
+def TextReplace(text: bytes,replace: bytes,by: bytes,) -> bytes:
+ """Replace text string (WARNING: memory must be freed!)."""
+ ...
+def TextSplit(text: bytes,delimiter: bytes,count: Any,) -> list[bytes]:
+ """Split text into multiple strings."""
+ ...
+def TextSubtext(text: bytes,position: int,length: int,) -> bytes:
+ """Get a piece of a text string."""
+ ...
+def TextToCamel(text: bytes,) -> bytes:
+ """Get Camel case notation version of provided string."""
+ ...
+def TextToFloat(text: bytes,) -> float:
+ """Get float value from text (negative values not supported)."""
+ ...
+def TextToInteger(text: bytes,) -> int:
+ """Get integer value from text (negative values not supported)."""
+ ...
+def TextToLower(text: bytes,) -> bytes:
+ """Get lower case version of provided string."""
+ ...
+def TextToPascal(text: bytes,) -> bytes:
+ """Get Pascal case notation version of provided string."""
+ ...
+def TextToSnake(text: bytes,) -> bytes:
+ """Get Snake case notation version of provided string."""
+ ...
+def TextToUpper(text: bytes,) -> bytes:
+ """Get upper case version of provided string."""
+ ...
+def ToggleBorderlessWindowed() -> None:
+ """Toggle window state: borderless windowed, resizes window to match monitor resolution."""
+ ...
+def ToggleFullscreen() -> None:
+ """Toggle window state: fullscreen/windowed, resizes monitor to match window resolution."""
+ ...
+def TraceLog(*args) -> None:
+ """VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI"""
+ ...
+def UnloadAudioStream(stream: AudioStream|list|tuple,) -> None:
+ """Unload audio stream and free memory."""
+ ...
+def UnloadAutomationEventList(list_0: AutomationEventList|list|tuple,) -> None:
+ """Unload automation events list from file."""
+ ...
+def UnloadCodepoints(codepoints: Any,) -> None:
+ """Unload codepoints data from memory."""
+ ...
+def UnloadDirectoryFiles(files: FilePathList|list|tuple,) -> None:
+ """Unload filepaths."""
+ ...
+def UnloadDroppedFiles(files: FilePathList|list|tuple,) -> None:
+ """Unload dropped filepaths."""
+ ...
+def UnloadFileData(data: bytes,) -> None:
+ """Unload file data allocated by LoadFileData()."""
+ ...
+def UnloadFileText(text: bytes,) -> None:
+ """Unload file text data allocated by LoadFileText()."""
+ ...
+def UnloadFont(font: Font|list|tuple,) -> None:
+ """Unload font from GPU memory (VRAM)."""
+ ...
+def UnloadFontData(glyphs: Any|list|tuple,glyphCount: int,) -> None:
+ """Unload font chars info data (RAM)."""
+ ...
+def UnloadImage(image: Image|list|tuple,) -> None:
+ """Unload image from CPU memory (RAM)."""
+ ...
+def UnloadImageColors(colors: Any|list|tuple,) -> None:
+ """Unload color data loaded with LoadImageColors()."""
+ ...
+def UnloadImagePalette(colors: Any|list|tuple,) -> None:
+ """Unload colors palette loaded with LoadImagePalette()."""
+ ...
+def UnloadMaterial(material: Material|list|tuple,) -> None:
+ """Unload material from GPU memory (VRAM)."""
+ ...
+def UnloadMesh(mesh: Mesh|list|tuple,) -> None:
+ """Unload mesh data from CPU and GPU."""
+ ...
+def UnloadModel(model: Model|list|tuple,) -> None:
+ """Unload model (including meshes) from memory (RAM and/or VRAM)."""
+ ...
+def UnloadModelAnimation(anim: ModelAnimation|list|tuple,) -> None:
+ """Unload animation data."""
+ ...
+def UnloadModelAnimations(animations: Any|list|tuple,animCount: int,) -> None:
+ """Unload animation array data."""
+ ...
+def UnloadMusicStream(music: Music|list|tuple,) -> None:
+ """Unload music stream."""
+ ...
+def UnloadRandomSequence(sequence: Any,) -> None:
+ """Unload random values sequence."""
+ ...
+def UnloadRenderTexture(target: RenderTexture|list|tuple,) -> None:
+ """Unload render texture from GPU memory (VRAM)."""
+ ...
+def UnloadShader(shader: Shader|list|tuple,) -> None:
+ """Unload shader from GPU memory (VRAM)."""
+ ...
+def UnloadSound(sound: Sound|list|tuple,) -> None:
+ """Unload sound."""
+ ...
+def UnloadSoundAlias(alias: Sound|list|tuple,) -> None:
+ """Unload a sound alias (does not deallocate sample data)."""
+ ...
+def UnloadTexture(texture: Texture|list|tuple,) -> None:
+ """Unload texture from GPU memory (VRAM)."""
+ ...
+def UnloadUTF8(text: bytes,) -> None:
+ """Unload UTF-8 text encoded from codepoints array."""
+ ...
+def UnloadVrStereoConfig(config: VrStereoConfig|list|tuple,) -> None:
+ """Unload VR stereo config."""
+ ...
+def UnloadWave(wave: Wave|list|tuple,) -> None:
+ """Unload wave data."""
+ ...
+def UnloadWaveSamples(samples: Any,) -> None:
+ """Unload samples data loaded with LoadWaveSamples()."""
+ ...
+def UpdateAudioStream(stream: AudioStream|list|tuple,data: Any,frameCount: int,) -> None:
+ """Update audio stream buffers with data."""
+ ...
+def UpdateCamera(camera: Any|list|tuple,mode: int,) -> None:
+ """Update camera position for selected mode."""
+ ...
+def UpdateCameraPro(camera: Any|list|tuple,movement: Vector3|list|tuple,rotation: Vector3|list|tuple,zoom: float,) -> None:
+ """Update camera movement/rotation."""
+ ...
+def UpdateMeshBuffer(mesh: Mesh|list|tuple,index: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update mesh vertex data in GPU for a specific buffer index."""
+ ...
+def UpdateModelAnimation(model: Model|list|tuple,anim: ModelAnimation|list|tuple,frame: int,) -> None:
+ """Update model animation pose (CPU)."""
+ ...
+def UpdateModelAnimationBones(model: Model|list|tuple,anim: ModelAnimation|list|tuple,frame: int,) -> None:
+ """Update model animation mesh bone matrices (GPU skinning)."""
+ ...
+def UpdateMusicStream(music: Music|list|tuple,) -> None:
+ """Updates buffers for music streaming."""
+ ...
+def UpdateSound(sound: Sound|list|tuple,data: Any,sampleCount: int,) -> None:
+ """Update sound buffer with new data."""
+ ...
+def UpdateTexture(texture: Texture|list|tuple,pixels: Any,) -> None:
+ """Update GPU texture with new data."""
+ ...
+def UpdateTextureRec(texture: Texture|list|tuple,rec: Rectangle|list|tuple,pixels: Any,) -> None:
+ """Update GPU texture rectangle with new data."""
+ ...
+def UploadMesh(mesh: Any|list|tuple,dynamic: bool,) -> None:
+ """Upload mesh vertex data in GPU and provide VAO/VBO ids."""
+ ...
+VALUEBOX: int
+def Vector2Add(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2AddValue(v: Vector2|list|tuple,add: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Angle(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Clamp(v: Vector2|list|tuple,min_1: Vector2|list|tuple,max_2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2ClampValue(v: Vector2|list|tuple,min_1: float,max_2: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Distance(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2DistanceSqr(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Divide(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2DotProduct(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Equals(p: Vector2|list|tuple,q: Vector2|list|tuple,) -> int:
+ """."""
+ ...
+def Vector2Invert(v: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Length(v: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2LengthSqr(v: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Lerp(v1: Vector2|list|tuple,v2: Vector2|list|tuple,amount: float,) -> Vector2:
+ """."""
+ ...
+def Vector2LineAngle(start: Vector2|list|tuple,end: Vector2|list|tuple,) -> float:
+ """."""
+ ...
+def Vector2Max(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Min(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2MoveTowards(v: Vector2|list|tuple,target: Vector2|list|tuple,maxDistance: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Multiply(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Negate(v: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Normalize(v: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2One() -> Vector2:
+ """."""
+ ...
+def Vector2Reflect(v: Vector2|list|tuple,normal: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Refract(v: Vector2|list|tuple,n: Vector2|list|tuple,r: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Rotate(v: Vector2|list|tuple,angle: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Scale(v: Vector2|list|tuple,scale: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Subtract(v1: Vector2|list|tuple,v2: Vector2|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2SubtractValue(v: Vector2|list|tuple,sub: float,) -> Vector2:
+ """."""
+ ...
+def Vector2Transform(v: Vector2|list|tuple,mat: Matrix|list|tuple,) -> Vector2:
+ """."""
+ ...
+def Vector2Zero() -> Vector2:
+ """."""
+ ...
+def Vector3Add(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3AddValue(v: Vector3|list|tuple,add: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Angle(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3Barycenter(p: Vector3|list|tuple,a: Vector3|list|tuple,b: Vector3|list|tuple,c: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Clamp(v: Vector3|list|tuple,min_1: Vector3|list|tuple,max_2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3ClampValue(v: Vector3|list|tuple,min_1: float,max_2: float,) -> Vector3:
+ """."""
+ ...
+def Vector3CrossProduct(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3CubicHermite(v1: Vector3|list|tuple,tangent1: Vector3|list|tuple,v2: Vector3|list|tuple,tangent2: Vector3|list|tuple,amount: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Distance(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3DistanceSqr(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3Divide(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3DotProduct(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3Equals(p: Vector3|list|tuple,q: Vector3|list|tuple,) -> int:
+ """."""
+ ...
+def Vector3Invert(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Length(v: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3LengthSqr(v: Vector3|list|tuple,) -> float:
+ """."""
+ ...
+def Vector3Lerp(v1: Vector3|list|tuple,v2: Vector3|list|tuple,amount: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Max(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Min(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3MoveTowards(v: Vector3|list|tuple,target: Vector3|list|tuple,maxDistance: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Multiply(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Negate(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Normalize(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3One() -> Vector3:
+ """."""
+ ...
+def Vector3OrthoNormalize(v1: Any|list|tuple,v2: Any|list|tuple,) -> None:
+ """."""
+ ...
+def Vector3Perpendicular(v: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Project(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Reflect(v: Vector3|list|tuple,normal: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Refract(v: Vector3|list|tuple,n: Vector3|list|tuple,r: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Reject(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3RotateByAxisAngle(v: Vector3|list|tuple,axis: Vector3|list|tuple,angle: float,) -> Vector3:
+ """."""
+ ...
+def Vector3RotateByQuaternion(v: Vector3|list|tuple,q: Vector4|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Scale(v: Vector3|list|tuple,scalar: float,) -> Vector3:
+ """."""
+ ...
+def Vector3Subtract(v1: Vector3|list|tuple,v2: Vector3|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3SubtractValue(v: Vector3|list|tuple,sub: float,) -> Vector3:
+ """."""
+ ...
+def Vector3ToFloatV(v: Vector3|list|tuple,) -> float3:
+ """."""
+ ...
+def Vector3Transform(v: Vector3|list|tuple,mat: Matrix|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Unproject(source: Vector3|list|tuple,projection: Matrix|list|tuple,view: Matrix|list|tuple,) -> Vector3:
+ """."""
+ ...
+def Vector3Zero() -> Vector3:
+ """."""
+ ...
+def Vector4Add(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4AddValue(v: Vector4|list|tuple,add: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Distance(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4DistanceSqr(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4Divide(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4DotProduct(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4Equals(p: Vector4|list|tuple,q: Vector4|list|tuple,) -> int:
+ """."""
+ ...
+def Vector4Invert(v: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4Length(v: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4LengthSqr(v: Vector4|list|tuple,) -> float:
+ """."""
+ ...
+def Vector4Lerp(v1: Vector4|list|tuple,v2: Vector4|list|tuple,amount: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Max(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4Min(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4MoveTowards(v: Vector4|list|tuple,target: Vector4|list|tuple,maxDistance: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Multiply(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4Negate(v: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4Normalize(v: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4One() -> Vector4:
+ """."""
+ ...
+def Vector4Scale(v: Vector4|list|tuple,scale: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Subtract(v1: Vector4|list|tuple,v2: Vector4|list|tuple,) -> Vector4:
+ """."""
+ ...
+def Vector4SubtractValue(v: Vector4|list|tuple,add: float,) -> Vector4:
+ """."""
+ ...
+def Vector4Zero() -> Vector4:
+ """."""
+ ...
+def WaitTime(seconds: float,) -> None:
+ """Wait for some time (halt program execution)."""
+ ...
+def WaveCopy(wave: Wave|list|tuple,) -> Wave:
+ """Copy a wave to a new wave."""
+ ...
+def WaveCrop(wave: Any|list|tuple,initFrame: int,finalFrame: int,) -> None:
+ """Crop a wave to defined frames range."""
+ ...
+def WaveFormat(wave: Any|list|tuple,sampleRate: int,sampleSize: int,channels: int,) -> None:
+ """Convert wave data to desired format."""
+ ...
+def WindowShouldClose() -> bool:
+ """Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)."""
+ ...
+def Wrap(value: float,min_1: float,max_2: float,) -> float:
+ """."""
+ ...
+def glfwCreateCursor(image: Any|list|tuple,xhot: int,yhot: int,) -> Any:
+ """."""
+ ...
+def glfwCreateStandardCursor(shape: int,) -> Any:
+ """."""
+ ...
+def glfwCreateWindow(width: int,height: int,title: bytes,monitor: Any|list|tuple,share: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwDefaultWindowHints() -> None:
+ """."""
+ ...
+def glfwDestroyCursor(cursor: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwDestroyWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwExtensionSupported(extension: bytes,) -> int:
+ """."""
+ ...
+def glfwFocusWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwGetClipboardString(window: Any|list|tuple,) -> bytes:
+ """."""
+ ...
+def glfwGetCurrentContext() -> Any:
+ """."""
+ ...
+def glfwGetCursorPos(window: Any|list|tuple,xpos: Any,ypos: Any,) -> None:
+ """."""
+ ...
+def glfwGetError(description: list[bytes],) -> int:
+ """."""
+ ...
+def glfwGetFramebufferSize(window: Any|list|tuple,width: Any,height: Any,) -> None:
+ """."""
+ ...
+def glfwGetGamepadName(jid: int,) -> bytes:
+ """."""
+ ...
+def glfwGetGamepadState(jid: int,state: Any|list|tuple,) -> int:
+ """."""
+ ...
+def glfwGetGammaRamp(monitor: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwGetInputMode(window: Any|list|tuple,mode: int,) -> int:
+ """."""
+ ...
+def glfwGetJoystickAxes(jid: int,count: Any,) -> Any:
+ """."""
+ ...
+def glfwGetJoystickButtons(jid: int,count: Any,) -> bytes:
+ """."""
+ ...
+def glfwGetJoystickGUID(jid: int,) -> bytes:
+ """."""
+ ...
+def glfwGetJoystickHats(jid: int,count: Any,) -> bytes:
+ """."""
+ ...
+def glfwGetJoystickName(jid: int,) -> bytes:
+ """."""
+ ...
+def glfwGetJoystickUserPointer(jid: int,) -> Any:
+ """."""
+ ...
+def glfwGetKey(window: Any|list|tuple,key: int,) -> int:
+ """."""
+ ...
+def glfwGetKeyName(key: int,scancode: int,) -> bytes:
+ """."""
+ ...
+def glfwGetKeyScancode(key: int,) -> int:
+ """."""
+ ...
+def glfwGetMonitorContentScale(monitor: Any|list|tuple,xscale: Any,yscale: Any,) -> None:
+ """."""
+ ...
+def glfwGetMonitorName(monitor: Any|list|tuple,) -> bytes:
+ """."""
+ ...
+def glfwGetMonitorPhysicalSize(monitor: Any|list|tuple,widthMM: Any,heightMM: Any,) -> None:
+ """."""
+ ...
+def glfwGetMonitorPos(monitor: Any|list|tuple,xpos: Any,ypos: Any,) -> None:
+ """."""
+ ...
+def glfwGetMonitorUserPointer(monitor: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwGetMonitorWorkarea(monitor: Any|list|tuple,xpos: Any,ypos: Any,width: Any,height: Any,) -> None:
+ """."""
+ ...
+def glfwGetMonitors(count: Any,) -> Any:
+ """."""
+ ...
+def glfwGetMouseButton(window: Any|list|tuple,button: int,) -> int:
+ """."""
+ ...
+def glfwGetPlatform() -> int:
+ """."""
+ ...
+def glfwGetPrimaryMonitor() -> Any:
+ """."""
+ ...
+def glfwGetProcAddress(procname: bytes,) -> Any:
+ """."""
+ ...
+def glfwGetRequiredInstanceExtensions(count: Any,) -> list[bytes]:
+ """."""
+ ...
+def glfwGetTime() -> float:
+ """."""
+ ...
+def glfwGetTimerFrequency() -> int:
+ """."""
+ ...
+def glfwGetTimerValue() -> int:
+ """."""
+ ...
+def glfwGetVersion(major: Any,minor: Any,rev: Any,) -> None:
+ """."""
+ ...
+def glfwGetVersionString() -> bytes:
+ """."""
+ ...
+def glfwGetVideoMode(monitor: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwGetVideoModes(monitor: Any|list|tuple,count: Any,) -> Any:
+ """."""
+ ...
+def glfwGetWindowAttrib(window: Any|list|tuple,attrib: int,) -> int:
+ """."""
+ ...
+def glfwGetWindowContentScale(window: Any|list|tuple,xscale: Any,yscale: Any,) -> None:
+ """."""
+ ...
+def glfwGetWindowFrameSize(window: Any|list|tuple,left: Any,top: Any,right: Any,bottom: Any,) -> None:
+ """."""
+ ...
+def glfwGetWindowMonitor(window: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwGetWindowOpacity(window: Any|list|tuple,) -> float:
+ """."""
+ ...
+def glfwGetWindowPos(window: Any|list|tuple,xpos: Any,ypos: Any,) -> None:
+ """."""
+ ...
+def glfwGetWindowSize(window: Any|list|tuple,width: Any,height: Any,) -> None:
+ """."""
+ ...
+def glfwGetWindowTitle(window: Any|list|tuple,) -> bytes:
+ """."""
+ ...
+def glfwGetWindowUserPointer(window: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwHideWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwIconifyWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwInit() -> int:
+ """."""
+ ...
+def glfwInitAllocator(allocator: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwInitHint(hint: int,value: int,) -> None:
+ """."""
+ ...
+def glfwJoystickIsGamepad(jid: int,) -> int:
+ """."""
+ ...
+def glfwJoystickPresent(jid: int,) -> int:
+ """."""
+ ...
+def glfwMakeContextCurrent(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwMaximizeWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwPlatformSupported(platform: int,) -> int:
+ """."""
+ ...
+def glfwPollEvents() -> None:
+ """."""
+ ...
+def glfwPostEmptyEvent() -> None:
+ """."""
+ ...
+def glfwRawMouseMotionSupported() -> int:
+ """."""
+ ...
+def glfwRequestWindowAttention(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwRestoreWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSetCharCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetCharModsCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetClipboardString(window: Any|list|tuple,string: bytes,) -> None:
+ """."""
+ ...
+def glfwSetCursor(window: Any|list|tuple,cursor: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSetCursorEnterCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetCursorPos(window: Any|list|tuple,xpos: float,ypos: float,) -> None:
+ """."""
+ ...
+def glfwSetCursorPosCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetDropCallback(window: Any|list|tuple,callback: list[bytes]|list|tuple,) -> list[bytes]:
+ """."""
+ ...
+def glfwSetErrorCallback(callback: bytes,) -> bytes:
+ """."""
+ ...
+def glfwSetFramebufferSizeCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetGamma(monitor: Any|list|tuple,gamma: float,) -> None:
+ """."""
+ ...
+def glfwSetGammaRamp(monitor: Any|list|tuple,ramp: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSetInputMode(window: Any|list|tuple,mode: int,value: int,) -> None:
+ """."""
+ ...
+def glfwSetJoystickCallback(callback: Any,) -> Any:
+ """."""
+ ...
+def glfwSetJoystickUserPointer(jid: int,pointer: Any,) -> None:
+ """."""
+ ...
+def glfwSetKeyCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetMonitorCallback(callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetMonitorUserPointer(monitor: Any|list|tuple,pointer: Any,) -> None:
+ """."""
+ ...
+def glfwSetMouseButtonCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetScrollCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetTime(time: float,) -> None:
+ """."""
+ ...
+def glfwSetWindowAspectRatio(window: Any|list|tuple,numer: int,denom: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowAttrib(window: Any|list|tuple,attrib: int,value: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowCloseCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowContentScaleCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowFocusCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowIcon(window: Any|list|tuple,count: int,images: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSetWindowIconifyCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowMaximizeCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowMonitor(window: Any|list|tuple,monitor: Any|list|tuple,xpos: int,ypos: int,width: int,height: int,refreshRate: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowOpacity(window: Any|list|tuple,opacity: float,) -> None:
+ """."""
+ ...
+def glfwSetWindowPos(window: Any|list|tuple,xpos: int,ypos: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowPosCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowRefreshCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowShouldClose(window: Any|list|tuple,value: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowSize(window: Any|list|tuple,width: int,height: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowSizeCallback(window: Any|list|tuple,callback: Any|list|tuple,) -> Any:
+ """."""
+ ...
+def glfwSetWindowSizeLimits(window: Any|list|tuple,minwidth: int,minheight: int,maxwidth: int,maxheight: int,) -> None:
+ """."""
+ ...
+def glfwSetWindowTitle(window: Any|list|tuple,title: bytes,) -> None:
+ """."""
+ ...
+def glfwSetWindowUserPointer(window: Any|list|tuple,pointer: Any,) -> None:
+ """."""
+ ...
+def glfwShowWindow(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSwapBuffers(window: Any|list|tuple,) -> None:
+ """."""
+ ...
+def glfwSwapInterval(interval: int,) -> None:
+ """."""
+ ...
+def glfwTerminate() -> None:
+ """."""
+ ...
+def glfwUpdateGamepadMappings(string: bytes,) -> int:
+ """."""
+ ...
+def glfwVulkanSupported() -> int:
+ """."""
+ ...
+def glfwWaitEvents() -> None:
+ """."""
+ ...
+def glfwWaitEventsTimeout(timeout: float,) -> None:
+ """."""
+ ...
+def glfwWindowHint(hint: int,value: int,) -> None:
+ """."""
+ ...
+def glfwWindowHintString(hint: int,value: bytes,) -> None:
+ """."""
+ ...
+def glfwWindowShouldClose(window: Any|list|tuple,) -> int:
+ """."""
+ ...
+def rlActiveDrawBuffers(count: int,) -> None:
+ """Activate multiple draw color buffers."""
+ ...
+def rlActiveTextureSlot(slot: int,) -> None:
+ """Select and active a texture slot."""
+ ...
+def rlBegin(mode: int,) -> None:
+ """Initialize drawing mode (how to organize vertex)."""
+ ...
+def rlBindFramebuffer(target: int,framebuffer: int,) -> None:
+ """Bind framebuffer (FBO)."""
+ ...
+def rlBindImageTexture(id: int,index: int,format: int,readonly: bool,) -> None:
+ """Bind image texture."""
+ ...
+def rlBindShaderBuffer(id: int,index: int,) -> None:
+ """Bind SSBO buffer."""
+ ...
+def rlBlitFramebuffer(srcX: int,srcY: int,srcWidth: int,srcHeight: int,dstX: int,dstY: int,dstWidth: int,dstHeight: int,bufferMask: int,) -> None:
+ """Blit active framebuffer to main framebuffer."""
+ ...
+def rlCheckErrors() -> None:
+ """Check and log OpenGL error codes."""
+ ...
+def rlCheckRenderBatchLimit(vCount: int,) -> bool:
+ """Check internal buffer overflow for a given number of vertex."""
+ ...
+def rlClearColor(r: bytes,g: bytes,b: bytes,a: bytes,) -> None:
+ """Clear color buffer with color."""
+ ...
+def rlClearScreenBuffers() -> None:
+ """Clear used screen buffers (color and depth)."""
+ ...
+def rlColor3f(x: float,y: float,z: float,) -> None:
+ """Define one vertex (color) - 3 float."""
+ ...
+def rlColor4f(x: float,y: float,z: float,w: float,) -> None:
+ """Define one vertex (color) - 4 float."""
+ ...
+def rlColor4ub(r: bytes,g: bytes,b: bytes,a: bytes,) -> None:
+ """Define one vertex (color) - 4 byte."""
+ ...
+def rlColorMask(r: bool,g: bool,b: bool,a: bool,) -> None:
+ """Color mask control."""
+ ...
+def rlCompileShader(shaderCode: bytes,type: int,) -> int:
+ """Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)."""
+ ...
+def rlComputeShaderDispatch(groupX: int,groupY: int,groupZ: int,) -> None:
+ """Dispatch compute shader (equivalent to *draw* for graphics pipeline)."""
+ ...
+def rlCopyShaderBuffer(destId: int,srcId: int,destOffset: int,srcOffset: int,count: int,) -> None:
+ """Copy SSBO data between buffers."""
+ ...
+def rlCubemapParameters(id: int,param: int,value: int,) -> None:
+ """Set cubemap parameters (filter, wrap)."""
+ ...
+def rlDisableBackfaceCulling() -> None:
+ """Disable backface culling."""
+ ...
+def rlDisableColorBlend() -> None:
+ """Disable color blending."""
+ ...
+def rlDisableDepthMask() -> None:
+ """Disable depth write."""
+ ...
+def rlDisableDepthTest() -> None:
+ """Disable depth test."""
+ ...
+def rlDisableFramebuffer() -> None:
+ """Disable render texture (fbo), return to default framebuffer."""
+ ...
+def rlDisableScissorTest() -> None:
+ """Disable scissor test."""
+ ...
+def rlDisableShader() -> None:
+ """Disable shader program."""
+ ...
+def rlDisableSmoothLines() -> None:
+ """Disable line aliasing."""
+ ...
+def rlDisableStereoRender() -> None:
+ """Disable stereo rendering."""
+ ...
+def rlDisableTexture() -> None:
+ """Disable texture."""
+ ...
+def rlDisableTextureCubemap() -> None:
+ """Disable texture cubemap."""
+ ...
+def rlDisableVertexArray() -> None:
+ """Disable vertex array (VAO, if supported)."""
+ ...
+def rlDisableVertexAttribute(index: int,) -> None:
+ """Disable vertex attribute index."""
+ ...
+def rlDisableVertexBuffer() -> None:
+ """Disable vertex buffer (VBO)."""
+ ...
+def rlDisableVertexBufferElement() -> None:
+ """Disable vertex buffer element (VBO element)."""
+ ...
+def rlDisableWireMode() -> None:
+ """Disable wire (and point) mode."""
+ ...
+def rlDrawRenderBatch(batch: Any|list|tuple,) -> None:
+ """Draw render batch data (Update->Draw->Reset)."""
+ ...
+def rlDrawRenderBatchActive() -> None:
+ """Update and draw internal render batch."""
+ ...
+def rlDrawVertexArray(offset: int,count: int,) -> None:
+ """Draw vertex array (currently active vao)."""
+ ...
+def rlDrawVertexArrayElements(offset: int,count: int,buffer: Any,) -> None:
+ """Draw vertex array elements."""
+ ...
+def rlDrawVertexArrayElementsInstanced(offset: int,count: int,buffer: Any,instances: int,) -> None:
+ """Draw vertex array elements with instancing."""
+ ...
+def rlDrawVertexArrayInstanced(offset: int,count: int,instances: int,) -> None:
+ """Draw vertex array (currently active vao) with instancing."""
+ ...
+def rlEnableBackfaceCulling() -> None:
+ """Enable backface culling."""
+ ...
+def rlEnableColorBlend() -> None:
+ """Enable color blending."""
+ ...
+def rlEnableDepthMask() -> None:
+ """Enable depth write."""
+ ...
+def rlEnableDepthTest() -> None:
+ """Enable depth test."""
+ ...
+def rlEnableFramebuffer(id: int,) -> None:
+ """Enable render texture (fbo)."""
+ ...
+def rlEnablePointMode() -> None:
+ """Enable point mode."""
+ ...
+def rlEnableScissorTest() -> None:
+ """Enable scissor test."""
+ ...
+def rlEnableShader(id: int,) -> None:
+ """Enable shader program."""
+ ...
+def rlEnableSmoothLines() -> None:
+ """Enable line aliasing."""
+ ...
+def rlEnableStereoRender() -> None:
+ """Enable stereo rendering."""
+ ...
+def rlEnableTexture(id: int,) -> None:
+ """Enable texture."""
+ ...
+def rlEnableTextureCubemap(id: int,) -> None:
+ """Enable texture cubemap."""
+ ...
+def rlEnableVertexArray(vaoId: int,) -> bool:
+ """Enable vertex array (VAO, if supported)."""
+ ...
+def rlEnableVertexAttribute(index: int,) -> None:
+ """Enable vertex attribute index."""
+ ...
+def rlEnableVertexBuffer(id: int,) -> None:
+ """Enable vertex buffer (VBO)."""
+ ...
+def rlEnableVertexBufferElement(id: int,) -> None:
+ """Enable vertex buffer element (VBO element)."""
+ ...
+def rlEnableWireMode() -> None:
+ """Enable wire mode."""
+ ...
+def rlEnd() -> None:
+ """Finish vertex providing."""
+ ...
+def rlFramebufferAttach(fboId: int,texId: int,attachType: int,texType: int,mipLevel: int,) -> None:
+ """Attach texture/renderbuffer to a framebuffer."""
+ ...
+def rlFramebufferComplete(id: int,) -> bool:
+ """Verify framebuffer is complete."""
+ ...
+def rlFrustum(left: float,right: float,bottom: float,top: float,znear: float,zfar: float,) -> None:
+ """."""
+ ...
+def rlGenTextureMipmaps(id: int,width: int,height: int,format: int,mipmaps: Any,) -> None:
+ """Generate mipmap data for selected texture."""
+ ...
+def rlGetActiveFramebuffer() -> int:
+ """Get the currently active render texture (fbo), 0 for default framebuffer."""
+ ...
+def rlGetCullDistanceFar() -> float:
+ """Get cull plane distance far."""
+ ...
+def rlGetCullDistanceNear() -> float:
+ """Get cull plane distance near."""
+ ...
+def rlGetFramebufferHeight() -> int:
+ """Get default framebuffer height."""
+ ...
+def rlGetFramebufferWidth() -> int:
+ """Get default framebuffer width."""
+ ...
+def rlGetGlTextureFormats(format: int,glInternalFormat: Any,glFormat: Any,glType: Any,) -> None:
+ """Get OpenGL internal formats."""
+ ...
+def rlGetLineWidth() -> float:
+ """Get the line drawing width."""
+ ...
+def rlGetLocationAttrib(shaderId: int,attribName: bytes,) -> int:
+ """Get shader location attribute."""
+ ...
+def rlGetLocationUniform(shaderId: int,uniformName: bytes,) -> int:
+ """Get shader location uniform."""
+ ...
+def rlGetMatrixModelview() -> Matrix:
+ """Get internal modelview matrix."""
+ ...
+def rlGetMatrixProjection() -> Matrix:
+ """Get internal projection matrix."""
+ ...
+def rlGetMatrixProjectionStereo(eye: int,) -> Matrix:
+ """Get internal projection matrix for stereo render (selected eye)."""
+ ...
+def rlGetMatrixTransform() -> Matrix:
+ """Get internal accumulated transform matrix."""
+ ...
+def rlGetMatrixViewOffsetStereo(eye: int,) -> Matrix:
+ """Get internal view offset matrix for stereo render (selected eye)."""
+ ...
+def rlGetPixelFormatName(format: int,) -> bytes:
+ """Get name string for pixel format."""
+ ...
+def rlGetShaderBufferSize(id: int,) -> int:
+ """Get SSBO buffer size."""
+ ...
+def rlGetShaderIdDefault() -> int:
+ """Get default shader id."""
+ ...
+def rlGetShaderLocsDefault() -> Any:
+ """Get default shader locations."""
+ ...
+def rlGetTextureIdDefault() -> int:
+ """Get default texture id."""
+ ...
+def rlGetVersion() -> int:
+ """Get current OpenGL version."""
+ ...
+def rlIsStereoRenderEnabled() -> bool:
+ """Check if stereo render is enabled."""
+ ...
+def rlLoadComputeShaderProgram(shaderId: int,) -> int:
+ """Load compute shader program."""
+ ...
+def rlLoadDrawCube() -> None:
+ """Load and draw a cube."""
+ ...
+def rlLoadDrawQuad() -> None:
+ """Load and draw a quad."""
+ ...
+def rlLoadExtensions(loader: Any,) -> None:
+ """Load OpenGL extensions (loader function required)."""
+ ...
+def rlLoadFramebuffer() -> int:
+ """Load an empty framebuffer."""
+ ...
+def rlLoadIdentity() -> None:
+ """Reset current matrix to identity matrix."""
+ ...
+def rlLoadRenderBatch(numBuffers: int,bufferElements: int,) -> rlRenderBatch:
+ """Load a render batch system."""
+ ...
+def rlLoadShaderBuffer(size: int,data: Any,usageHint: int,) -> int:
+ """Load shader storage buffer object (SSBO)."""
+ ...
+def rlLoadShaderCode(vsCode: bytes,fsCode: bytes,) -> int:
+ """Load shader from code strings."""
+ ...
+def rlLoadShaderProgram(vShaderId: int,fShaderId: int,) -> int:
+ """Load custom shader program."""
+ ...
+def rlLoadTexture(data: Any,width: int,height: int,format: int,mipmapCount: int,) -> int:
+ """Load texture data."""
+ ...
+def rlLoadTextureCubemap(data: Any,size: int,format: int,mipmapCount: int,) -> int:
+ """Load texture cubemap data."""
+ ...
+def rlLoadTextureDepth(width: int,height: int,useRenderBuffer: bool,) -> int:
+ """Load depth texture/renderbuffer (to be attached to fbo)."""
+ ...
+def rlLoadVertexArray() -> int:
+ """Load vertex array (vao) if supported."""
+ ...
+def rlLoadVertexBuffer(buffer: Any,size: int,dynamic: bool,) -> int:
+ """Load a vertex buffer object."""
+ ...
+def rlLoadVertexBufferElement(buffer: Any,size: int,dynamic: bool,) -> int:
+ """Load vertex buffer elements object."""
+ ...
+def rlMatrixMode(mode: int,) -> None:
+ """Choose the current matrix to be transformed."""
+ ...
+def rlMultMatrixf(matf: Any,) -> None:
+ """Multiply the current matrix by another matrix."""
+ ...
+def rlNormal3f(x: float,y: float,z: float,) -> None:
+ """Define one vertex (normal) - 3 float."""
+ ...
+def rlOrtho(left: float,right: float,bottom: float,top: float,znear: float,zfar: float,) -> None:
+ """."""
+ ...
+def rlPopMatrix() -> None:
+ """Pop latest inserted matrix from stack."""
+ ...
+def rlPushMatrix() -> None:
+ """Push the current matrix to stack."""
+ ...
+def rlReadScreenPixels(width: int,height: int,) -> bytes:
+ """Read screen pixel data (color buffer)."""
+ ...
+def rlReadShaderBuffer(id: int,dest: Any,count: int,offset: int,) -> None:
+ """Read SSBO buffer data (GPU->CPU)."""
+ ...
+def rlReadTexturePixels(id: int,width: int,height: int,format: int,) -> Any:
+ """Read texture pixel data."""
+ ...
+def rlRotatef(angle: float,x: float,y: float,z: float,) -> None:
+ """Multiply the current matrix by a rotation matrix."""
+ ...
+def rlScalef(x: float,y: float,z: float,) -> None:
+ """Multiply the current matrix by a scaling matrix."""
+ ...
+def rlScissor(x: int,y: int,width: int,height: int,) -> None:
+ """Scissor test."""
+ ...
+def rlSetBlendFactors(glSrcFactor: int,glDstFactor: int,glEquation: int,) -> None:
+ """Set blending mode factor and equation (using OpenGL factors)."""
+ ...
+def rlSetBlendFactorsSeparate(glSrcRGB: int,glDstRGB: int,glSrcAlpha: int,glDstAlpha: int,glEqRGB: int,glEqAlpha: int,) -> None:
+ """Set blending mode factors and equations separately (using OpenGL factors)."""
+ ...
+def rlSetBlendMode(mode: int,) -> None:
+ """Set blending mode."""
+ ...
+def rlSetClipPlanes(nearPlane: float,farPlane: float,) -> None:
+ """Set clip planes distances."""
+ ...
+def rlSetCullFace(mode: int,) -> None:
+ """Set face culling mode."""
+ ...
+def rlSetFramebufferHeight(height: int,) -> None:
+ """Set current framebuffer height."""
+ ...
+def rlSetFramebufferWidth(width: int,) -> None:
+ """Set current framebuffer width."""
+ ...
+def rlSetLineWidth(width: float,) -> None:
+ """Set the line drawing width."""
+ ...
+def rlSetMatrixModelview(view: Matrix|list|tuple,) -> None:
+ """Set a custom modelview matrix (replaces internal modelview matrix)."""
+ ...
+def rlSetMatrixProjection(proj: Matrix|list|tuple,) -> None:
+ """Set a custom projection matrix (replaces internal projection matrix)."""
+ ...
+def rlSetMatrixProjectionStereo(right: Matrix|list|tuple,left: Matrix|list|tuple,) -> None:
+ """Set eyes projection matrices for stereo rendering."""
+ ...
+def rlSetMatrixViewOffsetStereo(right: Matrix|list|tuple,left: Matrix|list|tuple,) -> None:
+ """Set eyes view offsets matrices for stereo rendering."""
+ ...
+def rlSetRenderBatchActive(batch: Any|list|tuple,) -> None:
+ """Set the active render batch for rlgl (NULL for default internal)."""
+ ...
+def rlSetShader(id: int,locs: Any,) -> None:
+ """Set shader currently active (id and locations)."""
+ ...
+def rlSetTexture(id: int,) -> None:
+ """Set current texture for render batch and check buffers limits."""
+ ...
+def rlSetUniform(locIndex: int,value: Any,uniformType: int,count: int,) -> None:
+ """Set shader value uniform."""
+ ...
+def rlSetUniformMatrices(locIndex: int,mat: Any|list|tuple,count: int,) -> None:
+ """Set shader value matrices."""
+ ...
+def rlSetUniformMatrix(locIndex: int,mat: Matrix|list|tuple,) -> None:
+ """Set shader value matrix."""
+ ...
+def rlSetUniformSampler(locIndex: int,textureId: int,) -> None:
+ """Set shader value sampler."""
+ ...
+def rlSetVertexAttribute(index: int,compSize: int,type: int,normalized: bool,stride: int,offset: int,) -> None:
+ """Set vertex attribute data configuration."""
+ ...
+def rlSetVertexAttributeDefault(locIndex: int,value: Any,attribType: int,count: int,) -> None:
+ """Set vertex attribute default value, when attribute to provided."""
+ ...
+def rlSetVertexAttributeDivisor(index: int,divisor: int,) -> None:
+ """Set vertex attribute data divisor."""
+ ...
+def rlTexCoord2f(x: float,y: float,) -> None:
+ """Define one vertex (texture coordinate) - 2 float."""
+ ...
+def rlTextureParameters(id: int,param: int,value: int,) -> None:
+ """Set texture parameters (filter, wrap)."""
+ ...
+def rlTranslatef(x: float,y: float,z: float,) -> None:
+ """Multiply the current matrix by a translation matrix."""
+ ...
+def rlUnloadFramebuffer(id: int,) -> None:
+ """Delete framebuffer from GPU."""
+ ...
+def rlUnloadRenderBatch(batch: rlRenderBatch|list|tuple,) -> None:
+ """Unload render batch system."""
+ ...
+def rlUnloadShaderBuffer(ssboId: int,) -> None:
+ """Unload shader storage buffer object (SSBO)."""
+ ...
+def rlUnloadShaderProgram(id: int,) -> None:
+ """Unload shader program."""
+ ...
+def rlUnloadTexture(id: int,) -> None:
+ """Unload texture from GPU memory."""
+ ...
+def rlUnloadVertexArray(vaoId: int,) -> None:
+ """Unload vertex array (vao)."""
+ ...
+def rlUnloadVertexBuffer(vboId: int,) -> None:
+ """Unload vertex buffer object."""
+ ...
+def rlUpdateShaderBuffer(id: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update SSBO buffer data."""
+ ...
+def rlUpdateTexture(id: int,offsetX: int,offsetY: int,width: int,height: int,format: int,data: Any,) -> None:
+ """Update texture with new data on GPU."""
+ ...
+def rlUpdateVertexBuffer(bufferId: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update vertex buffer object data on GPU buffer."""
+ ...
+def rlUpdateVertexBufferElements(id: int,data: Any,dataSize: int,offset: int,) -> None:
+ """Update vertex buffer elements data on GPU buffer."""
+ ...
+def rlVertex2f(x: float,y: float,) -> None:
+ """Define one vertex (position) - 2 float."""
+ ...
+def rlVertex2i(x: int,y: int,) -> None:
+ """Define one vertex (position) - 2 int."""
+ ...
+def rlVertex3f(x: float,y: float,z: float,) -> None:
+ """Define one vertex (position) - 3 float."""
+ ...
+def rlViewport(x: int,y: int,width: int,height: int,) -> None:
+ """Set the viewport area."""
+ ...
+def rlglClose() -> None:
+ """De-initialize rlgl (buffers, shaders, textures)."""
+ ...
+def rlglInit(width: int,height: int,) -> None:
+ """Initialize rlgl (buffers, shaders, textures, states)."""
+ ...
+class AudioStream:
+ buffer: Any
+ processor: Any
+ sampleRate: int
+ sampleSize: int
+ channels: int
+class AutomationEvent:
+ frame: int
+ type: int
+ params: list
+class AutomationEventList:
+ capacity: int
+ count: int
+ events: Any
+BlendMode = int
+class BoneInfo:
+ name: bytes
+ parent: int
+class BoundingBox:
+ min: Vector3
+ max: Vector3
+class Camera:
+ position: Vector3
+ target: Vector3
+ up: Vector3
+ fovy: float
+ projection: int
+class Camera2D:
+ offset: Vector2
+ target: Vector2
+ rotation: float
+ zoom: float
+class Camera3D:
+ position: Vector3
+ target: Vector3
+ up: Vector3
+ fovy: float
+ projection: int
+CameraMode = int
+CameraProjection = int
+class Color:
+ r: bytes
+ g: bytes
+ b: bytes
+ a: bytes
+ConfigFlags = int
+CubemapLayout = int
+class FilePathList:
+ capacity: int
+ count: int
+ paths: list[bytes]
+class Font:
+ baseSize: int
+ glyphCount: int
+ glyphPadding: int
+ texture: Texture
+ recs: Any
+ glyphs: Any
+FontType = int
+class GLFWallocator:
+ allocate: Any
+ reallocate: Any
+ deallocate: Any
+ user: Any
+class GLFWcursor:
+ ...
+class GLFWgamepadstate:
+ buttons: bytes
+ axes: list
+class GLFWgammaramp:
+ red: Any
+ green: Any
+ blue: Any
+ size: int
+class GLFWimage:
+ width: int
+ height: int
+ pixels: bytes
+class GLFWmonitor:
+ ...
+class GLFWvidmode:
+ width: int
+ height: int
+ redBits: int
+ greenBits: int
+ blueBits: int
+ refreshRate: int
+class GLFWwindow:
+ ...
+GamepadAxis = int
+GamepadButton = int
+Gesture = int
+class GlyphInfo:
+ value: int
+ offsetX: int
+ offsetY: int
+ advanceX: int
+ image: Image
+GuiCheckBoxProperty = int
+GuiColorPickerProperty = int
+GuiComboBoxProperty = int
+GuiControl = int
+GuiControlProperty = int
+GuiDefaultProperty = int
+GuiDropdownBoxProperty = int
+GuiIconName = int
+GuiListViewProperty = int
+GuiProgressBarProperty = int
+GuiScrollBarProperty = int
+GuiSliderProperty = int
+GuiSpinnerProperty = int
+GuiState = int
+class GuiStyleProp:
+ controlId: int
+ propertyId: int
+ propertyValue: int
+GuiTextAlignment = int
+GuiTextAlignmentVertical = int
+GuiTextBoxProperty = int
+GuiTextWrapMode = int
+GuiToggleProperty = int
+class Image:
+ data: Any
+ width: int
+ height: int
+ mipmaps: int
+ format: int
+KeyboardKey = int
+class Mat2:
+ m00: float
+ m01: float
+ m10: float
+ m11: float
+class Material:
+ shader: Shader
+ maps: Any
+ params: list
+class MaterialMap:
+ texture: Texture
+ color: Color
+ value: float
+MaterialMapIndex = int
+class Matrix:
+ m0: float
+ m4: float
+ m8: float
+ m12: float
+ m1: float
+ m5: float
+ m9: float
+ m13: float
+ m2: float
+ m6: float
+ m10: float
+ m14: float
+ m3: float
+ m7: float
+ m11: float
+ m15: float
+class Mesh:
+ vertexCount: int
+ triangleCount: int
+ vertices: Any
+ texcoords: Any
+ texcoords2: Any
+ normals: Any
+ tangents: Any
+ colors: bytes
+ indices: Any
+ animVertices: Any
+ animNormals: Any
+ boneIds: bytes
+ boneWeights: Any
+ boneMatrices: Any
+ boneCount: int
+ vaoId: int
+ vboId: Any
+class Model:
+ transform: Matrix
+ meshCount: int
+ materialCount: int
+ meshes: Any
+ materials: Any
+ meshMaterial: Any
+ boneCount: int
+ bones: Any
+ bindPose: Any
+class ModelAnimation:
+ boneCount: int
+ frameCount: int
+ bones: Any
+ framePoses: Any
+ name: bytes
+MouseButton = int
+MouseCursor = int
+class Music:
+ stream: AudioStream
+ frameCount: int
+ looping: bool
+ ctxType: int
+ ctxData: Any
+class NPatchInfo:
+ source: Rectangle
+ left: int
+ top: int
+ right: int
+ bottom: int
+ layout: int
+NPatchLayout = int
+class PhysicsBodyData:
+ id: int
+ enabled: bool
+ position: Vector2
+ velocity: Vector2
+ force: Vector2
+ angularVelocity: float
+ torque: float
+ orient: float
+ inertia: float
+ inverseInertia: float
+ mass: float
+ inverseMass: float
+ staticFriction: float
+ dynamicFriction: float
+ restitution: float
+ useGravity: bool
+ isGrounded: bool
+ freezeOrient: bool
+ shape: PhysicsShape
+class PhysicsManifoldData:
+ id: int
+ bodyA: Any
+ bodyB: Any
+ penetration: float
+ normal: Vector2
+ contacts: list
+ contactsCount: int
+ restitution: float
+ dynamicFriction: float
+ staticFriction: float
+class PhysicsShape:
+ type: PhysicsShapeType
+ body: Any
+ radius: float
+ transform: Mat2
+ vertexData: PolygonData
+PhysicsShapeType = int
+PixelFormat = int
+class PolygonData:
+ vertexCount: int
+ positions: list
+ normals: list
+class Quaternion:
+ x: float
+ y: float
+ z: float
+ w: float
+class Ray:
+ position: Vector3
+ direction: Vector3
+class RayCollision:
+ hit: bool
+ distance: float
+ point: Vector3
+ normal: Vector3
+class Rectangle:
+ x: float
+ y: float
+ width: float
+ height: float
+class RenderTexture:
+ id: int
+ texture: Texture
+ depth: Texture
+class RenderTexture2D:
+ id: int
+ texture: Texture
+ depth: Texture
+class Shader:
+ id: int
+ locs: Any
+ShaderAttributeDataType = int
+ShaderLocationIndex = int
+ShaderUniformDataType = int
+class Sound:
+ stream: AudioStream
+ frameCount: int
+class Texture:
+ id: int
+ width: int
+ height: int
+ mipmaps: int
+ format: int
+class Texture2D:
+ id: int
+ width: int
+ height: int
+ mipmaps: int
+ format: int
+class TextureCubemap:
+ id: int
+ width: int
+ height: int
+ mipmaps: int
+ format: int
+TextureFilter = int
+TextureWrap = int
+TraceLogLevel = int
+class Transform:
+ translation: Vector3
+ rotation: Vector4
+ scale: Vector3
+class Vector2:
+ x: float
+ y: float
+class Vector3:
+ x: float
+ y: float
+ z: float
+class Vector4:
+ x: float
+ y: float
+ z: float
+ w: float
+class VrDeviceInfo:
+ hResolution: int
+ vResolution: int
+ hScreenSize: float
+ vScreenSize: float
+ eyeToScreenDistance: float
+ lensSeparationDistance: float
+ interpupillaryDistance: float
+ lensDistortionValues: list
+ chromaAbCorrection: list
+class VrStereoConfig:
+ projection: list
+ viewOffset: list
+ leftLensCenter: list
+ rightLensCenter: list
+ leftScreenCenter: list
+ rightScreenCenter: list
+ scale: list
+ scaleIn: list
+class Wave:
+ frameCount: int
+ sampleRate: int
+ sampleSize: int
+ channels: int
+ data: Any
+class float16:
+ v: list
+class float3:
+ v: list
+class rAudioBuffer:
+ ...
+class rAudioProcessor:
+ ...
+rlBlendMode = int
+rlCullMode = int
+class rlDrawCall:
+ mode: int
+ vertexCount: int
+ vertexAlignment: int
+ textureId: int
+rlFramebufferAttachTextureType = int
+rlFramebufferAttachType = int
+rlGlVersion = int
+rlPixelFormat = int
+class rlRenderBatch:
+ bufferCount: int
+ currentBuffer: int
+ vertexBuffer: Any
+ draws: Any
+ drawCounter: int
+ currentDepth: float
+rlShaderAttributeDataType = int
+rlShaderLocationIndex = int
+rlShaderUniformDataType = int
+rlTextureFilter = int
+rlTraceLogLevel = int
+class rlVertexBuffer:
+ elementCount: int
+ vertices: Any
+ texcoords: Any
+ normals: Any
+ colors: bytes
+ indices: Any
+ vaoId: int
+ vboId: list
+
+LIGHTGRAY : Color
+GRAY : Color
+DARKGRAY : Color
+YELLOW : Color
+GOLD : Color
+ORANGE : Color
+PINK : Color
+RED : Color
+MAROON : Color
+GREEN : Color
+LIME : Color
+DARKGREEN : Color
+SKYBLUE : Color
+BLUE : Color
+DARKBLUE : Color
+PURPLE : Color
+VIOLET : Color
+DARKPURPLE : Color
+BEIGE : Color
+BROWN : Color
+DARKBROWN : Color
+WHITE : Color
+BLACK : Color
+BLANK : Color
+MAGENTA : Color
+RAYWHITE : Color
+
diff --git a/raylib/build.py b/raylib/build.py
new file mode 100644
index 0000000..ca477c8
--- /dev/null
+++ b/raylib/build.py
@@ -0,0 +1,278 @@
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+# Assumes raylib, GL, etc are all already installed as system libraries. We dont distribute them.
+# Raylib must be installed and compiled with: cmake -DWITH_PIC=ON -DSHARED=ON -DSTATIC=ON ..
+
+# We use /usr/local/lib/libraylib.a to ensure we link to static version
+import re
+
+from cffi import FFI
+import os
+import platform
+import sys
+import subprocess
+import time
+from pathlib import Path
+
+THIS_DIR = Path(__file__).resolve().parent
+REPO_ROOT = THIS_DIR.parent
+
+
+RAYLIB_PLATFORM = os.getenv("RAYLIB_PLATFORM", "Desktop")
+ENABLE_WAYLAND_DRM_LEASING = os.getenv("ENABLE_WAYLAND_DRM_LEASING")
+
+def check_raylib_installed():
+ return subprocess.run(['pkg-config', '--exists', 'raylib'], text=True, stdout=subprocess.PIPE).returncode == 0
+
+def check_SDL_installed():
+ return subprocess.run(['pkg-config', '--exists', 'sdl2'], text=True, stdout=subprocess.PIPE).returncode == 0
+
+def get_the_include_path():
+ return subprocess.run(['pkg-config', '--variable=includedir', 'raylib'], text=True,
+ stdout=subprocess.PIPE).stdout.strip()
+
+
+def get_the_lib_path():
+ return subprocess.run(['pkg-config', '--variable=libdir', 'raylib'], text=True,
+ stdout=subprocess.PIPE).stdout.strip()
+
+def get_specified_libs(lib_target):
+ libs = subprocess.run(['pkg-config', '--libs', lib_target], text=True,
+ stdout=subprocess.PIPE).stdout.strip().split()
+
+ if libs == "":
+ raise ValueError(f"Failed to get specified libs ({lib_target})")
+
+ print(f"{lib_target}: {libs}")
+
+ return libs
+
+def get_lib_flags():
+ return subprocess.run(['pkg-config', '--libs', 'raylib'], text=True,
+ stdout=subprocess.PIPE).stdout.strip().split()
+
+def pre_process_header(filename, remove_function_bodies=False):
+ print("Pre-processing " + filename)
+ file = open(filename, "r")
+ filetext = "".join([line for line in file if '#include' not in line])
+ command = ['gcc', '-CC', '-P', '-undef', '-nostdinc', '-DRL_MATRIX_TYPE',
+ '-DRL_QUATERNION_TYPE','-DRL_VECTOR4_TYPE','-DRL_VECTOR3_TYPE','-DRL_VECTOR2_TYPE',
+ '-DRLAPI=', '-DPHYSACDEF=', '-DRAYGUIDEF=','-DRMAPI=',
+ '-dDI', '-E', '-']
+ filetext = subprocess.run(command, text=True, input=filetext, stdout=subprocess.PIPE).stdout
+ filetext = filetext.replace("va_list", "void *")
+ if remove_function_bodies:
+ filetext = re.sub('\n{\n(.|\n)*?\n}\n', ';', filetext)
+ filetext = "\n".join([line for line in filetext.splitlines() if not line.startswith("#")])
+ file = open("raylib/"+os.path.basename(filename)+".modified", "w")
+ file.write(filetext)
+ # print(r)
+ return filetext
+
+
+def check_header_exists(file):
+ if not os.path.isfile(file):
+ print("\n\n*************** WARNING ***************\n\n")
+ print(
+ file + " not found. Build will not contain these extra functions.\n\nPlease copy file from src/extras to " + file + " if you want them.\n\n")
+ print("**************************************\n\n")
+ time.sleep(1)
+ return False
+ return True
+
+
+# def mangle(file):
+# result = ""
+# skip = False
+# for line in open(file):
+# line = line.strip().replace("va_list", "void *") + "\n"
+# if skip:
+# if line.startswith("#endif"):
+# skip = False
+# continue
+# if line.startswith("#if defined(__cplusplus)"):
+# skip = True
+# continue
+# if line.startswith("#endif // RAYGUI_H"):
+# break
+# if line.startswith("#"):
+# continue
+# if line.startswith("RLAPI"):
+# line = line.replace('RLAPI ', '')
+# if line.startswith("RAYGUIDEF"):
+# line = line.replace('RAYGUIDEF ', '')
+# if line.startswith("PHYSACDEF"):
+# line = line.replace('PHYSACDEF ', '')
+# result += line
+# # print(line)
+# return result
+
+
+def build_unix():
+ if not check_raylib_installed():
+ raise Exception("ERROR: raylib not found by pkg-config. Please install pkg-config and Raylib.")
+
+ if RAYLIB_PLATFORM=="SDL" and not check_SDL_installed():
+ raise Exception("ERROR: SDL2 not found by pkg-config. Please install pkg-config and SDL2.")
+
+ raylib_h = get_the_include_path() + "/raylib.h"
+ rlgl_h = get_the_include_path() + "/rlgl.h"
+ raymath_h = get_the_include_path() + "/raymath.h"
+
+ if not os.path.isfile(raylib_h):
+ raise Exception("ERROR: " + raylib_h + " not found. Please install Raylib.")
+
+ if not os.path.isfile(rlgl_h):
+ raise Exception("ERROR: " + rlgl_h + " not found. Please install Raylib.")
+
+ if not os.path.isfile(raymath_h):
+ raise Exception("ERROR: " + raylib_h + " not found. Please install Raylib.")
+
+ ffi_includes = """
+ #include "raylib.h"
+ #include "rlgl.h"
+ #include "raymath.h"
+ """
+
+ glfw3_h = get_the_include_path() + "/GLFW/glfw3.h"
+ if RAYLIB_PLATFORM=="Desktop" and check_header_exists(glfw3_h):
+ ffi_includes += """
+ #include "GLFW/glfw3.h"
+ """
+
+ raygui_h = get_the_include_path() + "/raygui.h"
+ if check_header_exists(raygui_h):
+ ffi_includes += """
+ #define RAYGUI_IMPLEMENTATION
+ #define RAYGUI_SUPPORT_RICONS
+ #include "raygui.h"
+ """
+
+ physac_h = get_the_include_path() + "/physac.h"
+ if check_header_exists(physac_h):
+ ffi_includes += """
+ #define PHYSAC_IMPLEMENTATION
+ #include "physac.h"
+ """
+
+ ffibuilder.cdef(pre_process_header(raylib_h))
+ ffibuilder.cdef(pre_process_header(rlgl_h))
+ ffibuilder.cdef(pre_process_header(raymath_h, True))
+
+ if os.path.isfile(raygui_h):
+ ffibuilder.cdef(pre_process_header(raygui_h))
+ if os.path.isfile(physac_h):
+ ffibuilder.cdef(pre_process_header(physac_h))
+ if RAYLIB_PLATFORM=="Desktop" and os.path.isfile(glfw3_h):
+ ffibuilder.cdef(pre_process_header(glfw3_h))
+
+
+ if platform.system() == "Darwin":
+ print("BUILDING FOR MAC")
+ extra_link_args = [get_the_lib_path() + '/libraylib.a', '-framework', 'OpenGL', '-framework', 'Cocoa',
+ '-framework', 'IOKit', '-framework', 'CoreFoundation', '-framework',
+ 'CoreVideo']
+ if RAYLIB_PLATFORM=="SDL":
+ extra_link_args += ['/usr/local/lib/libSDL2.a', '-framework', 'CoreHaptics', '-framework', 'ForceFeedback',
+ '-framework', 'GameController']
+ libraries = []
+ extra_compile_args = ["-Wno-error=incompatible-function-pointer-types", "-D_CFFI_NO_LIMITED_API"]
+ else: #platform.system() == "Linux":
+ print("BUILDING FOR LINUX")
+ extra_link_args = get_lib_flags() + [ '-lm', '-lpthread', '-lGL',
+ '-lrt', '-lm', '-ldl', '-lpthread', '-latomic']
+ if RAYLIB_PLATFORM=="SDL":
+ extra_link_args += ['-lX11','-lSDL2']
+ elif RAYLIB_PLATFORM=="DRM":
+ extra_link_args += get_specified_libs("egl")
+ extra_link_args += get_specified_libs("gbm")
+
+ if ENABLE_WAYLAND_DRM_LEASING != "":
+ extra_link_args += get_specified_libs("wayland-client")
+ else:
+ extra_link_args += ['-lX11']
+ extra_compile_args = ["-Wno-incompatible-pointer-types", "-D_CFFI_NO_LIMITED_API"]
+ libraries = [] # Not sure why but we put them in extra_link_args instead so *shouldnt* be needed here
+
+
+ print("extra_link_args: "+str(extra_link_args))
+ print("extra_compile_args: "+str(extra_compile_args))
+ print("libraries: "+str(libraries))
+ ffibuilder.set_source("raylib._raylib_cffi",
+ ffi_includes,
+ py_limited_api=False,
+ include_dirs=[get_the_include_path()],
+ extra_link_args=extra_link_args,
+ extra_compile_args=extra_compile_args,
+ libraries=libraries)
+
+
+def build_windows():
+ print("BUILDING FOR WINDOWS")
+ ffibuilder.cdef((THIS_DIR / "raylib.h.modified").read_text())
+ if RAYLIB_PLATFORM=="Desktop":
+ ffibuilder.cdef((THIS_DIR / "glfw3.h.modified").read_text())
+ ffibuilder.cdef((THIS_DIR / "rlgl.h.modified").read_text())
+ ffibuilder.cdef((THIS_DIR / "raygui.h.modified").read_text())
+ ffibuilder.cdef((THIS_DIR / "physac.h.modified").read_text())
+ ffibuilder.cdef((THIS_DIR / "raymath.h.modified").read_text())
+
+ ffi_includes = """
+ #include "raylib.h"
+ #include "rlgl.h"
+ #include "raymath.h"
+ """
+
+ if RAYLIB_PLATFORM=="Desktop":
+ ffi_includes += """
+ #include "GLFW/glfw3.h"
+ """
+
+ ffi_includes += """
+ #define RAYGUI_IMPLEMENTATION
+ #define RAYGUI_SUPPORT_RICONS
+ #include "raygui.h"
+ #define PHYSAC_IMPLEMENTATION
+ #define PHYSAC_NO_THREADS
+ #include "physac.h"
+ """
+ libraries = ['raylib', 'gdi32', 'shell32', 'user32', 'OpenGL32', 'winmm']
+ if RAYLIB_PLATFORM=="SDL":
+ libraries += ['SDL2']
+
+ print("libraries: "+str(libraries))
+ ffibuilder.set_source("raylib._raylib_cffi", ffi_includes,
+ extra_link_args=['/NODEFAULTLIB:MSVCRTD'],
+ extra_compile_args=["/D_CFFI_NO_LIMITED_API"],
+ py_limited_api=False,
+ libraries=libraries,
+ include_dirs=[str(REPO_ROOT / 'raylib-c/src'),
+ str(REPO_ROOT / 'raylib-c/src/external/glfw/include'),
+ str(REPO_ROOT / 'raygui/src'),
+ str(REPO_ROOT / 'physac/src')],
+ )
+
+
+ffibuilder = FFI()
+
+if platform.system() == "Windows":
+ build_windows()
+else:
+ print("not windows, trying Unix build")
+ build_unix()
+
+
+if __name__ == "__main__":
+ ffibuilder.compile(verbose=True)
diff --git a/raylib/build_multi.sh b/raylib/build_multi.sh
new file mode 100755
index 0000000..a48885e
--- /dev/null
+++ b/raylib/build_multi.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+if ! command -v pyenv &> /dev/null
+then
+ echo "Pyenv required: https://github.com/pyenv/pyenv-installer"
+ exit
+fi
+
+pyenv update
+
+function build() {
+ echo "Building for Python $1"
+ pyenv install -s $1
+ pyenv global $1
+ pip3 install cffi
+ pip3 install wheel
+ rm -rf raylib/_raylib_cffi.* build
+ python setup.py bdist_wheel
+}
+
+build 3.9.5
+build 3.8.10
+build 3.7.10
+
+
diff --git a/raylib/build_multi_linux.sh b/raylib/build_multi_linux.sh
new file mode 100755
index 0000000..d3e5eff
--- /dev/null
+++ b/raylib/build_multi_linux.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+if ! command -v pyenv &> /dev/null
+then
+ echo "Pyenv required: https://github.com/pyenv/pyenv-installer"
+ exit
+fi
+
+pyenv update
+
+function build() {
+ echo "Building for Python $1"
+ pyenv install -s $1
+ pyenv global $1
+ pip3 install cffi
+ pip3 install wheel
+ rm -rf raylib/_raylib_cffi.* build
+ python setup.py bdist_wheel --plat-name manylinux2014_x86_64
+}
+
+build 3.9.5
+build 3.8.10
+build 3.7.10
+
+
diff --git a/raylib/build_multi_rpi_nox.sh b/raylib/build_multi_rpi_nox.sh
new file mode 100755
index 0000000..87bad31
--- /dev/null
+++ b/raylib/build_multi_rpi_nox.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+if ! command -v pyenv &> /dev/null
+then
+ echo "Pyenv required: https://github.com/pyenv/pyenv-installer"
+ exit
+fi
+
+pyenv update
+
+function build() {
+ echo "Building for Python $1"
+ pyenv install -s $1
+ pyenv global $1
+ pip3 install cffi
+ pip3 install wheel
+ rm -rf raylib/_raylib_cffi.* build
+ python setup.py bdist_wheel --plat-name manylinux2014_armv7l
+}
+
+build 3.9.5
+build 3.8.10
+build 3.7.10
+
+
diff --git a/raylib/colors.py b/raylib/colors.py
index dafbc83..024297f 100644
--- a/raylib/colors.py
+++ b/raylib/colors.py
@@ -1,3 +1,17 @@
+# Copyright (c) 2021 Richard Smith and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# licenses when the conditions for such availability set forth in the Eclipse
+# Public License, v. 2.0 are satisfied: GNU General Public License, version 2
+# with the GNU Classpath Exception which is
+# available at https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
LIGHTGRAY =( 200, 200, 200, 255 )
GRAY =( 130, 130, 130, 255 )
DARKGRAY =( 80, 80, 80, 255 )
@@ -23,4 +37,5 @@ WHITE =( 255, 255, 255, 255 )
BLACK =( 0, 0, 0, 255 )
BLANK =( 0, 0, 0, 0 )
MAGENTA =( 255, 0, 255, 255 )
-RAYWHITE =( 245, 245, 245, 255 )
\ No newline at end of file
+RAYWHITE =( 245, 245, 245, 255 )
+
diff --git a/raylib/defines.py b/raylib/defines.py
new file mode 100644
index 0000000..fe706d3
--- /dev/null
+++ b/raylib/defines.py
@@ -0,0 +1,508 @@
+import raylib
+
+RAYLIB_VERSION_MAJOR: int = 5
+RAYLIB_VERSION_MINOR: int = 5
+RAYLIB_VERSION_PATCH: int = 0
+RAYLIB_VERSION: str = "5.5"
+PI: float = 3.141592653589793
+DEG2RAD = PI / 180.0
+RAD2DEG = 180.0 / PI
+MOUSE_LEFT_BUTTON = raylib.MOUSE_BUTTON_LEFT
+MOUSE_RIGHT_BUTTON = raylib.MOUSE_BUTTON_RIGHT
+MOUSE_MIDDLE_BUTTON = raylib.MOUSE_BUTTON_MIDDLE
+MATERIAL_MAP_DIFFUSE = raylib.MATERIAL_MAP_ALBEDO
+MATERIAL_MAP_SPECULAR = raylib.MATERIAL_MAP_METALNESS
+SHADER_LOC_MAP_DIFFUSE = raylib.SHADER_LOC_MAP_ALBEDO
+SHADER_LOC_MAP_SPECULAR = raylib.SHADER_LOC_MAP_METALNESS
+EPSILON: float = 1e-06
+RLGL_VERSION: str = "5.0"
+RL_DEFAULT_BATCH_BUFFER_ELEMENTS: int = 8192
+RL_DEFAULT_BATCH_BUFFERS: int = 1
+RL_DEFAULT_BATCH_DRAWCALLS: int = 256
+RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS: int = 4
+RL_MAX_MATRIX_STACK_SIZE: int = 32
+RL_MAX_SHADER_LOCATIONS: int = 32
+RL_TEXTURE_WRAP_S: int = 10242
+RL_TEXTURE_WRAP_T: int = 10243
+RL_TEXTURE_MAG_FILTER: int = 10240
+RL_TEXTURE_MIN_FILTER: int = 10241
+RL_TEXTURE_FILTER_NEAREST: int = 9728
+RL_TEXTURE_FILTER_LINEAR: int = 9729
+RL_TEXTURE_FILTER_MIP_NEAREST: int = 9984
+RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR: int = 9986
+RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST: int = 9985
+RL_TEXTURE_FILTER_MIP_LINEAR: int = 9987
+RL_TEXTURE_FILTER_ANISOTROPIC: int = 12288
+RL_TEXTURE_MIPMAP_BIAS_RATIO: int = 16384
+RL_TEXTURE_WRAP_REPEAT: int = 10497
+RL_TEXTURE_WRAP_CLAMP: int = 33071
+RL_TEXTURE_WRAP_MIRROR_REPEAT: int = 33648
+RL_TEXTURE_WRAP_MIRROR_CLAMP: int = 34626
+RL_MODELVIEW: int = 5888
+RL_PROJECTION: int = 5889
+RL_TEXTURE: int = 5890
+RL_LINES: int = 1
+RL_TRIANGLES: int = 4
+RL_QUADS: int = 7
+RL_UNSIGNED_BYTE: int = 5121
+RL_FLOAT: int = 5126
+RL_STREAM_DRAW: int = 35040
+RL_STREAM_READ: int = 35041
+RL_STREAM_COPY: int = 35042
+RL_STATIC_DRAW: int = 35044
+RL_STATIC_READ: int = 35045
+RL_STATIC_COPY: int = 35046
+RL_DYNAMIC_DRAW: int = 35048
+RL_DYNAMIC_READ: int = 35049
+RL_DYNAMIC_COPY: int = 35050
+RL_FRAGMENT_SHADER: int = 35632
+RL_VERTEX_SHADER: int = 35633
+RL_COMPUTE_SHADER: int = 37305
+RL_ZERO: int = 0
+RL_ONE: int = 1
+RL_SRC_COLOR: int = 768
+RL_ONE_MINUS_SRC_COLOR: int = 769
+RL_SRC_ALPHA: int = 770
+RL_ONE_MINUS_SRC_ALPHA: int = 771
+RL_DST_ALPHA: int = 772
+RL_ONE_MINUS_DST_ALPHA: int = 773
+RL_DST_COLOR: int = 774
+RL_ONE_MINUS_DST_COLOR: int = 775
+RL_SRC_ALPHA_SATURATE: int = 776
+RL_CONSTANT_COLOR: int = 32769
+RL_ONE_MINUS_CONSTANT_COLOR: int = 32770
+RL_CONSTANT_ALPHA: int = 32771
+RL_ONE_MINUS_CONSTANT_ALPHA: int = 32772
+RL_FUNC_ADD: int = 32774
+RL_MIN: int = 32775
+RL_MAX: int = 32776
+RL_FUNC_SUBTRACT: int = 32778
+RL_FUNC_REVERSE_SUBTRACT: int = 32779
+RL_BLEND_EQUATION: int = 32777
+RL_BLEND_EQUATION_RGB: int = 32777
+RL_BLEND_EQUATION_ALPHA: int = 34877
+RL_BLEND_DST_RGB: int = 32968
+RL_BLEND_SRC_RGB: int = 32969
+RL_BLEND_DST_ALPHA: int = 32970
+RL_BLEND_SRC_ALPHA: int = 32971
+RL_BLEND_COLOR: int = 32773
+RL_READ_FRAMEBUFFER: int = 36008
+RL_DRAW_FRAMEBUFFER: int = 36009
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION: int = 0
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD: int = 1
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL: int = 2
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR: int = 3
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT: int = 4
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2: int = 5
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES: int = 6
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS: int = 7
+RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS: int = 8
+RL_SHADER_LOC_MAP_DIFFUSE = raylib.RL_SHADER_LOC_MAP_ALBEDO
+RL_SHADER_LOC_MAP_SPECULAR = raylib.RL_SHADER_LOC_MAP_METALNESS
+GL_SHADING_LANGUAGE_VERSION: int = 35724
+GL_COMPRESSED_RGB_S3TC_DXT1_EXT: int = 33776
+GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: int = 33777
+GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: int = 33778
+GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: int = 33779
+GL_ETC1_RGB8_OES: int = 36196
+GL_COMPRESSED_RGB8_ETC2: int = 37492
+GL_COMPRESSED_RGBA8_ETC2_EAC: int = 37496
+GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG: int = 35840
+GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: int = 35842
+GL_COMPRESSED_RGBA_ASTC_4x4_KHR: int = 37808
+GL_COMPRESSED_RGBA_ASTC_8x8_KHR: int = 37815
+GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: int = 34047
+GL_TEXTURE_MAX_ANISOTROPY_EXT: int = 34046
+GL_PROGRAM_POINT_SIZE: int = 34370
+GL_LINE_WIDTH: int = 2849
+GL_UNSIGNED_SHORT_5_6_5: int = 33635
+GL_UNSIGNED_SHORT_5_5_5_1: int = 32820
+GL_UNSIGNED_SHORT_4_4_4_4: int = 32819
+GL_LUMINANCE: int = 6409
+GL_LUMINANCE_ALPHA: int = 6410
+RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION: str = "vertexPosition"
+RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD: str = "vertexTexCoord"
+RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL: str = "vertexNormal"
+RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR: str = "vertexColor"
+RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT: str = "vertexTangent"
+RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2: str = "vertexTexCoord2"
+RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS: str = "vertexBoneIds"
+RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS: str = "vertexBoneWeights"
+RL_DEFAULT_SHADER_UNIFORM_NAME_MVP: str = "mvp"
+RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW: str = "matView"
+RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION: str = "matProjection"
+RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL: str = "matModel"
+RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL: str = "matNormal"
+RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR: str = "colDiffuse"
+RL_DEFAULT_SHADER_UNIFORM_NAME_BONE_MATRICES: str = "boneMatrices"
+RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0: str = "texture0"
+RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1: str = "texture1"
+RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2: str = "texture2"
+RAYGUI_VERSION_MAJOR: int = 4
+RAYGUI_VERSION_MINOR: int = 5
+RAYGUI_VERSION_PATCH: int = 0
+RAYGUI_VERSION: str = "4.5-dev"
+SCROLLBAR_LEFT_SIDE: int = 0
+SCROLLBAR_RIGHT_SIDE: int = 1
+RAYGUI_ICON_SIZE: int = 16
+RAYGUI_ICON_MAX_ICONS: int = 256
+RAYGUI_ICON_MAX_NAME_LENGTH: int = 32
+RAYGUI_MAX_CONTROLS: int = 16
+RAYGUI_MAX_PROPS_BASE: int = 16
+RAYGUI_MAX_PROPS_EXTENDED: int = 8
+KEY_RIGHT: int = 262
+KEY_LEFT: int = 263
+KEY_DOWN: int = 264
+KEY_UP: int = 265
+KEY_BACKSPACE: int = 259
+KEY_ENTER: int = 257
+MOUSE_LEFT_BUTTON: int = 0
+RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT: int = 24
+RAYGUI_GROUPBOX_LINE_THICK: int = 1
+RAYGUI_LINE_MARGIN_TEXT: int = 12
+RAYGUI_LINE_TEXT_PADDING: int = 4
+RAYGUI_PANEL_BORDER_WIDTH: int = 1
+RAYGUI_TABBAR_ITEM_WIDTH: int = 160
+RAYGUI_MIN_SCROLLBAR_WIDTH: int = 40
+RAYGUI_MIN_SCROLLBAR_HEIGHT: int = 40
+RAYGUI_MIN_MOUSE_WHEEL_SPEED: int = 20
+RAYGUI_TOGGLEGROUP_MAX_ITEMS: int = 32
+RAYGUI_TEXTBOX_AUTO_CURSOR_COOLDOWN: int = 40
+RAYGUI_TEXTBOX_AUTO_CURSOR_DELAY: int = 1
+RAYGUI_VALUEBOX_MAX_CHARS: int = 32
+RAYGUI_COLORBARALPHA_CHECKED_SIZE: int = 10
+RAYGUI_MESSAGEBOX_BUTTON_HEIGHT: int = 24
+RAYGUI_MESSAGEBOX_BUTTON_PADDING: int = 12
+RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT: int = 24
+RAYGUI_TEXTINPUTBOX_BUTTON_PADDING: int = 12
+RAYGUI_TEXTINPUTBOX_HEIGHT: int = 26
+RAYGUI_GRID_ALPHA: float = 0.15
+MAX_LINE_BUFFER_SIZE: int = 256
+ICON_TEXT_PADDING: int = 4
+RAYGUI_MAX_TEXT_LINES: int = 128
+RAYGUI_TEXTSPLIT_MAX_ITEMS: int = 128
+RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE: int = 1024
+RAYGUI_TEXTFORMAT_MAX_SIZE: int = 256
+PHYSAC_MAX_BODIES: int = 64
+PHYSAC_MAX_MANIFOLDS: int = 4096
+PHYSAC_MAX_VERTICES: int = 24
+PHYSAC_CIRCLE_VERTICES: int = 24
+PHYSAC_COLLISION_ITERATIONS: int = 20
+PHYSAC_PENETRATION_ALLOWANCE: float = 0.05
+PHYSAC_PENETRATION_CORRECTION: float = 0.4
+PHYSAC_FLT_MAX: float = 3.402823466e+38
+PHYSAC_EPSILON: float = 1e-06
+GLFW_VERSION_MAJOR: int = 3
+GLFW_VERSION_MINOR: int = 4
+GLFW_VERSION_REVISION: int = 0
+GLFW_TRUE: int = 1
+GLFW_FALSE: int = 0
+GLFW_RELEASE: int = 0
+GLFW_PRESS: int = 1
+GLFW_REPEAT: int = 2
+GLFW_HAT_CENTERED: int = 0
+GLFW_HAT_UP: int = 1
+GLFW_HAT_RIGHT: int = 2
+GLFW_HAT_DOWN: int = 4
+GLFW_HAT_LEFT: int = 8
+GLFW_HAT_RIGHT_UP = GLFW_HAT_RIGHT | GLFW_HAT_UP
+GLFW_HAT_RIGHT_DOWN = GLFW_HAT_RIGHT | GLFW_HAT_DOWN
+GLFW_HAT_LEFT_UP = GLFW_HAT_LEFT | GLFW_HAT_UP
+GLFW_HAT_LEFT_DOWN = GLFW_HAT_LEFT | GLFW_HAT_DOWN
+GLFW_KEY_SPACE: int = 32
+GLFW_KEY_APOSTROPHE: int = 39
+GLFW_KEY_COMMA: int = 44
+GLFW_KEY_MINUS: int = 45
+GLFW_KEY_PERIOD: int = 46
+GLFW_KEY_SLASH: int = 47
+GLFW_KEY_0: int = 48
+GLFW_KEY_1: int = 49
+GLFW_KEY_2: int = 50
+GLFW_KEY_3: int = 51
+GLFW_KEY_4: int = 52
+GLFW_KEY_5: int = 53
+GLFW_KEY_6: int = 54
+GLFW_KEY_7: int = 55
+GLFW_KEY_8: int = 56
+GLFW_KEY_9: int = 57
+GLFW_KEY_SEMICOLON: int = 59
+GLFW_KEY_EQUAL: int = 61
+GLFW_KEY_A: int = 65
+GLFW_KEY_B: int = 66
+GLFW_KEY_C: int = 67
+GLFW_KEY_D: int = 68
+GLFW_KEY_E: int = 69
+GLFW_KEY_F: int = 70
+GLFW_KEY_G: int = 71
+GLFW_KEY_H: int = 72
+GLFW_KEY_I: int = 73
+GLFW_KEY_J: int = 74
+GLFW_KEY_K: int = 75
+GLFW_KEY_L: int = 76
+GLFW_KEY_M: int = 77
+GLFW_KEY_N: int = 78
+GLFW_KEY_O: int = 79
+GLFW_KEY_P: int = 80
+GLFW_KEY_Q: int = 81
+GLFW_KEY_R: int = 82
+GLFW_KEY_S: int = 83
+GLFW_KEY_T: int = 84
+GLFW_KEY_U: int = 85
+GLFW_KEY_V: int = 86
+GLFW_KEY_W: int = 87
+GLFW_KEY_X: int = 88
+GLFW_KEY_Y: int = 89
+GLFW_KEY_Z: int = 90
+GLFW_KEY_LEFT_BRACKET: int = 91
+GLFW_KEY_BACKSLASH: int = 92
+GLFW_KEY_RIGHT_BRACKET: int = 93
+GLFW_KEY_GRAVE_ACCENT: int = 96
+GLFW_KEY_WORLD_1: int = 161
+GLFW_KEY_WORLD_2: int = 162
+GLFW_KEY_ESCAPE: int = 256
+GLFW_KEY_ENTER: int = 257
+GLFW_KEY_TAB: int = 258
+GLFW_KEY_BACKSPACE: int = 259
+GLFW_KEY_INSERT: int = 260
+GLFW_KEY_DELETE: int = 261
+GLFW_KEY_RIGHT: int = 262
+GLFW_KEY_LEFT: int = 263
+GLFW_KEY_DOWN: int = 264
+GLFW_KEY_UP: int = 265
+GLFW_KEY_PAGE_UP: int = 266
+GLFW_KEY_PAGE_DOWN: int = 267
+GLFW_KEY_HOME: int = 268
+GLFW_KEY_END: int = 269
+GLFW_KEY_CAPS_LOCK: int = 280
+GLFW_KEY_SCROLL_LOCK: int = 281
+GLFW_KEY_NUM_LOCK: int = 282
+GLFW_KEY_PRINT_SCREEN: int = 283
+GLFW_KEY_PAUSE: int = 284
+GLFW_KEY_F1: int = 290
+GLFW_KEY_F2: int = 291
+GLFW_KEY_F3: int = 292
+GLFW_KEY_F4: int = 293
+GLFW_KEY_F5: int = 294
+GLFW_KEY_F6: int = 295
+GLFW_KEY_F7: int = 296
+GLFW_KEY_F8: int = 297
+GLFW_KEY_F9: int = 298
+GLFW_KEY_F10: int = 299
+GLFW_KEY_F11: int = 300
+GLFW_KEY_F12: int = 301
+GLFW_KEY_F13: int = 302
+GLFW_KEY_F14: int = 303
+GLFW_KEY_F15: int = 304
+GLFW_KEY_F16: int = 305
+GLFW_KEY_F17: int = 306
+GLFW_KEY_F18: int = 307
+GLFW_KEY_F19: int = 308
+GLFW_KEY_F20: int = 309
+GLFW_KEY_F21: int = 310
+GLFW_KEY_F22: int = 311
+GLFW_KEY_F23: int = 312
+GLFW_KEY_F24: int = 313
+GLFW_KEY_F25: int = 314
+GLFW_KEY_KP_0: int = 320
+GLFW_KEY_KP_1: int = 321
+GLFW_KEY_KP_2: int = 322
+GLFW_KEY_KP_3: int = 323
+GLFW_KEY_KP_4: int = 324
+GLFW_KEY_KP_5: int = 325
+GLFW_KEY_KP_6: int = 326
+GLFW_KEY_KP_7: int = 327
+GLFW_KEY_KP_8: int = 328
+GLFW_KEY_KP_9: int = 329
+GLFW_KEY_KP_DECIMAL: int = 330
+GLFW_KEY_KP_DIVIDE: int = 331
+GLFW_KEY_KP_MULTIPLY: int = 332
+GLFW_KEY_KP_SUBTRACT: int = 333
+GLFW_KEY_KP_ADD: int = 334
+GLFW_KEY_KP_ENTER: int = 335
+GLFW_KEY_KP_EQUAL: int = 336
+GLFW_KEY_LEFT_SHIFT: int = 340
+GLFW_KEY_LEFT_CONTROL: int = 341
+GLFW_KEY_LEFT_ALT: int = 342
+GLFW_KEY_LEFT_SUPER: int = 343
+GLFW_KEY_RIGHT_SHIFT: int = 344
+GLFW_KEY_RIGHT_CONTROL: int = 345
+GLFW_KEY_RIGHT_ALT: int = 346
+GLFW_KEY_RIGHT_SUPER: int = 347
+GLFW_KEY_MENU: int = 348
+GLFW_MOD_SHIFT: int = 1
+GLFW_MOD_CONTROL: int = 2
+GLFW_MOD_ALT: int = 4
+GLFW_MOD_SUPER: int = 8
+GLFW_MOD_CAPS_LOCK: int = 16
+GLFW_MOD_NUM_LOCK: int = 32
+GLFW_MOUSE_BUTTON_1: int = 0
+GLFW_MOUSE_BUTTON_2: int = 1
+GLFW_MOUSE_BUTTON_3: int = 2
+GLFW_MOUSE_BUTTON_4: int = 3
+GLFW_MOUSE_BUTTON_5: int = 4
+GLFW_MOUSE_BUTTON_6: int = 5
+GLFW_MOUSE_BUTTON_7: int = 6
+GLFW_MOUSE_BUTTON_8: int = 7
+GLFW_JOYSTICK_1: int = 0
+GLFW_JOYSTICK_2: int = 1
+GLFW_JOYSTICK_3: int = 2
+GLFW_JOYSTICK_4: int = 3
+GLFW_JOYSTICK_5: int = 4
+GLFW_JOYSTICK_6: int = 5
+GLFW_JOYSTICK_7: int = 6
+GLFW_JOYSTICK_8: int = 7
+GLFW_JOYSTICK_9: int = 8
+GLFW_JOYSTICK_10: int = 9
+GLFW_JOYSTICK_11: int = 10
+GLFW_JOYSTICK_12: int = 11
+GLFW_JOYSTICK_13: int = 12
+GLFW_JOYSTICK_14: int = 13
+GLFW_JOYSTICK_15: int = 14
+GLFW_JOYSTICK_16: int = 15
+GLFW_GAMEPAD_BUTTON_A: int = 0
+GLFW_GAMEPAD_BUTTON_B: int = 1
+GLFW_GAMEPAD_BUTTON_X: int = 2
+GLFW_GAMEPAD_BUTTON_Y: int = 3
+GLFW_GAMEPAD_BUTTON_LEFT_BUMPER: int = 4
+GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER: int = 5
+GLFW_GAMEPAD_BUTTON_BACK: int = 6
+GLFW_GAMEPAD_BUTTON_START: int = 7
+GLFW_GAMEPAD_BUTTON_GUIDE: int = 8
+GLFW_GAMEPAD_BUTTON_LEFT_THUMB: int = 9
+GLFW_GAMEPAD_BUTTON_RIGHT_THUMB: int = 10
+GLFW_GAMEPAD_BUTTON_DPAD_UP: int = 11
+GLFW_GAMEPAD_BUTTON_DPAD_RIGHT: int = 12
+GLFW_GAMEPAD_BUTTON_DPAD_DOWN: int = 13
+GLFW_GAMEPAD_BUTTON_DPAD_LEFT: int = 14
+GLFW_GAMEPAD_AXIS_LEFT_X: int = 0
+GLFW_GAMEPAD_AXIS_LEFT_Y: int = 1
+GLFW_GAMEPAD_AXIS_RIGHT_X: int = 2
+GLFW_GAMEPAD_AXIS_RIGHT_Y: int = 3
+GLFW_GAMEPAD_AXIS_LEFT_TRIGGER: int = 4
+GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER: int = 5
+GLFW_NO_ERROR: int = 0
+GLFW_NOT_INITIALIZED: int = 65537
+GLFW_NO_CURRENT_CONTEXT: int = 65538
+GLFW_INVALID_ENUM: int = 65539
+GLFW_INVALID_VALUE: int = 65540
+GLFW_OUT_OF_MEMORY: int = 65541
+GLFW_API_UNAVAILABLE: int = 65542
+GLFW_VERSION_UNAVAILABLE: int = 65543
+GLFW_PLATFORM_ERROR: int = 65544
+GLFW_FORMAT_UNAVAILABLE: int = 65545
+GLFW_NO_WINDOW_CONTEXT: int = 65546
+GLFW_CURSOR_UNAVAILABLE: int = 65547
+GLFW_FEATURE_UNAVAILABLE: int = 65548
+GLFW_FEATURE_UNIMPLEMENTED: int = 65549
+GLFW_PLATFORM_UNAVAILABLE: int = 65550
+GLFW_FOCUSED: int = 131073
+GLFW_ICONIFIED: int = 131074
+GLFW_RESIZABLE: int = 131075
+GLFW_VISIBLE: int = 131076
+GLFW_DECORATED: int = 131077
+GLFW_AUTO_ICONIFY: int = 131078
+GLFW_FLOATING: int = 131079
+GLFW_MAXIMIZED: int = 131080
+GLFW_CENTER_CURSOR: int = 131081
+GLFW_TRANSPARENT_FRAMEBUFFER: int = 131082
+GLFW_HOVERED: int = 131083
+GLFW_FOCUS_ON_SHOW: int = 131084
+GLFW_MOUSE_PASSTHROUGH: int = 131085
+GLFW_POSITION_X: int = 131086
+GLFW_POSITION_Y: int = 131087
+GLFW_RED_BITS: int = 135169
+GLFW_GREEN_BITS: int = 135170
+GLFW_BLUE_BITS: int = 135171
+GLFW_ALPHA_BITS: int = 135172
+GLFW_DEPTH_BITS: int = 135173
+GLFW_STENCIL_BITS: int = 135174
+GLFW_ACCUM_RED_BITS: int = 135175
+GLFW_ACCUM_GREEN_BITS: int = 135176
+GLFW_ACCUM_BLUE_BITS: int = 135177
+GLFW_ACCUM_ALPHA_BITS: int = 135178
+GLFW_AUX_BUFFERS: int = 135179
+GLFW_STEREO: int = 135180
+GLFW_SAMPLES: int = 135181
+GLFW_SRGB_CAPABLE: int = 135182
+GLFW_REFRESH_RATE: int = 135183
+GLFW_DOUBLEBUFFER: int = 135184
+GLFW_CLIENT_API: int = 139265
+GLFW_CONTEXT_VERSION_MAJOR: int = 139266
+GLFW_CONTEXT_VERSION_MINOR: int = 139267
+GLFW_CONTEXT_REVISION: int = 139268
+GLFW_CONTEXT_ROBUSTNESS: int = 139269
+GLFW_OPENGL_FORWARD_COMPAT: int = 139270
+GLFW_CONTEXT_DEBUG: int = 139271
+GLFW_OPENGL_PROFILE: int = 139272
+GLFW_CONTEXT_RELEASE_BEHAVIOR: int = 139273
+GLFW_CONTEXT_NO_ERROR: int = 139274
+GLFW_CONTEXT_CREATION_API: int = 139275
+GLFW_SCALE_TO_MONITOR: int = 139276
+GLFW_SCALE_FRAMEBUFFER: int = 139277
+GLFW_COCOA_RETINA_FRAMEBUFFER: int = 143361
+GLFW_COCOA_FRAME_NAME: int = 143362
+GLFW_COCOA_GRAPHICS_SWITCHING: int = 143363
+GLFW_X11_CLASS_NAME: int = 147457
+GLFW_X11_INSTANCE_NAME: int = 147458
+GLFW_WIN32_KEYBOARD_MENU: int = 151553
+GLFW_WIN32_SHOWDEFAULT: int = 151554
+GLFW_WAYLAND_APP_ID: int = 155649
+GLFW_NO_API: int = 0
+GLFW_OPENGL_API: int = 196609
+GLFW_OPENGL_ES_API: int = 196610
+GLFW_NO_ROBUSTNESS: int = 0
+GLFW_NO_RESET_NOTIFICATION: int = 200705
+GLFW_LOSE_CONTEXT_ON_RESET: int = 200706
+GLFW_OPENGL_ANY_PROFILE: int = 0
+GLFW_OPENGL_CORE_PROFILE: int = 204801
+GLFW_OPENGL_COMPAT_PROFILE: int = 204802
+GLFW_CURSOR: int = 208897
+GLFW_STICKY_KEYS: int = 208898
+GLFW_STICKY_MOUSE_BUTTONS: int = 208899
+GLFW_LOCK_KEY_MODS: int = 208900
+GLFW_RAW_MOUSE_MOTION: int = 208901
+GLFW_CURSOR_NORMAL: int = 212993
+GLFW_CURSOR_HIDDEN: int = 212994
+GLFW_CURSOR_DISABLED: int = 212995
+GLFW_CURSOR_CAPTURED: int = 212996
+GLFW_ANY_RELEASE_BEHAVIOR: int = 0
+GLFW_RELEASE_BEHAVIOR_FLUSH: int = 217089
+GLFW_RELEASE_BEHAVIOR_NONE: int = 217090
+GLFW_NATIVE_CONTEXT_API: int = 221185
+GLFW_EGL_CONTEXT_API: int = 221186
+GLFW_OSMESA_CONTEXT_API: int = 221187
+GLFW_ANGLE_PLATFORM_TYPE_NONE: int = 225281
+GLFW_ANGLE_PLATFORM_TYPE_OPENGL: int = 225282
+GLFW_ANGLE_PLATFORM_TYPE_OPENGLES: int = 225283
+GLFW_ANGLE_PLATFORM_TYPE_D3D9: int = 225284
+GLFW_ANGLE_PLATFORM_TYPE_D3D11: int = 225285
+GLFW_ANGLE_PLATFORM_TYPE_VULKAN: int = 225287
+GLFW_ANGLE_PLATFORM_TYPE_METAL: int = 225288
+GLFW_WAYLAND_PREFER_LIBDECOR: int = 229377
+GLFW_WAYLAND_DISABLE_LIBDECOR: int = 229378
+GLFW_ANY_POSITION: int = 2147483648
+GLFW_ARROW_CURSOR: int = 221185
+GLFW_IBEAM_CURSOR: int = 221186
+GLFW_CROSSHAIR_CURSOR: int = 221187
+GLFW_POINTING_HAND_CURSOR: int = 221188
+GLFW_RESIZE_EW_CURSOR: int = 221189
+GLFW_RESIZE_NS_CURSOR: int = 221190
+GLFW_RESIZE_NWSE_CURSOR: int = 221191
+GLFW_RESIZE_NESW_CURSOR: int = 221192
+GLFW_RESIZE_ALL_CURSOR: int = 221193
+GLFW_NOT_ALLOWED_CURSOR: int = 221194
+GLFW_CONNECTED: int = 262145
+GLFW_DISCONNECTED: int = 262146
+GLFW_JOYSTICK_HAT_BUTTONS: int = 327681
+GLFW_ANGLE_PLATFORM_TYPE: int = 327682
+GLFW_PLATFORM: int = 327683
+GLFW_COCOA_CHDIR_RESOURCES: int = 331777
+GLFW_COCOA_MENUBAR: int = 331778
+GLFW_X11_XCB_VULKAN_SURFACE: int = 335873
+GLFW_WAYLAND_LIBDECOR: int = 339969
+GLFW_ANY_PLATFORM: int = 393216
+GLFW_PLATFORM_WIN32: int = 393217
+GLFW_PLATFORM_COCOA: int = 393218
+GLFW_PLATFORM_WAYLAND: int = 393219
+GLFW_PLATFORM_X11: int = 393220
+GLFW_PLATFORM_NULL: int = 393221
diff --git a/raylib/dynamic/32bit/libraylib.dll b/raylib/dynamic/32bit/libraylib.dll
deleted file mode 100644
index 981e190..0000000
Binary files a/raylib/dynamic/32bit/libraylib.dll and /dev/null differ
diff --git a/raylib/dynamic/32bit/raylib.dll b/raylib/dynamic/32bit/raylib.dll
deleted file mode 100644
index 961c8b7..0000000
Binary files a/raylib/dynamic/32bit/raylib.dll and /dev/null differ
diff --git a/raylib/dynamic/__init__.py b/raylib/dynamic/__init__.py
deleted file mode 100644
index bf60908..0000000
--- a/raylib/dynamic/__init__.py
+++ /dev/null
@@ -1,37 +0,0 @@
-"""
-This is an attempt at a CFFI dynamic (ABI) binding. It was failing in the exactly same place the ctypes binding fails, accessing
-materials of a model. But now it __seems__ to work
-"""
-
-import platform
-
-# Probably unnecessary, just covering all bases in case people add or remove dlls
-MAC_NAMES = ['libraylib.2.6.0.dylib', 'libraylib.261.dylib', 'libraylib.dylib']
-LINUX_NAMES = ['libraylib.so.2.6.0','libraylib.so.2', 'libraylib.so']
-WINDOWS_NAMES = ['libraylib.dll', 'raylib.dll','32bit/raylib.dll', '32bit/libraylib.dll']
-
-if platform.system() == "Darwin":
- NAMES_TO_TRY = MAC_NAMES
-elif platform.system() == "Linux":
- NAMES_TO_TRY = LINUX_NAMES
-elif platform.system() == "Windows":
- NAMES_TO_TRY = WINDOWS_NAMES
-else:
- NAMES_TO_TRY = MAC_NAMES + LINUX_NAMES + WINDOWS_NAMES
-
-import pathlib
-MODULE = pathlib.Path(__file__).parent.parent
-
-from cffi import FFI
-ffi = FFI()
-ffi.cdef(open(MODULE / "raylib_modified.h").read().replace('RLAPI ', ''))
-
-for name in NAMES_TO_TRY:
- file = str(MODULE)+"/dynamic/"+name
- try:
- raylib = ffi.dlopen(file)
- print("LOADED DYNAMICALLY SHARED LIB "+file)
- break
- except Exception as e:
- print(e)
-
diff --git a/raylib/dynamic/libraylib.2.6.0.dylib b/raylib/dynamic/libraylib.2.6.0.dylib
deleted file mode 100755
index d6199c5..0000000
Binary files a/raylib/dynamic/libraylib.2.6.0.dylib and /dev/null differ
diff --git a/raylib/dynamic/libraylib.261.dylib b/raylib/dynamic/libraylib.261.dylib
deleted file mode 100755
index d6199c5..0000000
Binary files a/raylib/dynamic/libraylib.261.dylib and /dev/null differ
diff --git a/raylib/dynamic/libraylib.dll b/raylib/dynamic/libraylib.dll
deleted file mode 100644
index fc73cd1..0000000
Binary files a/raylib/dynamic/libraylib.dll and /dev/null differ
diff --git a/raylib/dynamic/libraylib.dylib b/raylib/dynamic/libraylib.dylib
deleted file mode 100755
index d6199c5..0000000
Binary files a/raylib/dynamic/libraylib.dylib and /dev/null differ
diff --git a/raylib/dynamic/libraylib.so b/raylib/dynamic/libraylib.so
deleted file mode 120000
index b40e75c..0000000
--- a/raylib/dynamic/libraylib.so
+++ /dev/null
@@ -1 +0,0 @@
-libraylib.so.2.5.0
\ No newline at end of file
diff --git a/raylib/dynamic/libraylib.so.2 b/raylib/dynamic/libraylib.so.2
deleted file mode 120000
index b40e75c..0000000
--- a/raylib/dynamic/libraylib.so.2
+++ /dev/null
@@ -1 +0,0 @@
-libraylib.so.2.5.0
\ No newline at end of file
diff --git a/raylib/dynamic/libraylib.so.2.6.0 b/raylib/dynamic/libraylib.so.2.6.0
deleted file mode 100644
index a3852b2..0000000
Binary files a/raylib/dynamic/libraylib.so.2.6.0 and /dev/null differ
diff --git a/raylib/dynamic/raylib.dll b/raylib/dynamic/raylib.dll
deleted file mode 100644
index 7d142e7..0000000
Binary files a/raylib/dynamic/raylib.dll and /dev/null differ
diff --git a/raylib/enums.py b/raylib/enums.py
new file mode 100644
index 0000000..d33b987
--- /dev/null
+++ b/raylib/enums.py
@@ -0,0 +1,759 @@
+from enum import IntEnum
+
+class ConfigFlags(IntEnum):
+ """System/Window config flags."""
+ 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_WINDOW_MOUSE_PASSTHROUGH = 16384
+ FLAG_BORDERLESS_WINDOWED_MODE = 32768
+ FLAG_MSAA_4X_HINT = 32
+ FLAG_INTERLACED_HINT = 65536
+
+class TraceLogLevel(IntEnum):
+ """Trace log level."""
+ LOG_ALL = 0
+ LOG_TRACE = 1
+ LOG_DEBUG = 2
+ LOG_INFO = 3
+ LOG_WARNING = 4
+ LOG_ERROR = 5
+ LOG_FATAL = 6
+ LOG_NONE = 7
+
+class KeyboardKey(IntEnum):
+ """Keyboard keys (US keyboard layout)."""
+ 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_LEFT_BRACKET = 91
+ KEY_BACKSLASH = 92
+ KEY_RIGHT_BRACKET = 93
+ KEY_GRAVE = 96
+ 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_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_MENU = 5
+ KEY_VOLUME_UP = 24
+ KEY_VOLUME_DOWN = 25
+
+class MouseButton(IntEnum):
+ """Mouse buttons."""
+ MOUSE_BUTTON_LEFT = 0
+ MOUSE_BUTTON_RIGHT = 1
+ MOUSE_BUTTON_MIDDLE = 2
+ MOUSE_BUTTON_SIDE = 3
+ MOUSE_BUTTON_EXTRA = 4
+ MOUSE_BUTTON_FORWARD = 5
+ MOUSE_BUTTON_BACK = 6
+
+class MouseCursor(IntEnum):
+ """Mouse cursor."""
+ 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
+
+class GamepadButton(IntEnum):
+ """Gamepad buttons."""
+ 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
+
+class GamepadAxis(IntEnum):
+ """Gamepad axis."""
+ 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
+
+class MaterialMapIndex(IntEnum):
+ """Material map index."""
+ 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_CUBEMAP = 7
+ MATERIAL_MAP_IRRADIANCE = 8
+ MATERIAL_MAP_PREFILTER = 9
+ MATERIAL_MAP_BRDF = 10
+
+class ShaderLocationIndex(IntEnum):
+ """Shader location index."""
+ 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
+ SHADER_LOC_VERTEX_BONEIDS = 26
+ SHADER_LOC_VERTEX_BONEWEIGHTS = 27
+ SHADER_LOC_BONE_MATRICES = 28
+
+class ShaderUniformDataType(IntEnum):
+ """Shader uniform data type."""
+ 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
+
+class ShaderAttributeDataType(IntEnum):
+ """Shader attribute data types."""
+ SHADER_ATTRIB_FLOAT = 0
+ SHADER_ATTRIB_VEC2 = 1
+ SHADER_ATTRIB_VEC3 = 2
+ SHADER_ATTRIB_VEC4 = 3
+
+class PixelFormat(IntEnum):
+ """Pixel formats."""
+ 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_UNCOMPRESSED_R8G8B8A8 = 7
+ PIXELFORMAT_UNCOMPRESSED_R32 = 8
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10
+ PIXELFORMAT_UNCOMPRESSED_R16 = 11
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16 = 12
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 = 13
+ PIXELFORMAT_COMPRESSED_DXT1_RGB = 14
+ PIXELFORMAT_COMPRESSED_DXT1_RGBA = 15
+ PIXELFORMAT_COMPRESSED_DXT3_RGBA = 16
+ PIXELFORMAT_COMPRESSED_DXT5_RGBA = 17
+ PIXELFORMAT_COMPRESSED_ETC1_RGB = 18
+ PIXELFORMAT_COMPRESSED_ETC2_RGB = 19
+ PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 20
+ PIXELFORMAT_COMPRESSED_PVRT_RGB = 21
+ PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22
+ PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 23
+ PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 24
+
+class TextureFilter(IntEnum):
+ """Texture parameters: filter mode."""
+ 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
+
+class TextureWrap(IntEnum):
+ """Texture parameters: wrap mode."""
+ TEXTURE_WRAP_REPEAT = 0
+ TEXTURE_WRAP_CLAMP = 1
+ TEXTURE_WRAP_MIRROR_REPEAT = 2
+ TEXTURE_WRAP_MIRROR_CLAMP = 3
+
+class CubemapLayout(IntEnum):
+ """Cubemap layouts."""
+ 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
+
+class FontType(IntEnum):
+ """Font type, defines generation method."""
+ FONT_DEFAULT = 0
+ FONT_BITMAP = 1
+ FONT_SDF = 2
+
+class BlendMode(IntEnum):
+ """Color blending modes (pre-defined)."""
+ BLEND_ALPHA = 0
+ BLEND_ADDITIVE = 1
+ BLEND_MULTIPLIED = 2
+ BLEND_ADD_COLORS = 3
+ BLEND_SUBTRACT_COLORS = 4
+ BLEND_ALPHA_PREMULTIPLY = 5
+ BLEND_CUSTOM = 6
+ BLEND_CUSTOM_SEPARATE = 7
+
+class Gesture(IntEnum):
+ """Gesture."""
+ 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
+
+class CameraMode(IntEnum):
+ """Camera system modes."""
+ CAMERA_CUSTOM = 0
+ CAMERA_FREE = 1
+ CAMERA_ORBITAL = 2
+ CAMERA_FIRST_PERSON = 3
+ CAMERA_THIRD_PERSON = 4
+
+class CameraProjection(IntEnum):
+ """Camera projection."""
+ CAMERA_PERSPECTIVE = 0
+ CAMERA_ORTHOGRAPHIC = 1
+
+class NPatchLayout(IntEnum):
+ """N-patch layout."""
+ NPATCH_NINE_PATCH = 0
+ NPATCH_THREE_PATCH_VERTICAL = 1
+ NPATCH_THREE_PATCH_HORIZONTAL = 2
+
+class GuiState(IntEnum):
+ """Gui control state."""
+ STATE_NORMAL = 0
+ STATE_FOCUSED = 1
+ STATE_PRESSED = 2
+ STATE_DISABLED = 3
+
+class GuiTextAlignment(IntEnum):
+ """Gui control text alignment."""
+ TEXT_ALIGN_LEFT = 0
+ TEXT_ALIGN_CENTER = 1
+ TEXT_ALIGN_RIGHT = 2
+
+class GuiTextAlignmentVertical(IntEnum):
+ """Gui control text alignment vertical."""
+ TEXT_ALIGN_TOP = 0
+ TEXT_ALIGN_MIDDLE = 1
+ TEXT_ALIGN_BOTTOM = 2
+
+class GuiTextWrapMode(IntEnum):
+ """Gui control text wrap mode."""
+ TEXT_WRAP_NONE = 0
+ TEXT_WRAP_CHAR = 1
+ TEXT_WRAP_WORD = 2
+
+class GuiControl(IntEnum):
+ """Gui controls."""
+ 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
+
+class GuiControlProperty(IntEnum):
+ """Gui base properties for every control."""
+ 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
+
+class GuiDefaultProperty(IntEnum):
+ """DEFAULT extended properties."""
+ TEXT_SIZE = 16
+ TEXT_SPACING = 17
+ LINE_COLOR = 18
+ BACKGROUND_COLOR = 19
+ TEXT_LINE_SPACING = 20
+ TEXT_ALIGNMENT_VERTICAL = 21
+ TEXT_WRAP_MODE = 22
+
+class GuiToggleProperty(IntEnum):
+ """Toggle/ToggleGroup."""
+ GROUP_PADDING = 16
+
+class GuiSliderProperty(IntEnum):
+ """Slider/SliderBar."""
+ SLIDER_WIDTH = 16
+ SLIDER_PADDING = 17
+
+class GuiProgressBarProperty(IntEnum):
+ """ProgressBar."""
+ PROGRESS_PADDING = 16
+
+class GuiScrollBarProperty(IntEnum):
+ """ScrollBar."""
+ ARROWS_SIZE = 16
+ ARROWS_VISIBLE = 17
+ SCROLL_SLIDER_PADDING = 18
+ SCROLL_SLIDER_SIZE = 19
+ SCROLL_PADDING = 20
+ SCROLL_SPEED = 21
+
+class GuiCheckBoxProperty(IntEnum):
+ """CheckBox."""
+ CHECK_PADDING = 16
+
+class GuiComboBoxProperty(IntEnum):
+ """ComboBox."""
+ COMBO_BUTTON_WIDTH = 16
+ COMBO_BUTTON_SPACING = 17
+
+class GuiDropdownBoxProperty(IntEnum):
+ """DropdownBox."""
+ ARROW_PADDING = 16
+ DROPDOWN_ITEMS_SPACING = 17
+ DROPDOWN_ARROW_HIDDEN = 18
+ DROPDOWN_ROLL_UP = 19
+
+class GuiTextBoxProperty(IntEnum):
+ """TextBox/TextBoxMulti/ValueBox/Spinner."""
+ TEXT_READONLY = 16
+
+class GuiSpinnerProperty(IntEnum):
+ """Spinner."""
+ SPIN_BUTTON_WIDTH = 16
+ SPIN_BUTTON_SPACING = 17
+
+class GuiListViewProperty(IntEnum):
+ """ListView."""
+ LIST_ITEMS_HEIGHT = 16
+ LIST_ITEMS_SPACING = 17
+ SCROLLBAR_WIDTH = 18
+ SCROLLBAR_SIDE = 19
+ LIST_ITEMS_BORDER_WIDTH = 20
+
+class GuiColorPickerProperty(IntEnum):
+ """ColorPicker."""
+ COLOR_SELECTOR_SIZE = 16
+ HUEBAR_WIDTH = 17
+ HUEBAR_PADDING = 18
+ HUEBAR_SELECTOR_HEIGHT = 19
+ HUEBAR_SELECTOR_OVERFLOW = 20
+
+class GuiIconName(IntEnum):
+ """."""
+ ICON_NONE = 0
+ ICON_FOLDER_FILE_OPEN = 1
+ ICON_FILE_SAVE_CLASSIC = 2
+ ICON_FOLDER_OPEN = 3
+ ICON_FOLDER_SAVE = 4
+ ICON_FILE_OPEN = 5
+ ICON_FILE_SAVE = 6
+ ICON_FILE_EXPORT = 7
+ ICON_FILE_ADD = 8
+ ICON_FILE_DELETE = 9
+ ICON_FILETYPE_TEXT = 10
+ ICON_FILETYPE_AUDIO = 11
+ ICON_FILETYPE_IMAGE = 12
+ ICON_FILETYPE_PLAY = 13
+ ICON_FILETYPE_VIDEO = 14
+ ICON_FILETYPE_INFO = 15
+ ICON_FILE_COPY = 16
+ ICON_FILE_CUT = 17
+ ICON_FILE_PASTE = 18
+ ICON_CURSOR_HAND = 19
+ ICON_CURSOR_POINTER = 20
+ ICON_CURSOR_CLASSIC = 21
+ ICON_PENCIL = 22
+ ICON_PENCIL_BIG = 23
+ ICON_BRUSH_CLASSIC = 24
+ ICON_BRUSH_PAINTER = 25
+ ICON_WATER_DROP = 26
+ ICON_COLOR_PICKER = 27
+ ICON_RUBBER = 28
+ ICON_COLOR_BUCKET = 29
+ ICON_TEXT_T = 30
+ ICON_TEXT_A = 31
+ ICON_SCALE = 32
+ ICON_RESIZE = 33
+ ICON_FILTER_POINT = 34
+ ICON_FILTER_BILINEAR = 35
+ ICON_CROP = 36
+ ICON_CROP_ALPHA = 37
+ ICON_SQUARE_TOGGLE = 38
+ ICON_SYMMETRY = 39
+ ICON_SYMMETRY_HORIZONTAL = 40
+ ICON_SYMMETRY_VERTICAL = 41
+ ICON_LENS = 42
+ ICON_LENS_BIG = 43
+ ICON_EYE_ON = 44
+ ICON_EYE_OFF = 45
+ ICON_FILTER_TOP = 46
+ ICON_FILTER = 47
+ ICON_TARGET_POINT = 48
+ ICON_TARGET_SMALL = 49
+ ICON_TARGET_BIG = 50
+ ICON_TARGET_MOVE = 51
+ ICON_CURSOR_MOVE = 52
+ ICON_CURSOR_SCALE = 53
+ ICON_CURSOR_SCALE_RIGHT = 54
+ ICON_CURSOR_SCALE_LEFT = 55
+ ICON_UNDO = 56
+ ICON_REDO = 57
+ ICON_REREDO = 58
+ ICON_MUTATE = 59
+ ICON_ROTATE = 60
+ ICON_REPEAT = 61
+ ICON_SHUFFLE = 62
+ ICON_EMPTYBOX = 63
+ ICON_TARGET = 64
+ ICON_TARGET_SMALL_FILL = 65
+ ICON_TARGET_BIG_FILL = 66
+ ICON_TARGET_MOVE_FILL = 67
+ ICON_CURSOR_MOVE_FILL = 68
+ ICON_CURSOR_SCALE_FILL = 69
+ ICON_CURSOR_SCALE_RIGHT_FILL = 70
+ ICON_CURSOR_SCALE_LEFT_FILL = 71
+ ICON_UNDO_FILL = 72
+ ICON_REDO_FILL = 73
+ ICON_REREDO_FILL = 74
+ ICON_MUTATE_FILL = 75
+ ICON_ROTATE_FILL = 76
+ ICON_REPEAT_FILL = 77
+ ICON_SHUFFLE_FILL = 78
+ ICON_EMPTYBOX_SMALL = 79
+ ICON_BOX = 80
+ ICON_BOX_TOP = 81
+ ICON_BOX_TOP_RIGHT = 82
+ ICON_BOX_RIGHT = 83
+ ICON_BOX_BOTTOM_RIGHT = 84
+ ICON_BOX_BOTTOM = 85
+ ICON_BOX_BOTTOM_LEFT = 86
+ ICON_BOX_LEFT = 87
+ ICON_BOX_TOP_LEFT = 88
+ ICON_BOX_CENTER = 89
+ ICON_BOX_CIRCLE_MASK = 90
+ ICON_POT = 91
+ ICON_ALPHA_MULTIPLY = 92
+ ICON_ALPHA_CLEAR = 93
+ ICON_DITHERING = 94
+ ICON_MIPMAPS = 95
+ ICON_BOX_GRID = 96
+ ICON_GRID = 97
+ ICON_BOX_CORNERS_SMALL = 98
+ ICON_BOX_CORNERS_BIG = 99
+ ICON_FOUR_BOXES = 100
+ ICON_GRID_FILL = 101
+ ICON_BOX_MULTISIZE = 102
+ ICON_ZOOM_SMALL = 103
+ ICON_ZOOM_MEDIUM = 104
+ ICON_ZOOM_BIG = 105
+ ICON_ZOOM_ALL = 106
+ ICON_ZOOM_CENTER = 107
+ ICON_BOX_DOTS_SMALL = 108
+ ICON_BOX_DOTS_BIG = 109
+ ICON_BOX_CONCENTRIC = 110
+ ICON_BOX_GRID_BIG = 111
+ ICON_OK_TICK = 112
+ ICON_CROSS = 113
+ ICON_ARROW_LEFT = 114
+ ICON_ARROW_RIGHT = 115
+ ICON_ARROW_DOWN = 116
+ ICON_ARROW_UP = 117
+ ICON_ARROW_LEFT_FILL = 118
+ ICON_ARROW_RIGHT_FILL = 119
+ ICON_ARROW_DOWN_FILL = 120
+ ICON_ARROW_UP_FILL = 121
+ ICON_AUDIO = 122
+ ICON_FX = 123
+ ICON_WAVE = 124
+ ICON_WAVE_SINUS = 125
+ ICON_WAVE_SQUARE = 126
+ ICON_WAVE_TRIANGULAR = 127
+ ICON_CROSS_SMALL = 128
+ ICON_PLAYER_PREVIOUS = 129
+ ICON_PLAYER_PLAY_BACK = 130
+ ICON_PLAYER_PLAY = 131
+ ICON_PLAYER_PAUSE = 132
+ ICON_PLAYER_STOP = 133
+ ICON_PLAYER_NEXT = 134
+ ICON_PLAYER_RECORD = 135
+ ICON_MAGNET = 136
+ ICON_LOCK_CLOSE = 137
+ ICON_LOCK_OPEN = 138
+ ICON_CLOCK = 139
+ ICON_TOOLS = 140
+ ICON_GEAR = 141
+ ICON_GEAR_BIG = 142
+ ICON_BIN = 143
+ ICON_HAND_POINTER = 144
+ ICON_LASER = 145
+ ICON_COIN = 146
+ ICON_EXPLOSION = 147
+ ICON_1UP = 148
+ ICON_PLAYER = 149
+ ICON_PLAYER_JUMP = 150
+ ICON_KEY = 151
+ ICON_DEMON = 152
+ ICON_TEXT_POPUP = 153
+ ICON_GEAR_EX = 154
+ ICON_CRACK = 155
+ ICON_CRACK_POINTS = 156
+ ICON_STAR = 157
+ ICON_DOOR = 158
+ ICON_EXIT = 159
+ ICON_MODE_2D = 160
+ ICON_MODE_3D = 161
+ ICON_CUBE = 162
+ ICON_CUBE_FACE_TOP = 163
+ ICON_CUBE_FACE_LEFT = 164
+ ICON_CUBE_FACE_FRONT = 165
+ ICON_CUBE_FACE_BOTTOM = 166
+ ICON_CUBE_FACE_RIGHT = 167
+ ICON_CUBE_FACE_BACK = 168
+ ICON_CAMERA = 169
+ ICON_SPECIAL = 170
+ ICON_LINK_NET = 171
+ ICON_LINK_BOXES = 172
+ ICON_LINK_MULTI = 173
+ ICON_LINK = 174
+ ICON_LINK_BROKE = 175
+ ICON_TEXT_NOTES = 176
+ ICON_NOTEBOOK = 177
+ ICON_SUITCASE = 178
+ ICON_SUITCASE_ZIP = 179
+ ICON_MAILBOX = 180
+ ICON_MONITOR = 181
+ ICON_PRINTER = 182
+ ICON_PHOTO_CAMERA = 183
+ ICON_PHOTO_CAMERA_FLASH = 184
+ ICON_HOUSE = 185
+ ICON_HEART = 186
+ ICON_CORNER = 187
+ ICON_VERTICAL_BARS = 188
+ ICON_VERTICAL_BARS_FILL = 189
+ ICON_LIFE_BARS = 190
+ ICON_INFO = 191
+ ICON_CROSSLINE = 192
+ ICON_HELP = 193
+ ICON_FILETYPE_ALPHA = 194
+ ICON_FILETYPE_HOME = 195
+ ICON_LAYERS_VISIBLE = 196
+ ICON_LAYERS = 197
+ ICON_WINDOW = 198
+ ICON_HIDPI = 199
+ ICON_FILETYPE_BINARY = 200
+ ICON_HEX = 201
+ ICON_SHIELD = 202
+ ICON_FILE_NEW = 203
+ ICON_FOLDER_ADD = 204
+ ICON_ALARM = 205
+ ICON_CPU = 206
+ ICON_ROM = 207
+ ICON_STEP_OVER = 208
+ ICON_STEP_INTO = 209
+ ICON_STEP_OUT = 210
+ ICON_RESTART = 211
+ ICON_BREAKPOINT_ON = 212
+ ICON_BREAKPOINT_OFF = 213
+ ICON_BURGER_MENU = 214
+ ICON_CASE_SENSITIVE = 215
+ ICON_REG_EXP = 216
+ ICON_FOLDER = 217
+ ICON_FILE = 218
+ ICON_SAND_TIMER = 219
+ ICON_WARNING = 220
+ ICON_HELP_BOX = 221
+ ICON_INFO_BOX = 222
+ ICON_PRIORITY = 223
+ ICON_LAYERS_ISO = 224
+ ICON_LAYERS2 = 225
+ ICON_MLAYERS = 226
+ ICON_MAPS = 227
+ ICON_HOT = 228
+ ICON_229 = 229
+ ICON_230 = 230
+ ICON_231 = 231
+ ICON_232 = 232
+ ICON_233 = 233
+ ICON_234 = 234
+ ICON_235 = 235
+ ICON_236 = 236
+ ICON_237 = 237
+ ICON_238 = 238
+ ICON_239 = 239
+ ICON_240 = 240
+ ICON_241 = 241
+ ICON_242 = 242
+ ICON_243 = 243
+ ICON_244 = 244
+ ICON_245 = 245
+ ICON_246 = 246
+ ICON_247 = 247
+ ICON_248 = 248
+ ICON_249 = 249
+ ICON_250 = 250
+ ICON_251 = 251
+ ICON_252 = 252
+ ICON_253 = 253
+ ICON_254 = 254
+ ICON_255 = 255
+
diff --git a/raylib/glfw3.h.modified b/raylib/glfw3.h.modified
new file mode 100644
index 0000000..08a5669
--- /dev/null
+++ b/raylib/glfw3.h.modified
@@ -0,0 +1,5618 @@
+/*************************************************************************
+ * GLFW 3.4 - www.glfw.org
+ * A library for OpenGL, window and input
+ *------------------------------------------------------------------------
+ * Copyright (c) 2002-2006 Marcus Geelnard
+ * Copyright (c) 2006-2019 Camilla Löwy
+ *
+ * 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.
+ *
+ *************************************************************************/
+/*************************************************************************
+ * Doxygen documentation
+ *************************************************************************/
+/*! @file glfw3.h
+ * @brief The header of the GLFW 3 API.
+ *
+ * This is the header file of the GLFW 3 API. It defines all its types and
+ * declares all its functions.
+ *
+ * For more information about how to use this file, see @ref build_include.
+ */
+/*! @defgroup context Context reference
+ * @brief Functions and types related to OpenGL and OpenGL ES contexts.
+ *
+ * This is the reference documentation for OpenGL and OpenGL ES context related
+ * functions. For more task-oriented information, see the @ref context_guide.
+ */
+/*! @defgroup vulkan Vulkan support reference
+ * @brief Functions and types related to Vulkan.
+ *
+ * This is the reference documentation for Vulkan related functions and types.
+ * For more task-oriented information, see the @ref vulkan_guide.
+ */
+/*! @defgroup init Initialization, version and error reference
+ * @brief Functions and types related to initialization and error handling.
+ *
+ * This is the reference documentation for initialization and termination of
+ * the library, version management and error handling. For more task-oriented
+ * information, see the @ref intro_guide.
+ */
+/*! @defgroup input Input reference
+ * @brief Functions and types related to input handling.
+ *
+ * This is the reference documentation for input related functions and types.
+ * For more task-oriented information, see the @ref input_guide.
+ */
+/*! @defgroup monitor Monitor reference
+ * @brief Functions and types related to monitors.
+ *
+ * This is the reference documentation for monitor related functions and types.
+ * For more task-oriented information, see the @ref monitor_guide.
+ */
+/*! @defgroup window Window reference
+ * @brief Functions and types related to windows.
+ *
+ * This is the reference documentation for window related functions and types,
+ * including creation, deletion and event polling. For more task-oriented
+ * information, see the @ref window_guide.
+ */
+/*************************************************************************
+ * Compiler- and platform-specific preprocessor work
+ *************************************************************************/
+/* If we are we on Windows, we want a single define for it.
+ */
+/* Include because most Windows GLU headers need wchar_t and
+ * the macOS OpenGL header blocks the definition of ptrdiff_t by glext.h.
+ * Include it unconditionally to avoid surprising side-effects.
+ */
+/* Include because it is needed by Vulkan and related functions.
+ * Include it unconditionally to avoid surprising side-effects.
+ */
+/* The Vulkan header may have indirectly included windows.h (because of
+ * VK_USE_PLATFORM_WIN32_KHR) so we offer our replacement symbols after it.
+ */
+/* It is customary to use APIENTRY for OpenGL function pointer declarations on
+ * all platforms. Additionally, the Windows OpenGL header needs APIENTRY.
+ */
+/* Some Windows OpenGL headers need this.
+ */
+/* Some Windows GLU headers need this.
+ */
+/* Include the chosen OpenGL or OpenGL ES headers.
+ */
+/* GLFWAPI is used to declare public API functions for export
+ * from the DLL / shared library / dynamic library.
+ */
+/*************************************************************************
+ * GLFW API tokens
+ *************************************************************************/
+/*! @name GLFW version macros
+ * @{ */
+/*! @brief The major version number of the GLFW header.
+ *
+ * The major version number of the GLFW header. This is incremented when the
+ * API is changed in non-compatible ways.
+ * @ingroup init
+ */
+/*! @brief The minor version number of the GLFW header.
+ *
+ * The minor version number of the GLFW header. This is incremented when
+ * features are added to the API but it remains backward-compatible.
+ * @ingroup init
+ */
+/*! @brief The revision number of the GLFW header.
+ *
+ * The revision number of the GLFW header. This is incremented when a bug fix
+ * release is made that does not contain any API changes.
+ * @ingroup init
+ */
+/*! @} */
+/*! @brief One.
+ *
+ * This is only semantic sugar for the number 1. You can instead use `1` or
+ * `true` or `_True` or `GL_TRUE` or `VK_TRUE` or anything else that is equal
+ * to one.
+ *
+ * @ingroup init
+ */
+/*! @brief Zero.
+ *
+ * This is only semantic sugar for the number 0. You can instead use `0` or
+ * `false` or `_False` or `GL_FALSE` or `VK_FALSE` or anything else that is
+ * equal to zero.
+ *
+ * @ingroup init
+ */
+/*! @name Key and button actions
+ * @{ */
+/*! @brief The key or mouse button was released.
+ *
+ * The key or mouse button was released.
+ *
+ * @ingroup input
+ */
+/*! @brief The key or mouse button was pressed.
+ *
+ * The key or mouse button was pressed.
+ *
+ * @ingroup input
+ */
+/*! @brief The key was held down until it repeated.
+ *
+ * The key was held down until it repeated.
+ *
+ * @ingroup input
+ */
+/*! @} */
+/*! @defgroup hat_state Joystick hat states
+ * @brief Joystick hat states.
+ *
+ * See [joystick hat input](@ref joystick_hat) for how these are used.
+ *
+ * @ingroup input
+ * @{ */
+/*! @ingroup input
+ */
+/*! @} */
+/*! @defgroup keys Keyboard key tokens
+ * @brief Keyboard key tokens.
+ *
+ * See [key input](@ref input_key) for how these are used.
+ *
+ * These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60),
+ * but re-arranged to map to 7-bit ASCII for printable keys (function keys are
+ * put in the 256+ range).
+ *
+ * The naming of the key codes follow these rules:
+ * - The US keyboard layout is used
+ * - Names of printable alphanumeric characters are used (e.g. "A", "R",
+ * "3", etc.)
+ * - For non-alphanumeric characters, Unicode:ish names are used (e.g.
+ * "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not
+ * correspond to the Unicode standard (usually for brevity)
+ * - Keys that lack a clear US mapping are named "WORLD_x"
+ * - For non-printable keys, custom names are used (e.g. "F4",
+ * "BACKSPACE", etc.)
+ *
+ * @ingroup input
+ * @{
+ */
+/* Printable keys */
+/* Function keys */
+/*! @} */
+/*! @defgroup mods Modifier key flags
+ * @brief Modifier key flags.
+ *
+ * See [key input](@ref input_key) for how these are used.
+ *
+ * @ingroup input
+ * @{ */
+/*! @brief If this bit is set one or more Shift keys were held down.
+ *
+ * If this bit is set one or more Shift keys were held down.
+ */
+/*! @brief If this bit is set one or more Control keys were held down.
+ *
+ * If this bit is set one or more Control keys were held down.
+ */
+/*! @brief If this bit is set one or more Alt keys were held down.
+ *
+ * If this bit is set one or more Alt keys were held down.
+ */
+/*! @brief If this bit is set one or more Super keys were held down.
+ *
+ * If this bit is set one or more Super keys were held down.
+ */
+/*! @brief If this bit is set the Caps Lock key is enabled.
+ *
+ * If this bit is set the Caps Lock key is enabled and the @ref
+ * GLFW_LOCK_KEY_MODS input mode is set.
+ */
+/*! @brief If this bit is set the Num Lock key is enabled.
+ *
+ * If this bit is set the Num Lock key is enabled and the @ref
+ * GLFW_LOCK_KEY_MODS input mode is set.
+ */
+/*! @} */
+/*! @defgroup buttons Mouse buttons
+ * @brief Mouse button IDs.
+ *
+ * See [mouse button input](@ref input_mouse_button) for how these are used.
+ *
+ * @ingroup input
+ * @{ */
+/*! @} */
+/*! @defgroup joysticks Joysticks
+ * @brief Joystick IDs.
+ *
+ * See [joystick input](@ref joystick) for how these are used.
+ *
+ * @ingroup input
+ * @{ */
+/*! @} */
+/*! @defgroup gamepad_buttons Gamepad buttons
+ * @brief Gamepad buttons.
+ *
+ * See @ref gamepad for how these are used.
+ *
+ * @ingroup input
+ * @{ */
+/*! @} */
+/*! @defgroup gamepad_axes Gamepad axes
+ * @brief Gamepad axes.
+ *
+ * See @ref gamepad for how these are used.
+ *
+ * @ingroup input
+ * @{ */
+/*! @} */
+/*! @defgroup errors Error codes
+ * @brief Error codes.
+ *
+ * See [error handling](@ref error_handling) for how these are used.
+ *
+ * @ingroup init
+ * @{ */
+/*! @brief No error has occurred.
+ *
+ * No error has occurred.
+ *
+ * @analysis Yay.
+ */
+/*! @brief GLFW has not been initialized.
+ *
+ * This occurs if a GLFW function was called that must not be called unless the
+ * library is [initialized](@ref intro_init).
+ *
+ * @analysis Application programmer error. Initialize GLFW before calling any
+ * function that requires initialization.
+ */
+/*! @brief No context is current for this thread.
+ *
+ * This occurs if a GLFW function was called that needs and operates on the
+ * current OpenGL or OpenGL ES context but no context is current on the calling
+ * thread. One such function is @ref glfwSwapInterval.
+ *
+ * @analysis Application programmer error. Ensure a context is current before
+ * calling functions that require a current context.
+ */
+/*! @brief One of the arguments to the function was an invalid enum value.
+ *
+ * One of the arguments to the function was an invalid enum value, for example
+ * requesting @ref GLFW_RED_BITS with @ref glfwGetWindowAttrib.
+ *
+ * @analysis Application programmer error. Fix the offending call.
+ */
+/*! @brief One of the arguments to the function was an invalid value.
+ *
+ * One of the arguments to the function was an invalid value, for example
+ * requesting a non-existent OpenGL or OpenGL ES version like 2.7.
+ *
+ * Requesting a valid but unavailable OpenGL or OpenGL ES version will instead
+ * result in a @ref GLFW_VERSION_UNAVAILABLE error.
+ *
+ * @analysis Application programmer error. Fix the offending call.
+ */
+/*! @brief A memory allocation failed.
+ *
+ * A memory allocation failed.
+ *
+ * @analysis A bug in GLFW or the underlying operating system. Report the bug
+ * to our [issue tracker](https://github.com/glfw/glfw/issues).
+ */
+/*! @brief GLFW could not find support for the requested API on the system.
+ *
+ * GLFW could not find support for the requested API on the system.
+ *
+ * @analysis The installed graphics driver does not support the requested
+ * API, or does not support it via the chosen context creation API.
+ * Below are a few examples.
+ *
+ * @par
+ * Some pre-installed Windows graphics drivers do not support OpenGL. AMD only
+ * supports OpenGL ES via EGL, while Nvidia and Intel only support it via
+ * a WGL or GLX extension. macOS does not provide OpenGL ES at all. The Mesa
+ * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary
+ * driver. Older graphics drivers do not support Vulkan.
+ */
+/*! @brief The requested OpenGL or OpenGL ES version is not available.
+ *
+ * The requested OpenGL or OpenGL ES version (including any requested context
+ * or framebuffer hints) is not available on this machine.
+ *
+ * @analysis The machine does not support your requirements. If your
+ * application is sufficiently flexible, downgrade your requirements and try
+ * again. Otherwise, inform the user that their machine does not match your
+ * requirements.
+ *
+ * @par
+ * Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0
+ * comes out before the 4.x series gets that far, also fail with this error and
+ * not @ref GLFW_INVALID_VALUE, because GLFW cannot know what future versions
+ * will exist.
+ */
+/*! @brief A platform-specific error occurred that does not match any of the
+ * more specific categories.
+ *
+ * A platform-specific error occurred that does not match any of the more
+ * specific categories.
+ *
+ * @analysis A bug or configuration error in GLFW, the underlying operating
+ * system or its drivers, or a lack of required resources. Report the issue to
+ * our [issue tracker](https://github.com/glfw/glfw/issues).
+ */
+/*! @brief The requested format is not supported or available.
+ *
+ * If emitted during window creation, the requested pixel format is not
+ * supported.
+ *
+ * If emitted when querying the clipboard, the contents of the clipboard could
+ * not be converted to the requested format.
+ *
+ * @analysis If emitted during window creation, one or more
+ * [hard constraints](@ref window_hints_hard) did not match any of the
+ * available pixel formats. If your application is sufficiently flexible,
+ * downgrade your requirements and try again. Otherwise, inform the user that
+ * their machine does not match your requirements.
+ *
+ * @par
+ * If emitted when querying the clipboard, ignore the error or report it to
+ * the user, as appropriate.
+ */
+/*! @brief The specified window does not have an OpenGL or OpenGL ES context.
+ *
+ * A window that does not have an OpenGL or OpenGL ES context was passed to
+ * a function that requires it to have one.
+ *
+ * @analysis Application programmer error. Fix the offending call.
+ */
+/*! @brief The specified cursor shape is not available.
+ *
+ * The specified standard cursor shape is not available, either because the
+ * current platform cursor theme does not provide it or because it is not
+ * available on the platform.
+ *
+ * @analysis Platform or system settings limitation. Pick another
+ * [standard cursor shape](@ref shapes) or create a
+ * [custom cursor](@ref cursor_custom).
+ */
+/*! @brief The requested feature is not provided by the platform.
+ *
+ * The requested feature is not provided by the platform, so GLFW is unable to
+ * implement it. The documentation for each function notes if it could emit
+ * this error.
+ *
+ * @analysis Platform or platform version limitation. The error can be ignored
+ * unless the feature is critical to the application.
+ *
+ * @par
+ * A function call that emits this error has no effect other than the error and
+ * updating any existing out parameters.
+ */
+/*! @brief The requested feature is not implemented for the platform.
+ *
+ * The requested feature has not yet been implemented in GLFW for this platform.
+ *
+ * @analysis An incomplete implementation of GLFW for this platform, hopefully
+ * fixed in a future release. The error can be ignored unless the feature is
+ * critical to the application.
+ *
+ * @par
+ * A function call that emits this error has no effect other than the error and
+ * updating any existing out parameters.
+ */
+/*! @brief Platform unavailable or no matching platform was found.
+ *
+ * If emitted during initialization, no matching platform was found. If the @ref
+ * GLFW_PLATFORM init hint was set to `GLFW_ANY_PLATFORM`, GLFW could not detect any of
+ * the platforms supported by this library binary, except for the Null platform. If the
+ * init hint was set to a specific platform, it is either not supported by this library
+ * binary or GLFW was not able to detect it.
+ *
+ * If emitted by a native access function, GLFW was initialized for a different platform
+ * than the function is for.
+ *
+ * @analysis Failure to detect any platform usually only happens on non-macOS Unix
+ * systems, either when no window system is running or the program was run from
+ * a terminal that does not have the necessary environment variables. Fall back to
+ * a different platform if possible or notify the user that no usable platform was
+ * detected.
+ *
+ * Failure to detect a specific platform may have the same cause as above or be because
+ * support for that platform was not compiled in. Call @ref glfwPlatformSupported to
+ * check whether a specific platform is supported by a library binary.
+ */
+/*! @} */
+/*! @addtogroup window
+ * @{ */
+/*! @brief Input focus window hint and attribute
+ *
+ * Input focus [window hint](@ref GLFW_FOCUSED_hint) or
+ * [window attribute](@ref GLFW_FOCUSED_attrib).
+ */
+/*! @brief Window iconification window attribute
+ *
+ * Window iconification [window attribute](@ref GLFW_ICONIFIED_attrib).
+ */
+/*! @brief Window resize-ability window hint and attribute
+ *
+ * Window resize-ability [window hint](@ref GLFW_RESIZABLE_hint) and
+ * [window attribute](@ref GLFW_RESIZABLE_attrib).
+ */
+/*! @brief Window visibility window hint and attribute
+ *
+ * Window visibility [window hint](@ref GLFW_VISIBLE_hint) and
+ * [window attribute](@ref GLFW_VISIBLE_attrib).
+ */
+/*! @brief Window decoration window hint and attribute
+ *
+ * Window decoration [window hint](@ref GLFW_DECORATED_hint) and
+ * [window attribute](@ref GLFW_DECORATED_attrib).
+ */
+/*! @brief Window auto-iconification window hint and attribute
+ *
+ * Window auto-iconification [window hint](@ref GLFW_AUTO_ICONIFY_hint) and
+ * [window attribute](@ref GLFW_AUTO_ICONIFY_attrib).
+ */
+/*! @brief Window decoration window hint and attribute
+ *
+ * Window decoration [window hint](@ref GLFW_FLOATING_hint) and
+ * [window attribute](@ref GLFW_FLOATING_attrib).
+ */
+/*! @brief Window maximization window hint and attribute
+ *
+ * Window maximization [window hint](@ref GLFW_MAXIMIZED_hint) and
+ * [window attribute](@ref GLFW_MAXIMIZED_attrib).
+ */
+/*! @brief Cursor centering window hint
+ *
+ * Cursor centering [window hint](@ref GLFW_CENTER_CURSOR_hint).
+ */
+/*! @brief Window framebuffer transparency hint and attribute
+ *
+ * Window framebuffer transparency
+ * [window hint](@ref GLFW_TRANSPARENT_FRAMEBUFFER_hint) and
+ * [window attribute](@ref GLFW_TRANSPARENT_FRAMEBUFFER_attrib).
+ */
+/*! @brief Mouse cursor hover window attribute.
+ *
+ * Mouse cursor hover [window attribute](@ref GLFW_HOVERED_attrib).
+ */
+/*! @brief Input focus on calling show window hint and attribute
+ *
+ * Input focus [window hint](@ref GLFW_FOCUS_ON_SHOW_hint) or
+ * [window attribute](@ref GLFW_FOCUS_ON_SHOW_attrib).
+ */
+/*! @brief Mouse input transparency window hint and attribute
+ *
+ * Mouse input transparency [window hint](@ref GLFW_MOUSE_PASSTHROUGH_hint) or
+ * [window attribute](@ref GLFW_MOUSE_PASSTHROUGH_attrib).
+ */
+/*! @brief Initial position x-coordinate window hint.
+ *
+ * Initial position x-coordinate [window hint](@ref GLFW_POSITION_X).
+ */
+/*! @brief Initial position y-coordinate window hint.
+ *
+ * Initial position y-coordinate [window hint](@ref GLFW_POSITION_Y).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_RED_BITS).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_GREEN_BITS).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_BLUE_BITS).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_ALPHA_BITS).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_DEPTH_BITS).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_STENCIL_BITS).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_ACCUM_RED_BITS).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_ACCUM_GREEN_BITS).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_ACCUM_BLUE_BITS).
+ */
+/*! @brief Framebuffer bit depth hint.
+ *
+ * Framebuffer bit depth [hint](@ref GLFW_ACCUM_ALPHA_BITS).
+ */
+/*! @brief Framebuffer auxiliary buffer hint.
+ *
+ * Framebuffer auxiliary buffer [hint](@ref GLFW_AUX_BUFFERS).
+ */
+/*! @brief OpenGL stereoscopic rendering hint.
+ *
+ * OpenGL stereoscopic rendering [hint](@ref GLFW_STEREO).
+ */
+/*! @brief Framebuffer MSAA samples hint.
+ *
+ * Framebuffer MSAA samples [hint](@ref GLFW_SAMPLES).
+ */
+/*! @brief Framebuffer sRGB hint.
+ *
+ * Framebuffer sRGB [hint](@ref GLFW_SRGB_CAPABLE).
+ */
+/*! @brief Monitor refresh rate hint.
+ *
+ * Monitor refresh rate [hint](@ref GLFW_REFRESH_RATE).
+ */
+/*! @brief Framebuffer double buffering hint and attribute.
+ *
+ * Framebuffer double buffering [hint](@ref GLFW_DOUBLEBUFFER_hint) and
+ * [attribute](@ref GLFW_DOUBLEBUFFER_attrib).
+ */
+/*! @brief Context client API hint and attribute.
+ *
+ * Context client API [hint](@ref GLFW_CLIENT_API_hint) and
+ * [attribute](@ref GLFW_CLIENT_API_attrib).
+ */
+/*! @brief Context client API major version hint and attribute.
+ *
+ * Context client API major version [hint](@ref GLFW_CONTEXT_VERSION_MAJOR_hint)
+ * and [attribute](@ref GLFW_CONTEXT_VERSION_MAJOR_attrib).
+ */
+/*! @brief Context client API minor version hint and attribute.
+ *
+ * Context client API minor version [hint](@ref GLFW_CONTEXT_VERSION_MINOR_hint)
+ * and [attribute](@ref GLFW_CONTEXT_VERSION_MINOR_attrib).
+ */
+/*! @brief Context client API revision number attribute.
+ *
+ * Context client API revision number
+ * [attribute](@ref GLFW_CONTEXT_REVISION_attrib).
+ */
+/*! @brief Context robustness hint and attribute.
+ *
+ * Context client API revision number [hint](@ref GLFW_CONTEXT_ROBUSTNESS_hint)
+ * and [attribute](@ref GLFW_CONTEXT_ROBUSTNESS_attrib).
+ */
+/*! @brief OpenGL forward-compatibility hint and attribute.
+ *
+ * OpenGL forward-compatibility [hint](@ref GLFW_OPENGL_FORWARD_COMPAT_hint)
+ * and [attribute](@ref GLFW_OPENGL_FORWARD_COMPAT_attrib).
+ */
+/*! @brief Debug mode context hint and attribute.
+ *
+ * Debug mode context [hint](@ref GLFW_CONTEXT_DEBUG_hint) and
+ * [attribute](@ref GLFW_CONTEXT_DEBUG_attrib).
+ */
+/*! @brief Legacy name for compatibility.
+ *
+ * This is an alias for compatibility with earlier versions.
+ */
+/*! @brief OpenGL profile hint and attribute.
+ *
+ * OpenGL profile [hint](@ref GLFW_OPENGL_PROFILE_hint) and
+ * [attribute](@ref GLFW_OPENGL_PROFILE_attrib).
+ */
+/*! @brief Context flush-on-release hint and attribute.
+ *
+ * Context flush-on-release [hint](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) and
+ * [attribute](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_attrib).
+ */
+/*! @brief Context error suppression hint and attribute.
+ *
+ * Context error suppression [hint](@ref GLFW_CONTEXT_NO_ERROR_hint) and
+ * [attribute](@ref GLFW_CONTEXT_NO_ERROR_attrib).
+ */
+/*! @brief Context creation API hint and attribute.
+ *
+ * Context creation API [hint](@ref GLFW_CONTEXT_CREATION_API_hint) and
+ * [attribute](@ref GLFW_CONTEXT_CREATION_API_attrib).
+ */
+/*! @brief Window content area scaling window
+ * [window hint](@ref GLFW_SCALE_TO_MONITOR).
+ */
+/*! @brief Window framebuffer scaling
+ * [window hint](@ref GLFW_SCALE_FRAMEBUFFER_hint).
+ */
+/*! @brief Legacy name for compatibility.
+ *
+ * This is an alias for the
+ * [GLFW_SCALE_FRAMEBUFFER](@ref GLFW_SCALE_FRAMEBUFFER_hint) window hint for
+ * compatibility with earlier versions.
+ */
+/*! @brief macOS specific
+ * [window hint](@ref GLFW_COCOA_FRAME_NAME_hint).
+ */
+/*! @brief macOS specific
+ * [window hint](@ref GLFW_COCOA_GRAPHICS_SWITCHING_hint).
+ */
+/*! @brief X11 specific
+ * [window hint](@ref GLFW_X11_CLASS_NAME_hint).
+ */
+/*! @brief X11 specific
+ * [window hint](@ref GLFW_X11_CLASS_NAME_hint).
+ */
+/*! @brief Win32 specific [window hint](@ref GLFW_WIN32_SHOWDEFAULT_hint).
+ */
+/*! @brief Wayland specific
+ * [window hint](@ref GLFW_WAYLAND_APP_ID_hint).
+ *
+ * Allows specification of the Wayland app_id.
+ */
+/*! @} */
+/*! @defgroup shapes Standard cursor shapes
+ * @brief Standard system cursor shapes.
+ *
+ * These are the [standard cursor shapes](@ref cursor_standard) that can be
+ * requested from the platform (window system).
+ *
+ * @ingroup input
+ * @{ */
+/*! @brief The regular arrow cursor shape.
+ *
+ * The regular arrow cursor shape.
+ */
+/*! @brief The text input I-beam cursor shape.
+ *
+ * The text input I-beam cursor shape.
+ */
+/*! @brief The crosshair cursor shape.
+ *
+ * The crosshair cursor shape.
+ */
+/*! @brief The pointing hand cursor shape.
+ *
+ * The pointing hand cursor shape.
+ */
+/*! @brief The horizontal resize/move arrow shape.
+ *
+ * The horizontal resize/move arrow shape. This is usually a horizontal
+ * double-headed arrow.
+ */
+/*! @brief The vertical resize/move arrow shape.
+ *
+ * The vertical resize/move shape. This is usually a vertical double-headed
+ * arrow.
+ */
+/*! @brief The top-left to bottom-right diagonal resize/move arrow shape.
+ *
+ * The top-left to bottom-right diagonal resize/move shape. This is usually
+ * a diagonal double-headed arrow.
+ *
+ * @note @macos This shape is provided by a private system API and may fail
+ * with @ref GLFW_CURSOR_UNAVAILABLE in the future.
+ *
+ * @note @wayland This shape is provided by a newer standard not supported by
+ * all cursor themes.
+ *
+ * @note @x11 This shape is provided by a newer standard not supported by all
+ * cursor themes.
+ */
+/*! @brief The top-right to bottom-left diagonal resize/move arrow shape.
+ *
+ * The top-right to bottom-left diagonal resize/move shape. This is usually
+ * a diagonal double-headed arrow.
+ *
+ * @note @macos This shape is provided by a private system API and may fail
+ * with @ref GLFW_CURSOR_UNAVAILABLE in the future.
+ *
+ * @note @wayland This shape is provided by a newer standard not supported by
+ * all cursor themes.
+ *
+ * @note @x11 This shape is provided by a newer standard not supported by all
+ * cursor themes.
+ */
+/*! @brief The omni-directional resize/move cursor shape.
+ *
+ * The omni-directional resize cursor/move shape. This is usually either
+ * a combined horizontal and vertical double-headed arrow or a grabbing hand.
+ */
+/*! @brief The operation-not-allowed shape.
+ *
+ * The operation-not-allowed shape. This is usually a circle with a diagonal
+ * line through it.
+ *
+ * @note @wayland This shape is provided by a newer standard not supported by
+ * all cursor themes.
+ *
+ * @note @x11 This shape is provided by a newer standard not supported by all
+ * cursor themes.
+ */
+/*! @brief Legacy name for compatibility.
+ *
+ * This is an alias for compatibility with earlier versions.
+ */
+/*! @brief Legacy name for compatibility.
+ *
+ * This is an alias for compatibility with earlier versions.
+ */
+/*! @brief Legacy name for compatibility.
+ *
+ * This is an alias for compatibility with earlier versions.
+ */
+/*! @} */
+/*! @addtogroup init
+ * @{ */
+/*! @brief Joystick hat buttons init hint.
+ *
+ * Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS).
+ */
+/*! @brief ANGLE rendering backend init hint.
+ *
+ * ANGLE rendering backend [init hint](@ref GLFW_ANGLE_PLATFORM_TYPE_hint).
+ */
+/*! @brief Platform selection init hint.
+ *
+ * Platform selection [init hint](@ref GLFW_PLATFORM).
+ */
+/*! @brief macOS specific init hint.
+ *
+ * macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint).
+ */
+/*! @brief macOS specific init hint.
+ *
+ * macOS specific [init hint](@ref GLFW_COCOA_MENUBAR_hint).
+ */
+/*! @brief X11 specific init hint.
+ *
+ * X11 specific [init hint](@ref GLFW_X11_XCB_VULKAN_SURFACE_hint).
+ */
+/*! @brief Wayland specific init hint.
+ *
+ * Wayland specific [init hint](@ref GLFW_WAYLAND_LIBDECOR_hint).
+ */
+/*! @} */
+/*! @addtogroup init
+ * @{ */
+/*! @brief Hint value that enables automatic platform selection.
+ *
+ * Hint value for @ref GLFW_PLATFORM that enables automatic platform selection.
+ */
+/*! @} */
+/*************************************************************************
+ * GLFW API types
+ *************************************************************************/
+/*! @brief Client API function pointer type.
+ *
+ * Generic function pointer used for returning client API function pointers
+ * without forcing a cast from a regular pointer.
+ *
+ * @sa @ref context_glext
+ * @sa @ref glfwGetProcAddress
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup context
+ */
+typedef void (*GLFWglproc)(void);
+/*! @brief Vulkan API function pointer type.
+ *
+ * Generic function pointer used for returning Vulkan API function pointers
+ * without forcing a cast from a regular pointer.
+ *
+ * @sa @ref vulkan_proc
+ * @sa @ref glfwGetInstanceProcAddress
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup vulkan
+ */
+typedef void (*GLFWvkproc)(void);
+/*! @brief Opaque monitor object.
+ *
+ * Opaque monitor object.
+ *
+ * @see @ref monitor_object
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+typedef struct GLFWmonitor GLFWmonitor;
+/*! @brief Opaque window object.
+ *
+ * Opaque window object.
+ *
+ * @see @ref window_object
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+typedef struct GLFWwindow GLFWwindow;
+/*! @brief Opaque cursor object.
+ *
+ * Opaque cursor object.
+ *
+ * @see @ref cursor_object
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup input
+ */
+typedef struct GLFWcursor GLFWcursor;
+/*! @brief The function pointer type for memory allocation callbacks.
+ *
+ * This is the function pointer type for memory allocation callbacks. A memory
+ * allocation callback function has the following signature:
+ * @code
+ * void* function_name(size_t size, void* user)
+ * @endcode
+ *
+ * This function must return either a memory block at least `size` bytes long,
+ * or `NULL` if allocation failed. Note that not all parts of GLFW handle allocation
+ * failures gracefully yet.
+ *
+ * This function must support being called during @ref glfwInit but before the library is
+ * flagged as initialized, as well as during @ref glfwTerminate after the library is no
+ * longer flagged as initialized.
+ *
+ * Any memory allocated via this function will be deallocated via the same allocator
+ * during library termination or earlier.
+ *
+ * Any memory allocated via this function must be suitably aligned for any object type.
+ * If you are using C99 or earlier, this alignment is platform-dependent but will be the
+ * same as what `malloc` provides. If you are using C11 or later, this is the value of
+ * `alignof(max_align_t)`.
+ *
+ * The size will always be greater than zero. Allocations of size zero are filtered out
+ * before reaching the custom allocator.
+ *
+ * If this function returns `NULL`, GLFW will emit @ref GLFW_OUT_OF_MEMORY.
+ *
+ * This function must not call any GLFW function.
+ *
+ * @param[in] size The minimum size, in bytes, of the memory block.
+ * @param[in] user The user-defined pointer from the allocator.
+ * @return The address of the newly allocated memory block, or `NULL` if an
+ * error occurred.
+ *
+ * @pointer_lifetime The returned memory block must be valid at least until it
+ * is deallocated.
+ *
+ * @reentrancy This function should not call any GLFW function.
+ *
+ * @thread_safety This function must support being called from any thread that calls GLFW
+ * functions.
+ *
+ * @sa @ref init_allocator
+ * @sa @ref GLFWallocator
+ *
+ * @since Added in version 3.4.
+ *
+ * @ingroup init
+ */
+typedef void* (* GLFWallocatefun)(size_t size, void* user);
+/*! @brief The function pointer type for memory reallocation callbacks.
+ *
+ * This is the function pointer type for memory reallocation callbacks.
+ * A memory reallocation callback function has the following signature:
+ * @code
+ * void* function_name(void* block, size_t size, void* user)
+ * @endcode
+ *
+ * This function must return a memory block at least `size` bytes long, or
+ * `NULL` if allocation failed. Note that not all parts of GLFW handle allocation
+ * failures gracefully yet.
+ *
+ * This function must support being called during @ref glfwInit but before the library is
+ * flagged as initialized, as well as during @ref glfwTerminate after the library is no
+ * longer flagged as initialized.
+ *
+ * Any memory allocated via this function will be deallocated via the same allocator
+ * during library termination or earlier.
+ *
+ * Any memory allocated via this function must be suitably aligned for any object type.
+ * If you are using C99 or earlier, this alignment is platform-dependent but will be the
+ * same as what `realloc` provides. If you are using C11 or later, this is the value of
+ * `alignof(max_align_t)`.
+ *
+ * The block address will never be `NULL` and the size will always be greater than zero.
+ * Reallocations of a block to size zero are converted into deallocations before reaching
+ * the custom allocator. Reallocations of `NULL` to a non-zero size are converted into
+ * regular allocations before reaching the custom allocator.
+ *
+ * If this function returns `NULL`, GLFW will emit @ref GLFW_OUT_OF_MEMORY.
+ *
+ * This function must not call any GLFW function.
+ *
+ * @param[in] block The address of the memory block to reallocate.
+ * @param[in] size The new minimum size, in bytes, of the memory block.
+ * @param[in] user The user-defined pointer from the allocator.
+ * @return The address of the newly allocated or resized memory block, or
+ * `NULL` if an error occurred.
+ *
+ * @pointer_lifetime The returned memory block must be valid at least until it
+ * is deallocated.
+ *
+ * @reentrancy This function should not call any GLFW function.
+ *
+ * @thread_safety This function must support being called from any thread that calls GLFW
+ * functions.
+ *
+ * @sa @ref init_allocator
+ * @sa @ref GLFWallocator
+ *
+ * @since Added in version 3.4.
+ *
+ * @ingroup init
+ */
+typedef void* (* GLFWreallocatefun)(void* block, size_t size, void* user);
+/*! @brief The function pointer type for memory deallocation callbacks.
+ *
+ * This is the function pointer type for memory deallocation callbacks.
+ * A memory deallocation callback function has the following signature:
+ * @code
+ * void function_name(void* block, void* user)
+ * @endcode
+ *
+ * This function may deallocate the specified memory block. This memory block
+ * will have been allocated with the same allocator.
+ *
+ * This function must support being called during @ref glfwInit but before the library is
+ * flagged as initialized, as well as during @ref glfwTerminate after the library is no
+ * longer flagged as initialized.
+ *
+ * The block address will never be `NULL`. Deallocations of `NULL` are filtered out
+ * before reaching the custom allocator.
+ *
+ * If this function returns `NULL`, GLFW will emit @ref GLFW_OUT_OF_MEMORY.
+ *
+ * This function must not call any GLFW function.
+ *
+ * @param[in] block The address of the memory block to deallocate.
+ * @param[in] user The user-defined pointer from the allocator.
+ *
+ * @pointer_lifetime The specified memory block will not be accessed by GLFW
+ * after this function is called.
+ *
+ * @reentrancy This function should not call any GLFW function.
+ *
+ * @thread_safety This function must support being called from any thread that calls GLFW
+ * functions.
+ *
+ * @sa @ref init_allocator
+ * @sa @ref GLFWallocator
+ *
+ * @since Added in version 3.4.
+ *
+ * @ingroup init
+ */
+typedef void (* GLFWdeallocatefun)(void* block, void* user);
+/*! @brief The function pointer type for error callbacks.
+ *
+ * This is the function pointer type for error callbacks. An error callback
+ * function has the following signature:
+ * @code
+ * void callback_name(int error_code, const char* description)
+ * @endcode
+ *
+ * @param[in] error_code An [error code](@ref errors). Future releases may add
+ * more error codes.
+ * @param[in] description A UTF-8 encoded string describing the error.
+ *
+ * @pointer_lifetime The error description string is valid until the callback
+ * function returns.
+ *
+ * @sa @ref error_handling
+ * @sa @ref glfwSetErrorCallback
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup init
+ */
+typedef void (* GLFWerrorfun)(int error_code, const char* description);
+/*! @brief The function pointer type for window position callbacks.
+ *
+ * This is the function pointer type for window position callbacks. A window
+ * position callback function has the following signature:
+ * @code
+ * void callback_name(GLFWwindow* window, int xpos, int ypos)
+ * @endcode
+ *
+ * @param[in] window The window that was moved.
+ * @param[in] xpos The new x-coordinate, in screen coordinates, of the
+ * upper-left corner of the content area of the window.
+ * @param[in] ypos The new y-coordinate, in screen coordinates, of the
+ * upper-left corner of the content area of the window.
+ *
+ * @sa @ref window_pos
+ * @sa @ref glfwSetWindowPosCallback
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+typedef void (* GLFWwindowposfun)(GLFWwindow* window, int xpos, int ypos);
+/*! @brief The function pointer type for window size callbacks.
+ *
+ * This is the function pointer type for window size callbacks. A window size
+ * callback function has the following signature:
+ * @code
+ * void callback_name(GLFWwindow* window, int width, int height)
+ * @endcode
+ *
+ * @param[in] window The window that was resized.
+ * @param[in] width The new width, in screen coordinates, of the window.
+ * @param[in] height The new height, in screen coordinates, of the window.
+ *
+ * @sa @ref window_size
+ * @sa @ref glfwSetWindowSizeCallback
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+typedef void (* GLFWwindowsizefun)(GLFWwindow* window, int width, int height);
+/*! @brief The function pointer type for window close callbacks.
+ *
+ * This is the function pointer type for window close callbacks. A window
+ * close callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window)
+ * @endcode
+ *
+ * @param[in] window The window that the user attempted to close.
+ *
+ * @sa @ref window_close
+ * @sa @ref glfwSetWindowCloseCallback
+ *
+ * @since Added in version 2.5.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+typedef void (* GLFWwindowclosefun)(GLFWwindow* window);
+/*! @brief The function pointer type for window content refresh callbacks.
+ *
+ * This is the function pointer type for window content refresh callbacks.
+ * A window content refresh callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window);
+ * @endcode
+ *
+ * @param[in] window The window whose content needs to be refreshed.
+ *
+ * @sa @ref window_refresh
+ * @sa @ref glfwSetWindowRefreshCallback
+ *
+ * @since Added in version 2.5.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+typedef void (* GLFWwindowrefreshfun)(GLFWwindow* window);
+/*! @brief The function pointer type for window focus callbacks.
+ *
+ * This is the function pointer type for window focus callbacks. A window
+ * focus callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, int focused)
+ * @endcode
+ *
+ * @param[in] window The window that gained or lost input focus.
+ * @param[in] focused `GLFW_TRUE` if the window was given input focus, or
+ * `GLFW_FALSE` if it lost it.
+ *
+ * @sa @ref window_focus
+ * @sa @ref glfwSetWindowFocusCallback
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+typedef void (* GLFWwindowfocusfun)(GLFWwindow* window, int focused);
+/*! @brief The function pointer type for window iconify callbacks.
+ *
+ * This is the function pointer type for window iconify callbacks. A window
+ * iconify callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, int iconified)
+ * @endcode
+ *
+ * @param[in] window The window that was iconified or restored.
+ * @param[in] iconified `GLFW_TRUE` if the window was iconified, or
+ * `GLFW_FALSE` if it was restored.
+ *
+ * @sa @ref window_iconify
+ * @sa @ref glfwSetWindowIconifyCallback
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+typedef void (* GLFWwindowiconifyfun)(GLFWwindow* window, int iconified);
+/*! @brief The function pointer type for window maximize callbacks.
+ *
+ * This is the function pointer type for window maximize callbacks. A window
+ * maximize callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, int maximized)
+ * @endcode
+ *
+ * @param[in] window The window that was maximized or restored.
+ * @param[in] maximized `GLFW_TRUE` if the window was maximized, or
+ * `GLFW_FALSE` if it was restored.
+ *
+ * @sa @ref window_maximize
+ * @sa glfwSetWindowMaximizeCallback
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+typedef void (* GLFWwindowmaximizefun)(GLFWwindow* window, int maximized);
+/*! @brief The function pointer type for framebuffer size callbacks.
+ *
+ * This is the function pointer type for framebuffer size callbacks.
+ * A framebuffer size callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, int width, int height)
+ * @endcode
+ *
+ * @param[in] window The window whose framebuffer was resized.
+ * @param[in] width The new width, in pixels, of the framebuffer.
+ * @param[in] height The new height, in pixels, of the framebuffer.
+ *
+ * @sa @ref window_fbsize
+ * @sa @ref glfwSetFramebufferSizeCallback
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+typedef void (* GLFWframebuffersizefun)(GLFWwindow* window, int width, int height);
+/*! @brief The function pointer type for window content scale callbacks.
+ *
+ * This is the function pointer type for window content scale callbacks.
+ * A window content scale callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, float xscale, float yscale)
+ * @endcode
+ *
+ * @param[in] window The window whose content scale changed.
+ * @param[in] xscale The new x-axis content scale of the window.
+ * @param[in] yscale The new y-axis content scale of the window.
+ *
+ * @sa @ref window_scale
+ * @sa @ref glfwSetWindowContentScaleCallback
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+typedef void (* GLFWwindowcontentscalefun)(GLFWwindow* window, float xscale, float yscale);
+/*! @brief The function pointer type for mouse button callbacks.
+ *
+ * This is the function pointer type for mouse button callback functions.
+ * A mouse button callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, int button, int action, int mods)
+ * @endcode
+ *
+ * @param[in] window The window that received the event.
+ * @param[in] button The [mouse button](@ref buttons) that was pressed or
+ * released.
+ * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. Future releases
+ * may add more actions.
+ * @param[in] mods Bit field describing which [modifier keys](@ref mods) were
+ * held down.
+ *
+ * @sa @ref input_mouse_button
+ * @sa @ref glfwSetMouseButtonCallback
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle and modifier mask parameters.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWmousebuttonfun)(GLFWwindow* window, int button, int action, int mods);
+/*! @brief The function pointer type for cursor position callbacks.
+ *
+ * This is the function pointer type for cursor position callbacks. A cursor
+ * position callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, double xpos, double ypos);
+ * @endcode
+ *
+ * @param[in] window The window that received the event.
+ * @param[in] xpos The new cursor x-coordinate, relative to the left edge of
+ * the content area.
+ * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the
+ * content area.
+ *
+ * @sa @ref cursor_pos
+ * @sa @ref glfwSetCursorPosCallback
+ *
+ * @since Added in version 3.0. Replaces `GLFWmouseposfun`.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWcursorposfun)(GLFWwindow* window, double xpos, double ypos);
+/*! @brief The function pointer type for cursor enter/leave callbacks.
+ *
+ * This is the function pointer type for cursor enter/leave callbacks.
+ * A cursor enter/leave callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, int entered)
+ * @endcode
+ *
+ * @param[in] window The window that received the event.
+ * @param[in] entered `GLFW_TRUE` if the cursor entered the window's content
+ * area, or `GLFW_FALSE` if it left it.
+ *
+ * @sa @ref cursor_enter
+ * @sa @ref glfwSetCursorEnterCallback
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWcursorenterfun)(GLFWwindow* window, int entered);
+/*! @brief The function pointer type for scroll callbacks.
+ *
+ * This is the function pointer type for scroll callbacks. A scroll callback
+ * function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, double xoffset, double yoffset)
+ * @endcode
+ *
+ * @param[in] window The window that received the event.
+ * @param[in] xoffset The scroll offset along the x-axis.
+ * @param[in] yoffset The scroll offset along the y-axis.
+ *
+ * @sa @ref scrolling
+ * @sa @ref glfwSetScrollCallback
+ *
+ * @since Added in version 3.0. Replaces `GLFWmousewheelfun`.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWscrollfun)(GLFWwindow* window, double xoffset, double yoffset);
+/*! @brief The function pointer type for keyboard key callbacks.
+ *
+ * This is the function pointer type for keyboard key callbacks. A keyboard
+ * key callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods)
+ * @endcode
+ *
+ * @param[in] window The window that received the event.
+ * @param[in] key The [keyboard key](@ref keys) that was pressed or released.
+ * @param[in] scancode The platform-specific scancode of the key.
+ * @param[in] action `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. Future
+ * releases may add more actions.
+ * @param[in] mods Bit field describing which [modifier keys](@ref mods) were
+ * held down.
+ *
+ * @sa @ref input_key
+ * @sa @ref glfwSetKeyCallback
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle, scancode and modifier mask parameters.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWkeyfun)(GLFWwindow* window, int key, int scancode, int action, int mods);
+/*! @brief The function pointer type for Unicode character callbacks.
+ *
+ * This is the function pointer type for Unicode character callbacks.
+ * A Unicode character callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, unsigned int codepoint)
+ * @endcode
+ *
+ * @param[in] window The window that received the event.
+ * @param[in] codepoint The Unicode code point of the character.
+ *
+ * @sa @ref input_char
+ * @sa @ref glfwSetCharCallback
+ *
+ * @since Added in version 2.4.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWcharfun)(GLFWwindow* window, unsigned int codepoint);
+/*! @brief The function pointer type for Unicode character with modifiers
+ * callbacks.
+ *
+ * This is the function pointer type for Unicode character with modifiers
+ * callbacks. It is called for each input character, regardless of what
+ * modifier keys are held down. A Unicode character with modifiers callback
+ * function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, unsigned int codepoint, int mods)
+ * @endcode
+ *
+ * @param[in] window The window that received the event.
+ * @param[in] codepoint The Unicode code point of the character.
+ * @param[in] mods Bit field describing which [modifier keys](@ref mods) were
+ * held down.
+ *
+ * @sa @ref input_char
+ * @sa @ref glfwSetCharModsCallback
+ *
+ * @deprecated Scheduled for removal in version 4.0.
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWcharmodsfun)(GLFWwindow* window, unsigned int codepoint, int mods);
+/*! @brief The function pointer type for path drop callbacks.
+ *
+ * This is the function pointer type for path drop callbacks. A path drop
+ * callback function has the following signature:
+ * @code
+ * void function_name(GLFWwindow* window, int path_count, const char* paths[])
+ * @endcode
+ *
+ * @param[in] window The window that received the event.
+ * @param[in] path_count The number of dropped paths.
+ * @param[in] paths The UTF-8 encoded file and/or directory path names.
+ *
+ * @pointer_lifetime The path array and its strings are valid until the
+ * callback function returns.
+ *
+ * @sa @ref path_drop
+ * @sa @ref glfwSetDropCallback
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWdropfun)(GLFWwindow* window, int path_count, const char* paths[]);
+/*! @brief The function pointer type for monitor configuration callbacks.
+ *
+ * This is the function pointer type for monitor configuration callbacks.
+ * A monitor callback function has the following signature:
+ * @code
+ * void function_name(GLFWmonitor* monitor, int event)
+ * @endcode
+ *
+ * @param[in] monitor The monitor that was connected or disconnected.
+ * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future
+ * releases may add more events.
+ *
+ * @sa @ref monitor_event
+ * @sa @ref glfwSetMonitorCallback
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+typedef void (* GLFWmonitorfun)(GLFWmonitor* monitor, int event);
+/*! @brief The function pointer type for joystick configuration callbacks.
+ *
+ * This is the function pointer type for joystick configuration callbacks.
+ * A joystick configuration callback function has the following signature:
+ * @code
+ * void function_name(int jid, int event)
+ * @endcode
+ *
+ * @param[in] jid The joystick that was connected or disconnected.
+ * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future
+ * releases may add more events.
+ *
+ * @sa @ref joystick_event
+ * @sa @ref glfwSetJoystickCallback
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWjoystickfun)(int jid, int event);
+/*! @brief Video mode type.
+ *
+ * This describes a single video mode.
+ *
+ * @sa @ref monitor_modes
+ * @sa @ref glfwGetVideoMode
+ * @sa @ref glfwGetVideoModes
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added refresh rate member.
+ *
+ * @ingroup monitor
+ */
+typedef struct GLFWvidmode
+{
+ /*! The width, in screen coordinates, of the video mode.
+ */
+ int width;
+ /*! The height, in screen coordinates, of the video mode.
+ */
+ int height;
+ /*! The bit depth of the red channel of the video mode.
+ */
+ int redBits;
+ /*! The bit depth of the green channel of the video mode.
+ */
+ int greenBits;
+ /*! The bit depth of the blue channel of the video mode.
+ */
+ int blueBits;
+ /*! The refresh rate, in Hz, of the video mode.
+ */
+ int refreshRate;
+} GLFWvidmode;
+/*! @brief Gamma ramp.
+ *
+ * This describes the gamma ramp for a monitor.
+ *
+ * @sa @ref monitor_gamma
+ * @sa @ref glfwGetGammaRamp
+ * @sa @ref glfwSetGammaRamp
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+typedef struct GLFWgammaramp
+{
+ /*! An array of value describing the response of the red channel.
+ */
+ unsigned short* red;
+ /*! An array of value describing the response of the green channel.
+ */
+ unsigned short* green;
+ /*! An array of value describing the response of the blue channel.
+ */
+ unsigned short* blue;
+ /*! The number of elements in each array.
+ */
+ unsigned int size;
+} GLFWgammaramp;
+/*! @brief Image data.
+ *
+ * This describes a single 2D image. See the documentation for each related
+ * function what the expected pixel format is.
+ *
+ * @sa @ref cursor_custom
+ * @sa @ref window_icon
+ *
+ * @since Added in version 2.1.
+ * @glfw3 Removed format and bytes-per-pixel members.
+ *
+ * @ingroup window
+ */
+typedef struct GLFWimage
+{
+ /*! The width, in pixels, of this image.
+ */
+ int width;
+ /*! The height, in pixels, of this image.
+ */
+ int height;
+ /*! The pixel data of this image, arranged left-to-right, top-to-bottom.
+ */
+ unsigned char* pixels;
+} GLFWimage;
+/*! @brief Gamepad input state
+ *
+ * This describes the input state of a gamepad.
+ *
+ * @sa @ref gamepad
+ * @sa @ref glfwGetGamepadState
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+typedef struct GLFWgamepadstate
+{
+ /*! The states of each [gamepad button](@ref gamepad_buttons), `GLFW_PRESS`
+ * or `GLFW_RELEASE`.
+ */
+ unsigned char buttons[15];
+ /*! The states of each [gamepad axis](@ref gamepad_axes), in the range -1.0
+ * to 1.0 inclusive.
+ */
+ float axes[6];
+} GLFWgamepadstate;
+/*! @brief Custom heap memory allocator.
+ *
+ * This describes a custom heap memory allocator for GLFW. To set an allocator, pass it
+ * to @ref glfwInitAllocator before initializing the library.
+ *
+ * @sa @ref init_allocator
+ * @sa @ref glfwInitAllocator
+ *
+ * @since Added in version 3.4.
+ *
+ * @ingroup init
+ */
+typedef struct GLFWallocator
+{
+ /*! The memory allocation function. See @ref GLFWallocatefun for details about
+ * allocation function.
+ */
+ GLFWallocatefun allocate;
+ /*! The memory reallocation function. See @ref GLFWreallocatefun for details about
+ * reallocation function.
+ */
+ GLFWreallocatefun reallocate;
+ /*! The memory deallocation function. See @ref GLFWdeallocatefun for details about
+ * deallocation function.
+ */
+ GLFWdeallocatefun deallocate;
+ /*! The user pointer for this custom allocator. This value will be passed to the
+ * allocator functions.
+ */
+ void* user;
+} GLFWallocator;
+/*************************************************************************
+ * GLFW API functions
+ *************************************************************************/
+/*! @brief Initializes the GLFW library.
+ *
+ * This function initializes the GLFW library. Before most GLFW functions can
+ * be used, GLFW must be initialized, and before an application terminates GLFW
+ * should be terminated in order to free any resources allocated during or
+ * after initialization.
+ *
+ * If this function fails, it calls @ref glfwTerminate before returning. If it
+ * succeeds, you should call @ref glfwTerminate before the application exits.
+ *
+ * Additional calls to this function after successful initialization but before
+ * termination will return `GLFW_TRUE` immediately.
+ *
+ * The @ref GLFW_PLATFORM init hint controls which platforms are considered during
+ * initialization. This also depends on which platforms the library was compiled to
+ * support.
+ *
+ * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_PLATFORM_UNAVAILABLE and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark @macos This function will change the current directory of the
+ * application to the `Contents/Resources` subdirectory of the application's
+ * bundle, if present. This can be disabled with the @ref
+ * GLFW_COCOA_CHDIR_RESOURCES init hint.
+ *
+ * @remark @macos This function will create the main menu and dock icon for the
+ * application. If GLFW finds a `MainMenu.nib` it is loaded and assumed to
+ * contain a menu bar. Otherwise a minimal menu bar is created manually with
+ * common commands like Hide, Quit and About. The About entry opens a minimal
+ * about dialog with information from the application's bundle. The menu bar
+ * and dock icon can be disabled entirely with the @ref GLFW_COCOA_MENUBAR init
+ * hint.
+ *
+ * @remark __Wayland, X11:__ If the library was compiled with support for both
+ * Wayland and X11, and the @ref GLFW_PLATFORM init hint is set to
+ * `GLFW_ANY_PLATFORM`, the `XDG_SESSION_TYPE` environment variable affects
+ * which platform is picked. If the environment variable is not set, or is set
+ * to something other than `wayland` or `x11`, the regular detection mechanism
+ * will be used instead.
+ *
+ * @remark @x11 This function will set the `LC_CTYPE` category of the
+ * application locale according to the current environment if that category is
+ * still "C". This is because the "C" locale breaks Unicode text input.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref intro_init
+ * @sa @ref glfwInitHint
+ * @sa @ref glfwInitAllocator
+ * @sa @ref glfwTerminate
+ *
+ * @since Added in version 1.0.
+ *
+ * @ingroup init
+ */
+ int glfwInit(void);
+/*! @brief Terminates the GLFW library.
+ *
+ * This function destroys all remaining windows and cursors, restores any
+ * modified gamma ramps and frees any other allocated resources. Once this
+ * function is called, you must again call @ref glfwInit successfully before
+ * you will be able to use most GLFW functions.
+ *
+ * If GLFW has been successfully initialized, this function should be called
+ * before the application exits. If initialization fails, there is no need to
+ * call this function, as it is called by @ref glfwInit before it returns
+ * failure.
+ *
+ * This function has no effect if GLFW is not initialized.
+ *
+ * @errors Possible errors include @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark This function may be called before @ref glfwInit.
+ *
+ * @warning The contexts of any remaining windows must not be current on any
+ * other thread when this function is called.
+ *
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref intro_init
+ * @sa @ref glfwInit
+ *
+ * @since Added in version 1.0.
+ *
+ * @ingroup init
+ */
+ void glfwTerminate(void);
+/*! @brief Sets the specified init hint to the desired value.
+ *
+ * This function sets hints for the next initialization of GLFW.
+ *
+ * The values you set hints to are never reset by GLFW, but they only take
+ * effect during initialization. Once GLFW has been initialized, any values
+ * you set will be ignored until the library is terminated and initialized
+ * again.
+ *
+ * Some hints are platform specific. These may be set on any platform but they
+ * will only affect their specific platform. Other platforms will ignore them.
+ * Setting these hints requires no platform specific headers or functions.
+ *
+ * @param[in] hint The [init hint](@ref init_hints) to set.
+ * @param[in] value The new value of the init hint.
+ *
+ * @errors Possible errors include @ref GLFW_INVALID_ENUM and @ref
+ * GLFW_INVALID_VALUE.
+ *
+ * @remarks This function may be called before @ref glfwInit.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa init_hints
+ * @sa glfwInit
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup init
+ */
+ void glfwInitHint(int hint, int value);
+/*! @brief Sets the init allocator to the desired value.
+ *
+ * To use the default allocator, call this function with a `NULL` argument.
+ *
+ * If you specify an allocator struct, every member must be a valid function
+ * pointer. If any member is `NULL`, this function will emit @ref
+ * GLFW_INVALID_VALUE and the init allocator will be unchanged.
+ *
+ * The functions in the allocator must fulfil a number of requirements. See the
+ * documentation for @ref GLFWallocatefun, @ref GLFWreallocatefun and @ref
+ * GLFWdeallocatefun for details.
+ *
+ * @param[in] allocator The allocator to use at the next initialization, or
+ * `NULL` to use the default one.
+ *
+ * @errors Possible errors include @ref GLFW_INVALID_VALUE.
+ *
+ * @pointer_lifetime The specified allocator is copied before this function
+ * returns.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref init_allocator
+ * @sa @ref glfwInit
+ *
+ * @since Added in version 3.4.
+ *
+ * @ingroup init
+ */
+ void glfwInitAllocator(const GLFWallocator* allocator);
+/*! @brief Retrieves the version of the GLFW library.
+ *
+ * This function retrieves the major, minor and revision numbers of the GLFW
+ * library. It is intended for when you are using GLFW as a shared library and
+ * want to ensure that you are using the minimum required version.
+ *
+ * Any or all of the version arguments may be `NULL`.
+ *
+ * @param[out] major Where to store the major version number, or `NULL`.
+ * @param[out] minor Where to store the minor version number, or `NULL`.
+ * @param[out] rev Where to store the revision number, or `NULL`.
+ *
+ * @errors None.
+ *
+ * @remark This function may be called before @ref glfwInit.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref intro_version
+ * @sa @ref glfwGetVersionString
+ *
+ * @since Added in version 1.0.
+ *
+ * @ingroup init
+ */
+ void glfwGetVersion(int* major, int* minor, int* rev);
+/*! @brief Returns a string describing the compile-time configuration.
+ *
+ * This function returns the compile-time generated
+ * [version string](@ref intro_version_string) of the GLFW library binary. It describes
+ * the version, platforms, compiler and any platform or operating system specific
+ * compile-time options. It should not be confused with the OpenGL or OpenGL ES version
+ * string, queried with `glGetString`.
+ *
+ * __Do not use the version string__ to parse the GLFW library version. The
+ * @ref glfwGetVersion function provides the version of the running library
+ * binary in numerical format.
+ *
+ * __Do not use the version string__ to parse what platforms are supported. The @ref
+ * glfwPlatformSupported function lets you query platform support.
+ *
+ * @return The ASCII encoded GLFW version string.
+ *
+ * @errors None.
+ *
+ * @remark This function may be called before @ref glfwInit.
+ *
+ * @pointer_lifetime The returned string is static and compile-time generated.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref intro_version
+ * @sa @ref glfwGetVersion
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup init
+ */
+ const char* glfwGetVersionString(void);
+/*! @brief Returns and clears the last error for the calling thread.
+ *
+ * This function returns and clears the [error code](@ref errors) of the last
+ * error that occurred on the calling thread, and optionally a UTF-8 encoded
+ * human-readable description of it. If no error has occurred since the last
+ * call, it returns @ref GLFW_NO_ERROR (zero) and the description pointer is
+ * set to `NULL`.
+ *
+ * @param[in] description Where to store the error description pointer, or `NULL`.
+ * @return The last error code for the calling thread, or @ref GLFW_NO_ERROR
+ * (zero).
+ *
+ * @errors None.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is guaranteed to be valid only until the
+ * next error occurs or the library is terminated.
+ *
+ * @remark This function may be called before @ref glfwInit.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref error_handling
+ * @sa @ref glfwSetErrorCallback
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup init
+ */
+ int glfwGetError(const char** description);
+/*! @brief Sets the error callback.
+ *
+ * This function sets the error callback, which is called with an error code
+ * and a human-readable description each time a GLFW error occurs.
+ *
+ * The error code is set before the callback is called. Calling @ref
+ * glfwGetError from the error callback will return the same value as the error
+ * code argument.
+ *
+ * The error callback is called on the thread where the error occurred. If you
+ * are using GLFW from multiple threads, your error callback needs to be
+ * written accordingly.
+ *
+ * Because the description string may have been generated specifically for that
+ * error, it is not guaranteed to be valid after the callback has returned. If
+ * you wish to use it after the callback returns, you need to make a copy.
+ *
+ * Once set, the error callback remains set even after the library has been
+ * terminated.
+ *
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set.
+ *
+ * @callback_signature
+ * @code
+ * void callback_name(int error_code, const char* description)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [callback pointer type](@ref GLFWerrorfun).
+ *
+ * @errors None.
+ *
+ * @remark This function may be called before @ref glfwInit.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref error_handling
+ * @sa @ref glfwGetError
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup init
+ */
+ GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun callback);
+/*! @brief Returns the currently selected platform.
+ *
+ * This function returns the platform that was selected during initialization. The
+ * returned value will be one of `GLFW_PLATFORM_WIN32`, `GLFW_PLATFORM_COCOA`,
+ * `GLFW_PLATFORM_WAYLAND`, `GLFW_PLATFORM_X11` or `GLFW_PLATFORM_NULL`.
+ *
+ * @return The currently selected platform, or zero if an error occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref platform
+ * @sa @ref glfwPlatformSupported
+ *
+ * @since Added in version 3.4.
+ *
+ * @ingroup init
+ */
+ int glfwGetPlatform(void);
+/*! @brief Returns whether the library includes support for the specified platform.
+ *
+ * This function returns whether the library was compiled with support for the specified
+ * platform. The platform must be one of `GLFW_PLATFORM_WIN32`, `GLFW_PLATFORM_COCOA`,
+ * `GLFW_PLATFORM_WAYLAND`, `GLFW_PLATFORM_X11` or `GLFW_PLATFORM_NULL`.
+ *
+ * @param[in] platform The platform to query.
+ * @return `GLFW_TRUE` if the platform is supported, or `GLFW_FALSE` otherwise.
+ *
+ * @errors Possible errors include @ref GLFW_INVALID_ENUM.
+ *
+ * @remark This function may be called before @ref glfwInit.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref platform
+ * @sa @ref glfwGetPlatform
+ *
+ * @since Added in version 3.4.
+ *
+ * @ingroup init
+ */
+ int glfwPlatformSupported(int platform);
+/*! @brief Returns the currently connected monitors.
+ *
+ * This function returns an array of handles for all currently connected
+ * monitors. The primary monitor is always first in the returned array. If no
+ * monitors were found, this function returns `NULL`.
+ *
+ * @param[out] count Where to store the number of monitors in the returned
+ * array. This is set to zero if an error occurred.
+ * @return An array of monitor handles, or `NULL` if no monitors were found or
+ * if an [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is guaranteed to be valid only until the
+ * monitor configuration changes or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_monitors
+ * @sa @ref monitor_event
+ * @sa @ref glfwGetPrimaryMonitor
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+ GLFWmonitor** glfwGetMonitors(int* count);
+/*! @brief Returns the primary monitor.
+ *
+ * This function returns the primary monitor. This is usually the monitor
+ * where elements like the task bar or global menu bar are located.
+ *
+ * @return The primary monitor, or `NULL` if no monitors were found or if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @remark The primary monitor is always first in the array returned by @ref
+ * glfwGetMonitors.
+ *
+ * @sa @ref monitor_monitors
+ * @sa @ref glfwGetMonitors
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+ GLFWmonitor* glfwGetPrimaryMonitor(void);
+/*! @brief Returns the position of the monitor's viewport on the virtual screen.
+ *
+ * This function returns the position, in screen coordinates, of the upper-left
+ * corner of the specified monitor.
+ *
+ * Any or all of the position arguments may be `NULL`. If an error occurs, all
+ * non-`NULL` position arguments will be set to zero.
+ *
+ * @param[in] monitor The monitor to query.
+ * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`.
+ * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_properties
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+ void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos);
+/*! @brief Retrieves the work area of the monitor.
+ *
+ * This function returns the position, in screen coordinates, of the upper-left
+ * corner of the work area of the specified monitor along with the work area
+ * size in screen coordinates. The work area is defined as the area of the
+ * monitor not occluded by the window system task bar where present. If no
+ * task bar exists then the work area is the monitor resolution in screen
+ * coordinates.
+ *
+ * Any or all of the position and size arguments may be `NULL`. If an error
+ * occurs, all non-`NULL` position and size arguments will be set to zero.
+ *
+ * @param[in] monitor The monitor to query.
+ * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`.
+ * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`.
+ * @param[out] width Where to store the monitor width, or `NULL`.
+ * @param[out] height Where to store the monitor height, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_workarea
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup monitor
+ */
+ void glfwGetMonitorWorkarea(GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height);
+/*! @brief Returns the physical size of the monitor.
+ *
+ * This function returns the size, in millimetres, of the display area of the
+ * specified monitor.
+ *
+ * Some platforms do not provide accurate monitor size information, either
+ * because the monitor [EDID][] data is incorrect or because the driver does
+ * not report it accurately.
+ *
+ * [EDID]: https://en.wikipedia.org/wiki/Extended_display_identification_data
+ *
+ * Any or all of the size arguments may be `NULL`. If an error occurs, all
+ * non-`NULL` size arguments will be set to zero.
+ *
+ * @param[in] monitor The monitor to query.
+ * @param[out] widthMM Where to store the width, in millimetres, of the
+ * monitor's display area, or `NULL`.
+ * @param[out] heightMM Where to store the height, in millimetres, of the
+ * monitor's display area, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @remark @win32 On Windows 8 and earlier the physical size is calculated from
+ * the current resolution and system DPI instead of querying the monitor EDID data.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_properties
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+ void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM);
+/*! @brief Retrieves the content scale for the specified monitor.
+ *
+ * This function retrieves the content scale for the specified monitor. The
+ * content scale is the ratio between the current DPI and the platform's
+ * default DPI. This is especially important for text and any UI elements. If
+ * the pixel dimensions of your UI scaled by this look appropriate on your
+ * machine then it should appear at a reasonable size on other machines
+ * regardless of their DPI and scaling settings. This relies on the system DPI
+ * and scaling settings being somewhat correct.
+ *
+ * The content scale may depend on both the monitor resolution and pixel
+ * density and on user settings. It may be very different from the raw DPI
+ * calculated from the physical size and current resolution.
+ *
+ * @param[in] monitor The monitor to query.
+ * @param[out] xscale Where to store the x-axis content scale, or `NULL`.
+ * @param[out] yscale Where to store the y-axis content scale, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark @wayland Fractional scaling information is not yet available for
+ * monitors, so this function only returns integer content scales.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_scale
+ * @sa @ref glfwGetWindowContentScale
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup monitor
+ */
+ void glfwGetMonitorContentScale(GLFWmonitor* monitor, float* xscale, float* yscale);
+/*! @brief Returns the name of the specified monitor.
+ *
+ * This function returns a human-readable name, encoded as UTF-8, of the
+ * specified monitor. The name typically reflects the make and model of the
+ * monitor and is not guaranteed to be unique among the connected monitors.
+ *
+ * @param[in] monitor The monitor to query.
+ * @return The UTF-8 encoded name of the monitor, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified monitor is
+ * disconnected or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_properties
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+ const char* glfwGetMonitorName(GLFWmonitor* monitor);
+/*! @brief Sets the user pointer of the specified monitor.
+ *
+ * This function sets the user-defined pointer of the specified monitor. The
+ * current value is retained until the monitor is disconnected. The initial
+ * value is `NULL`.
+ *
+ * This function may be called from the monitor callback, even for a monitor
+ * that is being disconnected.
+ *
+ * @param[in] monitor The monitor whose pointer to set.
+ * @param[in] pointer The new value.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @sa @ref monitor_userptr
+ * @sa @ref glfwGetMonitorUserPointer
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup monitor
+ */
+ void glfwSetMonitorUserPointer(GLFWmonitor* monitor, void* pointer);
+/*! @brief Returns the user pointer of the specified monitor.
+ *
+ * This function returns the current value of the user-defined pointer of the
+ * specified monitor. The initial value is `NULL`.
+ *
+ * This function may be called from the monitor callback, even for a monitor
+ * that is being disconnected.
+ *
+ * @param[in] monitor The monitor whose pointer to return.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @sa @ref monitor_userptr
+ * @sa @ref glfwSetMonitorUserPointer
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup monitor
+ */
+ void* glfwGetMonitorUserPointer(GLFWmonitor* monitor);
+/*! @brief Sets the monitor configuration callback.
+ *
+ * This function sets the monitor configuration callback, or removes the
+ * currently set callback. This is called when a monitor is connected to or
+ * disconnected from the system.
+ *
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWmonitor* monitor, int event)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWmonitorfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_event
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+ GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun callback);
+/*! @brief Returns the available video modes for the specified monitor.
+ *
+ * This function returns an array of all video modes supported by the specified
+ * monitor. The returned array is sorted in ascending order, first by color
+ * bit depth (the sum of all channel depths), then by resolution area (the
+ * product of width and height), then resolution width and finally by refresh
+ * rate.
+ *
+ * @param[in] monitor The monitor to query.
+ * @param[out] count Where to store the number of video modes in the returned
+ * array. This is set to zero if an error occurred.
+ * @return An array of video modes, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified monitor is
+ * disconnected, this function is called again for that monitor or the library
+ * is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_modes
+ * @sa @ref glfwGetVideoMode
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Changed to return an array of modes for a specific monitor.
+ *
+ * @ingroup monitor
+ */
+ const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count);
+/*! @brief Returns the current mode of the specified monitor.
+ *
+ * This function returns the current video mode of the specified monitor. If
+ * you have created a full screen window for that monitor, the return value
+ * will depend on whether that window is iconified.
+ *
+ * @param[in] monitor The monitor to query.
+ * @return The current mode of the monitor, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified monitor is
+ * disconnected or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_modes
+ * @sa @ref glfwGetVideoModes
+ *
+ * @since Added in version 3.0. Replaces `glfwGetDesktopMode`.
+ *
+ * @ingroup monitor
+ */
+ const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor);
+/*! @brief Generates a gamma ramp and sets it for the specified monitor.
+ *
+ * This function generates an appropriately sized gamma ramp from the specified
+ * exponent and then calls @ref glfwSetGammaRamp with it. The value must be
+ * a finite number greater than zero.
+ *
+ * The software controlled gamma ramp is applied _in addition_ to the hardware
+ * gamma correction, which today is usually an approximation of sRGB gamma.
+ * This means that setting a perfectly linear ramp, or gamma 1.0, will produce
+ * the default (usually sRGB-like) behavior.
+ *
+ * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref
+ * GLFW_SRGB_CAPABLE hint.
+ *
+ * @param[in] monitor The monitor whose gamma ramp to set.
+ * @param[in] gamma The desired exponent.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_INVALID_VALUE,
+ * @ref GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
+ *
+ * @remark @wayland Gamma handling is a privileged protocol, this function
+ * will thus never be implemented and emits @ref GLFW_FEATURE_UNAVAILABLE.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_gamma
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+ void glfwSetGamma(GLFWmonitor* monitor, float gamma);
+/*! @brief Returns the current gamma ramp for the specified monitor.
+ *
+ * This function returns the current gamma ramp of the specified monitor.
+ *
+ * @param[in] monitor The monitor to query.
+ * @return The current gamma ramp, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_PLATFORM_ERROR
+ * and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
+ *
+ * @remark @wayland Gamma handling is a privileged protocol, this function
+ * will thus never be implemented and emits @ref GLFW_FEATURE_UNAVAILABLE while
+ * returning `NULL`.
+ *
+ * @pointer_lifetime The returned structure and its arrays are allocated and
+ * freed by GLFW. You should not free them yourself. They are valid until the
+ * specified monitor is disconnected, this function is called again for that
+ * monitor or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_gamma
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+ const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor);
+/*! @brief Sets the current gamma ramp for the specified monitor.
+ *
+ * This function sets the current gamma ramp for the specified monitor. The
+ * original gamma ramp for that monitor is saved by GLFW the first time this
+ * function is called and is restored by @ref glfwTerminate.
+ *
+ * The software controlled gamma ramp is applied _in addition_ to the hardware
+ * gamma correction, which today is usually an approximation of sRGB gamma.
+ * This means that setting a perfectly linear ramp, or gamma 1.0, will produce
+ * the default (usually sRGB-like) behavior.
+ *
+ * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref
+ * GLFW_SRGB_CAPABLE hint.
+ *
+ * @param[in] monitor The monitor whose gamma ramp to set.
+ * @param[in] ramp The gamma ramp to use.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_PLATFORM_ERROR
+ * and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
+ *
+ * @remark The size of the specified gamma ramp should match the size of the
+ * current ramp for that monitor.
+ *
+ * @remark @win32 The gamma ramp size must be 256.
+ *
+ * @remark @wayland Gamma handling is a privileged protocol, this function
+ * will thus never be implemented and emits @ref GLFW_FEATURE_UNAVAILABLE.
+ *
+ * @pointer_lifetime The specified gamma ramp is copied before this function
+ * returns.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref monitor_gamma
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup monitor
+ */
+ void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp);
+/*! @brief Resets all window hints to their default values.
+ *
+ * This function resets all window hints to their
+ * [default values](@ref window_hints_values).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_hints
+ * @sa @ref glfwWindowHint
+ * @sa @ref glfwWindowHintString
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ void glfwDefaultWindowHints(void);
+/*! @brief Sets the specified window hint to the desired value.
+ *
+ * This function sets hints for the next call to @ref glfwCreateWindow. The
+ * hints, once set, retain their values until changed by a call to this
+ * function or @ref glfwDefaultWindowHints, or until the library is terminated.
+ *
+ * Only integer value hints can be set with this function. String value hints
+ * are set with @ref glfwWindowHintString.
+ *
+ * This function does not check whether the specified hint values are valid.
+ * If you set hints to invalid values this will instead be reported by the next
+ * call to @ref glfwCreateWindow.
+ *
+ * Some hints are platform specific. These may be set on any platform but they
+ * will only affect their specific platform. Other platforms will ignore them.
+ * Setting these hints requires no platform specific headers or functions.
+ *
+ * @param[in] hint The [window hint](@ref window_hints) to set.
+ * @param[in] value The new value of the window hint.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_hints
+ * @sa @ref glfwWindowHintString
+ * @sa @ref glfwDefaultWindowHints
+ *
+ * @since Added in version 3.0. Replaces `glfwOpenWindowHint`.
+ *
+ * @ingroup window
+ */
+ void glfwWindowHint(int hint, int value);
+/*! @brief Sets the specified window hint to the desired value.
+ *
+ * This function sets hints for the next call to @ref glfwCreateWindow. The
+ * hints, once set, retain their values until changed by a call to this
+ * function or @ref glfwDefaultWindowHints, or until the library is terminated.
+ *
+ * Only string type hints can be set with this function. Integer value hints
+ * are set with @ref glfwWindowHint.
+ *
+ * This function does not check whether the specified hint values are valid.
+ * If you set hints to invalid values this will instead be reported by the next
+ * call to @ref glfwCreateWindow.
+ *
+ * Some hints are platform specific. These may be set on any platform but they
+ * will only affect their specific platform. Other platforms will ignore them.
+ * Setting these hints requires no platform specific headers or functions.
+ *
+ * @param[in] hint The [window hint](@ref window_hints) to set.
+ * @param[in] value The new value of the window hint.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @pointer_lifetime The specified string is copied before this function
+ * returns.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_hints
+ * @sa @ref glfwWindowHint
+ * @sa @ref glfwDefaultWindowHints
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+ void glfwWindowHintString(int hint, const char* value);
+/*! @brief Creates a window and its associated context.
+ *
+ * This function creates a window and its associated OpenGL or OpenGL ES
+ * context. Most of the options controlling how the window and its context
+ * should be created are specified with [window hints](@ref window_hints).
+ *
+ * Successful creation does not change which context is current. Before you
+ * can use the newly created context, you need to
+ * [make it current](@ref context_current). For information about the `share`
+ * parameter, see @ref context_sharing.
+ *
+ * The created window, framebuffer and context may differ from what you
+ * requested, as not all parameters and hints are
+ * [hard constraints](@ref window_hints_hard). This includes the size of the
+ * window, especially for full screen windows. To query the actual attributes
+ * of the created window, framebuffer and context, see @ref
+ * glfwGetWindowAttrib, @ref glfwGetWindowSize and @ref glfwGetFramebufferSize.
+ *
+ * To create a full screen window, you need to specify the monitor the window
+ * will cover. If no monitor is specified, the window will be windowed mode.
+ * Unless you have a way for the user to choose a specific monitor, it is
+ * recommended that you pick the primary monitor. For more information on how
+ * to query connected monitors, see @ref monitor_monitors.
+ *
+ * For full screen windows, the specified size becomes the resolution of the
+ * window's _desired video mode_. As long as a full screen window is not
+ * iconified, the supported video mode most closely matching the desired video
+ * mode is set for the specified monitor. For more information about full
+ * screen windows, including the creation of so called _windowed full screen_
+ * or _borderless full screen_ windows, see @ref window_windowed_full_screen.
+ *
+ * Once you have created the window, you can switch it between windowed and
+ * full screen mode with @ref glfwSetWindowMonitor. This will not affect its
+ * OpenGL or OpenGL ES context.
+ *
+ * By default, newly created windows use the placement recommended by the
+ * window system. To create the window at a specific position, set the @ref
+ * GLFW_POSITION_X and @ref GLFW_POSITION_Y window hints before creation. To
+ * restore the default behavior, set either or both hints back to
+ * `GLFW_ANY_POSITION`.
+ *
+ * As long as at least one full screen window is not iconified, the screensaver
+ * is prohibited from starting.
+ *
+ * Window systems put limits on window sizes. Very large or very small window
+ * dimensions may be overridden by the window system on creation. Check the
+ * actual [size](@ref window_size) after creation.
+ *
+ * The [swap interval](@ref buffer_swap) is not set during window creation and
+ * the initial value may vary depending on driver settings and defaults.
+ *
+ * @param[in] width The desired width, in screen coordinates, of the window.
+ * This must be greater than zero.
+ * @param[in] height The desired height, in screen coordinates, of the window.
+ * This must be greater than zero.
+ * @param[in] title The initial, UTF-8 encoded window title.
+ * @param[in] monitor The monitor to use for full screen mode, or `NULL` for
+ * windowed mode.
+ * @param[in] share The window whose context to share resources with, or `NULL`
+ * to not share resources.
+ * @return The handle of the created window, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_API_UNAVAILABLE, @ref
+ * GLFW_VERSION_UNAVAILABLE, @ref GLFW_FORMAT_UNAVAILABLE, @ref
+ * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark @win32 Window creation will fail if the Microsoft GDI software
+ * OpenGL implementation is the only one available.
+ *
+ * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` it
+ * will be set as the initial icon for the window. If no such icon is present,
+ * the `IDI_APPLICATION` icon will be used instead. To set a different icon,
+ * see @ref glfwSetWindowIcon.
+ *
+ * @remark @win32 The context to share resources with must not be current on
+ * any other thread.
+ *
+ * @remark @macos The OS only supports core profile contexts for OpenGL
+ * versions 3.2 and later. Before creating an OpenGL context of version 3.2 or
+ * later you must set the [GLFW_OPENGL_PROFILE](@ref GLFW_OPENGL_PROFILE_hint)
+ * hint accordingly. OpenGL 3.0 and 3.1 contexts are not supported at all
+ * on macOS.
+ *
+ * @remark @macos The GLFW window has no icon, as it is not a document
+ * window, but the dock icon will be the same as the application bundle's icon.
+ * For more information on bundles, see the
+ * [Bundle Programming Guide][bundle-guide] in the Mac Developer Library.
+ *
+ * [bundle-guide]: https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/
+ *
+ * @remark @macos On OS X 10.10 and later the window frame will not be rendered
+ * at full resolution on Retina displays unless the
+ * [GLFW_SCALE_FRAMEBUFFER](@ref GLFW_SCALE_FRAMEBUFFER_hint)
+ * hint is `GLFW_TRUE` and the `NSHighResolutionCapable` key is enabled in the
+ * application bundle's `Info.plist`. For more information, see
+ * [High Resolution Guidelines for OS X][hidpi-guide] in the Mac Developer
+ * Library. The GLFW test and example programs use a custom `Info.plist`
+ * template for this, which can be found as `CMake/Info.plist.in` in the source
+ * tree.
+ *
+ * [hidpi-guide]: https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html
+ *
+ * @remark @macos When activating frame autosaving with
+ * [GLFW_COCOA_FRAME_NAME](@ref GLFW_COCOA_FRAME_NAME_hint), the specified
+ * window size and position may be overridden by previously saved values.
+ *
+ * @remark @wayland GLFW uses [libdecor][] where available to create its window
+ * decorations. This in turn uses server-side XDG decorations where available
+ * and provides high quality client-side decorations on compositors like GNOME.
+ * If both XDG decorations and libdecor are unavailable, GLFW falls back to
+ * a very simple set of window decorations that only support moving, resizing
+ * and the window manager's right-click menu.
+ *
+ * [libdecor]: https://gitlab.freedesktop.org/libdecor/libdecor
+ *
+ * @remark @x11 Some window managers will not respect the placement of
+ * initially hidden windows.
+ *
+ * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for
+ * a window to reach its requested state. This means you may not be able to
+ * query the final size, position or other attributes directly after window
+ * creation.
+ *
+ * @remark @x11 The class part of the `WM_CLASS` window property will by
+ * default be set to the window title passed to this function. The instance
+ * part will use the contents of the `RESOURCE_NAME` environment variable, if
+ * present and not empty, or fall back to the window title. Set the
+ * [GLFW_X11_CLASS_NAME](@ref GLFW_X11_CLASS_NAME_hint) and
+ * [GLFW_X11_INSTANCE_NAME](@ref GLFW_X11_INSTANCE_NAME_hint) window hints to
+ * override this.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_creation
+ * @sa @ref glfwDestroyWindow
+ *
+ * @since Added in version 3.0. Replaces `glfwOpenWindow`.
+ *
+ * @ingroup window
+ */
+ GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share);
+/*! @brief Destroys the specified window and its context.
+ *
+ * This function destroys the specified window and its context. On calling
+ * this function, no further callbacks will be called for that window.
+ *
+ * If the context of the specified window is current on the main thread, it is
+ * detached before being destroyed.
+ *
+ * @param[in] window The window to destroy.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @note The context of the specified window must not be current on any other
+ * thread when this function is called.
+ *
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_creation
+ * @sa @ref glfwCreateWindow
+ *
+ * @since Added in version 3.0. Replaces `glfwCloseWindow`.
+ *
+ * @ingroup window
+ */
+ void glfwDestroyWindow(GLFWwindow* window);
+/*! @brief Checks the close flag of the specified window.
+ *
+ * This function returns the value of the close flag of the specified window.
+ *
+ * @param[in] window The window to query.
+ * @return The value of the close flag.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @sa @ref window_close
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ int glfwWindowShouldClose(GLFWwindow* window);
+/*! @brief Sets the close flag of the specified window.
+ *
+ * This function sets the value of the close flag of the specified window.
+ * This can be used to override the user's attempt to close the window, or
+ * to signal that it should be closed.
+ *
+ * @param[in] window The window whose flag to change.
+ * @param[in] value The new value.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @sa @ref window_close
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowShouldClose(GLFWwindow* window, int value);
+/*! @brief Returns the title of the specified window.
+ *
+ * This function returns the window title, encoded as UTF-8, of the specified
+ * window. This is the title set previously by @ref glfwCreateWindow
+ * or @ref glfwSetWindowTitle.
+ *
+ * @param[in] window The window to query.
+ * @return The UTF-8 encoded window title, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @remark The returned title is currently a copy of the title last set by @ref
+ * glfwCreateWindow or @ref glfwSetWindowTitle. It does not include any
+ * additional text which may be appended by the platform or another program.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the next call to @ref
+ * glfwGetWindowTitle or @ref glfwSetWindowTitle, or until the library is
+ * terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_title
+ * @sa @ref glfwSetWindowTitle
+ *
+ * @since Added in version 3.4.
+ *
+ * @ingroup window
+ */
+ const char* glfwGetWindowTitle(GLFWwindow* window);
+/*! @brief Sets the title of the specified window.
+ *
+ * This function sets the window title, encoded as UTF-8, of the specified
+ * window.
+ *
+ * @param[in] window The window whose title to change.
+ * @param[in] title The UTF-8 encoded window title.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark @macos The window title will not be updated until the next time you
+ * process events.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_title
+ * @sa @ref glfwGetWindowTitle
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowTitle(GLFWwindow* window, const char* title);
+/*! @brief Sets the icon for the specified window.
+ *
+ * This function sets the icon of the specified window. If passed an array of
+ * candidate images, those of or closest to the sizes desired by the system are
+ * selected. If no images are specified, the window reverts to its default
+ * icon.
+ *
+ * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight
+ * bits per channel with the red channel first. They are arranged canonically
+ * as packed sequential rows, starting from the top-left corner.
+ *
+ * The desired image sizes varies depending on platform and system settings.
+ * The selected images will be rescaled as needed. Good sizes include 16x16,
+ * 32x32 and 48x48.
+ *
+ * @param[in] window The window whose icon to set.
+ * @param[in] count The number of images in the specified array, or zero to
+ * revert to the default window icon.
+ * @param[in] images The images to create the icon from. This is ignored if
+ * count is zero.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_VALUE, @ref GLFW_PLATFORM_ERROR and @ref
+ * GLFW_FEATURE_UNAVAILABLE (see remarks).
+ *
+ * @pointer_lifetime The specified image data is copied before this function
+ * returns.
+ *
+ * @remark @macos Regular windows do not have icons on macOS. This function
+ * will emit @ref GLFW_FEATURE_UNAVAILABLE. The dock icon will be the same as
+ * the application bundle's icon. For more information on bundles, see the
+ * [Bundle Programming Guide][bundle-guide] in the Mac Developer Library.
+ *
+ * [bundle-guide]: https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/
+ *
+ * @remark @wayland There is no existing protocol to change an icon, the
+ * window will thus inherit the one defined in the application's desktop file.
+ * This function will emit @ref GLFW_FEATURE_UNAVAILABLE.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_icon
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images);
+/*! @brief Retrieves the position of the content area of the specified window.
+ *
+ * This function retrieves the position, in screen coordinates, of the
+ * upper-left corner of the content area of the specified window.
+ *
+ * Any or all of the position arguments may be `NULL`. If an error occurs, all
+ * non-`NULL` position arguments will be set to zero.
+ *
+ * @param[in] window The window to query.
+ * @param[out] xpos Where to store the x-coordinate of the upper-left corner of
+ * the content area, or `NULL`.
+ * @param[out] ypos Where to store the y-coordinate of the upper-left corner of
+ * the content area, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
+ *
+ * @remark @wayland There is no way for an application to retrieve the global
+ * position of its windows. This function will emit @ref
+ * GLFW_FEATURE_UNAVAILABLE.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_pos
+ * @sa @ref glfwSetWindowPos
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos);
+/*! @brief Sets the position of the content area of the specified window.
+ *
+ * This function sets the position, in screen coordinates, of the upper-left
+ * corner of the content area of the specified windowed mode window. If the
+ * window is a full screen window, this function does nothing.
+ *
+ * __Do not use this function__ to move an already visible window unless you
+ * have very good reasons for doing so, as it will confuse and annoy the user.
+ *
+ * The window manager may put limits on what positions are allowed. GLFW
+ * cannot and should not override these limits.
+ *
+ * @param[in] window The window to query.
+ * @param[in] xpos The x-coordinate of the upper-left corner of the content area.
+ * @param[in] ypos The y-coordinate of the upper-left corner of the content area.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
+ *
+ * @remark @wayland There is no way for an application to set the global
+ * position of its windows. This function will emit @ref
+ * GLFW_FEATURE_UNAVAILABLE.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_pos
+ * @sa @ref glfwGetWindowPos
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos);
+/*! @brief Retrieves the size of the content area of the specified window.
+ *
+ * This function retrieves the size, in screen coordinates, of the content area
+ * of the specified window. If you wish to retrieve the size of the
+ * framebuffer of the window in pixels, see @ref glfwGetFramebufferSize.
+ *
+ * Any or all of the size arguments may be `NULL`. If an error occurs, all
+ * non-`NULL` size arguments will be set to zero.
+ *
+ * @param[in] window The window whose size to retrieve.
+ * @param[out] width Where to store the width, in screen coordinates, of the
+ * content area, or `NULL`.
+ * @param[out] height Where to store the height, in screen coordinates, of the
+ * content area, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_size
+ * @sa @ref glfwSetWindowSize
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+ void glfwGetWindowSize(GLFWwindow* window, int* width, int* height);
+/*! @brief Sets the size limits of the specified window.
+ *
+ * This function sets the size limits of the content area of the specified
+ * window. If the window is full screen, the size limits only take effect
+ * once it is made windowed. If the window is not resizable, this function
+ * does nothing.
+ *
+ * The size limits are applied immediately to a windowed mode window and may
+ * cause it to be resized.
+ *
+ * The maximum dimensions must be greater than or equal to the minimum
+ * dimensions and all must be greater than or equal to zero.
+ *
+ * @param[in] window The window to set limits for.
+ * @param[in] minwidth The minimum width, in screen coordinates, of the content
+ * area, or `GLFW_DONT_CARE`.
+ * @param[in] minheight The minimum height, in screen coordinates, of the
+ * content area, or `GLFW_DONT_CARE`.
+ * @param[in] maxwidth The maximum width, in screen coordinates, of the content
+ * area, or `GLFW_DONT_CARE`.
+ * @param[in] maxheight The maximum height, in screen coordinates, of the
+ * content area, or `GLFW_DONT_CARE`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark If you set size limits and an aspect ratio that conflict, the
+ * results are undefined.
+ *
+ * @remark @wayland The size limits will not be applied until the window is
+ * actually resized, either by the user or by the compositor.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_sizelimits
+ * @sa @ref glfwSetWindowAspectRatio
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight);
+/*! @brief Sets the aspect ratio of the specified window.
+ *
+ * This function sets the required aspect ratio of the content area of the
+ * specified window. If the window is full screen, the aspect ratio only takes
+ * effect once it is made windowed. If the window is not resizable, this
+ * function does nothing.
+ *
+ * The aspect ratio is specified as a numerator and a denominator and both
+ * values must be greater than zero. For example, the common 16:9 aspect ratio
+ * is specified as 16 and 9, respectively.
+ *
+ * If the numerator and denominator is set to `GLFW_DONT_CARE` then the aspect
+ * ratio limit is disabled.
+ *
+ * The aspect ratio is applied immediately to a windowed mode window and may
+ * cause it to be resized.
+ *
+ * @param[in] window The window to set limits for.
+ * @param[in] numer The numerator of the desired aspect ratio, or
+ * `GLFW_DONT_CARE`.
+ * @param[in] denom The denominator of the desired aspect ratio, or
+ * `GLFW_DONT_CARE`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark If you set size limits and an aspect ratio that conflict, the
+ * results are undefined.
+ *
+ * @remark @wayland The aspect ratio will not be applied until the window is
+ * actually resized, either by the user or by the compositor.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_sizelimits
+ * @sa @ref glfwSetWindowSizeLimits
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom);
+/*! @brief Sets the size of the content area of the specified window.
+ *
+ * This function sets the size, in screen coordinates, of the content area of
+ * the specified window.
+ *
+ * For full screen windows, this function updates the resolution of its desired
+ * video mode and switches to the video mode closest to it, without affecting
+ * the window's context. As the context is unaffected, the bit depths of the
+ * framebuffer remain unchanged.
+ *
+ * If you wish to update the refresh rate of the desired video mode in addition
+ * to its resolution, see @ref glfwSetWindowMonitor.
+ *
+ * The window manager may put limits on what sizes are allowed. GLFW cannot
+ * and should not override these limits.
+ *
+ * @param[in] window The window to resize.
+ * @param[in] width The desired width, in screen coordinates, of the window
+ * content area.
+ * @param[in] height The desired height, in screen coordinates, of the window
+ * content area.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_size
+ * @sa @ref glfwGetWindowSize
+ * @sa @ref glfwSetWindowMonitor
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowSize(GLFWwindow* window, int width, int height);
+/*! @brief Retrieves the size of the framebuffer of the specified window.
+ *
+ * This function retrieves the size, in pixels, of the framebuffer of the
+ * specified window. If you wish to retrieve the size of the window in screen
+ * coordinates, see @ref glfwGetWindowSize.
+ *
+ * Any or all of the size arguments may be `NULL`. If an error occurs, all
+ * non-`NULL` size arguments will be set to zero.
+ *
+ * @param[in] window The window whose framebuffer to query.
+ * @param[out] width Where to store the width, in pixels, of the framebuffer,
+ * or `NULL`.
+ * @param[out] height Where to store the height, in pixels, of the framebuffer,
+ * or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_fbsize
+ * @sa @ref glfwSetFramebufferSizeCallback
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height);
+/*! @brief Retrieves the size of the frame of the window.
+ *
+ * This function retrieves the size, in screen coordinates, of each edge of the
+ * frame of the specified window. This size includes the title bar, if the
+ * window has one. The size of the frame may vary depending on the
+ * [window-related hints](@ref window_hints_wnd) used to create it.
+ *
+ * Because this function retrieves the size of each window frame edge and not
+ * the offset along a particular coordinate axis, the retrieved values will
+ * always be zero or positive.
+ *
+ * Any or all of the size arguments may be `NULL`. If an error occurs, all
+ * non-`NULL` size arguments will be set to zero.
+ *
+ * @param[in] window The window whose frame size to query.
+ * @param[out] left Where to store the size, in screen coordinates, of the left
+ * edge of the window frame, or `NULL`.
+ * @param[out] top Where to store the size, in screen coordinates, of the top
+ * edge of the window frame, or `NULL`.
+ * @param[out] right Where to store the size, in screen coordinates, of the
+ * right edge of the window frame, or `NULL`.
+ * @param[out] bottom Where to store the size, in screen coordinates, of the
+ * bottom edge of the window frame, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_size
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup window
+ */
+ void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom);
+/*! @brief Retrieves the content scale for the specified window.
+ *
+ * This function retrieves the content scale for the specified window. The
+ * content scale is the ratio between the current DPI and the platform's
+ * default DPI. This is especially important for text and any UI elements. If
+ * the pixel dimensions of your UI scaled by this look appropriate on your
+ * machine then it should appear at a reasonable size on other machines
+ * regardless of their DPI and scaling settings. This relies on the system DPI
+ * and scaling settings being somewhat correct.
+ *
+ * On platforms where each monitors can have its own content scale, the window
+ * content scale will depend on which monitor the system considers the window
+ * to be on.
+ *
+ * @param[in] window The window to query.
+ * @param[out] xscale Where to store the x-axis content scale, or `NULL`.
+ * @param[out] yscale Where to store the y-axis content scale, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_scale
+ * @sa @ref glfwSetWindowContentScaleCallback
+ * @sa @ref glfwGetMonitorContentScale
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+ void glfwGetWindowContentScale(GLFWwindow* window, float* xscale, float* yscale);
+/*! @brief Returns the opacity of the whole window.
+ *
+ * This function returns the opacity of the window, including any decorations.
+ *
+ * The opacity (or alpha) value is a positive finite number between zero and
+ * one, where zero is fully transparent and one is fully opaque. If the system
+ * does not support whole window transparency, this function always returns one.
+ *
+ * The initial opacity value for newly created windows is one.
+ *
+ * @param[in] window The window to query.
+ * @return The opacity value of the specified window.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_transparency
+ * @sa @ref glfwSetWindowOpacity
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+ float glfwGetWindowOpacity(GLFWwindow* window);
+/*! @brief Sets the opacity of the whole window.
+ *
+ * This function sets the opacity of the window, including any decorations.
+ *
+ * The opacity (or alpha) value is a positive finite number between zero and
+ * one, where zero is fully transparent and one is fully opaque.
+ *
+ * The initial opacity value for newly created windows is one.
+ *
+ * A window created with framebuffer transparency may not use whole window
+ * transparency. The results of doing this are undefined.
+ *
+ * @param[in] window The window to set the opacity for.
+ * @param[in] opacity The desired opacity of the specified window.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
+ *
+ * @remark @wayland There is no way to set an opacity factor for a window.
+ * This function will emit @ref GLFW_FEATURE_UNAVAILABLE.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_transparency
+ * @sa @ref glfwGetWindowOpacity
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowOpacity(GLFWwindow* window, float opacity);
+/*! @brief Iconifies the specified window.
+ *
+ * This function iconifies (minimizes) the specified window if it was
+ * previously restored. If the window is already iconified, this function does
+ * nothing.
+ *
+ * If the specified window is a full screen window, GLFW restores the original
+ * video mode of the monitor. The window's desired video mode is set again
+ * when the window is restored.
+ *
+ * @param[in] window The window to iconify.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark @wayland Once a window is iconified, @ref glfwRestoreWindow won’t
+ * be able to restore it. This is a design decision of the xdg-shell
+ * protocol.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_iconify
+ * @sa @ref glfwRestoreWindow
+ * @sa @ref glfwMaximizeWindow
+ *
+ * @since Added in version 2.1.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+ void glfwIconifyWindow(GLFWwindow* window);
+/*! @brief Restores the specified window.
+ *
+ * This function restores the specified window if it was previously iconified
+ * (minimized) or maximized. If the window is already restored, this function
+ * does nothing.
+ *
+ * If the specified window is an iconified full screen window, its desired
+ * video mode is set again for its monitor when the window is restored.
+ *
+ * @param[in] window The window to restore.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_iconify
+ * @sa @ref glfwIconifyWindow
+ * @sa @ref glfwMaximizeWindow
+ *
+ * @since Added in version 2.1.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+ void glfwRestoreWindow(GLFWwindow* window);
+/*! @brief Maximizes the specified window.
+ *
+ * This function maximizes the specified window if it was previously not
+ * maximized. If the window is already maximized, this function does nothing.
+ *
+ * If the specified window is a full screen window, this function does nothing.
+ *
+ * @param[in] window The window to maximize.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @par Thread Safety
+ * This function may only be called from the main thread.
+ *
+ * @sa @ref window_iconify
+ * @sa @ref glfwIconifyWindow
+ * @sa @ref glfwRestoreWindow
+ *
+ * @since Added in GLFW 3.2.
+ *
+ * @ingroup window
+ */
+ void glfwMaximizeWindow(GLFWwindow* window);
+/*! @brief Makes the specified window visible.
+ *
+ * This function makes the specified window visible if it was previously
+ * hidden. If the window is already visible or is in full screen mode, this
+ * function does nothing.
+ *
+ * By default, windowed mode windows are focused when shown
+ * Set the [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) window hint
+ * to change this behavior for all newly created windows, or change the
+ * behavior for an existing window with @ref glfwSetWindowAttrib.
+ *
+ * @param[in] window The window to make visible.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark @wayland Because Wayland wants every frame of the desktop to be
+ * complete, this function does not immediately make the window visible.
+ * Instead it will become visible the next time the window framebuffer is
+ * updated after this call.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_hide
+ * @sa @ref glfwHideWindow
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ void glfwShowWindow(GLFWwindow* window);
+/*! @brief Hides the specified window.
+ *
+ * This function hides the specified window if it was previously visible. If
+ * the window is already hidden or is in full screen mode, this function does
+ * nothing.
+ *
+ * @param[in] window The window to hide.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_hide
+ * @sa @ref glfwShowWindow
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ void glfwHideWindow(GLFWwindow* window);
+/*! @brief Brings the specified window to front and sets input focus.
+ *
+ * This function brings the specified window to front and sets input focus.
+ * The window should already be visible and not iconified.
+ *
+ * By default, both windowed and full screen mode windows are focused when
+ * initially created. Set the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) to
+ * disable this behavior.
+ *
+ * Also by default, windowed mode windows are focused when shown
+ * with @ref glfwShowWindow. Set the
+ * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) to disable this behavior.
+ *
+ * __Do not use this function__ to steal focus from other applications unless
+ * you are certain that is what the user wants. Focus stealing can be
+ * extremely disruptive.
+ *
+ * For a less disruptive way of getting the user's attention, see
+ * [attention requests](@ref window_attention).
+ *
+ * @param[in] window The window to give input focus.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark @wayland The compositor will likely ignore focus requests unless
+ * another window created by the same application already has input focus.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_focus
+ * @sa @ref window_attention
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+ void glfwFocusWindow(GLFWwindow* window);
+/*! @brief Requests user attention to the specified window.
+ *
+ * This function requests user attention to the specified window. On
+ * platforms where this is not supported, attention is requested to the
+ * application as a whole.
+ *
+ * Once the user has given attention, usually by focusing the window or
+ * application, the system will end the request automatically.
+ *
+ * @param[in] window The window to request attention to.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark @macos Attention is requested to the application as a whole, not the
+ * specific window.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_attention
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+ void glfwRequestWindowAttention(GLFWwindow* window);
+/*! @brief Returns the monitor that the window uses for full screen mode.
+ *
+ * This function returns the handle of the monitor that the specified window is
+ * in full screen on.
+ *
+ * @param[in] window The window to query.
+ * @return The monitor, or `NULL` if the window is in windowed mode or an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_monitor
+ * @sa @ref glfwSetWindowMonitor
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window);
+/*! @brief Sets the mode, monitor, video mode and placement of a window.
+ *
+ * This function sets the monitor that the window uses for full screen mode or,
+ * if the monitor is `NULL`, makes it windowed mode.
+ *
+ * When setting a monitor, this function updates the width, height and refresh
+ * rate of the desired video mode and switches to the video mode closest to it.
+ * The window position is ignored when setting a monitor.
+ *
+ * When the monitor is `NULL`, the position, width and height are used to
+ * place the window content area. The refresh rate is ignored when no monitor
+ * is specified.
+ *
+ * If you only wish to update the resolution of a full screen window or the
+ * size of a windowed mode window, see @ref glfwSetWindowSize.
+ *
+ * When a window transitions from full screen to windowed mode, this function
+ * restores any previous window settings such as whether it is decorated,
+ * floating, resizable, has size or aspect ratio limits, etc.
+ *
+ * @param[in] window The window whose monitor, size or video mode to set.
+ * @param[in] monitor The desired monitor, or `NULL` to set windowed mode.
+ * @param[in] xpos The desired x-coordinate of the upper-left corner of the
+ * content area.
+ * @param[in] ypos The desired y-coordinate of the upper-left corner of the
+ * content area.
+ * @param[in] width The desired with, in screen coordinates, of the content
+ * area or video mode.
+ * @param[in] height The desired height, in screen coordinates, of the content
+ * area or video mode.
+ * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode,
+ * or `GLFW_DONT_CARE`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark The OpenGL or OpenGL ES context will not be destroyed or otherwise
+ * affected by any resizing or mode switching, although you may need to update
+ * your viewport if the framebuffer size has changed.
+ *
+ * @remark @wayland The desired window position is ignored, as there is no way
+ * for an application to set this property.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_monitor
+ * @sa @ref window_full_screen
+ * @sa @ref glfwGetWindowMonitor
+ * @sa @ref glfwSetWindowSize
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate);
+/*! @brief Returns an attribute of the specified window.
+ *
+ * This function returns the value of an attribute of the specified window or
+ * its OpenGL or OpenGL ES context.
+ *
+ * @param[in] window The window to query.
+ * @param[in] attrib The [window attribute](@ref window_attribs) whose value to
+ * return.
+ * @return The value of the attribute, or zero if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark Framebuffer related hints are not window attributes. See @ref
+ * window_attribs_fb for more information.
+ *
+ * @remark Zero is a valid value for many window and context related
+ * attributes so you cannot use a return value of zero as an indication of
+ * errors. However, this function should not fail as long as it is passed
+ * valid arguments and the library has been [initialized](@ref intro_init).
+ *
+ * @remark @wayland The Wayland protocol provides no way to check whether a
+ * window is iconfied, so @ref GLFW_ICONIFIED always returns `GLFW_FALSE`.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_attribs
+ * @sa @ref glfwSetWindowAttrib
+ *
+ * @since Added in version 3.0. Replaces `glfwGetWindowParam` and
+ * `glfwGetGLVersion`.
+ *
+ * @ingroup window
+ */
+ int glfwGetWindowAttrib(GLFWwindow* window, int attrib);
+/*! @brief Sets an attribute of the specified window.
+ *
+ * This function sets the value of an attribute of the specified window.
+ *
+ * The supported attributes are [GLFW_DECORATED](@ref GLFW_DECORATED_attrib),
+ * [GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib),
+ * [GLFW_FLOATING](@ref GLFW_FLOATING_attrib),
+ * [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and
+ * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib).
+ * [GLFW_MOUSE_PASSTHROUGH](@ref GLFW_MOUSE_PASSTHROUGH_attrib)
+ *
+ * Some of these attributes are ignored for full screen windows. The new
+ * value will take effect if the window is later made windowed.
+ *
+ * Some of these attributes are ignored for windowed mode windows. The new
+ * value will take effect if the window is later made full screen.
+ *
+ * @param[in] window The window to set the attribute for.
+ * @param[in] attrib A supported window attribute.
+ * @param[in] value `GLFW_TRUE` or `GLFW_FALSE`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_PLATFORM_ERROR and @ref
+ * GLFW_FEATURE_UNAVAILABLE (see remarks).
+ *
+ * @remark Calling @ref glfwGetWindowAttrib will always return the latest
+ * value, even if that value is ignored by the current mode of the window.
+ *
+ * @remark @wayland The [GLFW_FLOATING](@ref GLFW_FLOATING_attrib) window attribute is
+ * not supported. Setting this will emit @ref GLFW_FEATURE_UNAVAILABLE.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_attribs
+ * @sa @ref glfwGetWindowAttrib
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowAttrib(GLFWwindow* window, int attrib, int value);
+/*! @brief Sets the user pointer of the specified window.
+ *
+ * This function sets the user-defined pointer of the specified window. The
+ * current value is retained until the window is destroyed. The initial value
+ * is `NULL`.
+ *
+ * @param[in] window The window whose pointer to set.
+ * @param[in] pointer The new value.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @sa @ref window_userptr
+ * @sa @ref glfwGetWindowUserPointer
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer);
+/*! @brief Returns the user pointer of the specified window.
+ *
+ * This function returns the current value of the user-defined pointer of the
+ * specified window. The initial value is `NULL`.
+ *
+ * @param[in] window The window whose pointer to return.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @sa @ref window_userptr
+ * @sa @ref glfwSetWindowUserPointer
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ void* glfwGetWindowUserPointer(GLFWwindow* window);
+/*! @brief Sets the position callback for the specified window.
+ *
+ * This function sets the position callback of the specified window, which is
+ * called when the window is moved. The callback is provided with the
+ * position, in screen coordinates, of the upper-left corner of the content
+ * area of the window.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int xpos, int ypos)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWwindowposfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @remark @wayland This callback will never be called, as there is no way for
+ * an application to know its global position.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_pos
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun callback);
+/*! @brief Sets the size callback for the specified window.
+ *
+ * This function sets the size callback of the specified window, which is
+ * called when the window is resized. The callback is provided with the size,
+ * in screen coordinates, of the content area of the window.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int width, int height)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWwindowsizefun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_size
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter and return value.
+ *
+ * @ingroup window
+ */
+ GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun callback);
+/*! @brief Sets the close callback for the specified window.
+ *
+ * This function sets the close callback of the specified window, which is
+ * called when the user attempts to close the window, for example by clicking
+ * the close widget in the title bar.
+ *
+ * The close flag is set before this callback is called, but you can modify it
+ * at any time with @ref glfwSetWindowShouldClose.
+ *
+ * The close callback is not triggered by @ref glfwDestroyWindow.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWwindowclosefun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @remark @macos Selecting Quit from the application menu will trigger the
+ * close callback for all windows.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_close
+ *
+ * @since Added in version 2.5.
+ * @glfw3 Added window handle parameter and return value.
+ *
+ * @ingroup window
+ */
+ GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun callback);
+/*! @brief Sets the refresh callback for the specified window.
+ *
+ * This function sets the refresh callback of the specified window, which is
+ * called when the content area of the window needs to be redrawn, for example
+ * if the window has been exposed after having been covered by another window.
+ *
+ * On compositing window systems such as Aero, Compiz, Aqua or Wayland, where
+ * the window contents are saved off-screen, this callback may be called only
+ * very infrequently or never at all.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window);
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWwindowrefreshfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_refresh
+ *
+ * @since Added in version 2.5.
+ * @glfw3 Added window handle parameter and return value.
+ *
+ * @ingroup window
+ */
+ GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun callback);
+/*! @brief Sets the focus callback for the specified window.
+ *
+ * This function sets the focus callback of the specified window, which is
+ * called when the window gains or loses input focus.
+ *
+ * After the focus callback is called for a window that lost input focus,
+ * synthetic key and mouse button release events will be generated for all such
+ * that had been pressed. For more information, see @ref glfwSetKeyCallback
+ * and @ref glfwSetMouseButtonCallback.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int focused)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWwindowfocusfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_focus
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun callback);
+/*! @brief Sets the iconify callback for the specified window.
+ *
+ * This function sets the iconification callback of the specified window, which
+ * is called when the window is iconified or restored.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int iconified)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWwindowiconifyfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_iconify
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun callback);
+/*! @brief Sets the maximize callback for the specified window.
+ *
+ * This function sets the maximization callback of the specified window, which
+ * is called when the window is maximized or restored.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int maximized)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWwindowmaximizefun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_maximize
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+ GLFWwindowmaximizefun glfwSetWindowMaximizeCallback(GLFWwindow* window, GLFWwindowmaximizefun callback);
+/*! @brief Sets the framebuffer resize callback for the specified window.
+ *
+ * This function sets the framebuffer resize callback of the specified window,
+ * which is called when the framebuffer of the specified window is resized.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int width, int height)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWframebuffersizefun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_fbsize
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup window
+ */
+ GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun callback);
+/*! @brief Sets the window content scale callback for the specified window.
+ *
+ * This function sets the window content scale callback of the specified window,
+ * which is called when the content scale of the specified window changes.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, float xscale, float yscale)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWwindowcontentscalefun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_scale
+ * @sa @ref glfwGetWindowContentScale
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup window
+ */
+ GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback(GLFWwindow* window, GLFWwindowcontentscalefun callback);
+/*! @brief Processes all pending events.
+ *
+ * This function processes only those events that are already in the event
+ * queue and then returns immediately. Processing events will cause the window
+ * and input callbacks associated with those events to be called.
+ *
+ * On some platforms, a window move, resize or menu operation will cause event
+ * processing to block. This is due to how event processing is designed on
+ * those platforms. You can use the
+ * [window refresh callback](@ref window_refresh) to redraw the contents of
+ * your window when necessary during such operations.
+ *
+ * Do not assume that callbacks you set will _only_ be called in response to
+ * event processing functions like this one. While it is necessary to poll for
+ * events, window systems that require GLFW to register callbacks of its own
+ * can pass events to GLFW in response to many window system function calls.
+ * GLFW will pass those events on to the application callbacks before
+ * returning.
+ *
+ * Event processing is not required for joystick input to work.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref events
+ * @sa @ref glfwWaitEvents
+ * @sa @ref glfwWaitEventsTimeout
+ *
+ * @since Added in version 1.0.
+ *
+ * @ingroup window
+ */
+ void glfwPollEvents(void);
+/*! @brief Waits until events are queued and processes them.
+ *
+ * This function puts the calling thread to sleep until at least one event is
+ * available in the event queue. Once one or more events are available,
+ * it behaves exactly like @ref glfwPollEvents, i.e. the events in the queue
+ * are processed and the function then returns immediately. Processing events
+ * will cause the window and input callbacks associated with those events to be
+ * called.
+ *
+ * Since not all events are associated with callbacks, this function may return
+ * without a callback having been called even if you are monitoring all
+ * callbacks.
+ *
+ * On some platforms, a window move, resize or menu operation will cause event
+ * processing to block. This is due to how event processing is designed on
+ * those platforms. You can use the
+ * [window refresh callback](@ref window_refresh) to redraw the contents of
+ * your window when necessary during such operations.
+ *
+ * Do not assume that callbacks you set will _only_ be called in response to
+ * event processing functions like this one. While it is necessary to poll for
+ * events, window systems that require GLFW to register callbacks of its own
+ * can pass events to GLFW in response to many window system function calls.
+ * GLFW will pass those events on to the application callbacks before
+ * returning.
+ *
+ * Event processing is not required for joystick input to work.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref events
+ * @sa @ref glfwPollEvents
+ * @sa @ref glfwWaitEventsTimeout
+ *
+ * @since Added in version 2.5.
+ *
+ * @ingroup window
+ */
+ void glfwWaitEvents(void);
+/*! @brief Waits with timeout until events are queued and processes them.
+ *
+ * This function puts the calling thread to sleep until at least one event is
+ * available in the event queue, or until the specified timeout is reached. If
+ * one or more events are available, it behaves exactly like @ref
+ * glfwPollEvents, i.e. the events in the queue are processed and the function
+ * then returns immediately. Processing events will cause the window and input
+ * callbacks associated with those events to be called.
+ *
+ * The timeout value must be a positive finite number.
+ *
+ * Since not all events are associated with callbacks, this function may return
+ * without a callback having been called even if you are monitoring all
+ * callbacks.
+ *
+ * On some platforms, a window move, resize or menu operation will cause event
+ * processing to block. This is due to how event processing is designed on
+ * those platforms. You can use the
+ * [window refresh callback](@ref window_refresh) to redraw the contents of
+ * your window when necessary during such operations.
+ *
+ * Do not assume that callbacks you set will _only_ be called in response to
+ * event processing functions like this one. While it is necessary to poll for
+ * events, window systems that require GLFW to register callbacks of its own
+ * can pass events to GLFW in response to many window system function calls.
+ * GLFW will pass those events on to the application callbacks before
+ * returning.
+ *
+ * Event processing is not required for joystick input to work.
+ *
+ * @param[in] timeout The maximum amount of time, in seconds, to wait.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref events
+ * @sa @ref glfwPollEvents
+ * @sa @ref glfwWaitEvents
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+ void glfwWaitEventsTimeout(double timeout);
+/*! @brief Posts an empty event to the event queue.
+ *
+ * This function posts an empty event from the current thread to the event
+ * queue, causing @ref glfwWaitEvents or @ref glfwWaitEventsTimeout to return.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref events
+ * @sa @ref glfwWaitEvents
+ * @sa @ref glfwWaitEventsTimeout
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup window
+ */
+ void glfwPostEmptyEvent(void);
+/*! @brief Returns the value of an input option for the specified window.
+ *
+ * This function returns the value of an input option for the specified window.
+ * The mode must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS,
+ * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or
+ * @ref GLFW_RAW_MOUSE_MOTION.
+ *
+ * @param[in] window The window to query.
+ * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`,
+ * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or
+ * `GLFW_RAW_MOUSE_MOTION`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref glfwSetInputMode
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup input
+ */
+ int glfwGetInputMode(GLFWwindow* window, int mode);
+/*! @brief Sets an input option for the specified window.
+ *
+ * This function sets an input mode option for the specified window. The mode
+ * must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS,
+ * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or
+ * @ref GLFW_RAW_MOUSE_MOTION.
+ *
+ * If the mode is `GLFW_CURSOR`, the value must be one of the following cursor
+ * modes:
+ * - `GLFW_CURSOR_NORMAL` makes the cursor visible and behaving normally.
+ * - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the
+ * content area of the window but does not restrict the cursor from leaving.
+ * - `GLFW_CURSOR_DISABLED` hides and grabs the cursor, providing virtual
+ * and unlimited cursor movement. This is useful for implementing for
+ * example 3D camera controls.
+ * - `GLFW_CURSOR_CAPTURED` makes the cursor visible and confines it to the
+ * content area of the window.
+ *
+ * If the mode is `GLFW_STICKY_KEYS`, the value must be either `GLFW_TRUE` to
+ * enable sticky keys, or `GLFW_FALSE` to disable it. If sticky keys are
+ * enabled, a key press will ensure that @ref glfwGetKey returns `GLFW_PRESS`
+ * the next time it is called even if the key had been released before the
+ * call. This is useful when you are only interested in whether keys have been
+ * pressed but not when or in which order.
+ *
+ * If the mode is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either
+ * `GLFW_TRUE` to enable sticky mouse buttons, or `GLFW_FALSE` to disable it.
+ * If sticky mouse buttons are enabled, a mouse button press will ensure that
+ * @ref glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even
+ * if the mouse button had been released before the call. This is useful when
+ * you are only interested in whether mouse buttons have been pressed but not
+ * when or in which order.
+ *
+ * If the mode is `GLFW_LOCK_KEY_MODS`, the value must be either `GLFW_TRUE` to
+ * enable lock key modifier bits, or `GLFW_FALSE` to disable them. If enabled,
+ * callbacks that receive modifier bits will also have the @ref
+ * GLFW_MOD_CAPS_LOCK bit set when the event was generated with Caps Lock on,
+ * and the @ref GLFW_MOD_NUM_LOCK bit when Num Lock was on.
+ *
+ * If the mode is `GLFW_RAW_MOUSE_MOTION`, the value must be either `GLFW_TRUE`
+ * to enable raw (unscaled and unaccelerated) mouse motion when the cursor is
+ * disabled, or `GLFW_FALSE` to disable it. If raw motion is not supported,
+ * attempting to set this will emit @ref GLFW_FEATURE_UNAVAILABLE. Call @ref
+ * glfwRawMouseMotionSupported to check for support.
+ *
+ * @param[in] window The window whose input mode to set.
+ * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`,
+ * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or
+ * `GLFW_RAW_MOUSE_MOTION`.
+ * @param[in] value The new value of the specified input mode.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM, @ref GLFW_PLATFORM_ERROR and @ref
+ * GLFW_FEATURE_UNAVAILABLE (see above).
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref glfwGetInputMode
+ *
+ * @since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`.
+ *
+ * @ingroup input
+ */
+ void glfwSetInputMode(GLFWwindow* window, int mode, int value);
+/*! @brief Returns whether raw mouse motion is supported.
+ *
+ * This function returns whether raw mouse motion is supported on the current
+ * system. This status does not change after GLFW has been initialized so you
+ * only need to check this once. If you attempt to enable raw motion on
+ * a system that does not support it, @ref GLFW_PLATFORM_ERROR will be emitted.
+ *
+ * Raw mouse motion is closer to the actual motion of the mouse across
+ * a surface. It is not affected by the scaling and acceleration applied to
+ * the motion of the desktop cursor. That processing is suitable for a cursor
+ * while raw motion is better for controlling for example a 3D camera. Because
+ * of this, raw mouse motion is only provided when the cursor is disabled.
+ *
+ * @return `GLFW_TRUE` if raw mouse motion is supported on the current machine,
+ * or `GLFW_FALSE` otherwise.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref raw_mouse_motion
+ * @sa @ref glfwSetInputMode
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ int glfwRawMouseMotionSupported(void);
+/*! @brief Returns the layout-specific name of the specified printable key.
+ *
+ * This function returns the name of the specified printable key, encoded as
+ * UTF-8. This is typically the character that key would produce without any
+ * modifier keys, intended for displaying key bindings to the user. For dead
+ * keys, it is typically the diacritic it would add to a character.
+ *
+ * __Do not use this function__ for [text input](@ref input_char). You will
+ * break text input for many languages even if it happens to work for yours.
+ *
+ * If the key is `GLFW_KEY_UNKNOWN`, the scancode is used to identify the key,
+ * otherwise the scancode is ignored. If you specify a non-printable key, or
+ * `GLFW_KEY_UNKNOWN` and a scancode that maps to a non-printable key, this
+ * function returns `NULL` but does not emit an error.
+ *
+ * This behavior allows you to always pass in the arguments in the
+ * [key callback](@ref input_key) without modification.
+ *
+ * The printable keys are:
+ * - `GLFW_KEY_APOSTROPHE`
+ * - `GLFW_KEY_COMMA`
+ * - `GLFW_KEY_MINUS`
+ * - `GLFW_KEY_PERIOD`
+ * - `GLFW_KEY_SLASH`
+ * - `GLFW_KEY_SEMICOLON`
+ * - `GLFW_KEY_EQUAL`
+ * - `GLFW_KEY_LEFT_BRACKET`
+ * - `GLFW_KEY_RIGHT_BRACKET`
+ * - `GLFW_KEY_BACKSLASH`
+ * - `GLFW_KEY_WORLD_1`
+ * - `GLFW_KEY_WORLD_2`
+ * - `GLFW_KEY_0` to `GLFW_KEY_9`
+ * - `GLFW_KEY_A` to `GLFW_KEY_Z`
+ * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9`
+ * - `GLFW_KEY_KP_DECIMAL`
+ * - `GLFW_KEY_KP_DIVIDE`
+ * - `GLFW_KEY_KP_MULTIPLY`
+ * - `GLFW_KEY_KP_SUBTRACT`
+ * - `GLFW_KEY_KP_ADD`
+ * - `GLFW_KEY_KP_EQUAL`
+ *
+ * Names for printable keys depend on keyboard layout, while names for
+ * non-printable keys are the same across layouts but depend on the application
+ * language and should be localized along with other user interface text.
+ *
+ * @param[in] key The key to query, or `GLFW_KEY_UNKNOWN`.
+ * @param[in] scancode The scancode of the key to query.
+ * @return The UTF-8 encoded, layout-specific name of the key, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_VALUE, @ref GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark The contents of the returned string may change when a keyboard
+ * layout change event is received.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref input_key_name
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+ const char* glfwGetKeyName(int key, int scancode);
+/*! @brief Returns the platform-specific scancode of the specified key.
+ *
+ * This function returns the platform-specific scancode of the specified key.
+ *
+ * If the specified [key token](@ref keys) corresponds to a physical key not
+ * supported on the current platform then this method will return `-1`.
+ * Calling this function with anything other than a key token will return `-1`
+ * and generate a @ref GLFW_INVALID_ENUM error.
+ *
+ * @param[in] key Any [key token](@ref keys).
+ * @return The platform-specific scancode for the key, or `-1` if the key is
+ * not supported on the current platform or an [error](@ref error_handling)
+ * occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref input_key
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ int glfwGetKeyScancode(int key);
+/*! @brief Returns the last reported state of a keyboard key for the specified
+ * window.
+ *
+ * This function returns the last state reported for the specified key to the
+ * specified window. The returned state is one of `GLFW_PRESS` or
+ * `GLFW_RELEASE`. The action `GLFW_REPEAT` is only reported to the key callback.
+ *
+ * If the @ref GLFW_STICKY_KEYS input mode is enabled, this function returns
+ * `GLFW_PRESS` the first time you call it for a key that was pressed, even if
+ * that key has already been released.
+ *
+ * The key functions deal with physical keys, with [key tokens](@ref keys)
+ * named after their use on the standard US keyboard layout. If you want to
+ * input text, use the Unicode character callback instead.
+ *
+ * The [modifier key bit masks](@ref mods) are not key tokens and cannot be
+ * used with this function.
+ *
+ * __Do not use this function__ to implement [text input](@ref input_char).
+ *
+ * @param[in] window The desired window.
+ * @param[in] key The desired [keyboard key](@ref keys). `GLFW_KEY_UNKNOWN` is
+ * not a valid key for this function.
+ * @return One of `GLFW_PRESS` or `GLFW_RELEASE`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref input_key
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup input
+ */
+ int glfwGetKey(GLFWwindow* window, int key);
+/*! @brief Returns the last reported state of a mouse button for the specified
+ * window.
+ *
+ * This function returns the last state reported for the specified mouse button
+ * to the specified window. The returned state is one of `GLFW_PRESS` or
+ * `GLFW_RELEASE`.
+ *
+ * If the @ref GLFW_STICKY_MOUSE_BUTTONS input mode is enabled, this function
+ * returns `GLFW_PRESS` the first time you call it for a mouse button that was
+ * pressed, even if that mouse button has already been released.
+ *
+ * @param[in] window The desired window.
+ * @param[in] button The desired [mouse button](@ref buttons).
+ * @return One of `GLFW_PRESS` or `GLFW_RELEASE`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref input_mouse_button
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup input
+ */
+ int glfwGetMouseButton(GLFWwindow* window, int button);
+/*! @brief Retrieves the position of the cursor relative to the content area of
+ * the window.
+ *
+ * This function returns the position of the cursor, in screen coordinates,
+ * relative to the upper-left corner of the content area of the specified
+ * window.
+ *
+ * If the cursor is disabled (with `GLFW_CURSOR_DISABLED`) then the cursor
+ * position is unbounded and limited only by the minimum and maximum values of
+ * a `double`.
+ *
+ * The coordinate can be converted to their integer equivalents with the
+ * `floor` function. Casting directly to an integer type works for positive
+ * coordinates, but fails for negative ones.
+ *
+ * Any or all of the position arguments may be `NULL`. If an error occurs, all
+ * non-`NULL` position arguments will be set to zero.
+ *
+ * @param[in] window The desired window.
+ * @param[out] xpos Where to store the cursor x-coordinate, relative to the
+ * left edge of the content area, or `NULL`.
+ * @param[out] ypos Where to store the cursor y-coordinate, relative to the to
+ * top edge of the content area, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref cursor_pos
+ * @sa @ref glfwSetCursorPos
+ *
+ * @since Added in version 3.0. Replaces `glfwGetMousePos`.
+ *
+ * @ingroup input
+ */
+ void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos);
+/*! @brief Sets the position of the cursor, relative to the content area of the
+ * window.
+ *
+ * This function sets the position, in screen coordinates, of the cursor
+ * relative to the upper-left corner of the content area of the specified
+ * window. The window must have input focus. If the window does not have
+ * input focus when this function is called, it fails silently.
+ *
+ * __Do not use this function__ to implement things like camera controls. GLFW
+ * already provides the `GLFW_CURSOR_DISABLED` cursor mode that hides the
+ * cursor, transparently re-centers it and provides unconstrained cursor
+ * motion. See @ref glfwSetInputMode for more information.
+ *
+ * If the cursor mode is `GLFW_CURSOR_DISABLED` then the cursor position is
+ * unconstrained and limited only by the minimum and maximum values of
+ * a `double`.
+ *
+ * @param[in] window The desired window.
+ * @param[in] xpos The desired x-coordinate, relative to the left edge of the
+ * content area.
+ * @param[in] ypos The desired y-coordinate, relative to the top edge of the
+ * content area.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
+ *
+ * @remark @wayland This function will only work when the cursor mode is
+ * `GLFW_CURSOR_DISABLED`, otherwise it will emit @ref GLFW_FEATURE_UNAVAILABLE.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref cursor_pos
+ * @sa @ref glfwGetCursorPos
+ *
+ * @since Added in version 3.0. Replaces `glfwSetMousePos`.
+ *
+ * @ingroup input
+ */
+ void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos);
+/*! @brief Creates a custom cursor.
+ *
+ * Creates a new custom cursor image that can be set for a window with @ref
+ * glfwSetCursor. The cursor can be destroyed with @ref glfwDestroyCursor.
+ * Any remaining cursors are destroyed by @ref glfwTerminate.
+ *
+ * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight
+ * bits per channel with the red channel first. They are arranged canonically
+ * as packed sequential rows, starting from the top-left corner.
+ *
+ * The cursor hotspot is specified in pixels, relative to the upper-left corner
+ * of the cursor image. Like all other coordinate systems in GLFW, the X-axis
+ * points to the right and the Y-axis points down.
+ *
+ * @param[in] image The desired cursor image.
+ * @param[in] xhot The desired x-coordinate, in pixels, of the cursor hotspot.
+ * @param[in] yhot The desired y-coordinate, in pixels, of the cursor hotspot.
+ * @return The handle of the created cursor, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The specified image data is copied before this function
+ * returns.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref cursor_object
+ * @sa @ref glfwDestroyCursor
+ * @sa @ref glfwCreateStandardCursor
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup input
+ */
+ GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot);
+/*! @brief Creates a cursor with a standard shape.
+ *
+ * Returns a cursor with a standard shape, that can be set for a window with
+ * @ref glfwSetCursor. The images for these cursors come from the system
+ * cursor theme and their exact appearance will vary between platforms.
+ *
+ * Most of these shapes are guaranteed to exist on every supported platform but
+ * a few may not be present. See the table below for details.
+ *
+ * Cursor shape | Windows | macOS | X11 | Wayland
+ * ------------------------------ | ------- | ----- | ------ | -------
+ * @ref GLFW_ARROW_CURSOR | Yes | Yes | Yes | Yes
+ * @ref GLFW_IBEAM_CURSOR | Yes | Yes | Yes | Yes
+ * @ref GLFW_CROSSHAIR_CURSOR | Yes | Yes | Yes | Yes
+ * @ref GLFW_POINTING_HAND_CURSOR | Yes | Yes | Yes | Yes
+ * @ref GLFW_RESIZE_EW_CURSOR | Yes | Yes | Yes | Yes
+ * @ref GLFW_RESIZE_NS_CURSOR | Yes | Yes | Yes | Yes
+ * @ref GLFW_RESIZE_NWSE_CURSOR | Yes | Yes1 | Maybe2 | Maybe2
+ * @ref GLFW_RESIZE_NESW_CURSOR | Yes | Yes1 | Maybe2 | Maybe2
+ * @ref GLFW_RESIZE_ALL_CURSOR | Yes | Yes | Yes | Yes
+ * @ref GLFW_NOT_ALLOWED_CURSOR | Yes | Yes | Maybe2 | Maybe2
+ *
+ * 1) This uses a private system API and may fail in the future.
+ *
+ * 2) This uses a newer standard that not all cursor themes support.
+ *
+ * If the requested shape is not available, this function emits a @ref
+ * GLFW_CURSOR_UNAVAILABLE error and returns `NULL`.
+ *
+ * @param[in] shape One of the [standard shapes](@ref shapes).
+ * @return A new cursor ready to use or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM, @ref GLFW_CURSOR_UNAVAILABLE and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref cursor_standard
+ * @sa @ref glfwCreateCursor
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup input
+ */
+ GLFWcursor* glfwCreateStandardCursor(int shape);
+/*! @brief Destroys a cursor.
+ *
+ * This function destroys a cursor previously created with @ref
+ * glfwCreateCursor. Any remaining cursors will be destroyed by @ref
+ * glfwTerminate.
+ *
+ * If the specified cursor is current for any window, that window will be
+ * reverted to the default cursor. This does not affect the cursor mode.
+ *
+ * @param[in] cursor The cursor object to destroy.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref cursor_object
+ * @sa @ref glfwCreateCursor
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup input
+ */
+ void glfwDestroyCursor(GLFWcursor* cursor);
+/*! @brief Sets the cursor for the window.
+ *
+ * This function sets the cursor image to be used when the cursor is over the
+ * content area of the specified window. The set cursor will only be visible
+ * when the [cursor mode](@ref cursor_mode) of the window is
+ * `GLFW_CURSOR_NORMAL`.
+ *
+ * On some platforms, the set cursor may not be visible unless the window also
+ * has input focus.
+ *
+ * @param[in] window The window to set the cursor for.
+ * @param[in] cursor The cursor to set, or `NULL` to switch back to the default
+ * arrow cursor.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref cursor_object
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup input
+ */
+ void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor);
+/*! @brief Sets the key callback.
+ *
+ * This function sets the key callback of the specified window, which is called
+ * when a key is pressed, repeated or released.
+ *
+ * The key functions deal with physical keys, with layout independent
+ * [key tokens](@ref keys) named after their values in the standard US keyboard
+ * layout. If you want to input text, use the
+ * [character callback](@ref glfwSetCharCallback) instead.
+ *
+ * When a window loses input focus, it will generate synthetic key release
+ * events for all pressed keys with associated key tokens. You can tell these
+ * events from user-generated events by the fact that the synthetic ones are
+ * generated after the focus loss event has been processed, i.e. after the
+ * [window focus callback](@ref glfwSetWindowFocusCallback) has been called.
+ *
+ * The scancode of a key is specific to that platform or sometimes even to that
+ * machine. Scancodes are intended to allow users to bind keys that don't have
+ * a GLFW key token. Such keys have `key` set to `GLFW_KEY_UNKNOWN`, their
+ * state is not saved and so it cannot be queried with @ref glfwGetKey.
+ *
+ * Sometimes GLFW needs to generate synthetic key events, in which case the
+ * scancode may be zero.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new key callback, or `NULL` to remove the currently
+ * set callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWkeyfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref input_key
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter and return value.
+ *
+ * @ingroup input
+ */
+ GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun callback);
+/*! @brief Sets the Unicode character callback.
+ *
+ * This function sets the character callback of the specified window, which is
+ * called when a Unicode character is input.
+ *
+ * The character callback is intended for Unicode text input. As it deals with
+ * characters, it is keyboard layout dependent, whereas the
+ * [key callback](@ref glfwSetKeyCallback) is not. Characters do not map 1:1
+ * to physical keys, as a key may produce zero, one or more characters. If you
+ * want to know whether a specific physical key was pressed or released, see
+ * the key callback instead.
+ *
+ * The character callback behaves as system text input normally does and will
+ * not be called if modifier keys are held down that would prevent normal text
+ * input on that platform, for example a Super (Command) key on macOS or Alt key
+ * on Windows.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, unsigned int codepoint)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWcharfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref input_char
+ *
+ * @since Added in version 2.4.
+ * @glfw3 Added window handle parameter and return value.
+ *
+ * @ingroup input
+ */
+ GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun callback);
+/*! @brief Sets the Unicode character with modifiers callback.
+ *
+ * This function sets the character with modifiers callback of the specified
+ * window, which is called when a Unicode character is input regardless of what
+ * modifier keys are used.
+ *
+ * The character with modifiers callback is intended for implementing custom
+ * Unicode character input. For regular Unicode text input, see the
+ * [character callback](@ref glfwSetCharCallback). Like the character
+ * callback, the character with modifiers callback deals with characters and is
+ * keyboard layout dependent. Characters do not map 1:1 to physical keys, as
+ * a key may produce zero, one or more characters. If you want to know whether
+ * a specific physical key was pressed or released, see the
+ * [key callback](@ref glfwSetKeyCallback) instead.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or an
+ * [error](@ref error_handling) occurred.
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, unsigned int codepoint, int mods)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWcharmodsfun).
+ *
+ * @deprecated Scheduled for removal in version 4.0.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref input_char
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup input
+ */
+ GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun callback);
+/*! @brief Sets the mouse button callback.
+ *
+ * This function sets the mouse button callback of the specified window, which
+ * is called when a mouse button is pressed or released.
+ *
+ * When a window loses input focus, it will generate synthetic mouse button
+ * release events for all pressed mouse buttons. You can tell these events
+ * from user-generated events by the fact that the synthetic ones are generated
+ * after the focus loss event has been processed, i.e. after the
+ * [window focus callback](@ref glfwSetWindowFocusCallback) has been called.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int button, int action, int mods)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWmousebuttonfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref input_mouse_button
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter and return value.
+ *
+ * @ingroup input
+ */
+ GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun callback);
+/*! @brief Sets the cursor position callback.
+ *
+ * This function sets the cursor position callback of the specified window,
+ * which is called when the cursor is moved. The callback is provided with the
+ * position, in screen coordinates, relative to the upper-left corner of the
+ * content area of the window.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, double xpos, double ypos);
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWcursorposfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref cursor_pos
+ *
+ * @since Added in version 3.0. Replaces `glfwSetMousePosCallback`.
+ *
+ * @ingroup input
+ */
+ GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun callback);
+/*! @brief Sets the cursor enter/leave callback.
+ *
+ * This function sets the cursor boundary crossing callback of the specified
+ * window, which is called when the cursor enters or leaves the content area of
+ * the window.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int entered)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWcursorenterfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref cursor_enter
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup input
+ */
+ GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun callback);
+/*! @brief Sets the scroll callback.
+ *
+ * This function sets the scroll callback of the specified window, which is
+ * called when a scrolling device is used, such as a mouse wheel or scrolling
+ * area of a touchpad.
+ *
+ * The scroll callback receives all scrolling input, like that from a mouse
+ * wheel or a touchpad scrolling area.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new scroll callback, or `NULL` to remove the
+ * currently set callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, double xoffset, double yoffset)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWscrollfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref scrolling
+ *
+ * @since Added in version 3.0. Replaces `glfwSetMouseWheelCallback`.
+ *
+ * @ingroup input
+ */
+ GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun callback);
+/*! @brief Sets the path drop callback.
+ *
+ * This function sets the path drop callback of the specified window, which is
+ * called when one or more dragged paths are dropped on the window.
+ *
+ * Because the path array and its strings may have been generated specifically
+ * for that event, they are not guaranteed to be valid after the callback has
+ * returned. If you wish to use them after the callback returns, you need to
+ * make a deep copy.
+ *
+ * @param[in] window The window whose callback to set.
+ * @param[in] callback The new file drop callback, or `NULL` to remove the
+ * currently set callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(GLFWwindow* window, int path_count, const char* paths[])
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWdropfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref path_drop
+ *
+ * @since Added in version 3.1.
+ *
+ * @ingroup input
+ */
+ GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun callback);
+/*! @brief Returns whether the specified joystick is present.
+ *
+ * This function returns whether the specified joystick is present.
+ *
+ * There is no need to call this function before other functions that accept
+ * a joystick ID, as they all check for presence before performing any other
+ * work.
+ *
+ * @param[in] jid The [joystick](@ref joysticks) to query.
+ * @return `GLFW_TRUE` if the joystick is present, or `GLFW_FALSE` otherwise.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref joystick
+ *
+ * @since Added in version 3.0. Replaces `glfwGetJoystickParam`.
+ *
+ * @ingroup input
+ */
+ int glfwJoystickPresent(int jid);
+/*! @brief Returns the values of all axes of the specified joystick.
+ *
+ * This function returns the values of all axes of the specified joystick.
+ * Each element in the array is a value between -1.0 and 1.0.
+ *
+ * If the specified joystick is not present this function will return `NULL`
+ * but will not generate an error. This can be used instead of first calling
+ * @ref glfwJoystickPresent.
+ *
+ * @param[in] jid The [joystick](@ref joysticks) to query.
+ * @param[out] count Where to store the number of axis values in the returned
+ * array. This is set to zero if the joystick is not present or an error
+ * occurred.
+ * @return An array of axis values, or `NULL` if the joystick is not present or
+ * an [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified joystick is
+ * disconnected or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref joystick_axis
+ *
+ * @since Added in version 3.0. Replaces `glfwGetJoystickPos`.
+ *
+ * @ingroup input
+ */
+ const float* glfwGetJoystickAxes(int jid, int* count);
+/*! @brief Returns the state of all buttons of the specified joystick.
+ *
+ * This function returns the state of all buttons of the specified joystick.
+ * Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`.
+ *
+ * For backward compatibility with earlier versions that did not have @ref
+ * glfwGetJoystickHats, the button array also includes all hats, each
+ * represented as four buttons. The hats are in the same order as returned by
+ * __glfwGetJoystickHats__ and are in the order _up_, _right_, _down_ and
+ * _left_. To disable these extra buttons, set the @ref
+ * GLFW_JOYSTICK_HAT_BUTTONS init hint before initialization.
+ *
+ * If the specified joystick is not present this function will return `NULL`
+ * but will not generate an error. This can be used instead of first calling
+ * @ref glfwJoystickPresent.
+ *
+ * @param[in] jid The [joystick](@ref joysticks) to query.
+ * @param[out] count Where to store the number of button states in the returned
+ * array. This is set to zero if the joystick is not present or an error
+ * occurred.
+ * @return An array of button states, or `NULL` if the joystick is not present
+ * or an [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified joystick is
+ * disconnected or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref joystick_button
+ *
+ * @since Added in version 2.2.
+ * @glfw3 Changed to return a dynamic array.
+ *
+ * @ingroup input
+ */
+ const unsigned char* glfwGetJoystickButtons(int jid, int* count);
+/*! @brief Returns the state of all hats of the specified joystick.
+ *
+ * This function returns the state of all hats of the specified joystick.
+ * Each element in the array is one of the following values:
+ *
+ * Name | Value
+ * ---- | -----
+ * `GLFW_HAT_CENTERED` | 0
+ * `GLFW_HAT_UP` | 1
+ * `GLFW_HAT_RIGHT` | 2
+ * `GLFW_HAT_DOWN` | 4
+ * `GLFW_HAT_LEFT` | 8
+ * `GLFW_HAT_RIGHT_UP` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_UP`
+ * `GLFW_HAT_RIGHT_DOWN` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_DOWN`
+ * `GLFW_HAT_LEFT_UP` | `GLFW_HAT_LEFT` \| `GLFW_HAT_UP`
+ * `GLFW_HAT_LEFT_DOWN` | `GLFW_HAT_LEFT` \| `GLFW_HAT_DOWN`
+ *
+ * The diagonal directions are bitwise combinations of the primary (up, right,
+ * down and left) directions and you can test for these individually by ANDing
+ * it with the corresponding direction.
+ *
+ * @code
+ * if (hats[2] & GLFW_HAT_RIGHT)
+ * {
+ * // State of hat 2 could be right-up, right or right-down
+ * }
+ * @endcode
+ *
+ * If the specified joystick is not present this function will return `NULL`
+ * but will not generate an error. This can be used instead of first calling
+ * @ref glfwJoystickPresent.
+ *
+ * @param[in] jid The [joystick](@ref joysticks) to query.
+ * @param[out] count Where to store the number of hat states in the returned
+ * array. This is set to zero if the joystick is not present or an error
+ * occurred.
+ * @return An array of hat states, or `NULL` if the joystick is not present
+ * or an [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified joystick is
+ * disconnected, this function is called again for that joystick or the library
+ * is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref joystick_hat
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ const unsigned char* glfwGetJoystickHats(int jid, int* count);
+/*! @brief Returns the name of the specified joystick.
+ *
+ * This function returns the name, encoded as UTF-8, of the specified joystick.
+ * The returned string is allocated and freed by GLFW. You should not free it
+ * yourself.
+ *
+ * If the specified joystick is not present this function will return `NULL`
+ * but will not generate an error. This can be used instead of first calling
+ * @ref glfwJoystickPresent.
+ *
+ * @param[in] jid The [joystick](@ref joysticks) to query.
+ * @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick
+ * is not present or an [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified joystick is
+ * disconnected or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref joystick_name
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup input
+ */
+ const char* glfwGetJoystickName(int jid);
+/*! @brief Returns the SDL compatible GUID of the specified joystick.
+ *
+ * This function returns the SDL compatible GUID, as a UTF-8 encoded
+ * hexadecimal string, of the specified joystick. The returned string is
+ * allocated and freed by GLFW. You should not free it yourself.
+ *
+ * The GUID is what connects a joystick to a gamepad mapping. A connected
+ * joystick will always have a GUID even if there is no gamepad mapping
+ * assigned to it.
+ *
+ * If the specified joystick is not present this function will return `NULL`
+ * but will not generate an error. This can be used instead of first calling
+ * @ref glfwJoystickPresent.
+ *
+ * The GUID uses the format introduced in SDL 2.0.5. This GUID tries to
+ * uniquely identify the make and model of a joystick but does not identify
+ * a specific unit, e.g. all wired Xbox 360 controllers will have the same
+ * GUID on that platform. The GUID for a unit may vary between platforms
+ * depending on what hardware information the platform specific APIs provide.
+ *
+ * @param[in] jid The [joystick](@ref joysticks) to query.
+ * @return The UTF-8 encoded GUID of the joystick, or `NULL` if the joystick
+ * is not present or an [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified joystick is
+ * disconnected or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref gamepad
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ const char* glfwGetJoystickGUID(int jid);
+/*! @brief Sets the user pointer of the specified joystick.
+ *
+ * This function sets the user-defined pointer of the specified joystick. The
+ * current value is retained until the joystick is disconnected. The initial
+ * value is `NULL`.
+ *
+ * This function may be called from the joystick callback, even for a joystick
+ * that is being disconnected.
+ *
+ * @param[in] jid The joystick whose pointer to set.
+ * @param[in] pointer The new value.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @sa @ref joystick_userptr
+ * @sa @ref glfwGetJoystickUserPointer
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ void glfwSetJoystickUserPointer(int jid, void* pointer);
+/*! @brief Returns the user pointer of the specified joystick.
+ *
+ * This function returns the current value of the user-defined pointer of the
+ * specified joystick. The initial value is `NULL`.
+ *
+ * This function may be called from the joystick callback, even for a joystick
+ * that is being disconnected.
+ *
+ * @param[in] jid The joystick whose pointer to return.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @sa @ref joystick_userptr
+ * @sa @ref glfwSetJoystickUserPointer
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ void* glfwGetJoystickUserPointer(int jid);
+/*! @brief Returns whether the specified joystick has a gamepad mapping.
+ *
+ * This function returns whether the specified joystick is both present and has
+ * a gamepad mapping.
+ *
+ * If the specified joystick is present but does not have a gamepad mapping
+ * this function will return `GLFW_FALSE` but will not generate an error. Call
+ * @ref glfwJoystickPresent to check if a joystick is present regardless of
+ * whether it has a mapping.
+ *
+ * @param[in] jid The [joystick](@ref joysticks) to query.
+ * @return `GLFW_TRUE` if a joystick is both present and has a gamepad mapping,
+ * or `GLFW_FALSE` otherwise.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref gamepad
+ * @sa @ref glfwGetGamepadState
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ int glfwJoystickIsGamepad(int jid);
+/*! @brief Sets the joystick configuration callback.
+ *
+ * This function sets the joystick configuration callback, or removes the
+ * currently set callback. This is called when a joystick is connected to or
+ * disconnected from the system.
+ *
+ * For joystick connection and disconnection events to be delivered on all
+ * platforms, you need to call one of the [event processing](@ref events)
+ * functions. Joystick disconnection may also be detected and the callback
+ * called by joystick functions. The function will then return whatever it
+ * returns if the joystick is not present.
+ *
+ * @param[in] callback The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @callback_signature
+ * @code
+ * void function_name(int jid, int event)
+ * @endcode
+ * For more information about the callback parameters, see the
+ * [function pointer type](@ref GLFWjoystickfun).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref joystick_event
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+ GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun callback);
+/*! @brief Adds the specified SDL_GameControllerDB gamepad mappings.
+ *
+ * This function parses the specified ASCII encoded string and updates the
+ * internal list with any gamepad mappings it finds. This string may
+ * contain either a single gamepad mapping or many mappings separated by
+ * newlines. The parser supports the full format of the `gamecontrollerdb.txt`
+ * source file including empty lines and comments.
+ *
+ * See @ref gamepad_mapping for a description of the format.
+ *
+ * If there is already a gamepad mapping for a given GUID in the internal list,
+ * it will be replaced by the one passed to this function. If the library is
+ * terminated and re-initialized the internal list will revert to the built-in
+ * default.
+ *
+ * @param[in] string The string containing the gamepad mappings.
+ * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_VALUE.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref gamepad
+ * @sa @ref glfwJoystickIsGamepad
+ * @sa @ref glfwGetGamepadName
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ int glfwUpdateGamepadMappings(const char* string);
+/*! @brief Returns the human-readable gamepad name for the specified joystick.
+ *
+ * This function returns the human-readable name of the gamepad from the
+ * gamepad mapping assigned to the specified joystick.
+ *
+ * If the specified joystick is not present or does not have a gamepad mapping
+ * this function will return `NULL` but will not generate an error. Call
+ * @ref glfwJoystickPresent to check whether it is present regardless of
+ * whether it has a mapping.
+ *
+ * @param[in] jid The [joystick](@ref joysticks) to query.
+ * @return The UTF-8 encoded name of the gamepad, or `NULL` if the
+ * joystick is not present, does not have a mapping or an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref GLFW_INVALID_ENUM.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified joystick is
+ * disconnected, the gamepad mappings are updated or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref gamepad
+ * @sa @ref glfwJoystickIsGamepad
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ const char* glfwGetGamepadName(int jid);
+/*! @brief Retrieves the state of the specified joystick remapped as a gamepad.
+ *
+ * This function retrieves the state of the specified joystick remapped to
+ * an Xbox-like gamepad.
+ *
+ * If the specified joystick is not present or does not have a gamepad mapping
+ * this function will return `GLFW_FALSE` but will not generate an error. Call
+ * @ref glfwJoystickPresent to check whether it is present regardless of
+ * whether it has a mapping.
+ *
+ * The Guide button may not be available for input as it is often hooked by the
+ * system or the Steam client.
+ *
+ * Not all devices have all the buttons or axes provided by @ref
+ * GLFWgamepadstate. Unavailable buttons and axes will always report
+ * `GLFW_RELEASE` and 0.0 respectively.
+ *
+ * @param[in] jid The [joystick](@ref joysticks) to query.
+ * @param[out] state The gamepad input state of the joystick.
+ * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if no joystick is
+ * connected, it has no gamepad mapping or an [error](@ref error_handling)
+ * occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref gamepad
+ * @sa @ref glfwUpdateGamepadMappings
+ * @sa @ref glfwJoystickIsGamepad
+ *
+ * @since Added in version 3.3.
+ *
+ * @ingroup input
+ */
+ int glfwGetGamepadState(int jid, GLFWgamepadstate* state);
+/*! @brief Sets the clipboard to the specified string.
+ *
+ * This function sets the system clipboard to the specified, UTF-8 encoded
+ * string.
+ *
+ * @param[in] window Deprecated. Any valid window or `NULL`.
+ * @param[in] string A UTF-8 encoded string.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark @win32 The clipboard on Windows has a single global lock for reading and
+ * writing. GLFW tries to acquire it a few times, which is almost always enough. If it
+ * cannot acquire the lock then this function emits @ref GLFW_PLATFORM_ERROR and returns.
+ * It is safe to try this multiple times.
+ *
+ * @pointer_lifetime The specified string is copied before this function
+ * returns.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref clipboard
+ * @sa @ref glfwGetClipboardString
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup input
+ */
+ void glfwSetClipboardString(GLFWwindow* window, const char* string);
+/*! @brief Returns the contents of the clipboard as a string.
+ *
+ * This function returns the contents of the system clipboard, if it contains
+ * or is convertible to a UTF-8 encoded string. If the clipboard is empty or
+ * if its contents cannot be converted, `NULL` is returned and a @ref
+ * GLFW_FORMAT_UNAVAILABLE error is generated.
+ *
+ * @param[in] window Deprecated. Any valid window or `NULL`.
+ * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL`
+ * if an [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_FORMAT_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark @win32 The clipboard on Windows has a single global lock for reading and
+ * writing. GLFW tries to acquire it a few times, which is almost always enough. If it
+ * cannot acquire the lock then this function emits @ref GLFW_PLATFORM_ERROR and returns.
+ * It is safe to try this multiple times.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the next call to @ref
+ * glfwGetClipboardString or @ref glfwSetClipboardString, or until the library
+ * is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref clipboard
+ * @sa @ref glfwSetClipboardString
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup input
+ */
+ const char* glfwGetClipboardString(GLFWwindow* window);
+/*! @brief Returns the GLFW time.
+ *
+ * This function returns the current GLFW time, in seconds. Unless the time
+ * has been set using @ref glfwSetTime it measures time elapsed since GLFW was
+ * initialized.
+ *
+ * This function and @ref glfwSetTime are helper functions on top of @ref
+ * glfwGetTimerFrequency and @ref glfwGetTimerValue.
+ *
+ * The resolution of the timer is system dependent, but is usually on the order
+ * of a few micro- or nanoseconds. It uses the highest-resolution monotonic
+ * time source on each operating system.
+ *
+ * @return The current time, in seconds, or zero if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Reading and
+ * writing of the internal base time is not atomic, so it needs to be
+ * externally synchronized with calls to @ref glfwSetTime.
+ *
+ * @sa @ref time
+ *
+ * @since Added in version 1.0.
+ *
+ * @ingroup input
+ */
+ double glfwGetTime(void);
+/*! @brief Sets the GLFW time.
+ *
+ * This function sets the current GLFW time, in seconds. The value must be
+ * a positive finite number less than or equal to 18446744073.0, which is
+ * approximately 584.5 years.
+ *
+ * This function and @ref glfwGetTime are helper functions on top of @ref
+ * glfwGetTimerFrequency and @ref glfwGetTimerValue.
+ *
+ * @param[in] time The new value, in seconds.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_VALUE.
+ *
+ * @remark The upper limit of GLFW time is calculated as
+ * floor((264 - 1) / 109) and is due to implementations
+ * storing nanoseconds in 64 bits. The limit may be increased in the future.
+ *
+ * @thread_safety This function may be called from any thread. Reading and
+ * writing of the internal base time is not atomic, so it needs to be
+ * externally synchronized with calls to @ref glfwGetTime.
+ *
+ * @sa @ref time
+ *
+ * @since Added in version 2.2.
+ *
+ * @ingroup input
+ */
+ void glfwSetTime(double time);
+/*! @brief Returns the current value of the raw timer.
+ *
+ * This function returns the current value of the raw timer, measured in
+ * 1 / frequency seconds. To get the frequency, call @ref
+ * glfwGetTimerFrequency.
+ *
+ * @return The value of the timer, or zero if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref time
+ * @sa @ref glfwGetTimerFrequency
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+ uint64_t glfwGetTimerValue(void);
+/*! @brief Returns the frequency, in Hz, of the raw timer.
+ *
+ * This function returns the frequency, in Hz, of the raw timer.
+ *
+ * @return The frequency of the timer, in Hz, or zero if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref time
+ * @sa @ref glfwGetTimerValue
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+ uint64_t glfwGetTimerFrequency(void);
+/*! @brief Makes the context of the specified window current for the calling
+ * thread.
+ *
+ * This function makes the OpenGL or OpenGL ES context of the specified window
+ * current on the calling thread. It can also detach the current context from
+ * the calling thread without making a new one current by passing in `NULL`.
+ *
+ * A context must only be made current on a single thread at a time and each
+ * thread can have only a single current context at a time. Making a context
+ * current detaches any previously current context on the calling thread.
+ *
+ * When moving a context between threads, you must detach it (make it
+ * non-current) on the old thread before making it current on the new one.
+ *
+ * By default, making a context non-current implicitly forces a pipeline flush.
+ * On machines that support `GL_KHR_context_flush_control`, you can control
+ * whether a context performs this flush by setting the
+ * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint)
+ * hint.
+ *
+ * The specified window must have an OpenGL or OpenGL ES context. Specifying
+ * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT
+ * error.
+ *
+ * @param[in] window The window whose context to make current, or `NULL` to
+ * detach the current context.
+ *
+ * @remarks If the previously current context was created via a different
+ * context creation API than the one passed to this function, GLFW will still
+ * detach the previous one from its API before making the new one current.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref context_current
+ * @sa @ref glfwGetCurrentContext
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup context
+ */
+ void glfwMakeContextCurrent(GLFWwindow* window);
+/*! @brief Returns the window whose context is current on the calling thread.
+ *
+ * This function returns the window whose OpenGL or OpenGL ES context is
+ * current on the calling thread.
+ *
+ * @return The window whose context is current, or `NULL` if no window's
+ * context is current.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref context_current
+ * @sa @ref glfwMakeContextCurrent
+ *
+ * @since Added in version 3.0.
+ *
+ * @ingroup context
+ */
+ GLFWwindow* glfwGetCurrentContext(void);
+/*! @brief Swaps the front and back buffers of the specified window.
+ *
+ * This function swaps the front and back buffers of the specified window when
+ * rendering with OpenGL or OpenGL ES. If the swap interval is greater than
+ * zero, the GPU driver waits the specified number of screen updates before
+ * swapping the buffers.
+ *
+ * The specified window must have an OpenGL or OpenGL ES context. Specifying
+ * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT
+ * error.
+ *
+ * This function does not apply to Vulkan. If you are rendering with Vulkan,
+ * see `vkQueuePresentKHR` instead.
+ *
+ * @param[in] window The window whose buffers to swap.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark __EGL:__ The context of the specified window must be current on the
+ * calling thread.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref buffer_swap
+ * @sa @ref glfwSwapInterval
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+ void glfwSwapBuffers(GLFWwindow* window);
+/*! @brief Sets the swap interval for the current context.
+ *
+ * This function sets the swap interval for the current OpenGL or OpenGL ES
+ * context, i.e. the number of screen updates to wait from the time @ref
+ * glfwSwapBuffers was called before swapping the buffers and returning. This
+ * is sometimes called _vertical synchronization_, _vertical retrace
+ * synchronization_ or just _vsync_.
+ *
+ * A context that supports either of the `WGL_EXT_swap_control_tear` and
+ * `GLX_EXT_swap_control_tear` extensions also accepts _negative_ swap
+ * intervals, which allows the driver to swap immediately even if a frame
+ * arrives a little bit late. You can check for these extensions with @ref
+ * glfwExtensionSupported.
+ *
+ * A context must be current on the calling thread. Calling this function
+ * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error.
+ *
+ * This function does not apply to Vulkan. If you are rendering with Vulkan,
+ * see the present mode of your swapchain instead.
+ *
+ * @param[in] interval The minimum number of screen updates to wait for
+ * until the buffers are swapped by @ref glfwSwapBuffers.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark This function is not called during context creation, leaving the
+ * swap interval set to whatever is the default for that API. This is done
+ * because some swap interval extensions used by GLFW do not allow the swap
+ * interval to be reset to zero once it has been set to a non-zero value.
+ *
+ * @remark Some GPU drivers do not honor the requested swap interval, either
+ * because of a user setting that overrides the application's request or due to
+ * bugs in the driver.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref buffer_swap
+ * @sa @ref glfwSwapBuffers
+ *
+ * @since Added in version 1.0.
+ *
+ * @ingroup context
+ */
+ void glfwSwapInterval(int interval);
+/*! @brief Returns whether the specified extension is available.
+ *
+ * This function returns whether the specified
+ * [API extension](@ref context_glext) is supported by the current OpenGL or
+ * OpenGL ES context. It searches both for client API extension and context
+ * creation API extensions.
+ *
+ * A context must be current on the calling thread. Calling this function
+ * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error.
+ *
+ * As this functions retrieves and searches one or more extension strings each
+ * call, it is recommended that you cache its results if it is going to be used
+ * frequently. The extension strings will not change during the lifetime of
+ * a context, so there is no danger in doing this.
+ *
+ * This function does not apply to Vulkan. If you are using Vulkan, see @ref
+ * glfwGetRequiredInstanceExtensions, `vkEnumerateInstanceExtensionProperties`
+ * and `vkEnumerateDeviceExtensionProperties` instead.
+ *
+ * @param[in] extension The ASCII encoded name of the extension.
+ * @return `GLFW_TRUE` if the extension is available, or `GLFW_FALSE`
+ * otherwise.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_CURRENT_CONTEXT, @ref GLFW_INVALID_VALUE and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref context_glext
+ * @sa @ref glfwGetProcAddress
+ *
+ * @since Added in version 1.0.
+ *
+ * @ingroup context
+ */
+ int glfwExtensionSupported(const char* extension);
+/*! @brief Returns the address of the specified function for the current
+ * context.
+ *
+ * This function returns the address of the specified OpenGL or OpenGL ES
+ * [core or extension function](@ref context_glext), if it is supported
+ * by the current context.
+ *
+ * A context must be current on the calling thread. Calling this function
+ * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error.
+ *
+ * This function does not apply to Vulkan. If you are rendering with Vulkan,
+ * see @ref glfwGetInstanceProcAddress, `vkGetInstanceProcAddr` and
+ * `vkGetDeviceProcAddr` instead.
+ *
+ * @param[in] procname The ASCII encoded name of the function.
+ * @return The address of the function, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark The address of a given function is not guaranteed to be the same
+ * between contexts.
+ *
+ * @remark This function may return a non-`NULL` address despite the
+ * associated version or extension not being available. Always check the
+ * context version or extension string first.
+ *
+ * @pointer_lifetime The returned function pointer is valid until the context
+ * is destroyed or the library is terminated.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref context_glext
+ * @sa @ref glfwExtensionSupported
+ *
+ * @since Added in version 1.0.
+ *
+ * @ingroup context
+ */
+ GLFWglproc glfwGetProcAddress(const char* procname);
+/*! @brief Returns whether the Vulkan loader and an ICD have been found.
+ *
+ * This function returns whether the Vulkan loader and any minimally functional
+ * ICD have been found.
+ *
+ * The availability of a Vulkan loader and even an ICD does not by itself guarantee that
+ * surface creation or even instance creation is possible. Call @ref
+ * glfwGetRequiredInstanceExtensions to check whether the extensions necessary for Vulkan
+ * surface creation are available and @ref glfwGetPhysicalDevicePresentationSupport to
+ * check whether a queue family of a physical device supports image presentation.
+ *
+ * @return `GLFW_TRUE` if Vulkan is minimally available, or `GLFW_FALSE`
+ * otherwise.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref vulkan_support
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup vulkan
+ */
+ int glfwVulkanSupported(void);
+/*! @brief Returns the Vulkan instance extensions required by GLFW.
+ *
+ * This function returns an array of names of Vulkan instance extensions required
+ * by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the
+ * list will always contain `VK_KHR_surface`, so if you don't require any
+ * additional extensions you can pass this list directly to the
+ * `VkInstanceCreateInfo` struct.
+ *
+ * If Vulkan is not available on the machine, this function returns `NULL` and
+ * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported
+ * to check whether Vulkan is at least minimally available.
+ *
+ * If Vulkan is available but no set of extensions allowing window surface
+ * creation was found, this function returns `NULL`. You may still use Vulkan
+ * for off-screen rendering and compute work.
+ *
+ * @param[out] count Where to store the number of extensions in the returned
+ * array. This is set to zero if an error occurred.
+ * @return An array of ASCII encoded extension names, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_API_UNAVAILABLE.
+ *
+ * @remark Additional extensions may be required by future versions of GLFW.
+ * You should check if any extensions you wish to enable are already in the
+ * returned array, as it is an error to specify an extension more than once in
+ * the `VkInstanceCreateInfo` struct.
+ *
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is guaranteed to be valid only until the
+ * library is terminated.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref vulkan_ext
+ * @sa @ref glfwCreateWindowSurface
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup vulkan
+ */
+ const char** glfwGetRequiredInstanceExtensions(uint32_t* count);
+/*************************************************************************
+ * Global definition cleanup
+ *************************************************************************/
+/* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */
+/* Some OpenGL related headers need GLAPIENTRY, but it is unconditionally
+ * defined by some gl.h variants (OpenBSD) so define it after if needed.
+ */
+/* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */
\ No newline at end of file
diff --git a/raylib/physac.h.modified b/raylib/physac.h.modified
new file mode 100644
index 0000000..a17015d
--- /dev/null
+++ b/raylib/physac.h.modified
@@ -0,0 +1,171 @@
+/**********************************************************************************************
+*
+* Physac v1.1 - 2D Physics library for videogames
+*
+* DESCRIPTION:
+*
+* Physac is a small 2D physics library written in pure C. The engine uses a fixed time-step thread loop
+* to simluate physics. A physics step contains the following phases: get collision information,
+* apply dynamics, collision solving and position correction. It uses a very simple struct for physic
+* bodies with a position vector to be used in any 3D rendering API.
+*
+* CONFIGURATION:
+*
+* #define PHYSAC_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 PHYSAC_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 PHYSAC_NO_THREADS
+* The generated implementation won't include pthread library and user must create a secondary thread to call PhysicsThread().
+* It is so important that the thread where PhysicsThread() is called must not have v-sync or any other CPU limitation.
+*
+* #define PHYSAC_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 PHYSAC_DEBUG
+* Traces log messages when creating and destroying physics bodies and detects errors in physics
+* calculations and reference exceptions; it is useful for debug purposes
+*
+* #define PHYSAC_MALLOC()
+* #define PHYSAC_FREE()
+* You can define your own malloc/free implementation replacing stdlib.h malloc()/free() functions.
+* Otherwise it will include stdlib.h and use the C standard library malloc()/free() function.
+*
+*
+* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
+* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread)
+*
+* Use the following code to compile:
+* gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static -lraylib -lpthread -lopengl32 -lgdi32 -lwinmm -std=c99
+*
+* VERY THANKS TO:
+* - raysan5: helped with library design
+* - ficoos: added support for Linux
+* - R8D8: added support for Linux
+* - jubalh: fixed implementation of time calculations
+* - a3f: fixed implementation of time calculations
+* - define-private-public: added support for OSX
+* - pamarcos: fixed implementation of physics steps
+* - noshbar: fixed some memory leaks
+*
+*
+* LICENSE: zlib/libpng
+*
+* Copyright (c) 2016-2025 Victor Fisac (github: @victorfisac)
+*
+* 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 PHYSAC_STATIC
+// #define PHYSAC_NO_THREADS
+// #define PHYSAC_STANDALONE
+// #define PHYSAC_DEBUG
+//----------------------------------------------------------------------------------
+// Defines and Macros
+//----------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+// NOTE: Below types are required for PHYSAC_STANDALONE usage
+//----------------------------------------------------------------------------------
+typedef enum PhysicsShapeType { PHYSICS_CIRCLE, PHYSICS_POLYGON } PhysicsShapeType;
+// Previously defined to be used in PhysicsShape struct as circular dependencies
+typedef struct PhysicsBodyData *PhysicsBody;
+// Mat2 type (used for polygon shape rotation matrix)
+typedef struct Mat2 {
+ float m00;
+ float m01;
+ float m10;
+ float m11;
+} Mat2;
+typedef struct PolygonData {
+ unsigned int vertexCount; // Current used vertex and normals count
+ Vector2 positions[24]; // Polygon vertex positions vectors
+ Vector2 normals[24]; // Polygon vertex normals vectors
+} PolygonData;
+typedef struct PhysicsShape {
+ PhysicsShapeType type; // Physics shape type (circle or polygon)
+ PhysicsBody body; // Shape physics body reference
+ float radius; // Circle shape radius (used for circle shapes)
+ Mat2 transform; // Vertices transform matrix 2x2
+ PolygonData vertexData; // Polygon shape vertices position and normals data (just used for polygon shapes)
+} PhysicsShape;
+typedef struct PhysicsBodyData {
+ unsigned int id; // Reference unique identifier
+ bool enabled; // Enabled dynamics state (collisions are calculated anyway)
+ Vector2 position; // Physics body shape pivot
+ Vector2 velocity; // Current linear velocity applied to position
+ Vector2 force; // Current linear force (reset to 0 every step)
+ float angularVelocity; // Current angular velocity applied to orient
+ float torque; // Current angular force (reset to 0 every step)
+ float orient; // Rotation in radians
+ float inertia; // Moment of inertia
+ float inverseInertia; // Inverse value of inertia
+ float mass; // Physics body mass
+ float inverseMass; // Inverse value of mass
+ float staticFriction; // Friction when the body has not movement (0 to 1)
+ float dynamicFriction; // Friction when the body has movement (0 to 1)
+ float restitution; // Restitution coefficient of the body (0 to 1)
+ bool useGravity; // Apply gravity force to dynamics
+ bool isGrounded; // Physics grounded on other body state
+ bool freezeOrient; // Physics rotation constraint
+ PhysicsShape shape; // Physics body shape information (type, radius, vertices, normals)
+} PhysicsBodyData;
+typedef struct PhysicsManifoldData {
+ unsigned int id; // Reference unique identifier
+ PhysicsBody bodyA; // Manifold first physics body reference
+ PhysicsBody bodyB; // Manifold second physics body reference
+ float penetration; // Depth of penetration from collision
+ Vector2 normal; // Normal direction vector from 'a' to 'b'
+ Vector2 contacts[2]; // Points of contact during collision
+ unsigned int contactsCount; // Current collision number of contacts
+ float restitution; // Mixed restitution during collision
+ float dynamicFriction; // Mixed dynamic friction during collision
+ float staticFriction; // Mixed static friction during collision
+} PhysicsManifoldData, *PhysicsManifold;
+//----------------------------------------------------------------------------------
+// Module Functions Declaration
+//----------------------------------------------------------------------------------
+extern /* Functions visible from other files*/ void InitPhysics(void); // Initializes physics values, pointers and creates physics loop thread
+extern /* Functions visible from other files*/ void RunPhysicsStep(void); // Run physics step, to be used if PHYSICS_NO_THREADS is set in your main loop
+extern /* Functions visible from other files*/ void SetPhysicsTimeStep(double delta); // Sets physics fixed time step in milliseconds. 1.666666 by default
+extern /* Functions visible from other files*/ bool IsPhysicsEnabled(void); // Returns true if physics thread is currently enabled
+extern /* Functions visible from other files*/ void SetPhysicsGravity(float x, float y); // Sets physics global gravity force
+extern /* Functions visible from other files*/ PhysicsBody CreatePhysicsBodyCircle(Vector2 pos, float radius, float density); // Creates a new circle physics body with generic parameters
+extern /* Functions visible from other files*/ PhysicsBody CreatePhysicsBodyRectangle(Vector2 pos, float width, float height, float density); // Creates a new rectangle physics body with generic parameters
+extern /* Functions visible from other files*/ PhysicsBody CreatePhysicsBodyPolygon(Vector2 pos, float radius, int sides, float density); // Creates a new polygon physics body with generic parameters
+extern /* Functions visible from other files*/ void PhysicsAddForce(PhysicsBody body, Vector2 force); // Adds a force to a physics body
+extern /* Functions visible from other files*/ void PhysicsAddTorque(PhysicsBody body, float amount); // Adds an angular force to a physics body
+extern /* Functions visible from other files*/ void PhysicsShatter(PhysicsBody body, Vector2 position, float force); // Shatters a polygon shape physics body to little physics bodies with explosion force
+extern /* Functions visible from other files*/ int GetPhysicsBodiesCount(void); // Returns the current amount of created physics bodies
+extern /* Functions visible from other files*/ PhysicsBody GetPhysicsBody(int index); // Returns a physics body of the bodies pool at a specific index
+extern /* Functions visible from other files*/ int GetPhysicsShapeType(int index); // Returns the physics body shape type (PHYSICS_CIRCLE or PHYSICS_POLYGON)
+extern /* Functions visible from other files*/ int GetPhysicsShapeVerticesCount(int index); // Returns the amount of vertices of a physics body shape
+extern /* Functions visible from other files*/ Vector2 GetPhysicsShapeVertex(PhysicsBody body, int vertex); // Returns transformed position of a body shape (body position + vertex transformed position)
+extern /* Functions visible from other files*/ void SetPhysicsBodyRotation(PhysicsBody body, float radians); // Sets physics body shape transform based on radians parameter
+extern /* Functions visible from other files*/ void DestroyPhysicsBody(PhysicsBody body); // Unitializes and destroy a physics body
+extern /* Functions visible from other files*/ void ClosePhysics(void); // Unitializes physics pointers and closes physics loop thread
+/***********************************************************************************
+*
+* PHYSAC IMPLEMENTATION
+*
+************************************************************************************/
\ No newline at end of file
diff --git a/raylib/py.typed b/raylib/py.typed
new file mode 100644
index 0000000..e69de29
diff --git a/raylib/pyray.py b/raylib/pyray.py
deleted file mode 100644
index 26cfa5e..0000000
--- a/raylib/pyray.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from .static import rl, ffi
-from .colors import *
-from inspect import ismethod,getmembers,isbuiltin
-import inflection
-
-class PyRay:
- def pointer(self, struct):
- return ffi.addressof(struct)
-
-
-def makefunc(a):
- #print("makefunc ",a)
- def func(self, *args):
- modified_args = []
- for arg in args:
- #print(arg, type(arg))
- if type(arg) == str:
- encoded = arg.encode('utf-8')
- modified_args.append(encoded)
- else:
- modified_args.append(arg)
- return a(*modified_args)
- return func
-
-def makeStructHelper(struct):
- def func(self, *args):
- return ffi.new(f"struct {struct} *", args)[0]
- return func
-
-
-for name, attr in getmembers(rl):
- #print(name, attr)
- uname = inflection.underscore(name).replace('3_d','_3d').replace('2_d','_2d')
- if isbuiltin(attr):
- #print(attr.__call__)
- #print(attr.__doc__)
- #print(attr.__text_signature__)
- #print(dir(attr))
- #print(dir(attr.__repr__))
- f = makefunc(attr)
- setattr(PyRay, uname, f)
- #def wrap(*args):
- # print("call to ",attr)
- #setattr(PyRay, uname, lambda *args: print("call to ",attr))
- else:
- setattr(PyRay, name, attr)
-
-for struct in ('Vector2','Vector3','Vector4','Camera2D', 'Camera3D', 'Quaternion', 'Color'):
- f = makeStructHelper(struct)
- setattr(PyRay, struct, f)
-
diff --git a/raylib/raygui.h.modified b/raylib/raygui.h.modified
new file mode 100644
index 0000000..34568d3
--- /dev/null
+++ b/raylib/raygui.h.modified
@@ -0,0 +1,865 @@
+/*******************************************************************************************
+*
+* raygui v4.5-dev - 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.
+*
+* FEATURES:
+* - Immediate-mode gui, minimal retained data
+* - +25 controls provided (basic and advanced)
+* - Styling system for colors, font and metrics
+* - Icons supported, embedded as a 1-bit icons pack
+* - Standalone mode option (custom input/graphics backend)
+* - Multiple support tools provided for raygui development
+*
+* POSSIBLE IMPROVEMENTS:
+* - Better standalone mode API for easy plug of custom backends
+* - Externalize required inputs, allow user easier customization
+*
+* LIMITATIONS:
+* - No editable multi-line word-wraped text box supported
+* - No auto-layout mechanism, up to the user to define controls position and size
+* - Standalone mode requires library modification and some user work to plug another backend
+*
+* NOTES:
+* - WARNING: GuiLoadStyle() and GuiLoadStyle{Custom}() functions, allocate memory for
+* font atlas recs and glyphs, freeing that memory is (usually) up to the user,
+* no unload function is explicitly provided... but note that GuiLoadStyleDefault() unloads
+* by default any previously loaded font (texture, recs, glyphs).
+* - Global UI alpha (guiAlpha) is applied inside GuiDrawRectangle() and GuiDrawText() functions
+*
+* CONTROLS PROVIDED:
+* # Container/separators Controls
+* - WindowBox --> StatusBar, Panel
+* - GroupBox --> Line
+* - Line
+* - Panel --> StatusBar
+* - ScrollPanel --> StatusBar
+* - TabBar --> Button
+*
+* # Basic Controls
+* - Label
+* - LabelButton --> Label
+* - Button
+* - Toggle
+* - ToggleGroup --> Toggle
+* - ToggleSlider
+* - CheckBox
+* - ComboBox
+* - DropdownBox
+* - TextBox
+* - ValueBox --> TextBox
+* - Spinner --> Button, ValueBox
+* - Slider
+* - SliderBar --> Slider
+* - ProgressBar
+* - StatusBar
+* - 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).
+*
+*
+* RAYGUI STYLE (guiStyle):
+* raygui uses a global data array for all gui style properties (allocated on data segment by default),
+* when a new style is loaded, it is loaded over the global style... but a default gui style could always be
+* recovered with GuiLoadStyleDefault() function, that overwrites the current style to the default one
+*
+* The global style array size is fixed and depends on the number of controls and properties:
+*
+* static unsigned int guiStyle[RAYGUI_MAX_CONTROLS*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED)];
+*
+* guiStyle size is by default: 16*(16 + 8) = 384*4 = 1536 bytes = 1.5 KB
+*
+* Note that the first set of BASE properties (by default guiStyle[0..15]) belong to the generic style
+* used for all controls, when any of those base values is set, it is automatically populated to all
+* controls, so, specific control values overwriting generic style should be set after base values.
+*
+* After the first BASE set we have the EXTENDED properties (by default guiStyle[16..23]), those
+* properties are actually common to all controls and can not be overwritten individually (like BASE ones)
+* Some of those properties are: TEXT_SIZE, TEXT_SPACING, LINE_COLOR, BACKGROUND_COLOR
+*
+* Custom control properties can be defined using the EXTENDED properties for each independent control.
+*
+* TOOL: rGuiStyler is a visual tool to customize raygui style: github.com/raysan5/rguistyler
+*
+*
+* RAYGUI ICONS (guiIcons):
+* raygui could use a global array containing icons data (allocated on data segment by default),
+* a custom icons set could be loaded over this array using GuiLoadIcons(), but loaded icons set
+* must be same RAYGUI_ICON_SIZE and no more than RAYGUI_ICON_MAX_ICONS will be loaded
+*
+* Every icon is codified in binary form, using 1 bit per pixel, so, every 16x16 icon
+* requires 8 integers (16*16/32) to be stored in memory.
+*
+* When the icon is draw, actually one quad per pixel is drawn if the bit for that pixel is set.
+*
+* The global icons array size is fixed and depends on the number of icons and size:
+*
+* static unsigned int guiIcons[RAYGUI_ICON_MAX_ICONS*RAYGUI_ICON_DATA_ELEMENTS];
+*
+* guiIcons size is by default: 256*(16*16/32) = 2048*4 = 8192 bytes = 8 KB
+*
+* TOOL: rGuiIcons is a visual tool to customize/create raygui icons: github.com/raysan5/rguiicons
+*
+* RAYGUI LAYOUT:
+* raygui currently does not provide an auto-layout mechanism like other libraries,
+* layouts must be defined manually on controls drawing, providing the right bounds Rectangle for it.
+*
+* TOOL: rGuiLayout is a visual tool to create raygui layouts: github.com/raysan5/rguilayout
+*
+* 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_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_NO_ICONS
+* Avoid including embedded ricons data (256 icons, 16x16 pixels, 1-bit per pixel, 2KB)
+*
+* #define RAYGUI_CUSTOM_ICONS
+* Includes custom ricons.h header defining a set of custom icons,
+* this file can be generated using rGuiIcons tool
+*
+* #define RAYGUI_DEBUG_RECS_BOUNDS
+* Draw control bounds rectangles for debug
+*
+* #define RAYGUI_DEBUG_TEXT_BOUNDS
+* Draw text bounds rectangles for debug
+*
+* VERSIONS HISTORY:
+* 4.5-dev (Sep-2024) Current dev version...
+* ADDED: guiControlExclusiveMode and guiControlExclusiveRec for exclusive modes
+* ADDED: GuiValueBoxFloat()
+* ADDED: GuiDropdonwBox() properties: DROPDOWN_ARROW_HIDDEN, DROPDOWN_ROLL_UP
+* ADDED: GuiListView() property: LIST_ITEMS_BORDER_WIDTH
+* ADDED: Multiple new icons
+* REVIEWED: GuiTabBar(), close tab with mouse middle button
+* REVIEWED: GuiScrollPanel(), scroll speed proportional to content
+* REVIEWED: GuiDropdownBox(), support roll up and hidden arrow
+* REVIEWED: GuiTextBox(), cursor position initialization
+* REVIEWED: GuiSliderPro(), control value change check
+* REVIEWED: GuiGrid(), simplified implementation
+* REVIEWED: GuiIconText(), increase buffer size and reviewed padding
+* REVIEWED: GuiDrawText(), improved wrap mode drawing
+* REVIEWED: GuiScrollBar(), minor tweaks
+* REVIEWED: Functions descriptions, removed wrong return value reference
+* REDESIGNED: GuiColorPanel(), improved HSV <-> RGBA convertion
+*
+* 4.0 (12-Sep-2023) ADDED: GuiToggleSlider()
+* ADDED: GuiColorPickerHSV() and GuiColorPanelHSV()
+* ADDED: Multiple new icons, mostly compiler related
+* ADDED: New DEFAULT properties: TEXT_LINE_SPACING, TEXT_ALIGNMENT_VERTICAL, TEXT_WRAP_MODE
+* ADDED: New enum values: GuiTextAlignment, GuiTextAlignmentVertical, GuiTextWrapMode
+* ADDED: Support loading styles with custom font charset from external file
+* REDESIGNED: GuiTextBox(), support mouse cursor positioning
+* REDESIGNED: GuiDrawText(), support multiline and word-wrap modes (read only)
+* REDESIGNED: GuiProgressBar() to be more visual, progress affects border color
+* REDESIGNED: Global alpha consideration moved to GuiDrawRectangle() and GuiDrawText()
+* REDESIGNED: GuiScrollPanel(), get parameters by reference and return result value
+* REDESIGNED: GuiToggleGroup(), get parameters by reference and return result value
+* REDESIGNED: GuiComboBox(), get parameters by reference and return result value
+* REDESIGNED: GuiCheckBox(), get parameters by reference and return result value
+* REDESIGNED: GuiSlider(), get parameters by reference and return result value
+* REDESIGNED: GuiSliderBar(), get parameters by reference and return result value
+* REDESIGNED: GuiProgressBar(), get parameters by reference and return result value
+* REDESIGNED: GuiListView(), get parameters by reference and return result value
+* REDESIGNED: GuiColorPicker(), get parameters by reference and return result value
+* REDESIGNED: GuiColorPanel(), get parameters by reference and return result value
+* REDESIGNED: GuiColorBarAlpha(), get parameters by reference and return result value
+* REDESIGNED: GuiColorBarHue(), get parameters by reference and return result value
+* REDESIGNED: GuiGrid(), get parameters by reference and return result value
+* REDESIGNED: GuiGrid(), added extra parameter
+* REDESIGNED: GuiListViewEx(), change parameters order
+* REDESIGNED: All controls return result as int value
+* REVIEWED: GuiScrollPanel() to avoid smallish scroll-bars
+* REVIEWED: All examples and specially controls_test_suite
+* RENAMED: gui_file_dialog module to gui_window_file_dialog
+* UPDATED: All styles to include ISO-8859-15 charset (as much as possible)
+*
+* 3.6 (10-May-2023) ADDED: New icon: SAND_TIMER
+* ADDED: GuiLoadStyleFromMemory() (binary only)
+* REVIEWED: GuiScrollBar() horizontal movement key
+* REVIEWED: GuiTextBox() crash on cursor movement
+* REVIEWED: GuiTextBox(), additional inputs support
+* REVIEWED: GuiLabelButton(), avoid text cut
+* REVIEWED: GuiTextInputBox(), password input
+* REVIEWED: Local GetCodepointNext(), aligned with raylib
+* REDESIGNED: GuiSlider*()/GuiScrollBar() to support out-of-bounds
+*
+* 3.5 (20-Apr-2023) ADDED: GuiTabBar(), based on GuiToggle()
+* ADDED: Helper functions to split text in separate lines
+* ADDED: Multiple new icons, useful for code editing tools
+* REMOVED: Unneeded icon editing functions
+* REMOVED: GuiTextBoxMulti(), very limited and broken
+* REMOVED: MeasureTextEx() dependency, logic directly implemented
+* REMOVED: DrawTextEx() dependency, logic directly implemented
+* REVIEWED: GuiScrollBar(), improve mouse-click behaviour
+* REVIEWED: Library header info, more info, better organized
+* REDESIGNED: GuiTextBox() to support cursor movement
+* REDESIGNED: GuiDrawText() to divide drawing by lines
+*
+* 3.2 (22-May-2022) RENAMED: Some enum values, for unification, avoiding prefixes
+* REMOVED: GuiScrollBar(), only internal
+* REDESIGNED: GuiPanel() to support text parameter
+* REDESIGNED: GuiScrollPanel() to support text parameter
+* REDESIGNED: GuiColorPicker() to support text parameter
+* REDESIGNED: GuiColorPanel() to support text parameter
+* REDESIGNED: GuiColorBarAlpha() to support text parameter
+* REDESIGNED: GuiColorBarHue() to support text parameter
+* REDESIGNED: GuiTextInputBox() to support password
+*
+* 3.1 (12-Jan-2022) REVIEWED: Default style for consistency (aligned with rGuiLayout v2.5 tool)
+* REVIEWED: GuiLoadStyle() to support compressed font atlas image data and unload previous textures
+* REVIEWED: External icons usage logic
+* REVIEWED: GuiLine() for centered alignment when including text
+* RENAMED: Multiple controls properties definitions to prepend RAYGUI_
+* RENAMED: RICON_ references to RAYGUI_ICON_ for library consistency
+* Projects updated and multiple tweaks
+*
+* 3.0 (04-Nov-2021) Integrated ricons data to avoid external file
+* REDESIGNED: GuiTextBoxMulti()
+* REMOVED: GuiImageButton*()
+* Multiple minor tweaks and bugs corrected
+*
+* 2.9 (17-Mar-2021) REMOVED: Tooltip API
+* 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) REDESIGNED: GuiCheckBox(), GuiComboBox(), GuiDropdownBox(), GuiToggleGroup() > Use combined text string
+* REDESIGNED: Style system (breaking change)
+* 2.0 (08-Nov-2018) ADDED: Support controls guiLock and custom fonts
+* REVIEWED: GuiComboBox(), GuiListView()...
+* 1.9 (09-Oct-2018) REVIEWED: 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) Complete redesign of style 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.
+*
+* DEPENDENCIES:
+* raylib 5.0 - Inputs reading (keyboard/mouse), shapes drawing, font loading and text drawing
+*
+* STANDALONE MODE:
+* By default raygui depends on raylib mostly for the inputs and the drawing functionality but that dependency can be disabled
+* with the config flag RAYGUI_STANDALONE. In that case is up to the user to provide another backend to cover library needs.
+*
+* The following functions should be redefined for a custom backend:
+*
+* - Vector2 GetMousePosition(void);
+* - float GetMouseWheelMove(void);
+* - bool IsMouseButtonDown(int button);
+* - bool IsMouseButtonPressed(int button);
+* - bool IsMouseButtonReleased(int button);
+* - bool IsKeyDown(int key);
+* - bool IsKeyPressed(int key);
+* - int GetCharPressed(void); // -- GuiTextBox(), GuiValueBox()
+*
+* - void DrawRectangle(int x, int y, int width, int height, Color color); // -- GuiDrawRectangle()
+* - void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // -- GuiColorPicker()
+*
+* - Font GetFontDefault(void); // -- GuiLoadStyleDefault()
+* - Font LoadFontEx(const char *fileName, int fontSize, int *codepoints, int codepointCount); // -- GuiLoadStyle()
+* - Texture2D LoadTextureFromImage(Image image); // -- GuiLoadStyle(), required to load texture from embedded font atlas image
+* - void SetShapesTexture(Texture2D tex, Rectangle rec); // -- GuiLoadStyle(), required to set shapes rec to font white rec (optimization)
+* - char *LoadFileText(const char *fileName); // -- GuiLoadStyle(), required to load charset data
+* - void UnloadFileText(char *text); // -- GuiLoadStyle(), required to unload charset data
+* - const char *GetDirectoryPath(const char *filePath); // -- GuiLoadStyle(), required to find charset/font file from text .rgs
+* - int *LoadCodepoints(const char *text, int *count); // -- GuiLoadStyle(), required to load required font codepoints list
+* - void UnloadCodepoints(int *codepoints); // -- GuiLoadStyle(), required to unload codepoints list
+* - unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSize); // -- GuiLoadStyle()
+*
+* 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-2024 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.
+*
+**********************************************************************************************/
+// Function specifiers in case library is build/used as a shared library (Windows)
+// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll
+// Function specifiers definition
+//----------------------------------------------------------------------------------
+// Defines and Macros
+//----------------------------------------------------------------------------------
+// Allow custom memory allocators
+// Simple log system to avoid printf() calls if required
+// NOTE: Avoiding those calls, also avoids const strings memory usage
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+// NOTE: Some types are required for RAYGUI_STANDALONE usage
+//----------------------------------------------------------------------------------
+// Style property
+// NOTE: Used when exporting style as code for convenience
+typedef struct GuiStyleProp {
+ unsigned short controlId; // Control identifier
+ unsigned short propertyId; // Property identifier
+ int propertyValue; // Property value
+} GuiStyleProp;
+/*
+// Controls text style -NOT USED-
+// NOTE: Text style is defined by control
+typedef struct GuiTextStyle {
+ unsigned int size;
+ int charSpacing;
+ int lineSpacing;
+ int alignmentH;
+ int alignmentV;
+ int padding;
+} GuiTextStyle;
+*/
+// Gui control state
+typedef enum {
+ STATE_NORMAL = 0,
+ STATE_FOCUSED,
+ STATE_PRESSED,
+ STATE_DISABLED
+} GuiState;
+// Gui control text alignment
+typedef enum {
+ TEXT_ALIGN_LEFT = 0,
+ TEXT_ALIGN_CENTER,
+ TEXT_ALIGN_RIGHT
+} GuiTextAlignment;
+// Gui control text alignment vertical
+// NOTE: Text vertical position inside the text bounds
+typedef enum {
+ TEXT_ALIGN_TOP = 0,
+ TEXT_ALIGN_MIDDLE,
+ TEXT_ALIGN_BOTTOM
+} GuiTextAlignmentVertical;
+// Gui control text wrap mode
+// NOTE: Useful for multiline text
+typedef enum {
+ TEXT_WRAP_NONE = 0,
+ TEXT_WRAP_CHAR,
+ TEXT_WRAP_WORD
+} GuiTextWrapMode;
+// Gui controls
+typedef enum {
+ // Default -> populates to all controls when set
+ DEFAULT = 0,
+ // Basic controls
+ LABEL, // Used also for: LABELBUTTON
+ BUTTON,
+ TOGGLE, // Used also for: TOGGLEGROUP
+ SLIDER, // Used also for: SLIDERBAR, TOGGLESLIDER
+ PROGRESSBAR,
+ CHECKBOX,
+ COMBOBOX,
+ DROPDOWNBOX,
+ TEXTBOX, // Used also for: TEXTBOXMULTI
+ VALUEBOX,
+ SPINNER, // Uses: BUTTON, VALUEBOX
+ LISTVIEW,
+ COLORPICKER,
+ SCROLLBAR,
+ STATUSBAR
+} GuiControl;
+// Gui base properties for every control
+// NOTE: RAYGUI_MAX_PROPS_BASE properties (by default 16 properties)
+typedef enum {
+ BORDER_COLOR_NORMAL = 0, // Control border color in STATE_NORMAL
+ BASE_COLOR_NORMAL, // Control base color in STATE_NORMAL
+ TEXT_COLOR_NORMAL, // Control text color in STATE_NORMAL
+ BORDER_COLOR_FOCUSED, // Control border color in STATE_FOCUSED
+ BASE_COLOR_FOCUSED, // Control base color in STATE_FOCUSED
+ TEXT_COLOR_FOCUSED, // Control text color in STATE_FOCUSED
+ BORDER_COLOR_PRESSED, // Control border color in STATE_PRESSED
+ BASE_COLOR_PRESSED, // Control base color in STATE_PRESSED
+ TEXT_COLOR_PRESSED, // Control text color in STATE_PRESSED
+ BORDER_COLOR_DISABLED, // Control border color in STATE_DISABLED
+ BASE_COLOR_DISABLED, // Control base color in STATE_DISABLED
+ TEXT_COLOR_DISABLED, // Control text color in STATE_DISABLED
+ BORDER_WIDTH, // Control border size, 0 for no border
+ //TEXT_SIZE, // Control text size (glyphs max height) -> GLOBAL for all controls
+ //TEXT_SPACING, // Control text spacing between glyphs -> GLOBAL for all controls
+ //TEXT_LINE_SPACING // Control text spacing between lines -> GLOBAL for all controls
+ TEXT_PADDING, // Control text padding, not considering border
+ TEXT_ALIGNMENT, // Control text horizontal alignment inside control text bound (after border and padding)
+ //TEXT_WRAP_MODE // Control text wrap-mode inside text bounds -> GLOBAL for all controls
+} GuiControlProperty;
+// TODO: Which text styling properties should be global or per-control?
+// At this moment TEXT_PADDING and TEXT_ALIGNMENT is configured and saved per control while
+// TEXT_SIZE, TEXT_SPACING, TEXT_LINE_SPACING, TEXT_ALIGNMENT_VERTICAL, TEXT_WRAP_MODE are global and
+// should be configured by user as needed while defining the UI layout
+// Gui extended properties depend on control
+// NOTE: RAYGUI_MAX_PROPS_EXTENDED properties (by default, max 8 properties)
+//----------------------------------------------------------------------------------
+// DEFAULT extended properties
+// NOTE: Those properties are common to all controls or global
+// WARNING: We only have 8 slots for those properties by default!!! -> New global control: TEXT?
+typedef enum {
+ TEXT_SIZE = 16, // Text size (glyphs max height)
+ TEXT_SPACING, // Text spacing between glyphs
+ LINE_COLOR, // Line control color
+ BACKGROUND_COLOR, // Background color
+ TEXT_LINE_SPACING, // Text spacing between lines
+ TEXT_ALIGNMENT_VERTICAL, // Text vertical alignment inside text bounds (after border and padding)
+ TEXT_WRAP_MODE // Text wrap-mode inside text bounds
+ //TEXT_DECORATION // Text decoration: 0-None, 1-Underline, 2-Line-through, 3-Overline
+ //TEXT_DECORATION_THICK // Text decoration line thickness
+} GuiDefaultProperty;
+// Other possible text properties:
+// TEXT_WEIGHT // Normal, Italic, Bold -> Requires specific font change
+// TEXT_INDENT // Text indentation -> Now using TEXT_PADDING...
+// Label
+//typedef enum { } GuiLabelProperty;
+// Button/Spinner
+//typedef enum { } GuiButtonProperty;
+// Toggle/ToggleGroup
+typedef enum {
+ GROUP_PADDING = 16, // ToggleGroup separation between toggles
+} GuiToggleProperty;
+// Slider/SliderBar
+typedef enum {
+ SLIDER_WIDTH = 16, // Slider size of internal bar
+ SLIDER_PADDING // Slider/SliderBar internal bar padding
+} GuiSliderProperty;
+// ProgressBar
+typedef enum {
+ PROGRESS_PADDING = 16, // ProgressBar internal padding
+} GuiProgressBarProperty;
+// ScrollBar
+typedef enum {
+ ARROWS_SIZE = 16, // ScrollBar arrows size
+ ARROWS_VISIBLE, // ScrollBar arrows visible
+ SCROLL_SLIDER_PADDING, // ScrollBar slider internal padding
+ SCROLL_SLIDER_SIZE, // ScrollBar slider size
+ SCROLL_PADDING, // ScrollBar scroll padding from arrows
+ SCROLL_SPEED, // ScrollBar scrolling speed
+} GuiScrollBarProperty;
+// CheckBox
+typedef enum {
+ CHECK_PADDING = 16 // CheckBox internal check padding
+} GuiCheckBoxProperty;
+// ComboBox
+typedef enum {
+ COMBO_BUTTON_WIDTH = 16, // ComboBox right button width
+ COMBO_BUTTON_SPACING // ComboBox button separation
+} GuiComboBoxProperty;
+// DropdownBox
+typedef enum {
+ ARROW_PADDING = 16, // DropdownBox arrow separation from border and items
+ DROPDOWN_ITEMS_SPACING, // DropdownBox items separation
+ DROPDOWN_ARROW_HIDDEN, // DropdownBox arrow hidden
+ DROPDOWN_ROLL_UP // DropdownBox roll up flag (default rolls down)
+} GuiDropdownBoxProperty;
+// TextBox/TextBoxMulti/ValueBox/Spinner
+typedef enum {
+ TEXT_READONLY = 16, // TextBox in read-only mode: 0-text editable, 1-text no-editable
+} GuiTextBoxProperty;
+// Spinner
+typedef enum {
+ SPIN_BUTTON_WIDTH = 16, // Spinner left/right buttons width
+ SPIN_BUTTON_SPACING, // Spinner buttons separation
+} GuiSpinnerProperty;
+// ListView
+typedef enum {
+ LIST_ITEMS_HEIGHT = 16, // ListView items height
+ LIST_ITEMS_SPACING, // ListView items separation
+ SCROLLBAR_WIDTH, // ListView scrollbar size (usually width)
+ SCROLLBAR_SIDE, // ListView scrollbar side (0-SCROLLBAR_LEFT_SIDE, 1-SCROLLBAR_RIGHT_SIDE)
+ LIST_ITEMS_BORDER_WIDTH // ListView items border width
+} GuiListViewProperty;
+// ColorPicker
+typedef enum {
+ COLOR_SELECTOR_SIZE = 16,
+ HUEBAR_WIDTH, // ColorPicker right hue bar width
+ HUEBAR_PADDING, // ColorPicker right hue bar separation from panel
+ HUEBAR_SELECTOR_HEIGHT, // ColorPicker right hue bar selector height
+ HUEBAR_SELECTOR_OVERFLOW // ColorPicker right hue bar selector overflow
+} GuiColorPickerProperty;
+//----------------------------------------------------------------------------------
+// Global Variables Definition
+//----------------------------------------------------------------------------------
+// ...
+//----------------------------------------------------------------------------------
+// Module Functions Declaration
+//----------------------------------------------------------------------------------
+// Global gui state control functions
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiEnable(void); // Enable gui controls (global state)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiDisable(void); // Disable gui controls (global state)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiLock(void); // Lock gui controls (global state)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiUnlock(void); // Unlock gui controls (global state)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ bool GuiIsLocked(void); // Check if gui is locked (global state)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiSetAlpha(float alpha); // Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiSetState(int state); // Set gui state (global state)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiGetState(void); // Get gui state (global state)
+// Font set/get functions
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiSetFont(Font font); // Set gui custom font (global state)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ Font GuiGetFont(void); // Get gui custom font (global state)
+// Style set/get functions
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiSetStyle(int control, int property, int value); // Set one style property
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiGetStyle(int control, int property); // Get one style property
+// Styles loading functions
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiLoadStyle(const char *fileName); // Load style file over global style variable (.rgs)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiLoadStyleDefault(void); // Load style default over global style
+// Tooltips management functions
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiEnableTooltip(void); // Enable gui tooltips (global state)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiDisableTooltip(void); // Disable gui tooltips (global state)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiSetTooltip(const char *tooltip); // Set tooltip string
+// Icons functionality
+/* Functions defined as 'extern' by default (implicit specifiers)*/ const char *GuiIconText(int iconId, const char *text); // Get text with icon id prepended (if supported)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiSetIconScale(int scale); // Set default icon drawing size
+/* Functions defined as 'extern' by default (implicit specifiers)*/ unsigned int *GuiGetIcons(void); // Get raygui icons data pointer
+/* Functions defined as 'extern' by default (implicit specifiers)*/ char **GuiLoadIcons(const char *fileName, bool loadIconsName); // Load raygui icons file (.rgi) into internal icons data
+/* Functions defined as 'extern' by default (implicit specifiers)*/ void GuiDrawIcon(int iconId, int posX, int posY, int pixelSize, Color color); // Draw icon using pixel size at specified position
+// Controls
+//----------------------------------------------------------------------------------------------------------
+// Container/separator controls, useful for controls organization
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiWindowBox(Rectangle bounds, const char *title); // Window Box control, shows a window that can be closed
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiGroupBox(Rectangle bounds, const char *text); // Group Box control with text name
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiLine(Rectangle bounds, const char *text); // Line separator control, could contain text
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiPanel(Rectangle bounds, const char *text); // Panel control, useful to group controls
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiTabBar(Rectangle bounds, const char **text, int count, int *active); // Tab Bar control, returns TAB to be closed or -1
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector2 *scroll, Rectangle *view); // Scroll Panel control
+// Basic controls set
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiLabel(Rectangle bounds, const char *text); // Label control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiButton(Rectangle bounds, const char *text); // Button control, returns true when clicked
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiLabelButton(Rectangle bounds, const char *text); // Label button control, returns true when clicked
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiToggle(Rectangle bounds, const char *text, bool *active); // Toggle Button control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiToggleGroup(Rectangle bounds, const char *text, int *active); // Toggle Group control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiToggleSlider(Rectangle bounds, const char *text, int *active); // Toggle Slider control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiCheckBox(Rectangle bounds, const char *text, bool *checked); // Check Box control, returns true when active
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiComboBox(Rectangle bounds, const char *text, int *active); // Combo Box control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiDropdownBox(Rectangle bounds, const char *text, int *active, bool editMode); // Dropdown Box control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Spinner control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Value Box control, updates input text with numbers
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiValueBoxFloat(Rectangle bounds, const char *text, char *textValue, float *value, bool editMode); // Value box control for float values
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode); // Text Box control, updates input text
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiSlider(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue); // Slider control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiSliderBar(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue); // Slider Bar control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue); // Progress Bar control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiStatusBar(Rectangle bounds, const char *text); // Status Bar control, shows info text
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiDummyRec(Rectangle bounds, const char *text); // Dummy control for placeholders
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiGrid(Rectangle bounds, const char *text, float spacing, int subdivs, Vector2 *mouseCell); // Grid control
+// Advance controls set
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiListView(Rectangle bounds, const char *text, int *scrollIndex, int *active); // List View control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiListViewEx(Rectangle bounds, const char **text, int count, int *scrollIndex, int *active, int *focus); // List View with extended parameters
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons); // Message Box control, displays a message
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiTextInputBox(Rectangle bounds, const char *title, const char *message, const char *buttons, char *text, int textMaxSize, bool *secretViewActive); // Text Input Box control, ask for text, supports secret
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiColorPicker(Rectangle bounds, const char *text, Color *color); // Color Picker control (multiple color controls)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiColorPanel(Rectangle bounds, const char *text, Color *color); // Color Panel control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiColorBarAlpha(Rectangle bounds, const char *text, float *alpha); // Color Bar Alpha control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiColorBarHue(Rectangle bounds, const char *text, float *value); // Color Bar Hue control
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiColorPickerHSV(Rectangle bounds, const char *text, Vector3 *colorHsv); // Color Picker control that avoids conversion to RGB on each call (multiple color controls)
+/* Functions defined as 'extern' by default (implicit specifiers)*/ int GuiColorPanelHSV(Rectangle bounds, const char *text, Vector3 *colorHsv); // Color Panel control that updates Hue-Saturation-Value color value, used by GuiColorPickerHSV()
+//----------------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------
+// Icons enumeration
+//----------------------------------------------------------------------------------
+typedef enum {
+ ICON_NONE = 0,
+ ICON_FOLDER_FILE_OPEN = 1,
+ ICON_FILE_SAVE_CLASSIC = 2,
+ ICON_FOLDER_OPEN = 3,
+ ICON_FOLDER_SAVE = 4,
+ ICON_FILE_OPEN = 5,
+ ICON_FILE_SAVE = 6,
+ ICON_FILE_EXPORT = 7,
+ ICON_FILE_ADD = 8,
+ ICON_FILE_DELETE = 9,
+ ICON_FILETYPE_TEXT = 10,
+ ICON_FILETYPE_AUDIO = 11,
+ ICON_FILETYPE_IMAGE = 12,
+ ICON_FILETYPE_PLAY = 13,
+ ICON_FILETYPE_VIDEO = 14,
+ ICON_FILETYPE_INFO = 15,
+ ICON_FILE_COPY = 16,
+ ICON_FILE_CUT = 17,
+ ICON_FILE_PASTE = 18,
+ ICON_CURSOR_HAND = 19,
+ ICON_CURSOR_POINTER = 20,
+ ICON_CURSOR_CLASSIC = 21,
+ ICON_PENCIL = 22,
+ ICON_PENCIL_BIG = 23,
+ ICON_BRUSH_CLASSIC = 24,
+ ICON_BRUSH_PAINTER = 25,
+ ICON_WATER_DROP = 26,
+ ICON_COLOR_PICKER = 27,
+ ICON_RUBBER = 28,
+ ICON_COLOR_BUCKET = 29,
+ ICON_TEXT_T = 30,
+ ICON_TEXT_A = 31,
+ ICON_SCALE = 32,
+ ICON_RESIZE = 33,
+ ICON_FILTER_POINT = 34,
+ ICON_FILTER_BILINEAR = 35,
+ ICON_CROP = 36,
+ ICON_CROP_ALPHA = 37,
+ ICON_SQUARE_TOGGLE = 38,
+ ICON_SYMMETRY = 39,
+ ICON_SYMMETRY_HORIZONTAL = 40,
+ ICON_SYMMETRY_VERTICAL = 41,
+ ICON_LENS = 42,
+ ICON_LENS_BIG = 43,
+ ICON_EYE_ON = 44,
+ ICON_EYE_OFF = 45,
+ ICON_FILTER_TOP = 46,
+ ICON_FILTER = 47,
+ ICON_TARGET_POINT = 48,
+ ICON_TARGET_SMALL = 49,
+ ICON_TARGET_BIG = 50,
+ ICON_TARGET_MOVE = 51,
+ ICON_CURSOR_MOVE = 52,
+ ICON_CURSOR_SCALE = 53,
+ ICON_CURSOR_SCALE_RIGHT = 54,
+ ICON_CURSOR_SCALE_LEFT = 55,
+ ICON_UNDO = 56,
+ ICON_REDO = 57,
+ ICON_REREDO = 58,
+ ICON_MUTATE = 59,
+ ICON_ROTATE = 60,
+ ICON_REPEAT = 61,
+ ICON_SHUFFLE = 62,
+ ICON_EMPTYBOX = 63,
+ ICON_TARGET = 64,
+ ICON_TARGET_SMALL_FILL = 65,
+ ICON_TARGET_BIG_FILL = 66,
+ ICON_TARGET_MOVE_FILL = 67,
+ ICON_CURSOR_MOVE_FILL = 68,
+ ICON_CURSOR_SCALE_FILL = 69,
+ ICON_CURSOR_SCALE_RIGHT_FILL = 70,
+ ICON_CURSOR_SCALE_LEFT_FILL = 71,
+ ICON_UNDO_FILL = 72,
+ ICON_REDO_FILL = 73,
+ ICON_REREDO_FILL = 74,
+ ICON_MUTATE_FILL = 75,
+ ICON_ROTATE_FILL = 76,
+ ICON_REPEAT_FILL = 77,
+ ICON_SHUFFLE_FILL = 78,
+ ICON_EMPTYBOX_SMALL = 79,
+ ICON_BOX = 80,
+ ICON_BOX_TOP = 81,
+ ICON_BOX_TOP_RIGHT = 82,
+ ICON_BOX_RIGHT = 83,
+ ICON_BOX_BOTTOM_RIGHT = 84,
+ ICON_BOX_BOTTOM = 85,
+ ICON_BOX_BOTTOM_LEFT = 86,
+ ICON_BOX_LEFT = 87,
+ ICON_BOX_TOP_LEFT = 88,
+ ICON_BOX_CENTER = 89,
+ ICON_BOX_CIRCLE_MASK = 90,
+ ICON_POT = 91,
+ ICON_ALPHA_MULTIPLY = 92,
+ ICON_ALPHA_CLEAR = 93,
+ ICON_DITHERING = 94,
+ ICON_MIPMAPS = 95,
+ ICON_BOX_GRID = 96,
+ ICON_GRID = 97,
+ ICON_BOX_CORNERS_SMALL = 98,
+ ICON_BOX_CORNERS_BIG = 99,
+ ICON_FOUR_BOXES = 100,
+ ICON_GRID_FILL = 101,
+ ICON_BOX_MULTISIZE = 102,
+ ICON_ZOOM_SMALL = 103,
+ ICON_ZOOM_MEDIUM = 104,
+ ICON_ZOOM_BIG = 105,
+ ICON_ZOOM_ALL = 106,
+ ICON_ZOOM_CENTER = 107,
+ ICON_BOX_DOTS_SMALL = 108,
+ ICON_BOX_DOTS_BIG = 109,
+ ICON_BOX_CONCENTRIC = 110,
+ ICON_BOX_GRID_BIG = 111,
+ ICON_OK_TICK = 112,
+ ICON_CROSS = 113,
+ ICON_ARROW_LEFT = 114,
+ ICON_ARROW_RIGHT = 115,
+ ICON_ARROW_DOWN = 116,
+ ICON_ARROW_UP = 117,
+ ICON_ARROW_LEFT_FILL = 118,
+ ICON_ARROW_RIGHT_FILL = 119,
+ ICON_ARROW_DOWN_FILL = 120,
+ ICON_ARROW_UP_FILL = 121,
+ ICON_AUDIO = 122,
+ ICON_FX = 123,
+ ICON_WAVE = 124,
+ ICON_WAVE_SINUS = 125,
+ ICON_WAVE_SQUARE = 126,
+ ICON_WAVE_TRIANGULAR = 127,
+ ICON_CROSS_SMALL = 128,
+ ICON_PLAYER_PREVIOUS = 129,
+ ICON_PLAYER_PLAY_BACK = 130,
+ ICON_PLAYER_PLAY = 131,
+ ICON_PLAYER_PAUSE = 132,
+ ICON_PLAYER_STOP = 133,
+ ICON_PLAYER_NEXT = 134,
+ ICON_PLAYER_RECORD = 135,
+ ICON_MAGNET = 136,
+ ICON_LOCK_CLOSE = 137,
+ ICON_LOCK_OPEN = 138,
+ ICON_CLOCK = 139,
+ ICON_TOOLS = 140,
+ ICON_GEAR = 141,
+ ICON_GEAR_BIG = 142,
+ ICON_BIN = 143,
+ ICON_HAND_POINTER = 144,
+ ICON_LASER = 145,
+ ICON_COIN = 146,
+ ICON_EXPLOSION = 147,
+ ICON_1UP = 148,
+ ICON_PLAYER = 149,
+ ICON_PLAYER_JUMP = 150,
+ ICON_KEY = 151,
+ ICON_DEMON = 152,
+ ICON_TEXT_POPUP = 153,
+ ICON_GEAR_EX = 154,
+ ICON_CRACK = 155,
+ ICON_CRACK_POINTS = 156,
+ ICON_STAR = 157,
+ ICON_DOOR = 158,
+ ICON_EXIT = 159,
+ ICON_MODE_2D = 160,
+ ICON_MODE_3D = 161,
+ ICON_CUBE = 162,
+ ICON_CUBE_FACE_TOP = 163,
+ ICON_CUBE_FACE_LEFT = 164,
+ ICON_CUBE_FACE_FRONT = 165,
+ ICON_CUBE_FACE_BOTTOM = 166,
+ ICON_CUBE_FACE_RIGHT = 167,
+ ICON_CUBE_FACE_BACK = 168,
+ ICON_CAMERA = 169,
+ ICON_SPECIAL = 170,
+ ICON_LINK_NET = 171,
+ ICON_LINK_BOXES = 172,
+ ICON_LINK_MULTI = 173,
+ ICON_LINK = 174,
+ ICON_LINK_BROKE = 175,
+ ICON_TEXT_NOTES = 176,
+ ICON_NOTEBOOK = 177,
+ ICON_SUITCASE = 178,
+ ICON_SUITCASE_ZIP = 179,
+ ICON_MAILBOX = 180,
+ ICON_MONITOR = 181,
+ ICON_PRINTER = 182,
+ ICON_PHOTO_CAMERA = 183,
+ ICON_PHOTO_CAMERA_FLASH = 184,
+ ICON_HOUSE = 185,
+ ICON_HEART = 186,
+ ICON_CORNER = 187,
+ ICON_VERTICAL_BARS = 188,
+ ICON_VERTICAL_BARS_FILL = 189,
+ ICON_LIFE_BARS = 190,
+ ICON_INFO = 191,
+ ICON_CROSSLINE = 192,
+ ICON_HELP = 193,
+ ICON_FILETYPE_ALPHA = 194,
+ ICON_FILETYPE_HOME = 195,
+ ICON_LAYERS_VISIBLE = 196,
+ ICON_LAYERS = 197,
+ ICON_WINDOW = 198,
+ ICON_HIDPI = 199,
+ ICON_FILETYPE_BINARY = 200,
+ ICON_HEX = 201,
+ ICON_SHIELD = 202,
+ ICON_FILE_NEW = 203,
+ ICON_FOLDER_ADD = 204,
+ ICON_ALARM = 205,
+ ICON_CPU = 206,
+ ICON_ROM = 207,
+ ICON_STEP_OVER = 208,
+ ICON_STEP_INTO = 209,
+ ICON_STEP_OUT = 210,
+ ICON_RESTART = 211,
+ ICON_BREAKPOINT_ON = 212,
+ ICON_BREAKPOINT_OFF = 213,
+ ICON_BURGER_MENU = 214,
+ ICON_CASE_SENSITIVE = 215,
+ ICON_REG_EXP = 216,
+ ICON_FOLDER = 217,
+ ICON_FILE = 218,
+ ICON_SAND_TIMER = 219,
+ ICON_WARNING = 220,
+ ICON_HELP_BOX = 221,
+ ICON_INFO_BOX = 222,
+ ICON_PRIORITY = 223,
+ ICON_LAYERS_ISO = 224,
+ ICON_LAYERS2 = 225,
+ ICON_MLAYERS = 226,
+ ICON_MAPS = 227,
+ ICON_HOT = 228,
+ ICON_229 = 229,
+ ICON_230 = 230,
+ ICON_231 = 231,
+ ICON_232 = 232,
+ ICON_233 = 233,
+ ICON_234 = 234,
+ ICON_235 = 235,
+ ICON_236 = 236,
+ ICON_237 = 237,
+ ICON_238 = 238,
+ ICON_239 = 239,
+ ICON_240 = 240,
+ ICON_241 = 241,
+ ICON_242 = 242,
+ ICON_243 = 243,
+ ICON_244 = 244,
+ ICON_245 = 245,
+ ICON_246 = 246,
+ ICON_247 = 247,
+ ICON_248 = 248,
+ ICON_249 = 249,
+ ICON_250 = 250,
+ ICON_251 = 251,
+ ICON_252 = 252,
+ ICON_253 = 253,
+ ICON_254 = 254,
+ ICON_255 = 255,
+} GuiIconName;
+/***********************************************************************************
+*
+* RAYGUI IMPLEMENTATION
+*
+************************************************************************************/
\ No newline at end of file
diff --git a/raylib/raylib.h b/raylib/raylib.h
deleted file mode 100644
index fbfc500..0000000
--- a/raylib/raylib.h
+++ /dev/null
@@ -1,1441 +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 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] 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-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 RAYLIB_H
-#define RAYLIB_H
-
-#include // Required for: va_list - Only used by TraceLogCallback
-
-#define RLAPI // We are building or using raylib as a static library (or Linux shared library)
-
-#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)
- #endif
-#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
-
-// 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
-
-// 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(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 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
-#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)
- 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
- 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 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; // 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; // 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; // 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 {
- 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)
-
- rAudioBuffer *buffer; // Pointer to internal data used by the audio system
-} AudioStream;
-
-// Sound source type
-typedef struct Sound {
- unsigned int sampleCount; // Total number of samples
- AudioStream stream; // Audio stream
-} Sound;
-
-// Music stream type (audio file streaming from memory)
-// NOTE: Anything longer than ~10 seconds should be streamed
-typedef struct Music {
- int ctxType; // Type of music context (audio filetype)
- void *ctxData; // Audio context data, depends on type
-
- unsigned int sampleCount; // Total number of samples
- unsigned int loopCount; // Loops count (times music will play), 0 means infinite loop
-
- AudioStream stream; // Audio stream
-} Music;
-
-// 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_RESERVED = 1, // Reserved
- 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_WINDOW_ALWAYS_RUN = 256, // Set to allow windows running while minimized
- 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 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;
-
-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 Vector2 GetWindowPosition(void); // Get window position XY on monitor
-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
-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
-
-// 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
-
-// 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 Color ColorFromNormalized(Vector4 normalized); // Returns color from normalized values [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 int 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 bool DirectoryExists(const char *dirPath); // Check if a directory path exists
-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 (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 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)
-
-RLAPI unsigned char *CompressData(unsigned char *data, int dataLength, int *compDataLength); // Compress data (DEFLATE algorythm)
-RLAPI unsigned char *DecompressData(unsigned char *compData, int compDataLength, int *dataLength); // Decompress data (DEFLATE algorythm)
-
-// 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 void SetExitKey(int key); // Set a custom key to exit program (default is ESC)
-RLAPI int GetKeyPressed(void); // Get key pressed, call it multiple times for chars queued
-
-// 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 DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse
-RLAPI void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse 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 (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 numPoints, 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 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 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 Rectangle GetImageAlphaBorder(Image image, float threshold); // Get image alpha border rectangle
-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 Image ImageFromImage(Image image, Rectangle rec); // Create an image from another image piece
-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, Color tint); // Draw a source image within a destination image (tint applied to source)
-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(const CharInfo *chars, Rectangle **recs, 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 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 scale, Color tint); // Draw one character (codepoint)
-
-// 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 codepoint); // Get index position for a unicode character on font
-
-// Text strings management functions (no utf8 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 *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 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)
-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)
-//------------------------------------------------------------------------------------
-
-// Basic geometric 3D shapes drawing functions
-RLAPI void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); // Draw a line in 3D world space
-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 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 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 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(const char *vsCode, const 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(void); // Get internal modelview matrix
-RLAPI Matrix GetMatrixProjection(void); // Get internal projection matrix
-
-// Texture maps generation (PBR)
-// NOTE: Required shaders should be provided
-RLAPI Texture2D GenTextureCubemap(Shader shader, Texture2D map, int size); // Generate cubemap texture from 2D 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)
-
-// 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 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 StopSound(Sound sound); // Stop playing a sound
-RLAPI void PauseSound(Sound sound); // Pause a sound
-RLAPI void ResumeSound(Sound sound); // Resume a paused sound
-RLAPI void PlaySoundMulti(Sound sound); // Play a sound (using multichannel buffer pool)
-RLAPI void StopSoundMulti(void); // Stop any sound playing (using multichannel buffer pool)
-RLAPI int GetSoundsPlaying(void); // Get number of sounds playing in the multichannel
-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 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
-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
diff --git a/raylib/raylib.h.modified b/raylib/raylib.h.modified
new file mode 100644
index 0000000..8c73cd6
--- /dev/null
+++ b/raylib/raylib.h.modified
@@ -0,0 +1,1448 @@
+/**********************************************************************************************
+*
+* raylib v5.5 - 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, Android, Raspberry Pi, DRM native, HTML5.
+* - Written in plain C code (C99) in PascalCase/camelCase notation
+* - Hardware accelerated with OpenGL (1.1, 2.1, 3.3, 4.3, ES2, ES3 - choose at compile)
+* - Unique OpenGL abstraction layer (usable as standalone module): [rlgl]
+* - Multiple Fonts formats supported (TTF, OTF, FNT, BDF, Sprite 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, M3D, 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, QOA, 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(), 1x1 white pixel R8G8B8A8 [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):
+* [rcore][GLFW] rglfw (Camilla Löwy - github.com/glfw/glfw) for window/context management and input
+* [rcore][RGFW] rgfw (ColleagueRiley - github.com/ColleagueRiley/RGFW) for window/context management and input
+* [rlgl] glad/glad_gles2 (David Herberth - github.com/Dav1dde/glad) for OpenGL 3.3 extensions loading
+* [raudio] miniaudio (David Reid - github.com/mackron/miniaudio) for audio device/context management
+*
+* OPTIONAL DEPENDENCIES (included):
+* [rcore] msf_gif (Miles Fogle) for GIF recording
+* [rcore] sinfl (Micha Mettke) for DEFLATE decompression algorithm
+* [rcore] sdefl (Micha Mettke) for DEFLATE compression algorithm
+* [rcore] rprand (Ramon Snatamaria) for pseudo-random numbers generation
+* [rtextures] qoi (Dominic Szablewski - https://phoboslab.org) for QOI image manage
+* [rtextures] stb_image (Sean Barret) for images loading (BMP, TGA, PNG, JPEG, HDR...)
+* [rtextures] stb_image_write (Sean Barret) for image writing (BMP, TGA, PNG, JPG)
+* [rtextures] stb_image_resize2 (Sean Barret) for image resizing algorithms
+* [rtextures] stb_perlin (Sean Barret) for Perlin Noise image generation
+* [rtext] stb_truetype (Sean Barret) for ttf fonts loading
+* [rtext] stb_rect_pack (Sean Barret) for rectangles packing
+* [rmodels] par_shapes (Philip Rideout) for parametric 3d shapes generation
+* [rmodels] tinyobj_loader_c (Syoyo Fujita) for models loading (OBJ, MTL)
+* [rmodels] cgltf (Johannes Kuhlmann) for models loading (glTF)
+* [rmodels] m3d (bzt) for models loading (M3D, https://bztsrc.gitlab.io/model3d)
+* [rmodels] vox_loader (Johann Nadalutti) for models loading (VOX)
+* [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
+* [raudio] qoa (Dominic Szablewski - https://phoboslab.org) for QOA audio manage
+*
+*
+* 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-2024 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.
+*
+**********************************************************************************************/
+// Function specifiers in case library is build/used as a shared library
+// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll
+// NOTE: visibility("default") attribute makes symbols "visible" when compiled with -fvisibility=hidden
+//----------------------------------------------------------------------------------
+// Some basic Defines
+//----------------------------------------------------------------------------------
+// Allow custom memory allocators
+// NOTE: Require recompiling raylib sources
+// NOTE: MSVC C++ compiler does not support compound literals (C99 feature)
+// Plain structures in C++ (without constructors) can be initialized with { }
+// This is called aggregate initialization (C++11 feature)
+// Some compilers (mostly macos clang) default to C++98,
+// where aggregate initialization can't be used
+// So, give a more clear error stating how to fix this
+// NOTE: We set some defines with some data types declared by raylib
+// Other modules (raymath, rlgl) also require some of those types, so,
+// to be able to use those other modules as standalone (not depending on raylib)
+// this defines are very useful for internal check and avoid type (re)definitions
+// Some Basic Colors
+// NOTE: Custom raylib color palette for amazing visuals on WHITE background
+//----------------------------------------------------------------------------------
+// Structures Definition
+//----------------------------------------------------------------------------------
+// Boolean type
+// Vector2, 2 components
+typedef struct Vector2 {
+ float x; // Vector x component
+ float y; // Vector y component
+} Vector2;
+// Vector3, 3 components
+typedef struct Vector3 {
+ float x; // Vector x component
+ float y; // Vector y component
+ float z; // Vector z component
+} Vector3;
+// Vector4, 4 components
+typedef struct Vector4 {
+ float x; // Vector x component
+ float y; // Vector y component
+ float z; // Vector z component
+ float w; // Vector w component
+} Vector4;
+// Quaternion, 4 components (Vector4 alias)
+typedef Vector4 Quaternion;
+// Matrix, 4x4 components, column major, OpenGL style, right-handed
+typedef struct Matrix {
+ float m0, m4, m8, m12; // Matrix first row (4 components)
+ float m1, m5, m9, m13; // Matrix second row (4 components)
+ float m2, m6, m10, m14; // Matrix third row (4 components)
+ float m3, m7, m11, m15; // Matrix fourth row (4 components)
+} Matrix;
+// Color, 4 components, R8G8B8A8 (32bit)
+typedef struct Color {
+ unsigned char r; // Color red value
+ unsigned char g; // Color green value
+ unsigned char b; // Color blue value
+ unsigned char a; // Color alpha value
+} Color;
+// Rectangle, 4 components
+typedef struct Rectangle {
+ float x; // Rectangle top-left corner position x
+ float y; // Rectangle top-left corner position y
+ float width; // Rectangle width
+ float height; // Rectangle height
+} Rectangle;
+// Image, pixel 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, tex data stored in GPU memory (VRAM)
+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, same as Texture
+typedef Texture Texture2D;
+// TextureCubemap, same as Texture
+typedef Texture TextureCubemap;
+// RenderTexture, fbo 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, same as RenderTexture
+typedef RenderTexture RenderTexture2D;
+// NPatchInfo, 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;
+// GlyphInfo, font characters glyphs info
+typedef struct GlyphInfo {
+ 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
+} GlyphInfo;
+// Font, font texture and GlyphInfo array data
+typedef struct Font {
+ int baseSize; // Base size (default chars height)
+ int glyphCount; // Number of glyph characters
+ int glyphPadding; // Padding around the glyph characters
+ Texture2D texture; // Texture atlas containing the glyphs
+ Rectangle *recs; // Rectangles in texture for the glyphs
+ GlyphInfo *glyphs; // Glyphs info data
+} Font;
+// Camera, defines 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 aperture 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, defines position/orientation in 2d space
+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;
+// Mesh, vertex data and vao/vbo
+typedef struct Mesh {
+ int vertexCount; // Number of vertices stored in arrays
+ int triangleCount; // Number of triangles stored (indexed or not)
+ // Vertex attributes 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 texture second coordinates (UV - 2 components per vertex) (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)
+ unsigned char *boneIds; // Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning) (shader-location = 6)
+ float *boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning) (shader-location = 7)
+ Matrix *boneMatrices; // Bones animated transformation matrices
+ int boneCount; // Number of bones
+ // OpenGL identifiers
+ unsigned int vaoId; // OpenGL Vertex Array Object id
+ unsigned int *vboId; // OpenGL Vertex Buffer Objects id (default vertex data)
+} Mesh;
+// Shader
+typedef struct Shader {
+ unsigned int id; // Shader program id
+ int *locs; // Shader locations array (RL_MAX_SHADER_LOCATIONS)
+} Shader;
+// MaterialMap
+typedef struct MaterialMap {
+ Texture2D texture; // Material map texture
+ Color color; // Material map color
+ float value; // Material map value
+} MaterialMap;
+// Material, includes shader and maps
+typedef struct Material {
+ Shader shader; // Material shader
+ MaterialMap *maps; // Material maps array (MAX_MATERIAL_MAPS)
+ float params[4]; // Material generic parameters (if required)
+} Material;
+// Transform, vertex transformation data
+typedef struct Transform {
+ Vector3 translation; // Translation
+ Quaternion rotation; // Rotation
+ Vector3 scale; // Scale
+} Transform;
+// Bone, skeletal animation bone
+typedef struct BoneInfo {
+ char name[32]; // Bone name
+ int parent; // Bone parent
+} BoneInfo;
+// Model, meshes, materials and animation data
+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;
+// ModelAnimation
+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
+ char name[32]; // Animation name
+} ModelAnimation;
+// Ray, ray for raycasting
+typedef struct Ray {
+ Vector3 position; // Ray position (origin)
+ Vector3 direction; // Ray direction (normalized)
+} Ray;
+// RayCollision, ray hit information
+typedef struct RayCollision {
+ bool hit; // Did the ray hit something?
+ float distance; // Distance to the nearest hit
+ Vector3 point; // Point of the nearest hit
+ Vector3 normal; // Surface normal of hit
+} RayCollision;
+// BoundingBox
+typedef struct BoundingBox {
+ Vector3 min; // Minimum vertex box-corner
+ Vector3 max; // Maximum vertex box-corner
+} BoundingBox;
+// Wave, audio wave data
+typedef struct Wave {
+ unsigned int frameCount; // Total number of frames (considering channels)
+ 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;
+// Opaque structs declaration
+// NOTE: Actual structs are defined internally in raudio module
+typedef struct rAudioBuffer rAudioBuffer;
+typedef struct rAudioProcessor rAudioProcessor;
+// AudioStream, custom audio stream
+typedef struct AudioStream {
+ rAudioBuffer *buffer; // Pointer to internal data used by the audio system
+ rAudioProcessor *processor; // Pointer to internal data processor, useful for audio effects
+ 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
+typedef struct Sound {
+ AudioStream stream; // Audio stream
+ unsigned int frameCount; // Total number of frames (considering channels)
+} Sound;
+// Music, audio stream, anything longer than ~10 seconds should be streamed
+typedef struct Music {
+ AudioStream stream; // Audio stream
+ unsigned int frameCount; // Total number of frames (considering channels)
+ bool looping; // Music looping enable
+ int ctxType; // Type of music context (audio filetype)
+ void *ctxData; // Audio context data, depends on type
+} Music;
+// VrDeviceInfo, 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 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;
+// VrStereoConfig, 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;
+// File path list
+typedef struct FilePathList {
+ unsigned int capacity; // Filepaths max entries
+ unsigned int count; // Filepaths entries count
+ char **paths; // Filepaths entries
+} FilePathList;
+// Automation event
+typedef struct AutomationEvent {
+ unsigned int frame; // Event frame
+ unsigned int type; // Event type (AutomationEventType)
+ int params[4]; // Event parameters (if required)
+} AutomationEvent;
+// Automation event list
+typedef struct AutomationEventList {
+ unsigned int capacity; // Events max entries (MAX_AUTOMATION_EVENTS)
+ unsigned int count; // Events entries count
+ AutomationEvent *events; // Events entries
+} AutomationEventList;
+//----------------------------------------------------------------------------------
+// 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_WINDOW_MOUSE_PASSTHROUGH = 0x00004000, // Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED
+ FLAG_BORDERLESS_WINDOWED_MODE = 0x00008000, // Set to run program in borderless windowed mode
+ 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
+// NOTE: Organized by priority level
+typedef enum {
+ LOG_ALL = 0, // Display all logs
+ LOG_TRACE, // Trace logging, intended for internal use only
+ LOG_DEBUG, // Debug logging, used for internal debugging, it should be disabled on release builds
+ LOG_INFO, // Info logging, used for program execution info
+ LOG_WARNING, // Warning logging, used on recoverable failures
+ LOG_ERROR, // Error logging, used on unrecoverable failures
+ LOG_FATAL, // Fatal logging, used to abort program: exit(EXIT_FAILURE)
+ 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, // Key: NULL, used for no key pressed
+ // Alphanumeric keys
+ KEY_APOSTROPHE = 39, // Key: '
+ KEY_COMMA = 44, // Key: ,
+ KEY_MINUS = 45, // Key: -
+ KEY_PERIOD = 46, // Key: .
+ KEY_SLASH = 47, // Key: /
+ KEY_ZERO = 48, // Key: 0
+ KEY_ONE = 49, // Key: 1
+ KEY_TWO = 50, // Key: 2
+ KEY_THREE = 51, // Key: 3
+ KEY_FOUR = 52, // Key: 4
+ KEY_FIVE = 53, // Key: 5
+ KEY_SIX = 54, // Key: 6
+ KEY_SEVEN = 55, // Key: 7
+ KEY_EIGHT = 56, // Key: 8
+ KEY_NINE = 57, // Key: 9
+ KEY_SEMICOLON = 59, // Key: ;
+ KEY_EQUAL = 61, // Key: =
+ KEY_A = 65, // Key: A | a
+ KEY_B = 66, // Key: B | b
+ KEY_C = 67, // Key: C | c
+ KEY_D = 68, // Key: D | d
+ KEY_E = 69, // Key: E | e
+ KEY_F = 70, // Key: F | f
+ KEY_G = 71, // Key: G | g
+ KEY_H = 72, // Key: H | h
+ KEY_I = 73, // Key: I | i
+ KEY_J = 74, // Key: J | j
+ KEY_K = 75, // Key: K | k
+ KEY_L = 76, // Key: L | l
+ KEY_M = 77, // Key: M | m
+ KEY_N = 78, // Key: N | n
+ KEY_O = 79, // Key: O | o
+ KEY_P = 80, // Key: P | p
+ KEY_Q = 81, // Key: Q | q
+ KEY_R = 82, // Key: R | r
+ KEY_S = 83, // Key: S | s
+ KEY_T = 84, // Key: T | t
+ KEY_U = 85, // Key: U | u
+ KEY_V = 86, // Key: V | v
+ KEY_W = 87, // Key: W | w
+ KEY_X = 88, // Key: X | x
+ KEY_Y = 89, // Key: Y | y
+ KEY_Z = 90, // Key: Z | z
+ KEY_LEFT_BRACKET = 91, // Key: [
+ KEY_BACKSLASH = 92, // Key: '\'
+ KEY_RIGHT_BRACKET = 93, // Key: ]
+ KEY_GRAVE = 96, // Key: `
+ // Function keys
+ KEY_SPACE = 32, // Key: Space
+ KEY_ESCAPE = 256, // Key: Esc
+ KEY_ENTER = 257, // Key: Enter
+ KEY_TAB = 258, // Key: Tab
+ KEY_BACKSPACE = 259, // Key: Backspace
+ KEY_INSERT = 260, // Key: Ins
+ KEY_DELETE = 261, // Key: Del
+ KEY_RIGHT = 262, // Key: Cursor right
+ KEY_LEFT = 263, // Key: Cursor left
+ KEY_DOWN = 264, // Key: Cursor down
+ KEY_UP = 265, // Key: Cursor up
+ KEY_PAGE_UP = 266, // Key: Page up
+ KEY_PAGE_DOWN = 267, // Key: Page down
+ KEY_HOME = 268, // Key: Home
+ KEY_END = 269, // Key: End
+ KEY_CAPS_LOCK = 280, // Key: Caps lock
+ KEY_SCROLL_LOCK = 281, // Key: Scroll down
+ KEY_NUM_LOCK = 282, // Key: Num lock
+ KEY_PRINT_SCREEN = 283, // Key: Print screen
+ KEY_PAUSE = 284, // Key: Pause
+ KEY_F1 = 290, // Key: F1
+ KEY_F2 = 291, // Key: F2
+ KEY_F3 = 292, // Key: F3
+ KEY_F4 = 293, // Key: F4
+ KEY_F5 = 294, // Key: F5
+ KEY_F6 = 295, // Key: F6
+ KEY_F7 = 296, // Key: F7
+ KEY_F8 = 297, // Key: F8
+ KEY_F9 = 298, // Key: F9
+ KEY_F10 = 299, // Key: F10
+ KEY_F11 = 300, // Key: F11
+ KEY_F12 = 301, // Key: F12
+ KEY_LEFT_SHIFT = 340, // Key: Shift left
+ KEY_LEFT_CONTROL = 341, // Key: Control left
+ KEY_LEFT_ALT = 342, // Key: Alt left
+ KEY_LEFT_SUPER = 343, // Key: Super left
+ KEY_RIGHT_SHIFT = 344, // Key: Shift right
+ KEY_RIGHT_CONTROL = 345, // Key: Control right
+ KEY_RIGHT_ALT = 346, // Key: Alt right
+ KEY_RIGHT_SUPER = 347, // Key: Super right
+ KEY_KB_MENU = 348, // Key: KB menu
+ // Keypad keys
+ KEY_KP_0 = 320, // Key: Keypad 0
+ KEY_KP_1 = 321, // Key: Keypad 1
+ KEY_KP_2 = 322, // Key: Keypad 2
+ KEY_KP_3 = 323, // Key: Keypad 3
+ KEY_KP_4 = 324, // Key: Keypad 4
+ KEY_KP_5 = 325, // Key: Keypad 5
+ KEY_KP_6 = 326, // Key: Keypad 6
+ KEY_KP_7 = 327, // Key: Keypad 7
+ KEY_KP_8 = 328, // Key: Keypad 8
+ KEY_KP_9 = 329, // Key: Keypad 9
+ KEY_KP_DECIMAL = 330, // Key: Keypad .
+ KEY_KP_DIVIDE = 331, // Key: Keypad /
+ KEY_KP_MULTIPLY = 332, // Key: Keypad *
+ KEY_KP_SUBTRACT = 333, // Key: Keypad -
+ KEY_KP_ADD = 334, // Key: Keypad +
+ KEY_KP_ENTER = 335, // Key: Keypad Enter
+ KEY_KP_EQUAL = 336, // Key: Keypad =
+ // Android key buttons
+ KEY_BACK = 4, // Key: Android back button
+ KEY_MENU = 5, // Key: Android menu button
+ KEY_VOLUME_UP = 24, // Key: Android volume up button
+ KEY_VOLUME_DOWN = 25 // Key: Android volume down button
+} KeyboardKey;
+// Add backwards compatibility support for deprecated names
+// Mouse buttons
+typedef enum {
+ MOUSE_BUTTON_LEFT = 0, // Mouse button left
+ MOUSE_BUTTON_RIGHT = 1, // Mouse button right
+ MOUSE_BUTTON_MIDDLE = 2, // Mouse button middle (pressed wheel)
+ MOUSE_BUTTON_SIDE = 3, // Mouse button side (advanced mouse device)
+ MOUSE_BUTTON_EXTRA = 4, // Mouse button extra (advanced mouse device)
+ MOUSE_BUTTON_FORWARD = 5, // Mouse button forward (advanced mouse device)
+ MOUSE_BUTTON_BACK = 6, // Mouse button back (advanced mouse device)
+} MouseButton;
+// Mouse cursor
+typedef enum {
+ MOUSE_CURSOR_DEFAULT = 0, // Default pointer shape
+ MOUSE_CURSOR_ARROW = 1, // Arrow shape
+ MOUSE_CURSOR_IBEAM = 2, // Text writing cursor shape
+ MOUSE_CURSOR_CROSSHAIR = 3, // Cross shape
+ MOUSE_CURSOR_POINTING_HAND = 4, // Pointing hand cursor
+ MOUSE_CURSOR_RESIZE_EW = 5, // Horizontal resize/move arrow shape
+ MOUSE_CURSOR_RESIZE_NS = 6, // Vertical resize/move arrow shape
+ MOUSE_CURSOR_RESIZE_NWSE = 7, // 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 omnidirectional resize/move cursor shape
+ MOUSE_CURSOR_NOT_ALLOWED = 10 // The operation-not-allowed shape
+} MouseCursor;
+// Gamepad buttons
+typedef enum {
+ GAMEPAD_BUTTON_UNKNOWN = 0, // Unknown button, just for error checking
+ GAMEPAD_BUTTON_LEFT_FACE_UP, // Gamepad left DPAD up button
+ GAMEPAD_BUTTON_LEFT_FACE_RIGHT, // Gamepad left DPAD right button
+ GAMEPAD_BUTTON_LEFT_FACE_DOWN, // Gamepad left DPAD down button
+ GAMEPAD_BUTTON_LEFT_FACE_LEFT, // Gamepad left DPAD left button
+ GAMEPAD_BUTTON_RIGHT_FACE_UP, // Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)
+ GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, // Gamepad right button right (i.e. PS3: Circle, Xbox: B)
+ GAMEPAD_BUTTON_RIGHT_FACE_DOWN, // Gamepad right button down (i.e. PS3: Cross, Xbox: A)
+ GAMEPAD_BUTTON_RIGHT_FACE_LEFT, // Gamepad right button left (i.e. PS3: Square, Xbox: X)
+ GAMEPAD_BUTTON_LEFT_TRIGGER_1, // Gamepad top/back trigger left (first), it could be a trailing button
+ GAMEPAD_BUTTON_LEFT_TRIGGER_2, // Gamepad top/back trigger left (second), it could be a trailing button
+ GAMEPAD_BUTTON_RIGHT_TRIGGER_1, // Gamepad top/back trigger right (first), it could be a trailing button
+ GAMEPAD_BUTTON_RIGHT_TRIGGER_2, // Gamepad top/back trigger right (second), it could be a trailing button
+ GAMEPAD_BUTTON_MIDDLE_LEFT, // Gamepad center buttons, left one (i.e. PS3: Select)
+ GAMEPAD_BUTTON_MIDDLE, // Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)
+ GAMEPAD_BUTTON_MIDDLE_RIGHT, // Gamepad center buttons, right one (i.e. PS3: Start)
+ GAMEPAD_BUTTON_LEFT_THUMB, // Gamepad joystick pressed button left
+ GAMEPAD_BUTTON_RIGHT_THUMB // Gamepad joystick pressed button right
+} GamepadButton;
+// Gamepad axis
+typedef enum {
+ GAMEPAD_AXIS_LEFT_X = 0, // Gamepad left stick X axis
+ GAMEPAD_AXIS_LEFT_Y = 1, // Gamepad left stick Y axis
+ GAMEPAD_AXIS_RIGHT_X = 2, // Gamepad right stick X axis
+ GAMEPAD_AXIS_RIGHT_Y = 3, // Gamepad right stick Y axis
+ GAMEPAD_AXIS_LEFT_TRIGGER = 4, // Gamepad back trigger left, pressure level: [1..-1]
+ GAMEPAD_AXIS_RIGHT_TRIGGER = 5 // Gamepad back trigger right, pressure level: [1..-1]
+} GamepadAxis;
+// Material map index
+typedef enum {
+ MATERIAL_MAP_ALBEDO = 0, // Albedo material (same as: MATERIAL_MAP_DIFFUSE)
+ MATERIAL_MAP_METALNESS, // Metalness material (same as: MATERIAL_MAP_SPECULAR)
+ MATERIAL_MAP_NORMAL, // Normal material
+ MATERIAL_MAP_ROUGHNESS, // Roughness material
+ MATERIAL_MAP_OCCLUSION, // Ambient occlusion material
+ MATERIAL_MAP_EMISSION, // Emission material
+ MATERIAL_MAP_HEIGHT, // Heightmap material
+ MATERIAL_MAP_CUBEMAP, // Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
+ MATERIAL_MAP_IRRADIANCE, // Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
+ MATERIAL_MAP_PREFILTER, // Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
+ MATERIAL_MAP_BRDF // Brdf material
+} MaterialMapIndex;
+// Shader location index
+typedef enum {
+ SHADER_LOC_VERTEX_POSITION = 0, // Shader location: vertex attribute: position
+ SHADER_LOC_VERTEX_TEXCOORD01, // Shader location: vertex attribute: texcoord01
+ SHADER_LOC_VERTEX_TEXCOORD02, // Shader location: vertex attribute: texcoord02
+ SHADER_LOC_VERTEX_NORMAL, // Shader location: vertex attribute: normal
+ SHADER_LOC_VERTEX_TANGENT, // Shader location: vertex attribute: tangent
+ SHADER_LOC_VERTEX_COLOR, // Shader location: vertex attribute: color
+ SHADER_LOC_MATRIX_MVP, // Shader location: matrix uniform: model-view-projection
+ SHADER_LOC_MATRIX_VIEW, // Shader location: matrix uniform: view (camera transform)
+ SHADER_LOC_MATRIX_PROJECTION, // Shader location: matrix uniform: projection
+ SHADER_LOC_MATRIX_MODEL, // Shader location: matrix uniform: model (transform)
+ SHADER_LOC_MATRIX_NORMAL, // Shader location: matrix uniform: normal
+ SHADER_LOC_VECTOR_VIEW, // Shader location: vector uniform: view
+ SHADER_LOC_COLOR_DIFFUSE, // Shader location: vector uniform: diffuse color
+ SHADER_LOC_COLOR_SPECULAR, // Shader location: vector uniform: specular color
+ SHADER_LOC_COLOR_AMBIENT, // Shader location: vector uniform: ambient color
+ SHADER_LOC_MAP_ALBEDO, // Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)
+ SHADER_LOC_MAP_METALNESS, // Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)
+ SHADER_LOC_MAP_NORMAL, // Shader location: sampler2d texture: normal
+ SHADER_LOC_MAP_ROUGHNESS, // Shader location: sampler2d texture: roughness
+ SHADER_LOC_MAP_OCCLUSION, // Shader location: sampler2d texture: occlusion
+ SHADER_LOC_MAP_EMISSION, // Shader location: sampler2d texture: emission
+ SHADER_LOC_MAP_HEIGHT, // Shader location: sampler2d texture: height
+ SHADER_LOC_MAP_CUBEMAP, // Shader location: samplerCube texture: cubemap
+ SHADER_LOC_MAP_IRRADIANCE, // Shader location: samplerCube texture: irradiance
+ SHADER_LOC_MAP_PREFILTER, // Shader location: samplerCube texture: prefilter
+ SHADER_LOC_MAP_BRDF, // Shader location: sampler2d texture: brdf
+ SHADER_LOC_VERTEX_BONEIDS, // Shader location: vertex attribute: boneIds
+ SHADER_LOC_VERTEX_BONEWEIGHTS, // Shader location: vertex attribute: boneWeights
+ SHADER_LOC_BONE_MATRICES // Shader location: array of matrices uniform: boneMatrices
+} ShaderLocationIndex;
+// Shader uniform data type
+typedef enum {
+ SHADER_UNIFORM_FLOAT = 0, // Shader uniform type: float
+ SHADER_UNIFORM_VEC2, // Shader uniform type: vec2 (2 float)
+ SHADER_UNIFORM_VEC3, // Shader uniform type: vec3 (3 float)
+ SHADER_UNIFORM_VEC4, // Shader uniform type: vec4 (4 float)
+ SHADER_UNIFORM_INT, // Shader uniform type: int
+ SHADER_UNIFORM_IVEC2, // Shader uniform type: ivec2 (2 int)
+ SHADER_UNIFORM_IVEC3, // Shader uniform type: ivec3 (3 int)
+ SHADER_UNIFORM_IVEC4, // Shader uniform type: ivec4 (4 int)
+ SHADER_UNIFORM_SAMPLER2D // Shader uniform type: sampler2d
+} ShaderUniformDataType;
+// Shader attribute data types
+typedef enum {
+ SHADER_ATTRIB_FLOAT = 0, // Shader attribute type: float
+ SHADER_ATTRIB_VEC2, // Shader attribute type: vec2 (2 float)
+ SHADER_ATTRIB_VEC3, // Shader attribute type: vec3 (3 float)
+ SHADER_ATTRIB_VEC4 // Shader attribute type: vec4 (4 float)
+} ShaderAttributeDataType;
+// 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_UNCOMPRESSED_R16, // 16 bpp (1 channel - half float)
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16, // 16*3 bpp (3 channels - half float)
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16A16, // 16*4 bpp (4 channels - half 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 approximation
+ 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 a 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
+} 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_ALPHA_PREMULTIPLY, // Blend premultiplied textures considering alpha
+ BLEND_CUSTOM, // Blend textures using custom src/dst factors (use rlSetBlendFactors())
+ BLEND_CUSTOM_SEPARATE // Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate())
+} BlendMode;
+// Gesture
+// NOTE: Provided as bit-wise flags to enable only desired gestures
+typedef enum {
+ GESTURE_NONE = 0, // No gesture
+ GESTURE_TAP = 1, // Tap gesture
+ GESTURE_DOUBLETAP = 2, // Double tap gesture
+ GESTURE_HOLD = 4, // Hold gesture
+ GESTURE_DRAG = 8, // Drag gesture
+ GESTURE_SWIPE_RIGHT = 16, // Swipe right gesture
+ GESTURE_SWIPE_LEFT = 32, // Swipe left gesture
+ GESTURE_SWIPE_UP = 64, // Swipe up gesture
+ GESTURE_SWIPE_DOWN = 128, // Swipe down gesture
+ GESTURE_PINCH_IN = 256, // Pinch in gesture
+ GESTURE_PINCH_OUT = 512 // Pinch out gesture
+} Gesture;
+// Camera system modes
+typedef enum {
+ CAMERA_CUSTOM = 0, // Camera custom, controlled by user (UpdateCamera() does nothing)
+ CAMERA_FREE, // Camera free mode
+ CAMERA_ORBITAL, // Camera orbital, around target, zoom supported
+ CAMERA_FIRST_PERSON, // Camera first person
+ CAMERA_THIRD_PERSON // Camera third person
+} CameraMode;
+// Camera projection
+typedef enum {
+ CAMERA_PERSPECTIVE = 0, // Perspective projection
+ CAMERA_ORTHOGRAPHIC // Orthographic projection
+} 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: These callbacks are intended for advanced users
+typedef void (*TraceLogCallback)(int logLevel, const char *text, void * args); // Logging: Redirect trace log messages
+typedef unsigned char *(*LoadFileDataCallback)(const char *fileName, int *dataSize); // FileIO: Load binary data
+typedef bool (*SaveFileDataCallback)(const char *fileName, void *data, int dataSize); // 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
+//------------------------------------------------------------------------------------
+// Global Variables Definition
+//------------------------------------------------------------------------------------
+// It's lonely here...
+//------------------------------------------------------------------------------------
+// Window and Graphics Device Functions (Module: core)
+//------------------------------------------------------------------------------------
+// Window-related functions
+ void InitWindow(int width, int height, const char *title); // Initialize window and OpenGL context
+ void CloseWindow(void); // Close window and unload OpenGL context
+ bool WindowShouldClose(void); // Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)
+ bool IsWindowReady(void); // Check if window has been initialized successfully
+ bool IsWindowFullscreen(void); // Check if window is currently fullscreen
+ bool IsWindowHidden(void); // Check if window is currently hidden
+ bool IsWindowMinimized(void); // Check if window is currently minimized
+ bool IsWindowMaximized(void); // Check if window is currently maximized
+ bool IsWindowFocused(void); // Check if window is currently focused
+ bool IsWindowResized(void); // Check if window has been resized last frame
+ bool IsWindowState(unsigned int flag); // Check if one specific window flag is enabled
+ void SetWindowState(unsigned int flags); // Set window configuration state using flags
+ void ClearWindowState(unsigned int flags); // Clear window configuration state flags
+ void ToggleFullscreen(void); // Toggle window state: fullscreen/windowed, resizes monitor to match window resolution
+ void ToggleBorderlessWindowed(void); // Toggle window state: borderless windowed, resizes window to match monitor resolution
+ void MaximizeWindow(void); // Set window state: maximized, if resizable
+ void MinimizeWindow(void); // Set window state: minimized, if resizable
+ void RestoreWindow(void); // Set window state: not minimized/maximized
+ void SetWindowIcon(Image image); // Set icon for window (single image, RGBA 32bit)
+ void SetWindowIcons(Image *images, int count); // Set icon for window (multiple images, RGBA 32bit)
+ void SetWindowTitle(const char *title); // Set title for window
+ void SetWindowPosition(int x, int y); // Set window position on screen
+ void SetWindowMonitor(int monitor); // Set monitor for the current window
+ void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
+ void SetWindowMaxSize(int width, int height); // Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)
+ void SetWindowSize(int width, int height); // Set window dimensions
+ void SetWindowOpacity(float opacity); // Set window opacity [0.0f..1.0f]
+ void SetWindowFocused(void); // Set window focused
+ void *GetWindowHandle(void); // Get native window handle
+ int GetScreenWidth(void); // Get current screen width
+ int GetScreenHeight(void); // Get current screen height
+ int GetRenderWidth(void); // Get current render width (it considers HiDPI)
+ int GetRenderHeight(void); // Get current render height (it considers HiDPI)
+ int GetMonitorCount(void); // Get number of connected monitors
+ int GetCurrentMonitor(void); // Get current monitor where window is placed
+ Vector2 GetMonitorPosition(int monitor); // Get specified monitor position
+ int GetMonitorWidth(int monitor); // Get specified monitor width (current video mode used by monitor)
+ int GetMonitorHeight(int monitor); // Get specified monitor height (current video mode used by monitor)
+ int GetMonitorPhysicalWidth(int monitor); // Get specified monitor physical width in millimetres
+ int GetMonitorPhysicalHeight(int monitor); // Get specified monitor physical height in millimetres
+ int GetMonitorRefreshRate(int monitor); // Get specified monitor refresh rate
+ Vector2 GetWindowPosition(void); // Get window position XY on monitor
+ Vector2 GetWindowScaleDPI(void); // Get window scale DPI factor
+ const char *GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the specified monitor
+ void SetClipboardText(const char *text); // Set clipboard text content
+ const char *GetClipboardText(void); // Get clipboard text content
+ Image GetClipboardImage(void); // Get clipboard image content
+ void EnableEventWaiting(void); // Enable waiting for events on EndDrawing(), no automatic event polling
+ void DisableEventWaiting(void); // Disable waiting for events on EndDrawing(), automatic events polling
+// Cursor-related functions
+ void ShowCursor(void); // Shows cursor
+ void HideCursor(void); // Hides cursor
+ bool IsCursorHidden(void); // Check if cursor is not visible
+ void EnableCursor(void); // Enables cursor (unlock cursor)
+ void DisableCursor(void); // Disables cursor (lock cursor)
+ bool IsCursorOnScreen(void); // Check if cursor is on the screen
+// Drawing-related functions
+ void ClearBackground(Color color); // Set background color (framebuffer clear color)
+ void BeginDrawing(void); // Setup canvas (framebuffer) to start drawing
+ void EndDrawing(void); // End canvas drawing and swap buffers (double buffering)
+ void BeginMode2D(Camera2D camera); // Begin 2D mode with custom camera (2D)
+ void EndMode2D(void); // Ends 2D mode with custom camera
+ void BeginMode3D(Camera3D camera); // Begin 3D mode with custom camera (3D)
+ void EndMode3D(void); // Ends 3D mode and returns to default 2D orthographic mode
+ void BeginTextureMode(RenderTexture2D target); // Begin drawing to render texture
+ void EndTextureMode(void); // Ends drawing to render texture
+ void BeginShaderMode(Shader shader); // Begin custom shader drawing
+ void EndShaderMode(void); // End custom shader drawing (use default shader)
+ void BeginBlendMode(int mode); // Begin blending mode (alpha, additive, multiplied, subtract, custom)
+ void EndBlendMode(void); // End blending mode (reset to default: alpha blending)
+ void BeginScissorMode(int x, int y, int width, int height); // Begin scissor mode (define screen area for following drawing)
+ void EndScissorMode(void); // End scissor mode
+ void BeginVrStereoMode(VrStereoConfig config); // Begin stereo rendering (requires VR simulator)
+ void EndVrStereoMode(void); // End stereo rendering (requires VR simulator)
+// VR stereo config functions for VR simulator
+ VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device); // Load VR stereo config for VR simulator device parameters
+ void UnloadVrStereoConfig(VrStereoConfig config); // Unload VR stereo config
+// Shader management functions
+// NOTE: Shader functionality is not available on OpenGL 1.1
+ Shader LoadShader(const char *vsFileName, const char *fsFileName); // Load shader from files and bind default locations
+ Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode); // Load shader from code strings and bind default locations
+ bool IsShaderValid(Shader shader); // Check if a shader is valid (loaded on GPU)
+ int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location
+ int GetShaderLocationAttrib(Shader shader, const char *attribName); // Get shader attribute location
+ void SetShaderValue(Shader shader, int locIndex, const void *value, int uniformType); // Set shader uniform value
+ void SetShaderValueV(Shader shader, int locIndex, const void *value, int uniformType, int count); // Set shader uniform value vector
+ void SetShaderValueMatrix(Shader shader, int locIndex, Matrix mat); // Set shader uniform value (matrix 4x4)
+ void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture); // Set shader uniform value for texture (sampler2d)
+ void UnloadShader(Shader shader); // Unload shader from GPU memory (VRAM)
+// Screen-space-related functions
+ Ray GetScreenToWorldRay(Vector2 position, Camera camera); // Get a ray trace from screen position (i.e mouse)
+ Ray GetScreenToWorldRayEx(Vector2 position, Camera camera, int width, int height); // Get a ray trace from screen position (i.e mouse) in a viewport
+ Vector2 GetWorldToScreen(Vector3 position, Camera camera); // Get the screen space position for a 3d world space position
+ Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); // Get size position for a 3d world space position
+ Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); // Get the screen space position for a 2d camera world space position
+ Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); // Get the world space position for a 2d camera screen space position
+ Matrix GetCameraMatrix(Camera camera); // Get camera transform matrix (view matrix)
+ Matrix GetCameraMatrix2D(Camera2D camera); // Get camera 2d transform matrix
+// Timing-related functions
+ void SetTargetFPS(int fps); // Set target FPS (maximum)
+ float GetFrameTime(void); // Get time in seconds for last frame drawn (delta time)
+ double GetTime(void); // Get elapsed time in seconds since InitWindow()
+ int GetFPS(void); // Get current FPS
+// Custom frame control functions
+// NOTE: Those functions are intended for advanced users that want full control over the frame processing
+// By default EndDrawing() does this job: draws everything + SwapScreenBuffer() + manage frame timing + PollInputEvents()
+// To avoid that behaviour and control frame processes manually, enable in config.h: SUPPORT_CUSTOM_FRAME_CONTROL
+ void SwapScreenBuffer(void); // Swap back buffer with front buffer (screen drawing)
+ void PollInputEvents(void); // Register all input events
+ void WaitTime(double seconds); // Wait for some time (halt program execution)
+// Random values generation functions
+ void SetRandomSeed(unsigned int seed); // Set the seed for the random number generator
+ int GetRandomValue(int min, int max); // Get a random value between min and max (both included)
+ int *LoadRandomSequence(unsigned int count, int min, int max); // Load random values sequence, no values repeated
+ void UnloadRandomSequence(int *sequence); // Unload random values sequence
+// Misc. functions
+ void TakeScreenshot(const char *fileName); // Takes a screenshot of current screen (filename extension defines format)
+ void SetConfigFlags(unsigned int flags); // Setup init configuration flags (view FLAGS)
+ void OpenURL(const char *url); // Open URL with default system browser (if available)
+// NOTE: Following functions implemented in module [utils]
+//------------------------------------------------------------------
+ void TraceLog(int logLevel, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)
+ void SetTraceLogLevel(int logLevel); // Set the current threshold (minimum) log level
+ void *MemAlloc(unsigned int size); // Internal memory allocator
+ void *MemRealloc(void *ptr, unsigned int size); // Internal memory reallocator
+ void MemFree(void *ptr); // Internal memory free
+// Set custom callbacks
+// WARNING: Callbacks setup is intended for advanced users
+ void SetTraceLogCallback(TraceLogCallback callback); // Set custom trace log
+ void SetLoadFileDataCallback(LoadFileDataCallback callback); // Set custom file binary data loader
+ void SetSaveFileDataCallback(SaveFileDataCallback callback); // Set custom file binary data saver
+ void SetLoadFileTextCallback(LoadFileTextCallback callback); // Set custom file text data loader
+ void SetSaveFileTextCallback(SaveFileTextCallback callback); // Set custom file text data saver
+// Files management functions
+ unsigned char *LoadFileData(const char *fileName, int *dataSize); // Load file data as byte array (read)
+ void UnloadFileData(unsigned char *data); // Unload file data allocated by LoadFileData()
+ bool SaveFileData(const char *fileName, void *data, int dataSize); // Save data to file from byte array (write), returns true on success
+ bool ExportDataAsCode(const unsigned char *data, int dataSize, const char *fileName); // Export data to code (.h), returns true on success
+ char *LoadFileText(const char *fileName); // Load text data from file (read), returns a '\0' terminated string
+ void UnloadFileText(char *text); // Unload file text data allocated by LoadFileText()
+ bool SaveFileText(const char *fileName, char *text); // Save text data to file (write), string must be '\0' terminated, returns true on success
+//------------------------------------------------------------------
+// File system functions
+ bool FileExists(const char *fileName); // Check if file exists
+ bool DirectoryExists(const char *dirPath); // Check if a directory path exists
+ bool IsFileExtension(const char *fileName, const char *ext); // Check file extension (including point: .png, .wav)
+ int GetFileLength(const char *fileName); // Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)
+ const char *GetFileExtension(const char *fileName); // Get pointer to extension for a filename string (includes dot: '.png')
+ const char *GetFileName(const char *filePath); // Get pointer to filename for a path string
+ const char *GetFileNameWithoutExt(const char *filePath); // Get filename string without extension (uses static string)
+ const char *GetDirectoryPath(const char *filePath); // Get full path for a given fileName with path (uses static string)
+ const char *GetPrevDirectoryPath(const char *dirPath); // Get previous directory path for a given path (uses static string)
+ const char *GetWorkingDirectory(void); // Get current working directory (uses static string)
+ const char *GetApplicationDirectory(void); // Get the directory of the running application (uses static string)
+ int MakeDirectory(const char *dirPath); // Create directories (including full path requested), returns 0 on success
+ bool ChangeDirectory(const char *dir); // Change working directory, return true on success
+ bool IsPathFile(const char *path); // Check if a given path is a file or a directory
+ bool IsFileNameValid(const char *fileName); // Check if fileName is valid for the platform/OS
+ FilePathList LoadDirectoryFiles(const char *dirPath); // Load directory filepaths
+ FilePathList LoadDirectoryFilesEx(const char *basePath, const char *filter, bool scanSubdirs); // Load directory filepaths with extension filtering and recursive directory scan. Use 'DIR' in the filter string to include directories in the result
+ void UnloadDirectoryFiles(FilePathList files); // Unload filepaths
+ bool IsFileDropped(void); // Check if a file has been dropped into window
+ FilePathList LoadDroppedFiles(void); // Load dropped filepaths
+ void UnloadDroppedFiles(FilePathList files); // Unload dropped filepaths
+ long GetFileModTime(const char *fileName); // Get file modification time (last write time)
+// Compression/Encoding functionality
+ unsigned char *CompressData(const unsigned char *data, int dataSize, int *compDataSize); // Compress data (DEFLATE algorithm), memory must be MemFree()
+ unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSize); // Decompress data (DEFLATE algorithm), memory must be MemFree()
+ char *EncodeDataBase64(const unsigned char *data, int dataSize, int *outputSize); // Encode data to Base64 string, memory must be MemFree()
+ unsigned char *DecodeDataBase64(const unsigned char *data, int *outputSize); // Decode Base64 string data, memory must be MemFree()
+ unsigned int ComputeCRC32(unsigned char *data, int dataSize); // Compute CRC32 hash code
+ unsigned int *ComputeMD5(unsigned char *data, int dataSize); // Compute MD5 hash code, returns static int[4] (16 bytes)
+ unsigned int *ComputeSHA1(unsigned char *data, int dataSize); // Compute SHA1 hash code, returns static int[5] (20 bytes)
+// Automation events functionality
+ AutomationEventList LoadAutomationEventList(const char *fileName); // Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS
+ void UnloadAutomationEventList(AutomationEventList list); // Unload automation events list from file
+ bool ExportAutomationEventList(AutomationEventList list, const char *fileName); // Export automation events list as text file
+ void SetAutomationEventList(AutomationEventList *list); // Set automation event list to record to
+ void SetAutomationEventBaseFrame(int frame); // Set automation event internal base frame to start recording
+ void StartAutomationEventRecording(void); // Start recording automation events (AutomationEventList must be set)
+ void StopAutomationEventRecording(void); // Stop recording automation events
+ void PlayAutomationEvent(AutomationEvent event); // Play a recorded automation event
+//------------------------------------------------------------------------------------
+// Input Handling Functions (Module: core)
+//------------------------------------------------------------------------------------
+// Input-related functions: keyboard
+ bool IsKeyPressed(int key); // Check if a key has been pressed once
+ bool IsKeyPressedRepeat(int key); // Check if a key has been pressed again
+ bool IsKeyDown(int key); // Check if a key is being pressed
+ bool IsKeyReleased(int key); // Check if a key has been released once
+ bool IsKeyUp(int key); // Check if a key is NOT being pressed
+ int GetKeyPressed(void); // Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty
+ int GetCharPressed(void); // Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty
+ void SetExitKey(int key); // Set a custom key to exit program (default is ESC)
+// Input-related functions: gamepads
+ bool IsGamepadAvailable(int gamepad); // Check if a gamepad is available
+ const char *GetGamepadName(int gamepad); // Get gamepad internal name id
+ bool IsGamepadButtonPressed(int gamepad, int button); // Check if a gamepad button has been pressed once
+ bool IsGamepadButtonDown(int gamepad, int button); // Check if a gamepad button is being pressed
+ bool IsGamepadButtonReleased(int gamepad, int button); // Check if a gamepad button has been released once
+ bool IsGamepadButtonUp(int gamepad, int button); // Check if a gamepad button is NOT being pressed
+ int GetGamepadButtonPressed(void); // Get the last gamepad button pressed
+ int GetGamepadAxisCount(int gamepad); // Get gamepad axis count for a gamepad
+ float GetGamepadAxisMovement(int gamepad, int axis); // Get axis movement value for a gamepad axis
+ int SetGamepadMappings(const char *mappings); // Set internal gamepad mappings (SDL_GameControllerDB)
+ void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor, float duration); // Set gamepad vibration for both motors (duration in seconds)
+// Input-related functions: mouse
+ bool IsMouseButtonPressed(int button); // Check if a mouse button has been pressed once
+ bool IsMouseButtonDown(int button); // Check if a mouse button is being pressed
+ bool IsMouseButtonReleased(int button); // Check if a mouse button has been released once
+ bool IsMouseButtonUp(int button); // Check if a mouse button is NOT being pressed
+ int GetMouseX(void); // Get mouse position X
+ int GetMouseY(void); // Get mouse position Y
+ Vector2 GetMousePosition(void); // Get mouse position XY
+ Vector2 GetMouseDelta(void); // Get mouse delta between frames
+ void SetMousePosition(int x, int y); // Set mouse position XY
+ void SetMouseOffset(int offsetX, int offsetY); // Set mouse offset
+ void SetMouseScale(float scaleX, float scaleY); // Set mouse scaling
+ float GetMouseWheelMove(void); // Get mouse wheel movement for X or Y, whichever is larger
+ Vector2 GetMouseWheelMoveV(void); // Get mouse wheel movement for both X and Y
+ void SetMouseCursor(int cursor); // Set mouse cursor
+// Input-related functions: touch
+ int GetTouchX(void); // Get touch position X for touch point 0 (relative to screen size)
+ int GetTouchY(void); // Get touch position Y for touch point 0 (relative to screen size)
+ Vector2 GetTouchPosition(int index); // Get touch position XY for a touch point index (relative to screen size)
+ int GetTouchPointId(int index); // Get touch point identifier for given index
+ int GetTouchPointCount(void); // Get number of touch points
+//------------------------------------------------------------------------------------
+// Gestures and Touch Handling Functions (Module: rgestures)
+//------------------------------------------------------------------------------------
+ void SetGesturesEnabled(unsigned int flags); // Enable a set of gestures using flags
+ bool IsGestureDetected(unsigned int gesture); // Check if a gesture have been detected
+ int GetGestureDetected(void); // Get latest detected gesture
+ float GetGestureHoldDuration(void); // Get gesture hold time in seconds
+ Vector2 GetGestureDragVector(void); // Get gesture drag vector
+ float GetGestureDragAngle(void); // Get gesture drag angle
+ Vector2 GetGesturePinchVector(void); // Get gesture pinch delta
+ float GetGesturePinchAngle(void); // Get gesture pinch angle
+//------------------------------------------------------------------------------------
+// Camera System Functions (Module: rcamera)
+//------------------------------------------------------------------------------------
+ void UpdateCamera(Camera *camera, int mode); // Update camera position for selected mode
+ void UpdateCameraPro(Camera *camera, Vector3 movement, Vector3 rotation, float zoom); // Update camera movement/rotation
+//------------------------------------------------------------------------------------
+// Basic Shapes Drawing Functions (Module: shapes)
+//------------------------------------------------------------------------------------
+// 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
+ void SetShapesTexture(Texture2D texture, Rectangle source); // Set texture and rectangle to be used on shapes drawing
+ Texture2D GetShapesTexture(void); // Get texture that is used for shapes drawing
+ Rectangle GetShapesTextureRectangle(void); // Get texture source rectangle that is used for shapes drawing
+// Basic shapes drawing functions
+ void DrawPixel(int posX, int posY, Color color); // Draw a pixel using geometry [Can be slow, use with care]
+ void DrawPixelV(Vector2 position, Color color); // Draw a pixel using geometry (Vector version) [Can be slow, use with care]
+ void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw a line
+ void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); // Draw a line (using gl lines)
+ void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line (using triangles/quads)
+ void DrawLineStrip(const Vector2 *points, int pointCount, Color color); // Draw lines sequence (using gl lines)
+ void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw line segment cubic-bezier in-out interpolation
+ void DrawCircle(int centerX, int centerY, float radius, Color color); // Draw a color-filled circle
+ void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw a piece of a circle
+ void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw circle sector outline
+ void DrawCircleGradient(int centerX, int centerY, float radius, Color inner, Color outer); // Draw a gradient-filled circle
+ void DrawCircleV(Vector2 center, float radius, Color color); // Draw a color-filled circle (Vector version)
+ void DrawCircleLines(int centerX, int centerY, float radius, Color color); // Draw circle outline
+ void DrawCircleLinesV(Vector2 center, float radius, Color color); // Draw circle outline (Vector version)
+ void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse
+ void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse outline
+ void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring
+ void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring outline
+ void DrawRectangle(int posX, int posY, int width, int height, Color color); // Draw a color-filled rectangle
+ void DrawRectangleV(Vector2 position, Vector2 size, Color color); // Draw a color-filled rectangle (Vector version)
+ void DrawRectangleRec(Rectangle rec, Color color); // Draw a color-filled rectangle
+ void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); // Draw a color-filled rectangle with pro parameters
+ void DrawRectangleGradientV(int posX, int posY, int width, int height, Color top, Color bottom); // Draw a vertical-gradient-filled rectangle
+ void DrawRectangleGradientH(int posX, int posY, int width, int height, Color left, Color right); // Draw a horizontal-gradient-filled rectangle
+ void DrawRectangleGradientEx(Rectangle rec, Color topLeft, Color bottomLeft, Color topRight, Color bottomRight); // Draw a gradient-filled rectangle with custom vertex colors
+ void DrawRectangleLines(int posX, int posY, int width, int height, Color color); // Draw rectangle outline
+ void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color); // Draw rectangle outline with extended parameters
+ void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); // Draw rectangle with rounded edges
+ void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, Color color); // Draw rectangle lines with rounded edges
+ void DrawRectangleRoundedLinesEx(Rectangle rec, float roundness, int segments, float lineThick, Color color); // Draw rectangle with rounded edges outline
+ void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw a color-filled triangle (vertex in counter-clockwise order!)
+ void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle outline (vertex in counter-clockwise order!)
+ void DrawTriangleFan(const Vector2 *points, int pointCount, Color color); // Draw a triangle fan defined by points (first vertex is the center)
+ void DrawTriangleStrip(const Vector2 *points, int pointCount, Color color); // Draw a triangle strip defined by points
+ void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a regular polygon (Vector version)
+ void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a polygon outline of n sides
+ void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); // Draw a polygon outline of n sides with extended parameters
+// Splines drawing functions
+ void DrawSplineLinear(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Linear, minimum 2 points
+ void DrawSplineBasis(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: B-Spline, minimum 4 points
+ void DrawSplineCatmullRom(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Catmull-Rom, minimum 4 points
+ void DrawSplineBezierQuadratic(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]
+ void DrawSplineBezierCubic(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]
+ void DrawSplineSegmentLinear(Vector2 p1, Vector2 p2, float thick, Color color); // Draw spline segment: Linear, 2 points
+ void DrawSplineSegmentBasis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color); // Draw spline segment: B-Spline, 4 points
+ void DrawSplineSegmentCatmullRom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color); // Draw spline segment: Catmull-Rom, 4 points
+ void DrawSplineSegmentBezierQuadratic(Vector2 p1, Vector2 c2, Vector2 p3, float thick, Color color); // Draw spline segment: Quadratic Bezier, 2 points, 1 control point
+ void DrawSplineSegmentBezierCubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float thick, Color color); // Draw spline segment: Cubic Bezier, 2 points, 2 control points
+// Spline segment point evaluation functions, for a given t [0.0f .. 1.0f]
+ Vector2 GetSplinePointLinear(Vector2 startPos, Vector2 endPos, float t); // Get (evaluate) spline point: Linear
+ Vector2 GetSplinePointBasis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t); // Get (evaluate) spline point: B-Spline
+ Vector2 GetSplinePointCatmullRom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t); // Get (evaluate) spline point: Catmull-Rom
+ Vector2 GetSplinePointBezierQuad(Vector2 p1, Vector2 c2, Vector2 p3, float t); // Get (evaluate) spline point: Quadratic Bezier
+ Vector2 GetSplinePointBezierCubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t); // Get (evaluate) spline point: Cubic Bezier
+// Basic shapes collision detection functions
+ bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles
+ bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); // Check collision between two circles
+ bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); // Check collision between circle and rectangle
+ bool CheckCollisionCircleLine(Vector2 center, float radius, Vector2 p1, Vector2 p2); // Check if circle collides with a line created betweeen two points [p1] and [p2]
+ bool CheckCollisionPointRec(Vector2 point, Rectangle rec); // Check if point is inside rectangle
+ bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); // Check if point is inside circle
+ bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); // Check if point is inside a triangle
+ 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]
+ bool CheckCollisionPointPoly(Vector2 point, const Vector2 *points, int pointCount); // Check if point is within a polygon described by array of vertices
+ 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
+ Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); // Get collision rectangle for two rectangles collision
+//------------------------------------------------------------------------------------
+// Texture Loading and Drawing Functions (Module: textures)
+//------------------------------------------------------------------------------------
+// Image loading functions
+// NOTE: These functions do not require GPU access
+ Image LoadImage(const char *fileName); // Load image from file into CPU memory (RAM)
+ Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize); // Load image from RAW file data
+ Image LoadImageAnim(const char *fileName, int *frames); // Load image sequence from file (frames appended to image.data)
+ Image LoadImageAnimFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int *frames); // Load image sequence from memory buffer
+ Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load image from memory buffer, fileType refers to extension: i.e. '.png'
+ Image LoadImageFromTexture(Texture2D texture); // Load image from GPU texture data
+ Image LoadImageFromScreen(void); // Load image from screen buffer and (screenshot)
+ bool IsImageValid(Image image); // Check if an image is valid (data and parameters)
+ void UnloadImage(Image image); // Unload image from CPU memory (RAM)
+ bool ExportImage(Image image, const char *fileName); // Export image data to file, returns true on success
+ unsigned char *ExportImageToMemory(Image image, const char *fileType, int *fileSize); // Export image to memory buffer
+ bool ExportImageAsCode(Image image, const char *fileName); // Export image as code file defining an array of bytes, returns true on success
+// Image generation functions
+ Image GenImageColor(int width, int height, Color color); // Generate image: plain color
+ Image GenImageGradientLinear(int width, int height, int direction, Color start, Color end); // Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient
+ Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); // Generate image: radial gradient
+ Image GenImageGradientSquare(int width, int height, float density, Color inner, Color outer); // Generate image: square gradient
+ Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); // Generate image: checked
+ Image GenImageWhiteNoise(int width, int height, float factor); // Generate image: white noise
+ Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); // Generate image: perlin noise
+ Image GenImageCellular(int width, int height, int tileSize); // Generate image: cellular algorithm, bigger tileSize means bigger cells
+ Image GenImageText(int width, int height, const char *text); // Generate image: grayscale image from text data
+// Image manipulation functions
+ Image ImageCopy(Image image); // Create an image duplicate (useful for transformations)
+ Image ImageFromImage(Image image, Rectangle rec); // Create an image from another image piece
+ Image ImageFromChannel(Image image, int selectedChannel); // Create an image from a selected channel of another image (GRAYSCALE)
+ Image ImageText(const char *text, int fontSize, Color color); // Create an image from text (default font)
+ Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Color tint); // Create an image from text (custom sprite font)
+ void ImageFormat(Image *image, int newFormat); // Convert image data to desired format
+ void ImageToPOT(Image *image, Color fill); // Convert image to POT (power-of-two)
+ void ImageCrop(Image *image, Rectangle crop); // Crop an image to a defined rectangle
+ void ImageAlphaCrop(Image *image, float threshold); // Crop image depending on alpha value
+ void ImageAlphaClear(Image *image, Color color, float threshold); // Clear alpha channel to desired color
+ void ImageAlphaMask(Image *image, Image alphaMask); // Apply alpha mask to image
+ void ImageAlphaPremultiply(Image *image); // Premultiply alpha channel
+ void ImageBlurGaussian(Image *image, int blurSize); // Apply Gaussian blur using a box blur approximation
+ void ImageKernelConvolution(Image *image, const float *kernel, int kernelSize); // Apply custom square convolution kernel to image
+ void ImageResize(Image *image, int newWidth, int newHeight); // Resize image (Bicubic scaling algorithm)
+ void ImageResizeNN(Image *image, int newWidth,int newHeight); // Resize image (Nearest-Neighbor scaling algorithm)
+ void ImageResizeCanvas(Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill); // Resize canvas and fill with color
+ void ImageMipmaps(Image *image); // Compute all mipmap levels for a provided image
+ void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
+ void ImageFlipVertical(Image *image); // Flip image vertically
+ void ImageFlipHorizontal(Image *image); // Flip image horizontally
+ void ImageRotate(Image *image, int degrees); // Rotate image by input angle in degrees (-359 to 359)
+ void ImageRotateCW(Image *image); // Rotate image clockwise 90deg
+ void ImageRotateCCW(Image *image); // Rotate image counter-clockwise 90deg
+ void ImageColorTint(Image *image, Color color); // Modify image color: tint
+ void ImageColorInvert(Image *image); // Modify image color: invert
+ void ImageColorGrayscale(Image *image); // Modify image color: grayscale
+ void ImageColorContrast(Image *image, float contrast); // Modify image color: contrast (-100 to 100)
+ void ImageColorBrightness(Image *image, int brightness); // Modify image color: brightness (-255 to 255)
+ void ImageColorReplace(Image *image, Color color, Color replace); // Modify image color: replace color
+ Color *LoadImageColors(Image image); // Load color data from image as a Color array (RGBA - 32bit)
+ Color *LoadImagePalette(Image image, int maxPaletteSize, int *colorCount); // Load colors palette from image as a Color array (RGBA - 32bit)
+ void UnloadImageColors(Color *colors); // Unload color data loaded with LoadImageColors()
+ void UnloadImagePalette(Color *colors); // Unload colors palette loaded with LoadImagePalette()
+ Rectangle GetImageAlphaBorder(Image image, float threshold); // Get image alpha border rectangle
+ 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)
+ void ImageClearBackground(Image *dst, Color color); // Clear image background with given color
+ void ImageDrawPixel(Image *dst, int posX, int posY, Color color); // Draw pixel within an image
+ void ImageDrawPixelV(Image *dst, Vector2 position, Color color); // Draw pixel within an image (Vector version)
+ void ImageDrawLine(Image *dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw line within an image
+ void ImageDrawLineV(Image *dst, Vector2 start, Vector2 end, Color color); // Draw line within an image (Vector version)
+ void ImageDrawLineEx(Image *dst, Vector2 start, Vector2 end, int thick, Color color); // Draw a line defining thickness within an image
+ void ImageDrawCircle(Image *dst, int centerX, int centerY, int radius, Color color); // Draw a filled circle within an image
+ void ImageDrawCircleV(Image *dst, Vector2 center, int radius, Color color); // Draw a filled circle within an image (Vector version)
+ void ImageDrawCircleLines(Image *dst, int centerX, int centerY, int radius, Color color); // Draw circle outline within an image
+ void ImageDrawCircleLinesV(Image *dst, Vector2 center, int radius, Color color); // Draw circle outline within an image (Vector version)
+ void ImageDrawRectangle(Image *dst, int posX, int posY, int width, int height, Color color); // Draw rectangle within an image
+ void ImageDrawRectangleV(Image *dst, Vector2 position, Vector2 size, Color color); // Draw rectangle within an image (Vector version)
+ void ImageDrawRectangleRec(Image *dst, Rectangle rec, Color color); // Draw rectangle within an image
+ void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color); // Draw rectangle lines within an image
+ void ImageDrawTriangle(Image *dst, Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle within an image
+ void ImageDrawTriangleEx(Image *dst, Vector2 v1, Vector2 v2, Vector2 v3, Color c1, Color c2, Color c3); // Draw triangle with interpolated colors within an image
+ void ImageDrawTriangleLines(Image *dst, Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle outline within an image
+ void ImageDrawTriangleFan(Image *dst, Vector2 *points, int pointCount, Color color); // Draw a triangle fan defined by points within an image (first vertex is the center)
+ void ImageDrawTriangleStrip(Image *dst, Vector2 *points, int pointCount, Color color); // Draw a triangle strip defined by points within an image
+ void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); // Draw a source image within a destination image (tint applied to source)
+ void ImageDrawText(Image *dst, const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) within an image (destination)
+ void ImageDrawTextEx(Image *dst, Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text (custom sprite font) within an image (destination)
+// Texture loading functions
+// NOTE: These functions require GPU access
+ Texture2D LoadTexture(const char *fileName); // Load texture from file into GPU memory (VRAM)
+ Texture2D LoadTextureFromImage(Image image); // Load texture from image data
+ TextureCubemap LoadTextureCubemap(Image image, int layout); // Load cubemap from image, multiple image cubemap layouts supported
+ RenderTexture2D LoadRenderTexture(int width, int height); // Load texture for rendering (framebuffer)
+ bool IsTextureValid(Texture2D texture); // Check if a texture is valid (loaded in GPU)
+ void UnloadTexture(Texture2D texture); // Unload texture from GPU memory (VRAM)
+ bool IsRenderTextureValid(RenderTexture2D target); // Check if a render texture is valid (loaded in GPU)
+ void UnloadRenderTexture(RenderTexture2D target); // Unload render texture from GPU memory (VRAM)
+ void UpdateTexture(Texture2D texture, const void *pixels); // Update GPU texture with new data
+ void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); // Update GPU texture rectangle with new data
+// Texture configuration functions
+ void GenTextureMipmaps(Texture2D *texture); // Generate GPU mipmaps for a texture
+ void SetTextureFilter(Texture2D texture, int filter); // Set texture scaling filter mode
+ void SetTextureWrap(Texture2D texture, int wrap); // Set texture wrapping mode
+// Texture drawing functions
+ void DrawTexture(Texture2D texture, int posX, int posY, Color tint); // Draw a Texture2D
+ void DrawTextureV(Texture2D texture, Vector2 position, Color tint); // Draw a Texture2D with position defined as Vector2
+ void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); // Draw a Texture2D with extended parameters
+ void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint); // Draw a part of a texture defined by a rectangle
+ 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
+ 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
+// Color/pixel related functions
+ bool ColorIsEqual(Color col1, Color col2); // Check if two colors are equal
+ Color Fade(Color color, float alpha); // Get color with alpha applied, alpha goes from 0.0f to 1.0f
+ int ColorToInt(Color color); // Get hexadecimal value for a Color (0xRRGGBBAA)
+ Vector4 ColorNormalize(Color color); // Get Color normalized as float [0..1]
+ Color ColorFromNormalized(Vector4 normalized); // Get Color from normalized values [0..1]
+ Vector3 ColorToHSV(Color color); // Get HSV values for a Color, hue [0..360], saturation/value [0..1]
+ Color ColorFromHSV(float hue, float saturation, float value); // Get a Color from HSV values, hue [0..360], saturation/value [0..1]
+ Color ColorTint(Color color, Color tint); // Get color multiplied with another color
+ Color ColorBrightness(Color color, float factor); // Get color with brightness correction, brightness factor goes from -1.0f to 1.0f
+ Color ColorContrast(Color color, float contrast); // Get color with contrast correction, contrast values between -1.0f and 1.0f
+ Color ColorAlpha(Color color, float alpha); // Get color with alpha applied, alpha goes from 0.0f to 1.0f
+ Color ColorAlphaBlend(Color dst, Color src, Color tint); // Get src alpha-blended into dst color with tint
+ Color ColorLerp(Color color1, Color color2, float factor); // Get color lerp interpolation between two colors, factor [0.0f..1.0f]
+ Color GetColor(unsigned int hexValue); // Get Color structure from hexadecimal value
+ Color GetPixelColor(void *srcPtr, int format); // Get Color from a source pixel pointer of certain format
+ void SetPixelColor(void *dstPtr, Color color, int format); // Set color formatted into destination pixel pointer
+ int GetPixelDataSize(int width, int height, int format); // Get pixel data size in bytes for certain format
+//------------------------------------------------------------------------------------
+// Font Loading and Text Drawing Functions (Module: text)
+//------------------------------------------------------------------------------------
+// Font loading/unloading functions
+ Font GetFontDefault(void); // Get the default Font
+ Font LoadFont(const char *fileName); // Load font from file into GPU memory (VRAM)
+ Font LoadFontEx(const char *fileName, int fontSize, int *codepoints, int codepointCount); // Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set, font size is provided in pixels height
+ Font LoadFontFromImage(Image image, Color key, int firstChar); // Load font from Image (XNA style)
+ Font LoadFontFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount); // Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
+ bool IsFontValid(Font font); // Check if a font is valid (font data loaded, WARNING: GPU texture not checked)
+ GlyphInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount, int type); // Load font data for further use
+ Image GenImageFontAtlas(const GlyphInfo *glyphs, Rectangle **glyphRecs, int glyphCount, int fontSize, int padding, int packMethod); // Generate image font atlas using chars info
+ void UnloadFontData(GlyphInfo *glyphs, int glyphCount); // Unload font chars info data (RAM)
+ void UnloadFont(Font font); // Unload font from GPU memory (VRAM)
+ bool ExportFontAsCode(Font font, const char *fileName); // Export font as code file, returns true on success
+// Text drawing functions
+ void DrawFPS(int posX, int posY); // Draw current FPS
+ void DrawText(const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font)
+ void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters
+ 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)
+ void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); // Draw one character (codepoint)
+ void DrawTextCodepoints(Font font, const int *codepoints, int codepointCount, Vector2 position, float fontSize, float spacing, Color tint); // Draw multiple character (codepoint)
+// Text font info functions
+ void SetTextLineSpacing(int spacing); // Set vertical line spacing when drawing with line-breaks
+ int MeasureText(const char *text, int fontSize); // Measure string width for default font
+ Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // Measure string size for Font
+ int GetGlyphIndex(Font font, int codepoint); // Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found
+ GlyphInfo GetGlyphInfo(Font font, int codepoint); // Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found
+ 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)
+ char *LoadUTF8(const int *codepoints, int length); // Load UTF-8 text encoded from codepoints array
+ void UnloadUTF8(char *text); // Unload UTF-8 text encoded from codepoints array
+ int *LoadCodepoints(const char *text, int *count); // Load all codepoints from a UTF-8 text string, codepoints count returned by parameter
+ void UnloadCodepoints(int *codepoints); // Unload codepoints data from memory
+ int GetCodepointCount(const char *text); // Get total number of codepoints in a UTF-8 encoded string
+ int GetCodepoint(const char *text, int *codepointSize); // Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
+ int GetCodepointNext(const char *text, int *codepointSize); // Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
+ int GetCodepointPrevious(const char *text, int *codepointSize); // Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
+ const char *CodepointToUTF8(int codepoint, int *utf8Size); // Encode one codepoint into UTF-8 byte array (array length returned as parameter)
+// Text strings management functions (no UTF-8 strings, only byte chars)
+// NOTE: Some strings allocate memory internally for returned strings, just be careful!
+ int TextCopy(char *dst, const char *src); // Copy one string to another, returns bytes copied
+ bool TextIsEqual(const char *text1, const char *text2); // Check if two text string are equal
+ unsigned int TextLength(const char *text); // Get text length, checks for '\0' ending
+ const char *TextFormat(const char *text, ...); // Text formatting with variables (sprintf() style)
+ const char *TextSubtext(const char *text, int position, int length); // Get a piece of a text string
+ char *TextReplace(const char *text, const char *replace, const char *by); // Replace text string (WARNING: memory must be freed!)
+ char *TextInsert(const char *text, const char *insert, int position); // Insert text in a position (WARNING: memory must be freed!)
+ const char *TextJoin(const char **textList, int count, const char *delimiter); // Join text strings with delimiter
+ const char **TextSplit(const char *text, char delimiter, int *count); // Split text into multiple strings
+ void TextAppend(char *text, const char *append, int *position); // Append text at specific position and move cursor!
+ int TextFindIndex(const char *text, const char *find); // Find first text occurrence within a string
+ const char *TextToUpper(const char *text); // Get upper case version of provided string
+ const char *TextToLower(const char *text); // Get lower case version of provided string
+ const char *TextToPascal(const char *text); // Get Pascal case notation version of provided string
+ const char *TextToSnake(const char *text); // Get Snake case notation version of provided string
+ const char *TextToCamel(const char *text); // Get Camel case notation version of provided string
+ int TextToInteger(const char *text); // Get integer value from text (negative values not supported)
+ float TextToFloat(const char *text); // Get float value from text (negative values not supported)
+//------------------------------------------------------------------------------------
+// Basic 3d Shapes Drawing Functions (Module: models)
+//------------------------------------------------------------------------------------
+// Basic geometric 3D shapes drawing functions
+ void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); // Draw a line in 3D world space
+ void DrawPoint3D(Vector3 position, Color color); // Draw a point in 3D space, actually a small line
+ void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); // Draw a circle in 3D world space
+ void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color); // Draw a color-filled triangle (vertex in counter-clockwise order!)
+ void DrawTriangleStrip3D(const Vector3 *points, int pointCount, Color color); // Draw a triangle strip defined by points
+ void DrawCube(Vector3 position, float width, float height, float length, Color color); // Draw cube
+ void DrawCubeV(Vector3 position, Vector3 size, Color color); // Draw cube (Vector version)
+ void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); // Draw cube wires
+ void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); // Draw cube wires (Vector version)
+ void DrawSphere(Vector3 centerPos, float radius, Color color); // Draw sphere
+ void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere with extended parameters
+ void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere wires
+ void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone
+ 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
+ void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone wires
+ 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
+ void DrawCapsule(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); // Draw a capsule with the center of its sphere caps at startPos and endPos
+ void DrawCapsuleWires(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); // Draw capsule wireframe with the center of its sphere caps at startPos and endPos
+ void DrawPlane(Vector3 centerPos, Vector2 size, Color color); // Draw a plane XZ
+ void DrawRay(Ray ray, Color color); // Draw a ray line
+ void DrawGrid(int slices, float spacing); // Draw a grid (centered at (0, 0, 0))
+//------------------------------------------------------------------------------------
+// Model 3d Loading and Drawing Functions (Module: models)
+//------------------------------------------------------------------------------------
+// Model management functions
+ Model LoadModel(const char *fileName); // Load model from files (meshes and materials)
+ Model LoadModelFromMesh(Mesh mesh); // Load model from generated mesh (default material)
+ bool IsModelValid(Model model); // Check if a model is valid (loaded in GPU, VAO/VBOs)
+ void UnloadModel(Model model); // Unload model (including meshes) from memory (RAM and/or VRAM)
+ BoundingBox GetModelBoundingBox(Model model); // Compute model bounding box limits (considers all meshes)
+// Model drawing functions
+ void DrawModel(Model model, Vector3 position, float scale, Color tint); // Draw a model (with texture if set)
+ void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model with extended parameters
+ void DrawModelWires(Model model, Vector3 position, float scale, Color tint); // Draw a model wires (with texture if set)
+ 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
+ void DrawModelPoints(Model model, Vector3 position, float scale, Color tint); // Draw a model as points
+ void DrawModelPointsEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model as points with extended parameters
+ void DrawBoundingBox(BoundingBox box, Color color); // Draw bounding box (wires)
+ void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float scale, Color tint); // Draw a billboard texture
+ void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint); // Draw a billboard texture defined by source
+ 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
+ void UploadMesh(Mesh *mesh, bool dynamic); // Upload mesh vertex data in GPU and provide VAO/VBO ids
+ void UpdateMeshBuffer(Mesh mesh, int index, const void *data, int dataSize, int offset); // Update mesh vertex data in GPU for a specific buffer index
+ void UnloadMesh(Mesh mesh); // Unload mesh data from CPU and GPU
+ void DrawMesh(Mesh mesh, Material material, Matrix transform); // Draw a 3d mesh with material and transform
+ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, int instances); // Draw multiple mesh instances with material and different transforms
+ BoundingBox GetMeshBoundingBox(Mesh mesh); // Compute mesh bounding box limits
+ void GenMeshTangents(Mesh *mesh); // Compute mesh tangents
+ bool ExportMesh(Mesh mesh, const char *fileName); // Export mesh data to file, returns true on success
+ bool ExportMeshAsCode(Mesh mesh, const char *fileName); // Export mesh as code file (.h) defining multiple arrays of vertex attributes
+// Mesh generation functions
+ Mesh GenMeshPoly(int sides, float radius); // Generate polygonal mesh
+ Mesh GenMeshPlane(float width, float length, int resX, int resZ); // Generate plane mesh (with subdivisions)
+ Mesh GenMeshCube(float width, float height, float length); // Generate cuboid mesh
+ Mesh GenMeshSphere(float radius, int rings, int slices); // Generate sphere mesh (standard sphere)
+ Mesh GenMeshHemiSphere(float radius, int rings, int slices); // Generate half-sphere mesh (no bottom cap)
+ Mesh GenMeshCylinder(float radius, float height, int slices); // Generate cylinder mesh
+ Mesh GenMeshCone(float radius, float height, int slices); // Generate cone/pyramid mesh
+ Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); // Generate torus mesh
+ Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); // Generate trefoil knot mesh
+ Mesh GenMeshHeightmap(Image heightmap, Vector3 size); // Generate heightmap mesh from image data
+ Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); // Generate cubes-based map mesh from image data
+// Material loading/unloading functions
+ Material *LoadMaterials(const char *fileName, int *materialCount); // Load materials from model file
+ Material LoadMaterialDefault(void); // Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)
+ bool IsMaterialValid(Material material); // Check if a material is valid (shader assigned, map textures loaded in GPU)
+ void UnloadMaterial(Material material); // Unload material from GPU memory (VRAM)
+ void SetMaterialTexture(Material *material, int mapType, Texture2D texture); // Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)
+ void SetModelMeshMaterial(Model *model, int meshId, int materialId); // Set material for a mesh
+// Model animations loading/unloading functions
+ ModelAnimation *LoadModelAnimations(const char *fileName, int *animCount); // Load model animations from file
+ void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose (CPU)
+ void UpdateModelAnimationBones(Model model, ModelAnimation anim, int frame); // Update model animation mesh bone matrices (GPU skinning)
+ void UnloadModelAnimation(ModelAnimation anim); // Unload animation data
+ void UnloadModelAnimations(ModelAnimation *animations, int animCount); // Unload animation array data
+ bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match
+// Collision detection functions
+ bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); // Check collision between two spheres
+ bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); // Check collision between two bounding boxes
+ bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius); // Check collision between box and sphere
+ RayCollision GetRayCollisionSphere(Ray ray, Vector3 center, float radius); // Get collision info between ray and sphere
+ RayCollision GetRayCollisionBox(Ray ray, BoundingBox box); // Get collision info between ray and box
+ RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform); // Get collision info between ray and mesh
+ RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); // Get collision info between ray and triangle
+ 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
+ void InitAudioDevice(void); // Initialize audio device and context
+ void CloseAudioDevice(void); // Close the audio device and context
+ bool IsAudioDeviceReady(void); // Check if audio device has been initialized successfully
+ void SetMasterVolume(float volume); // Set master volume (listener)
+ float GetMasterVolume(void); // Get master volume (listener)
+// Wave/Sound loading/unloading functions
+ Wave LoadWave(const char *fileName); // Load wave data from file
+ Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load wave from memory buffer, fileType refers to extension: i.e. '.wav'
+ bool IsWaveValid(Wave wave); // Checks if wave data is valid (data loaded and parameters)
+ Sound LoadSound(const char *fileName); // Load sound from file
+ Sound LoadSoundFromWave(Wave wave); // Load sound from wave data
+ Sound LoadSoundAlias(Sound source); // Create a new sound that shares the same sample data as the source sound, does not own the sound data
+ bool IsSoundValid(Sound sound); // Checks if a sound is valid (data loaded and buffers initialized)
+ void UpdateSound(Sound sound, const void *data, int sampleCount); // Update sound buffer with new data
+ void UnloadWave(Wave wave); // Unload wave data
+ void UnloadSound(Sound sound); // Unload sound
+ void UnloadSoundAlias(Sound alias); // Unload a sound alias (does not deallocate sample data)
+ bool ExportWave(Wave wave, const char *fileName); // Export wave data to file, returns true on success
+ bool ExportWaveAsCode(Wave wave, const char *fileName); // Export wave sample data to code (.h), returns true on success
+// Wave/Sound management functions
+ void PlaySound(Sound sound); // Play a sound
+ void StopSound(Sound sound); // Stop playing a sound
+ void PauseSound(Sound sound); // Pause a sound
+ void ResumeSound(Sound sound); // Resume a paused sound
+ bool IsSoundPlaying(Sound sound); // Check if a sound is currently playing
+ void SetSoundVolume(Sound sound, float volume); // Set volume for a sound (1.0 is max level)
+ void SetSoundPitch(Sound sound, float pitch); // Set pitch for a sound (1.0 is base level)
+ void SetSoundPan(Sound sound, float pan); // Set pan for a sound (0.5 is center)
+ Wave WaveCopy(Wave wave); // Copy a wave to a new wave
+ void WaveCrop(Wave *wave, int initFrame, int finalFrame); // Crop a wave to defined frames range
+ void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); // Convert wave data to desired format
+ float *LoadWaveSamples(Wave wave); // Load samples data from wave as a 32bit float data array
+ void UnloadWaveSamples(float *samples); // Unload samples data loaded with LoadWaveSamples()
+// Music management functions
+ Music LoadMusicStream(const char *fileName); // Load music stream from file
+ Music LoadMusicStreamFromMemory(const char *fileType, const unsigned char *data, int dataSize); // Load music stream from data
+ bool IsMusicValid(Music music); // Checks if a music stream is valid (context and buffers initialized)
+ void UnloadMusicStream(Music music); // Unload music stream
+ void PlayMusicStream(Music music); // Start music playing
+ bool IsMusicStreamPlaying(Music music); // Check if music is playing
+ void UpdateMusicStream(Music music); // Updates buffers for music streaming
+ void StopMusicStream(Music music); // Stop music playing
+ void PauseMusicStream(Music music); // Pause music playing
+ void ResumeMusicStream(Music music); // Resume playing paused music
+ void SeekMusicStream(Music music, float position); // Seek music to a position (in seconds)
+ void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level)
+ void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level)
+ void SetMusicPan(Music music, float pan); // Set pan for a music (0.5 is center)
+ float GetMusicTimeLength(Music music); // Get music time length (in seconds)
+ float GetMusicTimePlayed(Music music); // Get current music time played (in seconds)
+// AudioStream management functions
+ AudioStream LoadAudioStream(unsigned int sampleRate, unsigned int sampleSize, unsigned int channels); // Load audio stream (to stream raw audio pcm data)
+ bool IsAudioStreamValid(AudioStream stream); // Checks if an audio stream is valid (buffers initialized)
+ void UnloadAudioStream(AudioStream stream); // Unload audio stream and free memory
+ void UpdateAudioStream(AudioStream stream, const void *data, int frameCount); // Update audio stream buffers with data
+ bool IsAudioStreamProcessed(AudioStream stream); // Check if any audio stream buffers requires refill
+ void PlayAudioStream(AudioStream stream); // Play audio stream
+ void PauseAudioStream(AudioStream stream); // Pause audio stream
+ void ResumeAudioStream(AudioStream stream); // Resume audio stream
+ bool IsAudioStreamPlaying(AudioStream stream); // Check if audio stream is playing
+ void StopAudioStream(AudioStream stream); // Stop audio stream
+ void SetAudioStreamVolume(AudioStream stream, float volume); // Set volume for audio stream (1.0 is max level)
+ void SetAudioStreamPitch(AudioStream stream, float pitch); // Set pitch for audio stream (1.0 is base level)
+ void SetAudioStreamPan(AudioStream stream, float pan); // Set pan for audio stream (0.5 is centered)
+ void SetAudioStreamBufferSizeDefault(int size); // Default size for new audio streams
+ void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); // Audio thread callback to request new data
+ void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Attach audio stream processor to stream, receives the samples as 'float'
+ void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Detach audio stream processor from stream
+ void AttachAudioMixedProcessor(AudioCallback processor); // Attach audio stream processor to the entire audio pipeline, receives the samples as 'float'
+ void DetachAudioMixedProcessor(AudioCallback processor); // Detach audio stream processor from the entire audio pipeline
\ No newline at end of file
diff --git a/raylib/raylib_modified.h b/raylib/raylib_modified.h
deleted file mode 100644
index 0fcd2fd..0000000
--- a/raylib/raylib_modified.h
+++ /dev/null
@@ -1,1357 +0,0 @@
-// Raylib.h version 2.6-release modified by hand so it can be processed by CFFI
-/**********************************************************************************************
-*
-* 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 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] 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-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.
-*
-**********************************************************************************************/
-
-
-
-//----------------------------------------------------------------------------------
-// Some basic Defines
-//----------------------------------------------------------------------------------
-
-
-#define MAX_TOUCH_POINTS 10 // Maximum number of touch points supported
-
-
-
-
-//----------------------------------------------------------------------------------
-// Structures Definition
-//----------------------------------------------------------------------------------
-
-
-// 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)
- 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
- Texture2D texture; // Characters texture atlas
- Rectangle *recs; // Characters rectangles in texture
- CharInfo *chars; // Characters info data
-} 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; // 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; // 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; // 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 {
- 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)
-
- rAudioBuffer *buffer; // Pointer to internal data used by the audio system
-} AudioStream;
-
-// Sound source type
-typedef struct Sound {
- unsigned int sampleCount; // Total number of samples
- AudioStream stream; // Audio stream
-} Sound;
-
-// Music stream type (audio file streaming from memory)
-// NOTE: Anything longer than ~10 seconds should be streamed
-typedef struct Music {
- int ctxType; // Type of music context (audio filetype)
- void *ctxData; // Audio context data, depends on type
-
- unsigned int sampleCount; // Total number of samples
- unsigned int loopCount; // Loops count (times music will play), 0 means infinite loop
-
- AudioStream stream; // Audio stream
-} Music;
-
-// 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_RESERVED = 1, // Reserved
- 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_WINDOW_ALWAYS_RUN = 256, // Set to allow windows running while minimized
- 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 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;
-
-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 14
-#define LOC_MAP_SPECULAR 15
-
-// 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 0
-#define MAP_SPECULAR 1
-
-// 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;
-
-
-
-
-
-//------------------------------------------------------------------------------------
-// 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 Vector2 GetWindowPosition(void); // Get window position XY on monitor
-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
-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
-
-// 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
-
-// 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 Color ColorFromNormalized(Vector4 normalized); // Returns color from normalized values [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 int 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 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 bool DirectoryExists(const char *dirPath); // Check if a directory path exists
-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 (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 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)
-
-RLAPI unsigned char *CompressData(unsigned char *data, int dataLength, int *compDataLength); // Compress data (DEFLATE algorythm)
-RLAPI unsigned char *DecompressData(unsigned char *compData, int compDataLength, int *dataLength); // Decompress data (DEFLATE algorythm)
-
-// 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 void SetExitKey(int key); // Set a custom key to exit program (default is ESC)
-RLAPI int GetKeyPressed(void); // Get key pressed, call it multiple times for chars queued
-
-// 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 DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse
-RLAPI void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse 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 (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 numPoints, 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 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 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 Rectangle GetImageAlphaBorder(Image image, float threshold); // Get image alpha border rectangle
-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 Image ImageFromImage(Image image, Rectangle rec); // Create an image from another image piece
-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, Color tint); // Draw a source image within a destination image (tint applied to source)
-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(const CharInfo *chars, Rectangle **recs, 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 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 scale, Color tint); // Draw one character (codepoint)
-
-// 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 codepoint); // Get index position for a unicode character on font
-
-// Text strings management functions (no utf8 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 *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 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)
-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)
-//------------------------------------------------------------------------------------
-
-// Basic geometric 3D shapes drawing functions
-RLAPI void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); // Draw a line in 3D world space
-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 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 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 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(const char *vsCode, const 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(void); // Get internal modelview matrix
-RLAPI Matrix GetMatrixProjection(void); // Get internal projection matrix
-
-// Texture maps generation (PBR)
-// NOTE: Required shaders should be provided
-RLAPI Texture2D GenTextureCubemap(Shader shader, Texture2D map, int size); // Generate cubemap texture from 2D 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)
-
-// 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 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 StopSound(Sound sound); // Stop playing a sound
-RLAPI void PauseSound(Sound sound); // Pause a sound
-RLAPI void ResumeSound(Sound sound); // Resume a paused sound
-RLAPI void PlaySoundMulti(Sound sound); // Play a sound (using multichannel buffer pool)
-RLAPI void StopSoundMulti(void); // Stop any sound playing (using multichannel buffer pool)
-RLAPI int GetSoundsPlaying(void); // Get number of sounds playing in the multichannel
-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 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
-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
-
-
-
-
diff --git a/raylib/raymath.h.modified b/raylib/raymath.h.modified
new file mode 100644
index 0000000..bf37329
--- /dev/null
+++ b/raylib/raymath.h.modified
@@ -0,0 +1,249 @@
+/**********************************************************************************************
+*
+* raymath v2.0 - Math functions to work with Vector2, Vector3, Matrix and Quaternions
+*
+* CONVENTIONS:
+* - Matrix structure is defined as row-major (memory layout) but parameters naming AND all
+* math operations performed by the library consider the structure as it was column-major
+* It is like transposed versions of the matrices are used for all the maths
+* It benefits some functions making them cache-friendly and also avoids matrix
+* transpositions sometimes required by OpenGL
+* Example: In memory order, row0 is [m0 m4 m8 m12] but in semantic math row0 is [m0 m1 m2 m3]
+* - Functions are always self-contained, no function use another raymath function inside,
+* required code is directly re-implemented inside
+* - Functions input parameters are always received by value (2 unavoidable exceptions)
+* - Functions use always a "result" variable for return (except C++ operators)
+* - Functions are always defined inline
+* - Angles are always in radians (DEG2RAD/RAD2DEG macros provided for convenience)
+* - No compound literals used to make sure libray is compatible with C++
+*
+* 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_STATIC_INLINE
+* This may use up lots of memory.
+*
+* #define RAYMATH_DISABLE_CPP_OPERATORS
+* Disables C++ operator overloads for raymath types.
+*
+* LICENSE: zlib/libpng
+*
+* Copyright (c) 2015-2024 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.
+*
+**********************************************************************************************/
+// Function specifiers definition
+//----------------------------------------------------------------------------------
+// Defines and Macros
+//----------------------------------------------------------------------------------
+// Get float vector for Matrix
+// Get float vector for Vector3
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+// 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;
+//----------------------------------------------------------------------------------
+// Module Functions Definition - Utils math
+//----------------------------------------------------------------------------------
+// Clamp float value
+inline /* Functions may be inlined or external definition used*/ float Clamp(float value, float min, float max);// Calculate linear interpolation between two floats
+inline /* Functions may be inlined or external definition used*/ float Lerp(float start, float end, float amount);// Normalize input value within input range
+inline /* Functions may be inlined or external definition used*/ float Normalize(float value, float start, float end);// Remap input value within input range to output range
+inline /* Functions may be inlined or external definition used*/ float Remap(float value, float inputStart, float inputEnd, float outputStart, float outputEnd);// Wrap input value from min to max
+inline /* Functions may be inlined or external definition used*/ float Wrap(float value, float min, float max);// Check whether two given floats are almost equal
+inline /* Functions may be inlined or external definition used*/ int FloatEquals(float x, float y);//----------------------------------------------------------------------------------
+// Module Functions Definition - Vector2 math
+//----------------------------------------------------------------------------------
+// Vector with components value 0.0f
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Zero(void);// Vector with components value 1.0f
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2One(void);// Add two vectors (v1 + v2)
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Add(Vector2 v1, Vector2 v2);// Add vector and float value
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2AddValue(Vector2 v, float add);// Subtract two vectors (v1 - v2)
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Subtract(Vector2 v1, Vector2 v2);// Subtract vector by float value
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2SubtractValue(Vector2 v, float sub);// Calculate vector length
+inline /* Functions may be inlined or external definition used*/ float Vector2Length(Vector2 v);// Calculate vector square length
+inline /* Functions may be inlined or external definition used*/ float Vector2LengthSqr(Vector2 v);// Calculate two vectors dot product
+inline /* Functions may be inlined or external definition used*/ float Vector2DotProduct(Vector2 v1, Vector2 v2);// Calculate distance between two vectors
+inline /* Functions may be inlined or external definition used*/ float Vector2Distance(Vector2 v1, Vector2 v2);// Calculate square distance between two vectors
+inline /* Functions may be inlined or external definition used*/ float Vector2DistanceSqr(Vector2 v1, Vector2 v2);// Calculate angle between two vectors
+// NOTE: Angle is calculated from origin point (0, 0)
+inline /* Functions may be inlined or external definition used*/ float Vector2Angle(Vector2 v1, Vector2 v2);// Calculate angle defined by a two vectors line
+// NOTE: Parameters need to be normalized
+// Current implementation should be aligned with glm::angle
+inline /* Functions may be inlined or external definition used*/ float Vector2LineAngle(Vector2 start, Vector2 end);// Scale vector (multiply by value)
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Scale(Vector2 v, float scale);// Multiply vector by vector
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Multiply(Vector2 v1, Vector2 v2);// Negate vector
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Negate(Vector2 v);// Divide vector by vector
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Divide(Vector2 v1, Vector2 v2);// Normalize provided vector
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Normalize(Vector2 v);// Transforms a Vector2 by a given Matrix
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Transform(Vector2 v, Matrix mat);// Calculate linear interpolation between two vectors
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Lerp(Vector2 v1, Vector2 v2, float amount);// Calculate reflected vector to normal
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Reflect(Vector2 v, Vector2 normal);// Get min value for each pair of components
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Min(Vector2 v1, Vector2 v2);// Get max value for each pair of components
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Max(Vector2 v1, Vector2 v2);// Rotate vector by angle
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Rotate(Vector2 v, float angle);// Move Vector towards target
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2MoveTowards(Vector2 v, Vector2 target, float maxDistance);// Invert the given vector
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Invert(Vector2 v);// Clamp the components of the vector between
+// min and max values specified by the given vectors
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Clamp(Vector2 v, Vector2 min, Vector2 max);// Clamp the magnitude of the vector between two min and max values
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2ClampValue(Vector2 v, float min, float max);// Check whether two given vectors are almost equal
+inline /* Functions may be inlined or external definition used*/ int Vector2Equals(Vector2 p, Vector2 q);// Compute the direction of a refracted ray
+// v: normalized direction of the incoming ray
+// n: normalized normal vector of the interface of two optical media
+// r: ratio of the refractive index of the medium from where the ray comes
+// to the refractive index of the medium on the other side of the surface
+inline /* Functions may be inlined or external definition used*/ Vector2 Vector2Refract(Vector2 v, Vector2 n, float r);//----------------------------------------------------------------------------------
+// Module Functions Definition - Vector3 math
+//----------------------------------------------------------------------------------
+// Vector with components value 0.0f
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Zero(void);// Vector with components value 1.0f
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3One(void);// Add two vectors
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Add(Vector3 v1, Vector3 v2);// Add vector and float value
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3AddValue(Vector3 v, float add);// Subtract two vectors
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Subtract(Vector3 v1, Vector3 v2);// Subtract vector by float value
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3SubtractValue(Vector3 v, float sub);// Multiply vector by scalar
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Scale(Vector3 v, float scalar);// Multiply vector by vector
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Multiply(Vector3 v1, Vector3 v2);// Calculate two vectors cross product
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3CrossProduct(Vector3 v1, Vector3 v2);// Calculate one vector perpendicular vector
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Perpendicular(Vector3 v);// Calculate vector length
+inline /* Functions may be inlined or external definition used*/ float Vector3Length(const Vector3 v);// Calculate vector square length
+inline /* Functions may be inlined or external definition used*/ float Vector3LengthSqr(const Vector3 v);// Calculate two vectors dot product
+inline /* Functions may be inlined or external definition used*/ float Vector3DotProduct(Vector3 v1, Vector3 v2);// Calculate distance between two vectors
+inline /* Functions may be inlined or external definition used*/ float Vector3Distance(Vector3 v1, Vector3 v2);// Calculate square distance between two vectors
+inline /* Functions may be inlined or external definition used*/ float Vector3DistanceSqr(Vector3 v1, Vector3 v2);// Calculate angle between two vectors
+inline /* Functions may be inlined or external definition used*/ float Vector3Angle(Vector3 v1, Vector3 v2);// Negate provided vector (invert direction)
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Negate(Vector3 v);// Divide vector by vector
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Divide(Vector3 v1, Vector3 v2);// Normalize provided vector
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Normalize(Vector3 v);//Calculate the projection of the vector v1 on to v2
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Project(Vector3 v1, Vector3 v2);//Calculate the rejection of the vector v1 on to v2
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Reject(Vector3 v1, Vector3 v2);// Orthonormalize provided vectors
+// Makes vectors normalized and orthogonal to each other
+// Gram-Schmidt function implementation
+inline /* Functions may be inlined or external definition used*/ void Vector3OrthoNormalize(Vector3 *v1, Vector3 *v2);// Transforms a Vector3 by a given Matrix
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Transform(Vector3 v, Matrix mat);// Transform a vector by quaternion rotation
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3RotateByQuaternion(Vector3 v, Quaternion q);// Rotates a vector around an axis
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3RotateByAxisAngle(Vector3 v, Vector3 axis, float angle);// Move Vector towards target
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3MoveTowards(Vector3 v, Vector3 target, float maxDistance);// Calculate linear interpolation between two vectors
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Lerp(Vector3 v1, Vector3 v2, float amount);// Calculate cubic hermite interpolation between two vectors and their tangents
+// as described in the GLTF 2.0 specification: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#interpolation-cubic
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3CubicHermite(Vector3 v1, Vector3 tangent1, Vector3 v2, Vector3 tangent2, float amount);// Calculate reflected vector to normal
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Reflect(Vector3 v, Vector3 normal);// Get min value for each pair of components
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Min(Vector3 v1, Vector3 v2);// Get max value for each pair of components
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Max(Vector3 v1, Vector3 v2);// 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
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Barycenter(Vector3 p, Vector3 a, Vector3 b, Vector3 c);// Projects a Vector3 from screen space into object space
+// NOTE: We are avoiding calling other raymath functions despite available
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Unproject(Vector3 source, Matrix projection, Matrix view);// Get Vector3 as float array
+inline /* Functions may be inlined or external definition used*/ float3 Vector3ToFloatV(Vector3 v);// Invert the given vector
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Invert(Vector3 v);// Clamp the components of the vector between
+// min and max values specified by the given vectors
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Clamp(Vector3 v, Vector3 min, Vector3 max);// Clamp the magnitude of the vector between two values
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3ClampValue(Vector3 v, float min, float max);// Check whether two given vectors are almost equal
+inline /* Functions may be inlined or external definition used*/ int Vector3Equals(Vector3 p, Vector3 q);// Compute the direction of a refracted ray
+// v: normalized direction of the incoming ray
+// n: normalized normal vector of the interface of two optical media
+// r: ratio of the refractive index of the medium from where the ray comes
+// to the refractive index of the medium on the other side of the surface
+inline /* Functions may be inlined or external definition used*/ Vector3 Vector3Refract(Vector3 v, Vector3 n, float r);//----------------------------------------------------------------------------------
+// Module Functions Definition - Vector4 math
+//----------------------------------------------------------------------------------
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Zero(void);inline /* Functions may be inlined or external definition used*/ Vector4 Vector4One(void);inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Add(Vector4 v1, Vector4 v2);inline /* Functions may be inlined or external definition used*/ Vector4 Vector4AddValue(Vector4 v, float add);inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Subtract(Vector4 v1, Vector4 v2);inline /* Functions may be inlined or external definition used*/ Vector4 Vector4SubtractValue(Vector4 v, float add);inline /* Functions may be inlined or external definition used*/ float Vector4Length(Vector4 v);inline /* Functions may be inlined or external definition used*/ float Vector4LengthSqr(Vector4 v);inline /* Functions may be inlined or external definition used*/ float Vector4DotProduct(Vector4 v1, Vector4 v2);// Calculate distance between two vectors
+inline /* Functions may be inlined or external definition used*/ float Vector4Distance(Vector4 v1, Vector4 v2);// Calculate square distance between two vectors
+inline /* Functions may be inlined or external definition used*/ float Vector4DistanceSqr(Vector4 v1, Vector4 v2);inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Scale(Vector4 v, float scale);// Multiply vector by vector
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Multiply(Vector4 v1, Vector4 v2);// Negate vector
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Negate(Vector4 v);// Divide vector by vector
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Divide(Vector4 v1, Vector4 v2);// Normalize provided vector
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Normalize(Vector4 v);// Get min value for each pair of components
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Min(Vector4 v1, Vector4 v2);// Get max value for each pair of components
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Max(Vector4 v1, Vector4 v2);// Calculate linear interpolation between two vectors
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Lerp(Vector4 v1, Vector4 v2, float amount);// Move Vector towards target
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4MoveTowards(Vector4 v, Vector4 target, float maxDistance);// Invert the given vector
+inline /* Functions may be inlined or external definition used*/ Vector4 Vector4Invert(Vector4 v);// Check whether two given vectors are almost equal
+inline /* Functions may be inlined or external definition used*/ int Vector4Equals(Vector4 p, Vector4 q);//----------------------------------------------------------------------------------
+// Module Functions Definition - Matrix math
+//----------------------------------------------------------------------------------
+// Compute matrix determinant
+inline /* Functions may be inlined or external definition used*/ float MatrixDeterminant(Matrix mat);// Get the trace of the matrix (sum of the values along the diagonal)
+inline /* Functions may be inlined or external definition used*/ float MatrixTrace(Matrix mat);// Transposes provided matrix
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixTranspose(Matrix mat);// Invert provided matrix
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixInvert(Matrix mat);// Get identity matrix
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixIdentity(void);// Add two matrices
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixAdd(Matrix left, Matrix right);// Subtract two matrices (left - right)
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixSubtract(Matrix left, Matrix right);// Get two matrix multiplication
+// NOTE: When multiplying matrices... the order matters!
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixMultiply(Matrix left, Matrix right);// Get translation matrix
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixTranslate(float x, float y, float z);// Create rotation matrix from axis and angle
+// NOTE: Angle should be provided in radians
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixRotate(Vector3 axis, float angle);// Get x-rotation matrix
+// NOTE: Angle must be provided in radians
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixRotateX(float angle);// Get y-rotation matrix
+// NOTE: Angle must be provided in radians
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixRotateY(float angle);// Get z-rotation matrix
+// NOTE: Angle must be provided in radians
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixRotateZ(float angle);// Get xyz-rotation matrix
+// NOTE: Angle must be provided in radians
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixRotateXYZ(Vector3 angle);// Get zyx-rotation matrix
+// NOTE: Angle must be provided in radians
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixRotateZYX(Vector3 angle);// Get scaling matrix
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixScale(float x, float y, float z);// Get perspective projection matrix
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixFrustum(double left, double right, double bottom, double top, double nearPlane, double farPlane);// Get perspective projection matrix
+// NOTE: Fovy angle must be provided in radians
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixPerspective(double fovY, double aspect, double nearPlane, double farPlane);// Get orthographic projection matrix
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixOrtho(double left, double right, double bottom, double top, double nearPlane, double farPlane);// Get camera look-at matrix (view matrix)
+inline /* Functions may be inlined or external definition used*/ Matrix MatrixLookAt(Vector3 eye, Vector3 target, Vector3 up);// Get float array of matrix data
+inline /* Functions may be inlined or external definition used*/ float16 MatrixToFloatV(Matrix mat);//----------------------------------------------------------------------------------
+// Module Functions Definition - Quaternion math
+//----------------------------------------------------------------------------------
+// Add two quaternions
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionAdd(Quaternion q1, Quaternion q2);// Add quaternion and float value
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionAddValue(Quaternion q, float add);// Subtract two quaternions
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionSubtract(Quaternion q1, Quaternion q2);// Subtract quaternion and float value
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionSubtractValue(Quaternion q, float sub);// Get identity quaternion
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionIdentity(void);// Computes the length of a quaternion
+inline /* Functions may be inlined or external definition used*/ float QuaternionLength(Quaternion q);// Normalize provided quaternion
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionNormalize(Quaternion q);// Invert provided quaternion
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionInvert(Quaternion q);// Calculate two quaternion multiplication
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2);// Scale quaternion by float value
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionScale(Quaternion q, float mul);// Divide two quaternions
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionDivide(Quaternion q1, Quaternion q2);// Calculate linear interpolation between two quaternions
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionLerp(Quaternion q1, Quaternion q2, float amount);// Calculate slerp-optimized interpolation between two quaternions
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionNlerp(Quaternion q1, Quaternion q2, float amount);// Calculates spherical linear interpolation between two quaternions
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount);// Calculate quaternion cubic spline interpolation using Cubic Hermite Spline algorithm
+// as described in the GLTF 2.0 specification: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#interpolation-cubic
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionCubicHermiteSpline(Quaternion q1, Quaternion outTangent1, Quaternion q2, Quaternion inTangent2, float t);// Calculate quaternion based on the rotation from one vector to another
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionFromVector3ToVector3(Vector3 from, Vector3 to);// Get a quaternion for a given rotation matrix
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionFromMatrix(Matrix mat);// Get a matrix for a given quaternion
+inline /* Functions may be inlined or external definition used*/ Matrix QuaternionToMatrix(Quaternion q);// Get rotation quaternion for an angle and axis
+// NOTE: Angle must be provided in radians
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionFromAxisAngle(Vector3 axis, float angle);// Get the rotation angle and axis for a given quaternion
+inline /* Functions may be inlined or external definition used*/ void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle);// Get the quaternion equivalent to Euler angles
+// NOTE: Rotation order is ZYX
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionFromEuler(float pitch, float yaw, float roll);// Get the Euler angles equivalent to quaternion (roll, pitch, yaw)
+// NOTE: Angles are returned in a Vector3 struct in radians
+inline /* Functions may be inlined or external definition used*/ Vector3 QuaternionToEuler(Quaternion q);// Transform a quaternion given a transformation matrix
+inline /* Functions may be inlined or external definition used*/ Quaternion QuaternionTransform(Quaternion q, Matrix mat);// Check whether two given quaternions are almost equal
+inline /* Functions may be inlined or external definition used*/ int QuaternionEquals(Quaternion p, Quaternion q);// Decompose a transformation matrix into its rotational, translational and scaling components
+inline /* Functions may be inlined or external definition used*/ void MatrixDecompose(Matrix mat, Vector3 *translation, Quaternion *rotation, Vector3 *scale);
\ No newline at end of file
diff --git a/raylib/rlgl.h.modified b/raylib/rlgl.h.modified
new file mode 100644
index 0000000..1184262
--- /dev/null
+++ b/raylib/rlgl.h.modified
@@ -0,0 +1,522 @@
+/**********************************************************************************************
+*
+* rlgl v5.0 - A multi-OpenGL abstraction layer with an immediate-mode style API
+*
+* DESCRIPTION:
+* An abstraction layer for multiple OpenGL versions (1.1, 2.1, 3.3 Core, 4.3 Core, ES 2.0)
+* that provides a pseudo-OpenGL 1.1 immediate-mode style API (rlVertex, rlTranslate, rlRotate...)
+*
+* ADDITIONAL NOTES:
+* When choosing an OpenGL backend different than OpenGL 1.1, some internal buffer are
+* initialized on rlglInit() to accumulate vertex data
+*
+* When an internal state change is required all the stored vertex data is renderer in batch,
+* additionally, rlDrawRenderBatchActive() could be called to force flushing of the batch
+*
+* Some resources are also loaded for convenience, here the complete list:
+* - Default batch (RLGL.defaultBatch): RenderBatch system to accumulate vertex data
+* - Default texture (RLGL.defaultTextureId): 1x1 white pixel R8G8B8A8
+* - Default shader (RLGL.State.defaultShaderId, RLGL.State.defaultShaderLocs)
+*
+* Internal buffer (and resources) must be manually unloaded calling rlglClose()
+*
+* CONFIGURATION:
+* #define GRAPHICS_API_OPENGL_11
+* #define GRAPHICS_API_OPENGL_21
+* #define GRAPHICS_API_OPENGL_33
+* #define GRAPHICS_API_OPENGL_43
+* #define GRAPHICS_API_OPENGL_ES2
+* #define GRAPHICS_API_OPENGL_ES3
+* 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_RENDER_TEXTURES_HINT
+* Enable framebuffer objects (fbo) support (enabled by default)
+* Some GPUs could not support them despite the OpenGL version
+*
+* #define RLGL_SHOW_GL_DETAILS_INFO
+* Show OpenGL extensions and capabilities detailed logs on init
+*
+* #define RLGL_ENABLE_OPENGL_DEBUG_CONTEXT
+* Enable debug context (only available on OpenGL 4.3)
+*
+* rlgl capabilities could be customized just defining some internal
+* values before library inclusion (default values listed):
+*
+* #define RL_DEFAULT_BATCH_BUFFER_ELEMENTS 8192 // Default internal render batch elements limits
+* #define RL_DEFAULT_BATCH_BUFFERS 1 // Default number of batch buffers (multi-buffering)
+* #define RL_DEFAULT_BATCH_DRAWCALLS 256 // Default number of batch draw calls (by state changes: mode, texture)
+* #define RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS 4 // Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())
+*
+* #define RL_MAX_MATRIX_STACK_SIZE 32 // Maximum size of internal Matrix stack
+* #define RL_MAX_SHADER_LOCATIONS 32 // Maximum number of shader locations supported
+* #define RL_CULL_DISTANCE_NEAR 0.01 // Default projection matrix near cull distance
+* #define RL_CULL_DISTANCE_FAR 1000.0 // Default projection matrix far cull distance
+*
+* When loading a shader, the following vertex attributes and uniform
+* location names are tried to be set automatically:
+*
+* #define RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION
+* #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD
+* #define RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL
+* #define RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR
+* #define RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT
+* #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2
+* #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEIDS "vertexBoneIds" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEIDS
+* #define RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS "vertexBoneWeights" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS
+* #define RL_DEFAULT_SHADER_UNIFORM_NAME_MVP "mvp" // model-view-projection matrix
+* #define RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW "matView" // view matrix
+* #define RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION "matProjection" // projection matrix
+* #define RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL "matModel" // model matrix
+* #define RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL "matNormal" // normal matrix (transpose(inverse(matModelView)))
+* #define RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR "colDiffuse" // color diffuse (base tint color, multiplied by texture color)
+* #define RL_DEFAULT_SHADER_UNIFORM_NAME_BONE_MATRICES "boneMatrices" // bone matrices
+* #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 "texture0" // texture0 (texture slot active 0)
+* #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1 "texture1" // texture1 (texture slot active 1)
+* #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 "texture2" // texture2 (texture slot active 2)
+*
+* DEPENDENCIES:
+* - OpenGL libraries (depending on platform and OpenGL version selected)
+* - GLAD OpenGL extensions loading library (only for OpenGL 3.3 Core, 4.3 Core)
+*
+*
+* LICENSE: zlib/libpng
+*
+* Copyright (c) 2014-2024 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.
+*
+**********************************************************************************************/
+// Function specifiers in case library is build/used as a shared library
+// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll
+// NOTE: visibility(default) attribute makes symbols "visible" when compiled with -fvisibility=hidden
+// Function specifiers definition
+// Support TRACELOG macros
+// Allow custom memory allocators
+// Security check in case no GRAPHICS_API_OPENGL_* defined
+// Security check in case multiple GRAPHICS_API_OPENGL_* defined
+// OpenGL 2.1 uses most of OpenGL 3.3 Core functionality
+// WARNING: Specific parts are checked with #if defines
+// OpenGL 4.3 uses OpenGL 3.3 Core functionality
+// OpenGL ES 3.0 uses OpenGL ES 2.0 functionality (and more)
+// Support framebuffer objects by default
+// NOTE: Some driver implementation do not support it, despite they should
+//----------------------------------------------------------------------------------
+// Defines and Macros
+//----------------------------------------------------------------------------------
+// Default internal render batch elements limits
+ // This is the maximum amount of elements (quads) per batch
+ // NOTE: Be careful with text, every letter maps to a quad
+// Internal Matrix stack
+// Shader limits
+// Projection matrix culling
+// Texture parameters (equivalent to OpenGL defines)
+// Matrix modes (equivalent to OpenGL)
+// Primitive assembly draw modes
+// GL equivalent data types
+// GL buffer usage hint
+// GL Shader type
+// GL blending factors
+// GL blending functions/equations
+// Default shader vertex attribute locations
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+// Dynamic vertex buffers (position + texcoords + colors + indices arrays)
+typedef struct rlVertexBuffer {
+ int elementCount; // Number of elements in the buffer (QUADS)
+ 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 *normals; // Vertex normal (XYZ - 3 components per vertex) (shader-location = 2)
+ unsigned char *colors; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
+ unsigned int *indices; // Vertex indices (in case vertex data comes indexed) (6 indices per quad)
+ unsigned int vaoId; // OpenGL Vertex Array Object id
+ unsigned int vboId[5]; // OpenGL Vertex Buffer Objects id (5 types of vertex data)
+} rlVertexBuffer;
+// 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 rlDrawCall {
+ 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.currentShaderId
+ 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
+} rlDrawCall;
+// rlRenderBatch type
+typedef struct rlRenderBatch {
+ int bufferCount; // Number of vertex buffers (multi-buffering support)
+ int currentBuffer; // Current buffer tracking in case of multi-buffering
+ rlVertexBuffer *vertexBuffer; // Dynamic buffer(s) for vertex data
+ rlDrawCall *draws; // Draw calls array, depends on textureId
+ int drawCounter; // Draw calls counter
+ float currentDepth; // Current depth value for next draw
+} rlRenderBatch;
+// OpenGL version
+typedef enum {
+ RL_OPENGL_11 = 1, // OpenGL 1.1
+ RL_OPENGL_21, // OpenGL 2.1 (GLSL 120)
+ RL_OPENGL_33, // OpenGL 3.3 (GLSL 330)
+ RL_OPENGL_43, // OpenGL 4.3 (using GLSL 330)
+ RL_OPENGL_ES_20, // OpenGL ES 2.0 (GLSL 100)
+ RL_OPENGL_ES_30 // OpenGL ES 3.0 (GLSL 300 es)
+} rlGlVersion;
+// Trace log level
+// NOTE: Organized by priority level
+typedef enum {
+ RL_LOG_ALL = 0, // Display all logs
+ RL_LOG_TRACE, // Trace logging, intended for internal use only
+ RL_LOG_DEBUG, // Debug logging, used for internal debugging, it should be disabled on release builds
+ RL_LOG_INFO, // Info logging, used for program execution info
+ RL_LOG_WARNING, // Warning logging, used on recoverable failures
+ RL_LOG_ERROR, // Error logging, used on unrecoverable failures
+ RL_LOG_FATAL, // Fatal logging, used to abort program: exit(EXIT_FAILURE)
+ RL_LOG_NONE // Disable logging
+} rlTraceLogLevel;
+// Texture pixel formats
+// NOTE: Support depends on OpenGL version
+typedef enum {
+ RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha)
+ RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA, // 8*2 bpp (2 channels)
+ RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5, // 16 bpp
+ RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8, // 24 bpp
+ RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha)
+ RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha)
+ RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, // 32 bpp
+ RL_PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R16, // 16 bpp (1 channel - half float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16, // 16*3 bpp (3 channels - half float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16, // 16*4 bpp (4 channels - half float)
+ RL_PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha)
+ RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha)
+ RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp
+ RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA, // 8 bpp
+ RL_PIXELFORMAT_COMPRESSED_ETC1_RGB, // 4 bpp
+ RL_PIXELFORMAT_COMPRESSED_ETC2_RGB, // 4 bpp
+ RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA, // 8 bpp
+ RL_PIXELFORMAT_COMPRESSED_PVRT_RGB, // 4 bpp
+ RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA, // 4 bpp
+ RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA, // 8 bpp
+ RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA // 2 bpp
+} rlPixelFormat;
+// 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 {
+ RL_TEXTURE_FILTER_POINT = 0, // No filter, just pixel approximation
+ RL_TEXTURE_FILTER_BILINEAR, // Linear filtering
+ RL_TEXTURE_FILTER_TRILINEAR, // Trilinear filtering (linear with mipmaps)
+ RL_TEXTURE_FILTER_ANISOTROPIC_4X, // Anisotropic filtering 4x
+ RL_TEXTURE_FILTER_ANISOTROPIC_8X, // Anisotropic filtering 8x
+ RL_TEXTURE_FILTER_ANISOTROPIC_16X, // Anisotropic filtering 16x
+} rlTextureFilter;
+// Color blending modes (pre-defined)
+typedef enum {
+ RL_BLEND_ALPHA = 0, // Blend textures considering alpha (default)
+ RL_BLEND_ADDITIVE, // Blend textures adding colors
+ RL_BLEND_MULTIPLIED, // Blend textures multiplying colors
+ RL_BLEND_ADD_COLORS, // Blend textures adding colors (alternative)
+ RL_BLEND_SUBTRACT_COLORS, // Blend textures subtracting colors (alternative)
+ RL_BLEND_ALPHA_PREMULTIPLY, // Blend premultiplied textures considering alpha
+ RL_BLEND_CUSTOM, // Blend textures using custom src/dst factors (use rlSetBlendFactors())
+ RL_BLEND_CUSTOM_SEPARATE // Blend textures using custom src/dst factors (use rlSetBlendFactorsSeparate())
+} rlBlendMode;
+// Shader location point type
+typedef enum {
+ RL_SHADER_LOC_VERTEX_POSITION = 0, // Shader location: vertex attribute: position
+ RL_SHADER_LOC_VERTEX_TEXCOORD01, // Shader location: vertex attribute: texcoord01
+ RL_SHADER_LOC_VERTEX_TEXCOORD02, // Shader location: vertex attribute: texcoord02
+ RL_SHADER_LOC_VERTEX_NORMAL, // Shader location: vertex attribute: normal
+ RL_SHADER_LOC_VERTEX_TANGENT, // Shader location: vertex attribute: tangent
+ RL_SHADER_LOC_VERTEX_COLOR, // Shader location: vertex attribute: color
+ RL_SHADER_LOC_MATRIX_MVP, // Shader location: matrix uniform: model-view-projection
+ RL_SHADER_LOC_MATRIX_VIEW, // Shader location: matrix uniform: view (camera transform)
+ RL_SHADER_LOC_MATRIX_PROJECTION, // Shader location: matrix uniform: projection
+ RL_SHADER_LOC_MATRIX_MODEL, // Shader location: matrix uniform: model (transform)
+ RL_SHADER_LOC_MATRIX_NORMAL, // Shader location: matrix uniform: normal
+ RL_SHADER_LOC_VECTOR_VIEW, // Shader location: vector uniform: view
+ RL_SHADER_LOC_COLOR_DIFFUSE, // Shader location: vector uniform: diffuse color
+ RL_SHADER_LOC_COLOR_SPECULAR, // Shader location: vector uniform: specular color
+ RL_SHADER_LOC_COLOR_AMBIENT, // Shader location: vector uniform: ambient color
+ RL_SHADER_LOC_MAP_ALBEDO, // Shader location: sampler2d texture: albedo (same as: RL_SHADER_LOC_MAP_DIFFUSE)
+ RL_SHADER_LOC_MAP_METALNESS, // Shader location: sampler2d texture: metalness (same as: RL_SHADER_LOC_MAP_SPECULAR)
+ RL_SHADER_LOC_MAP_NORMAL, // Shader location: sampler2d texture: normal
+ RL_SHADER_LOC_MAP_ROUGHNESS, // Shader location: sampler2d texture: roughness
+ RL_SHADER_LOC_MAP_OCCLUSION, // Shader location: sampler2d texture: occlusion
+ RL_SHADER_LOC_MAP_EMISSION, // Shader location: sampler2d texture: emission
+ RL_SHADER_LOC_MAP_HEIGHT, // Shader location: sampler2d texture: height
+ RL_SHADER_LOC_MAP_CUBEMAP, // Shader location: samplerCube texture: cubemap
+ RL_SHADER_LOC_MAP_IRRADIANCE, // Shader location: samplerCube texture: irradiance
+ RL_SHADER_LOC_MAP_PREFILTER, // Shader location: samplerCube texture: prefilter
+ RL_SHADER_LOC_MAP_BRDF // Shader location: sampler2d texture: brdf
+} rlShaderLocationIndex;
+// Shader uniform data type
+typedef enum {
+ RL_SHADER_UNIFORM_FLOAT = 0, // Shader uniform type: float
+ RL_SHADER_UNIFORM_VEC2, // Shader uniform type: vec2 (2 float)
+ RL_SHADER_UNIFORM_VEC3, // Shader uniform type: vec3 (3 float)
+ RL_SHADER_UNIFORM_VEC4, // Shader uniform type: vec4 (4 float)
+ RL_SHADER_UNIFORM_INT, // Shader uniform type: int
+ RL_SHADER_UNIFORM_IVEC2, // Shader uniform type: ivec2 (2 int)
+ RL_SHADER_UNIFORM_IVEC3, // Shader uniform type: ivec3 (3 int)
+ RL_SHADER_UNIFORM_IVEC4, // Shader uniform type: ivec4 (4 int)
+ RL_SHADER_UNIFORM_UINT, // Shader uniform type: unsigned int
+ RL_SHADER_UNIFORM_UIVEC2, // Shader uniform type: uivec2 (2 unsigned int)
+ RL_SHADER_UNIFORM_UIVEC3, // Shader uniform type: uivec3 (3 unsigned int)
+ RL_SHADER_UNIFORM_UIVEC4, // Shader uniform type: uivec4 (4 unsigned int)
+ RL_SHADER_UNIFORM_SAMPLER2D // Shader uniform type: sampler2d
+} rlShaderUniformDataType;
+// Shader attribute data types
+typedef enum {
+ RL_SHADER_ATTRIB_FLOAT = 0, // Shader attribute type: float
+ RL_SHADER_ATTRIB_VEC2, // Shader attribute type: vec2 (2 float)
+ RL_SHADER_ATTRIB_VEC3, // Shader attribute type: vec3 (3 float)
+ RL_SHADER_ATTRIB_VEC4 // Shader attribute type: vec4 (4 float)
+} rlShaderAttributeDataType;
+// Framebuffer attachment type
+// NOTE: By default up to 8 color channels defined, but it can be more
+typedef enum {
+ RL_ATTACHMENT_COLOR_CHANNEL0 = 0, // Framebuffer attachment type: color 0
+ RL_ATTACHMENT_COLOR_CHANNEL1 = 1, // Framebuffer attachment type: color 1
+ RL_ATTACHMENT_COLOR_CHANNEL2 = 2, // Framebuffer attachment type: color 2
+ RL_ATTACHMENT_COLOR_CHANNEL3 = 3, // Framebuffer attachment type: color 3
+ RL_ATTACHMENT_COLOR_CHANNEL4 = 4, // Framebuffer attachment type: color 4
+ RL_ATTACHMENT_COLOR_CHANNEL5 = 5, // Framebuffer attachment type: color 5
+ RL_ATTACHMENT_COLOR_CHANNEL6 = 6, // Framebuffer attachment type: color 6
+ RL_ATTACHMENT_COLOR_CHANNEL7 = 7, // Framebuffer attachment type: color 7
+ RL_ATTACHMENT_DEPTH = 100, // Framebuffer attachment type: depth
+ RL_ATTACHMENT_STENCIL = 200, // Framebuffer attachment type: stencil
+} rlFramebufferAttachType;
+// Framebuffer texture attachment type
+typedef enum {
+ RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0, // Framebuffer texture attachment type: cubemap, +X side
+ RL_ATTACHMENT_CUBEMAP_NEGATIVE_X = 1, // Framebuffer texture attachment type: cubemap, -X side
+ RL_ATTACHMENT_CUBEMAP_POSITIVE_Y = 2, // Framebuffer texture attachment type: cubemap, +Y side
+ RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y = 3, // Framebuffer texture attachment type: cubemap, -Y side
+ RL_ATTACHMENT_CUBEMAP_POSITIVE_Z = 4, // Framebuffer texture attachment type: cubemap, +Z side
+ RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z = 5, // Framebuffer texture attachment type: cubemap, -Z side
+ RL_ATTACHMENT_TEXTURE2D = 100, // Framebuffer texture attachment type: texture2d
+ RL_ATTACHMENT_RENDERBUFFER = 200, // Framebuffer texture attachment type: renderbuffer
+} rlFramebufferAttachTextureType;
+// Face culling mode
+typedef enum {
+ RL_CULL_FACE_FRONT = 0,
+ RL_CULL_FACE_BACK
+} rlCullMode;
+//------------------------------------------------------------------------------------
+// Functions Declaration - Matrix operations
+//------------------------------------------------------------------------------------
+ void rlMatrixMode(int mode); // Choose the current matrix to be transformed
+ void rlPushMatrix(void); // Push the current matrix to stack
+ void rlPopMatrix(void); // Pop latest inserted matrix from stack
+ void rlLoadIdentity(void); // Reset current matrix to identity matrix
+ void rlTranslatef(float x, float y, float z); // Multiply the current matrix by a translation matrix
+ void rlRotatef(float angle, float x, float y, float z); // Multiply the current matrix by a rotation matrix
+ void rlScalef(float x, float y, float z); // Multiply the current matrix by a scaling matrix
+ void rlMultMatrixf(const float *matf); // Multiply the current matrix by another matrix
+ void rlFrustum(double left, double right, double bottom, double top, double znear, double zfar);
+ void rlOrtho(double left, double right, double bottom, double top, double znear, double zfar);
+ void rlViewport(int x, int y, int width, int height); // Set the viewport area
+ void rlSetClipPlanes(double nearPlane, double farPlane); // Set clip planes distances
+ double rlGetCullDistanceNear(void); // Get cull plane distance near
+ double rlGetCullDistanceFar(void); // Get cull plane distance far
+//------------------------------------------------------------------------------------
+// Functions Declaration - Vertex level operations
+//------------------------------------------------------------------------------------
+ void rlBegin(int mode); // Initialize drawing mode (how to organize vertex)
+ void rlEnd(void); // Finish vertex providing
+ void rlVertex2i(int x, int y); // Define one vertex (position) - 2 int
+ void rlVertex2f(float x, float y); // Define one vertex (position) - 2 float
+ void rlVertex3f(float x, float y, float z); // Define one vertex (position) - 3 float
+ void rlTexCoord2f(float x, float y); // Define one vertex (texture coordinate) - 2 float
+ void rlNormal3f(float x, float y, float z); // Define one vertex (normal) - 3 float
+ void rlColor4ub(unsigned char r, unsigned char g, unsigned char b, unsigned char a); // Define one vertex (color) - 4 byte
+ void rlColor3f(float x, float y, float z); // Define one vertex (color) - 3 float
+ 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
+ bool rlEnableVertexArray(unsigned int vaoId); // Enable vertex array (VAO, if supported)
+ void rlDisableVertexArray(void); // Disable vertex array (VAO, if supported)
+ void rlEnableVertexBuffer(unsigned int id); // Enable vertex buffer (VBO)
+ void rlDisableVertexBuffer(void); // Disable vertex buffer (VBO)
+ void rlEnableVertexBufferElement(unsigned int id); // Enable vertex buffer element (VBO element)
+ void rlDisableVertexBufferElement(void); // Disable vertex buffer element (VBO element)
+ void rlEnableVertexAttribute(unsigned int index); // Enable vertex attribute index
+ void rlDisableVertexAttribute(unsigned int index); // Disable vertex attribute index
+// Textures state
+ void rlActiveTextureSlot(int slot); // Select and active a texture slot
+ void rlEnableTexture(unsigned int id); // Enable texture
+ void rlDisableTexture(void); // Disable texture
+ void rlEnableTextureCubemap(unsigned int id); // Enable texture cubemap
+ void rlDisableTextureCubemap(void); // Disable texture cubemap
+ void rlTextureParameters(unsigned int id, int param, int value); // Set texture parameters (filter, wrap)
+ void rlCubemapParameters(unsigned int id, int param, int value); // Set cubemap parameters (filter, wrap)
+// Shader state
+ void rlEnableShader(unsigned int id); // Enable shader program
+ void rlDisableShader(void); // Disable shader program
+// Framebuffer state
+ void rlEnableFramebuffer(unsigned int id); // Enable render texture (fbo)
+ void rlDisableFramebuffer(void); // Disable render texture (fbo), return to default framebuffer
+ unsigned int rlGetActiveFramebuffer(void); // Get the currently active render texture (fbo), 0 for default framebuffer
+ void rlActiveDrawBuffers(int count); // Activate multiple draw color buffers
+ void rlBlitFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int dstX, int dstY, int dstWidth, int dstHeight, int bufferMask); // Blit active framebuffer to main framebuffer
+ void rlBindFramebuffer(unsigned int target, unsigned int framebuffer); // Bind framebuffer (FBO)
+// General render state
+ void rlEnableColorBlend(void); // Enable color blending
+ void rlDisableColorBlend(void); // Disable color blending
+ void rlEnableDepthTest(void); // Enable depth test
+ void rlDisableDepthTest(void); // Disable depth test
+ void rlEnableDepthMask(void); // Enable depth write
+ void rlDisableDepthMask(void); // Disable depth write
+ void rlEnableBackfaceCulling(void); // Enable backface culling
+ void rlDisableBackfaceCulling(void); // Disable backface culling
+ void rlColorMask(bool r, bool g, bool b, bool a); // Color mask control
+ void rlSetCullFace(int mode); // Set face culling mode
+ void rlEnableScissorTest(void); // Enable scissor test
+ void rlDisableScissorTest(void); // Disable scissor test
+ void rlScissor(int x, int y, int width, int height); // Scissor test
+ void rlEnableWireMode(void); // Enable wire mode
+ void rlEnablePointMode(void); // Enable point mode
+ void rlDisableWireMode(void); // Disable wire (and point) mode
+ void rlSetLineWidth(float width); // Set the line drawing width
+ float rlGetLineWidth(void); // Get the line drawing width
+ void rlEnableSmoothLines(void); // Enable line aliasing
+ void rlDisableSmoothLines(void); // Disable line aliasing
+ void rlEnableStereoRender(void); // Enable stereo rendering
+ void rlDisableStereoRender(void); // Disable stereo rendering
+ bool rlIsStereoRenderEnabled(void); // Check if stereo render is enabled
+ void rlClearColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a); // Clear color buffer with color
+ void rlClearScreenBuffers(void); // Clear used screen buffers (color and depth)
+ void rlCheckErrors(void); // Check and log OpenGL error codes
+ void rlSetBlendMode(int mode); // Set blending mode
+ void rlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation); // Set blending mode factor and equation (using OpenGL factors)
+ void rlSetBlendFactorsSeparate(int glSrcRGB, int glDstRGB, int glSrcAlpha, int glDstAlpha, int glEqRGB, int glEqAlpha); // Set blending mode factors and equations separately (using OpenGL factors)
+//------------------------------------------------------------------------------------
+// Functions Declaration - rlgl functionality
+//------------------------------------------------------------------------------------
+// rlgl initialization functions
+ void rlglInit(int width, int height); // Initialize rlgl (buffers, shaders, textures, states)
+ void rlglClose(void); // De-initialize rlgl (buffers, shaders, textures)
+ void rlLoadExtensions(void *loader); // Load OpenGL extensions (loader function required)
+ int rlGetVersion(void); // Get current OpenGL version
+ void rlSetFramebufferWidth(int width); // Set current framebuffer width
+ int rlGetFramebufferWidth(void); // Get default framebuffer width
+ void rlSetFramebufferHeight(int height); // Set current framebuffer height
+ int rlGetFramebufferHeight(void); // Get default framebuffer height
+ unsigned int rlGetTextureIdDefault(void); // Get default texture id
+ unsigned int rlGetShaderIdDefault(void); // Get default shader id
+ int *rlGetShaderLocsDefault(void); // Get default shader locations
+// 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
+ rlRenderBatch rlLoadRenderBatch(int numBuffers, int bufferElements); // Load a render batch system
+ void rlUnloadRenderBatch(rlRenderBatch batch); // Unload render batch system
+ void rlDrawRenderBatch(rlRenderBatch *batch); // Draw render batch data (Update->Draw->Reset)
+ void rlSetRenderBatchActive(rlRenderBatch *batch); // Set the active render batch for rlgl (NULL for default internal)
+ void rlDrawRenderBatchActive(void); // Update and draw internal render batch
+ bool rlCheckRenderBatchLimit(int vCount); // Check internal buffer overflow for a given number of vertex
+ void rlSetTexture(unsigned int id); // Set current texture for render batch and check buffers limits
+//------------------------------------------------------------------------------------------------------------------------
+// Vertex buffers management
+ unsigned int rlLoadVertexArray(void); // Load vertex array (vao) if supported
+ unsigned int rlLoadVertexBuffer(const void *buffer, int size, bool dynamic); // Load a vertex buffer object
+ unsigned int rlLoadVertexBufferElement(const void *buffer, int size, bool dynamic); // Load vertex buffer elements object
+ void rlUpdateVertexBuffer(unsigned int bufferId, const void *data, int dataSize, int offset); // Update vertex buffer object data on GPU buffer
+ void rlUpdateVertexBufferElements(unsigned int id, const void *data, int dataSize, int offset); // Update vertex buffer elements data on GPU buffer
+ void rlUnloadVertexArray(unsigned int vaoId); // Unload vertex array (vao)
+ void rlUnloadVertexBuffer(unsigned int vboId); // Unload vertex buffer object
+ void rlSetVertexAttribute(unsigned int index, int compSize, int type, bool normalized, int stride, int offset); // Set vertex attribute data configuration
+ void rlSetVertexAttributeDivisor(unsigned int index, int divisor); // Set vertex attribute data divisor
+ void rlSetVertexAttributeDefault(int locIndex, const void *value, int attribType, int count); // Set vertex attribute default value, when attribute to provided
+ void rlDrawVertexArray(int offset, int count); // Draw vertex array (currently active vao)
+ void rlDrawVertexArrayElements(int offset, int count, const void *buffer); // Draw vertex array elements
+ void rlDrawVertexArrayInstanced(int offset, int count, int instances); // Draw vertex array (currently active vao) with instancing
+ void rlDrawVertexArrayElementsInstanced(int offset, int count, const void *buffer, int instances); // Draw vertex array elements with instancing
+// Textures management
+ unsigned int rlLoadTexture(const void *data, int width, int height, int format, int mipmapCount); // Load texture data
+ unsigned int rlLoadTextureDepth(int width, int height, bool useRenderBuffer); // Load depth texture/renderbuffer (to be attached to fbo)
+ unsigned int rlLoadTextureCubemap(const void *data, int size, int format, int mipmapCount); // Load texture cubemap data
+ void rlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void *data); // Update texture with new data on GPU
+ void rlGetGlTextureFormats(int format, unsigned int *glInternalFormat, unsigned int *glFormat, unsigned int *glType); // Get OpenGL internal formats
+ const char *rlGetPixelFormatName(unsigned int format); // Get name string for pixel format
+ void rlUnloadTexture(unsigned int id); // Unload texture from GPU memory
+ void rlGenTextureMipmaps(unsigned int id, int width, int height, int format, int *mipmaps); // Generate mipmap data for selected texture
+ void *rlReadTexturePixels(unsigned int id, int width, int height, int format); // Read texture pixel data
+ unsigned char *rlReadScreenPixels(int width, int height); // Read screen pixel data (color buffer)
+// Framebuffer management (fbo)
+ unsigned int rlLoadFramebuffer(void); // Load an empty framebuffer
+ void rlFramebufferAttach(unsigned int fboId, unsigned int texId, int attachType, int texType, int mipLevel); // Attach texture/renderbuffer to a framebuffer
+ bool rlFramebufferComplete(unsigned int id); // Verify framebuffer is complete
+ void rlUnloadFramebuffer(unsigned int id); // Delete framebuffer from GPU
+// Shaders management
+ unsigned int rlLoadShaderCode(const char *vsCode, const char *fsCode); // Load shader from code strings
+ unsigned int rlCompileShader(const char *shaderCode, int type); // Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)
+ unsigned int rlLoadShaderProgram(unsigned int vShaderId, unsigned int fShaderId); // Load custom shader program
+ void rlUnloadShaderProgram(unsigned int id); // Unload shader program
+ int rlGetLocationUniform(unsigned int shaderId, const char *uniformName); // Get shader location uniform
+ int rlGetLocationAttrib(unsigned int shaderId, const char *attribName); // Get shader location attribute
+ void rlSetUniform(int locIndex, const void *value, int uniformType, int count); // Set shader value uniform
+ void rlSetUniformMatrix(int locIndex, Matrix mat); // Set shader value matrix
+ void rlSetUniformMatrices(int locIndex, const Matrix *mat, int count); // Set shader value matrices
+ void rlSetUniformSampler(int locIndex, unsigned int textureId); // Set shader value sampler
+ void rlSetShader(unsigned int id, int *locs); // Set shader currently active (id and locations)
+// Compute shader management
+ unsigned int rlLoadComputeShaderProgram(unsigned int shaderId); // Load compute shader program
+ void rlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ); // Dispatch compute shader (equivalent to *draw* for graphics pipeline)
+// Shader buffer storage object management (ssbo)
+ unsigned int rlLoadShaderBuffer(unsigned int size, const void *data, int usageHint); // Load shader storage buffer object (SSBO)
+ void rlUnloadShaderBuffer(unsigned int ssboId); // Unload shader storage buffer object (SSBO)
+ void rlUpdateShaderBuffer(unsigned int id, const void *data, unsigned int dataSize, unsigned int offset); // Update SSBO buffer data
+ void rlBindShaderBuffer(unsigned int id, unsigned int index); // Bind SSBO buffer
+ void rlReadShaderBuffer(unsigned int id, void *dest, unsigned int count, unsigned int offset); // Read SSBO buffer data (GPU->CPU)
+ void rlCopyShaderBuffer(unsigned int destId, unsigned int srcId, unsigned int destOffset, unsigned int srcOffset, unsigned int count); // Copy SSBO data between buffers
+ unsigned int rlGetShaderBufferSize(unsigned int id); // Get SSBO buffer size
+// Buffer management
+ void rlBindImageTexture(unsigned int id, unsigned int index, int format, bool readonly); // Bind image texture
+// Matrix state management
+ Matrix rlGetMatrixModelview(void); // Get internal modelview matrix
+ Matrix rlGetMatrixProjection(void); // Get internal projection matrix
+ Matrix rlGetMatrixTransform(void); // Get internal accumulated transform matrix
+ Matrix rlGetMatrixProjectionStereo(int eye); // Get internal projection matrix for stereo render (selected eye)
+ Matrix rlGetMatrixViewOffsetStereo(int eye); // Get internal view offset matrix for stereo render (selected eye)
+ void rlSetMatrixProjection(Matrix proj); // Set a custom projection matrix (replaces internal projection matrix)
+ void rlSetMatrixModelview(Matrix view); // Set a custom modelview matrix (replaces internal modelview matrix)
+ void rlSetMatrixProjectionStereo(Matrix right, Matrix left); // Set eyes projection matrices for stereo rendering
+ void rlSetMatrixViewOffsetStereo(Matrix right, Matrix left); // Set eyes view offsets matrices for stereo rendering
+// Quick and dirty cube/quad buffers load->draw->unload
+ void rlLoadDrawCube(void); // Load and draw a cube
+ void rlLoadDrawQuad(void); // Load and draw a quad
+/***********************************************************************************
+*
+* RLGL IMPLEMENTATION
+*
+************************************************************************************/
\ No newline at end of file
diff --git a/raylib/static/__init__.py b/raylib/static/__init__.py
deleted file mode 100644
index 1146208..0000000
--- a/raylib/static/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from ._raylib_cffi import ffi, lib as rl
-from _raylib_cffi.lib import *
-from raylib.colors import *
-import cffi
-
-print("RAYLIB STATIC LOADED")
diff --git a/raylib/static/_raylib_cffi.c b/raylib/static/_raylib_cffi.c
deleted file mode 100644
index a44ab1b..0000000
--- a/raylib/static/_raylib_cffi.c
+++ /dev/null
@@ -1,22895 +0,0 @@
-#define _CFFI_
-
-/* We try to define Py_LIMITED_API before including Python.h.
-
- Mess: we can only define it if Py_DEBUG, Py_TRACE_REFS and
- Py_REF_DEBUG are not defined. This is a best-effort approximation:
- we can learn about Py_DEBUG from pyconfig.h, but it is unclear if
- the same works for the other two macros. Py_DEBUG implies them,
- but not the other way around.
-
- Issue #350 is still open: on Windows, the code here causes it to link
- with PYTHON36.DLL (for example) instead of PYTHON3.DLL. A fix was
- attempted in 164e526a5515 and 14ce6985e1c3, but reverted: virtualenv
- does not make PYTHON3.DLL available, and so the "correctly" compiled
- version would not run inside a virtualenv. We will re-apply the fix
- after virtualenv has been fixed for some time. For explanation, see
- issue #355. For a workaround if you want PYTHON3.DLL and don't worry
- about virtualenv, see issue #350. See also 'py_limited_api' in
- setuptools_ext.py.
-*/
-#if !defined(_CFFI_USE_EMBEDDING) && !defined(Py_LIMITED_API)
-# include
-# if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG)
-# define Py_LIMITED_API
-# endif
-#endif
-
-#include
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include
-
-/* This part is from file 'cffi/parse_c_type.h'. It is copied at the
- beginning of C sources generated by CFFI's ffi.set_source(). */
-
-typedef void *_cffi_opcode_t;
-
-#define _CFFI_OP(opcode, arg) (_cffi_opcode_t)(opcode | (((uintptr_t)(arg)) << 8))
-#define _CFFI_GETOP(cffi_opcode) ((unsigned char)(uintptr_t)cffi_opcode)
-#define _CFFI_GETARG(cffi_opcode) (((intptr_t)cffi_opcode) >> 8)
-
-#define _CFFI_OP_PRIMITIVE 1
-#define _CFFI_OP_POINTER 3
-#define _CFFI_OP_ARRAY 5
-#define _CFFI_OP_OPEN_ARRAY 7
-#define _CFFI_OP_STRUCT_UNION 9
-#define _CFFI_OP_ENUM 11
-#define _CFFI_OP_FUNCTION 13
-#define _CFFI_OP_FUNCTION_END 15
-#define _CFFI_OP_NOOP 17
-#define _CFFI_OP_BITFIELD 19
-#define _CFFI_OP_TYPENAME 21
-#define _CFFI_OP_CPYTHON_BLTN_V 23 // varargs
-#define _CFFI_OP_CPYTHON_BLTN_N 25 // noargs
-#define _CFFI_OP_CPYTHON_BLTN_O 27 // O (i.e. a single arg)
-#define _CFFI_OP_CONSTANT 29
-#define _CFFI_OP_CONSTANT_INT 31
-#define _CFFI_OP_GLOBAL_VAR 33
-#define _CFFI_OP_DLOPEN_FUNC 35
-#define _CFFI_OP_DLOPEN_CONST 37
-#define _CFFI_OP_GLOBAL_VAR_F 39
-#define _CFFI_OP_EXTERN_PYTHON 41
-
-#define _CFFI_PRIM_VOID 0
-#define _CFFI_PRIM_BOOL 1
-#define _CFFI_PRIM_CHAR 2
-#define _CFFI_PRIM_SCHAR 3
-#define _CFFI_PRIM_UCHAR 4
-#define _CFFI_PRIM_SHORT 5
-#define _CFFI_PRIM_USHORT 6
-#define _CFFI_PRIM_INT 7
-#define _CFFI_PRIM_UINT 8
-#define _CFFI_PRIM_LONG 9
-#define _CFFI_PRIM_ULONG 10
-#define _CFFI_PRIM_LONGLONG 11
-#define _CFFI_PRIM_ULONGLONG 12
-#define _CFFI_PRIM_FLOAT 13
-#define _CFFI_PRIM_DOUBLE 14
-#define _CFFI_PRIM_LONGDOUBLE 15
-
-#define _CFFI_PRIM_WCHAR 16
-#define _CFFI_PRIM_INT8 17
-#define _CFFI_PRIM_UINT8 18
-#define _CFFI_PRIM_INT16 19
-#define _CFFI_PRIM_UINT16 20
-#define _CFFI_PRIM_INT32 21
-#define _CFFI_PRIM_UINT32 22
-#define _CFFI_PRIM_INT64 23
-#define _CFFI_PRIM_UINT64 24
-#define _CFFI_PRIM_INTPTR 25
-#define _CFFI_PRIM_UINTPTR 26
-#define _CFFI_PRIM_PTRDIFF 27
-#define _CFFI_PRIM_SIZE 28
-#define _CFFI_PRIM_SSIZE 29
-#define _CFFI_PRIM_INT_LEAST8 30
-#define _CFFI_PRIM_UINT_LEAST8 31
-#define _CFFI_PRIM_INT_LEAST16 32
-#define _CFFI_PRIM_UINT_LEAST16 33
-#define _CFFI_PRIM_INT_LEAST32 34
-#define _CFFI_PRIM_UINT_LEAST32 35
-#define _CFFI_PRIM_INT_LEAST64 36
-#define _CFFI_PRIM_UINT_LEAST64 37
-#define _CFFI_PRIM_INT_FAST8 38
-#define _CFFI_PRIM_UINT_FAST8 39
-#define _CFFI_PRIM_INT_FAST16 40
-#define _CFFI_PRIM_UINT_FAST16 41
-#define _CFFI_PRIM_INT_FAST32 42
-#define _CFFI_PRIM_UINT_FAST32 43
-#define _CFFI_PRIM_INT_FAST64 44
-#define _CFFI_PRIM_UINT_FAST64 45
-#define _CFFI_PRIM_INTMAX 46
-#define _CFFI_PRIM_UINTMAX 47
-#define _CFFI_PRIM_FLOATCOMPLEX 48
-#define _CFFI_PRIM_DOUBLECOMPLEX 49
-#define _CFFI_PRIM_CHAR16 50
-#define _CFFI_PRIM_CHAR32 51
-
-#define _CFFI__NUM_PRIM 52
-#define _CFFI__UNKNOWN_PRIM (-1)
-#define _CFFI__UNKNOWN_FLOAT_PRIM (-2)
-#define _CFFI__UNKNOWN_LONG_DOUBLE (-3)
-
-#define _CFFI__IO_FILE_STRUCT (-1)
-
-
-struct _cffi_global_s {
- const char *name;
- void *address;
- _cffi_opcode_t type_op;
- void *size_or_direct_fn; // OP_GLOBAL_VAR: size, or 0 if unknown
- // OP_CPYTHON_BLTN_*: addr of direct function
-};
-
-struct _cffi_getconst_s {
- unsigned long long value;
- const struct _cffi_type_context_s *ctx;
- int gindex;
-};
-
-struct _cffi_struct_union_s {
- const char *name;
- int type_index; // -> _cffi_types, on a OP_STRUCT_UNION
- int flags; // _CFFI_F_* flags below
- size_t size;
- int alignment;
- int first_field_index; // -> _cffi_fields array
- int num_fields;
-};
-#define _CFFI_F_UNION 0x01 // is a union, not a struct
-#define _CFFI_F_CHECK_FIELDS 0x02 // complain if fields are not in the
- // "standard layout" or if some are missing
-#define _CFFI_F_PACKED 0x04 // for CHECK_FIELDS, assume a packed struct
-#define _CFFI_F_EXTERNAL 0x08 // in some other ffi.include()
-#define _CFFI_F_OPAQUE 0x10 // opaque
-
-struct _cffi_field_s {
- const char *name;
- size_t field_offset;
- size_t field_size;
- _cffi_opcode_t field_type_op;
-};
-
-struct _cffi_enum_s {
- const char *name;
- int type_index; // -> _cffi_types, on a OP_ENUM
- int type_prim; // _CFFI_PRIM_xxx
- const char *enumerators; // comma-delimited string
-};
-
-struct _cffi_typename_s {
- const char *name;
- int type_index; /* if opaque, points to a possibly artificial
- OP_STRUCT which is itself opaque */
-};
-
-struct _cffi_type_context_s {
- _cffi_opcode_t *types;
- const struct _cffi_global_s *globals;
- const struct _cffi_field_s *fields;
- const struct _cffi_struct_union_s *struct_unions;
- const struct _cffi_enum_s *enums;
- const struct _cffi_typename_s *typenames;
- int num_globals;
- int num_struct_unions;
- int num_enums;
- int num_typenames;
- const char *const *includes;
- int num_types;
- int flags; /* future extension */
-};
-
-struct _cffi_parse_info_s {
- const struct _cffi_type_context_s *ctx;
- _cffi_opcode_t *output;
- unsigned int output_size;
- size_t error_location;
- const char *error_message;
-};
-
-struct _cffi_externpy_s {
- const char *name;
- size_t size_of_result;
- void *reserved1, *reserved2;
-};
-
-#ifdef _CFFI_INTERNAL
-static int parse_c_type(struct _cffi_parse_info_s *info, const char *input);
-static int search_in_globals(const struct _cffi_type_context_s *ctx,
- const char *search, size_t search_len);
-static int search_in_struct_unions(const struct _cffi_type_context_s *ctx,
- const char *search, size_t search_len);
-#endif
-
-/* this block of #ifs should be kept exactly identical between
- c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py
- and cffi/_cffi_include.h */
-#if defined(_MSC_VER)
-# include /* for alloca() */
-# if _MSC_VER < 1600 /* MSVC < 2010 */
- typedef __int8 int8_t;
- typedef __int16 int16_t;
- typedef __int32 int32_t;
- typedef __int64 int64_t;
- typedef unsigned __int8 uint8_t;
- typedef unsigned __int16 uint16_t;
- typedef unsigned __int32 uint32_t;
- typedef unsigned __int64 uint64_t;
- typedef __int8 int_least8_t;
- typedef __int16 int_least16_t;
- typedef __int32 int_least32_t;
- typedef __int64 int_least64_t;
- typedef unsigned __int8 uint_least8_t;
- typedef unsigned __int16 uint_least16_t;
- typedef unsigned __int32 uint_least32_t;
- typedef unsigned __int64 uint_least64_t;
- typedef __int8 int_fast8_t;
- typedef __int16 int_fast16_t;
- typedef __int32 int_fast32_t;
- typedef __int64 int_fast64_t;
- typedef unsigned __int8 uint_fast8_t;
- typedef unsigned __int16 uint_fast16_t;
- typedef unsigned __int32 uint_fast32_t;
- typedef unsigned __int64 uint_fast64_t;
- typedef __int64 intmax_t;
- typedef unsigned __int64 uintmax_t;
-# else
-# include
-# endif
-# if _MSC_VER < 1800 /* MSVC < 2013 */
-# ifndef __cplusplus
- typedef unsigned char _Bool;
-# endif
-# endif
-#else
-# include
-# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux)
-# include
-# endif
-#endif
-
-#ifdef __GNUC__
-# define _CFFI_UNUSED_FN __attribute__((unused))
-#else
-# define _CFFI_UNUSED_FN /* nothing */
-#endif
-
-#ifdef __cplusplus
-# ifndef _Bool
- typedef bool _Bool; /* semi-hackish: C++ has no _Bool; bool is builtin */
-# endif
-#endif
-
-/********** CPython-specific section **********/
-#ifndef PYPY_VERSION
-
-
-#if PY_MAJOR_VERSION >= 3
-# define PyInt_FromLong PyLong_FromLong
-#endif
-
-#define _cffi_from_c_double PyFloat_FromDouble
-#define _cffi_from_c_float PyFloat_FromDouble
-#define _cffi_from_c_long PyInt_FromLong
-#define _cffi_from_c_ulong PyLong_FromUnsignedLong
-#define _cffi_from_c_longlong PyLong_FromLongLong
-#define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong
-#define _cffi_from_c__Bool PyBool_FromLong
-
-#define _cffi_to_c_double PyFloat_AsDouble
-#define _cffi_to_c_float PyFloat_AsDouble
-
-#define _cffi_from_c_int(x, type) \
- (((type)-1) > 0 ? /* unsigned */ \
- (sizeof(type) < sizeof(long) ? \
- PyInt_FromLong((long)x) : \
- sizeof(type) == sizeof(long) ? \
- PyLong_FromUnsignedLong((unsigned long)x) : \
- PyLong_FromUnsignedLongLong((unsigned long long)x)) : \
- (sizeof(type) <= sizeof(long) ? \
- PyInt_FromLong((long)x) : \
- PyLong_FromLongLong((long long)x)))
-
-#define _cffi_to_c_int(o, type) \
- ((type)( \
- sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o) \
- : (type)_cffi_to_c_i8(o)) : \
- sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o) \
- : (type)_cffi_to_c_i16(o)) : \
- sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o) \
- : (type)_cffi_to_c_i32(o)) : \
- sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o) \
- : (type)_cffi_to_c_i64(o)) : \
- (Py_FatalError("unsupported size for type " #type), (type)0)))
-
-#define _cffi_to_c_i8 \
- ((int(*)(PyObject *))_cffi_exports[1])
-#define _cffi_to_c_u8 \
- ((int(*)(PyObject *))_cffi_exports[2])
-#define _cffi_to_c_i16 \
- ((int(*)(PyObject *))_cffi_exports[3])
-#define _cffi_to_c_u16 \
- ((int(*)(PyObject *))_cffi_exports[4])
-#define _cffi_to_c_i32 \
- ((int(*)(PyObject *))_cffi_exports[5])
-#define _cffi_to_c_u32 \
- ((unsigned int(*)(PyObject *))_cffi_exports[6])
-#define _cffi_to_c_i64 \
- ((long long(*)(PyObject *))_cffi_exports[7])
-#define _cffi_to_c_u64 \
- ((unsigned long long(*)(PyObject *))_cffi_exports[8])
-#define _cffi_to_c_char \
- ((int(*)(PyObject *))_cffi_exports[9])
-#define _cffi_from_c_pointer \
- ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[10])
-#define _cffi_to_c_pointer \
- ((char *(*)(PyObject *, struct _cffi_ctypedescr *))_cffi_exports[11])
-#define _cffi_get_struct_layout \
- not used any more
-#define _cffi_restore_errno \
- ((void(*)(void))_cffi_exports[13])
-#define _cffi_save_errno \
- ((void(*)(void))_cffi_exports[14])
-#define _cffi_from_c_char \
- ((PyObject *(*)(char))_cffi_exports[15])
-#define _cffi_from_c_deref \
- ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[16])
-#define _cffi_to_c \
- ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[17])
-#define _cffi_from_c_struct \
- ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[18])
-#define _cffi_to_c_wchar_t \
- ((_cffi_wchar_t(*)(PyObject *))_cffi_exports[19])
-#define _cffi_from_c_wchar_t \
- ((PyObject *(*)(_cffi_wchar_t))_cffi_exports[20])
-#define _cffi_to_c_long_double \
- ((long double(*)(PyObject *))_cffi_exports[21])
-#define _cffi_to_c__Bool \
- ((_Bool(*)(PyObject *))_cffi_exports[22])
-#define _cffi_prepare_pointer_call_argument \
- ((Py_ssize_t(*)(struct _cffi_ctypedescr *, \
- PyObject *, char **))_cffi_exports[23])
-#define _cffi_convert_array_from_object \
- ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[24])
-#define _CFFI_CPIDX 25
-#define _cffi_call_python \
- ((void(*)(struct _cffi_externpy_s *, char *))_cffi_exports[_CFFI_CPIDX])
-#define _cffi_to_c_wchar3216_t \
- ((int(*)(PyObject *))_cffi_exports[26])
-#define _cffi_from_c_wchar3216_t \
- ((PyObject *(*)(int))_cffi_exports[27])
-#define _CFFI_NUM_EXPORTS 28
-
-struct _cffi_ctypedescr;
-
-static void *_cffi_exports[_CFFI_NUM_EXPORTS];
-
-#define _cffi_type(index) ( \
- assert((((uintptr_t)_cffi_types[index]) & 1) == 0), \
- (struct _cffi_ctypedescr *)_cffi_types[index])
-
-static PyObject *_cffi_init(const char *module_name, Py_ssize_t version,
- const struct _cffi_type_context_s *ctx)
-{
- PyObject *module, *o_arg, *new_module;
- void *raw[] = {
- (void *)module_name,
- (void *)version,
- (void *)_cffi_exports,
- (void *)ctx,
- };
-
- module = PyImport_ImportModule("_cffi_backend");
- if (module == NULL)
- goto failure;
-
- o_arg = PyLong_FromVoidPtr((void *)raw);
- if (o_arg == NULL)
- goto failure;
-
- new_module = PyObject_CallMethod(
- module, (char *)"_init_cffi_1_0_external_module", (char *)"O", o_arg);
-
- Py_DECREF(o_arg);
- Py_DECREF(module);
- return new_module;
-
- failure:
- Py_XDECREF(module);
- return NULL;
-}
-
-
-#ifdef HAVE_WCHAR_H
-typedef wchar_t _cffi_wchar_t;
-#else
-typedef uint16_t _cffi_wchar_t; /* same random pick as _cffi_backend.c */
-#endif
-
-_CFFI_UNUSED_FN static uint16_t _cffi_to_c_char16_t(PyObject *o)
-{
- if (sizeof(_cffi_wchar_t) == 2)
- return (uint16_t)_cffi_to_c_wchar_t(o);
- else
- return (uint16_t)_cffi_to_c_wchar3216_t(o);
-}
-
-_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char16_t(uint16_t x)
-{
- if (sizeof(_cffi_wchar_t) == 2)
- return _cffi_from_c_wchar_t((_cffi_wchar_t)x);
- else
- return _cffi_from_c_wchar3216_t((int)x);
-}
-
-_CFFI_UNUSED_FN static int _cffi_to_c_char32_t(PyObject *o)
-{
- if (sizeof(_cffi_wchar_t) == 4)
- return (int)_cffi_to_c_wchar_t(o);
- else
- return (int)_cffi_to_c_wchar3216_t(o);
-}
-
-_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char32_t(unsigned int x)
-{
- if (sizeof(_cffi_wchar_t) == 4)
- return _cffi_from_c_wchar_t((_cffi_wchar_t)x);
- else
- return _cffi_from_c_wchar3216_t((int)x);
-}
-
-union _cffi_union_alignment_u {
- unsigned char m_char;
- unsigned short m_short;
- unsigned int m_int;
- unsigned long m_long;
- unsigned long long m_longlong;
- float m_float;
- double m_double;
- long double m_longdouble;
-};
-
-struct _cffi_freeme_s {
- struct _cffi_freeme_s *next;
- union _cffi_union_alignment_u alignment;
-};
-
-_CFFI_UNUSED_FN static int
-_cffi_convert_array_argument(struct _cffi_ctypedescr *ctptr, PyObject *arg,
- char **output_data, Py_ssize_t datasize,
- struct _cffi_freeme_s **freeme)
-{
- char *p;
- if (datasize < 0)
- return -1;
-
- p = *output_data;
- if (p == NULL) {
- struct _cffi_freeme_s *fp = (struct _cffi_freeme_s *)PyObject_Malloc(
- offsetof(struct _cffi_freeme_s, alignment) + (size_t)datasize);
- if (fp == NULL)
- return -1;
- fp->next = *freeme;
- *freeme = fp;
- p = *output_data = (char *)&fp->alignment;
- }
- memset((void *)p, 0, (size_t)datasize);
- return _cffi_convert_array_from_object(p, ctptr, arg);
-}
-
-_CFFI_UNUSED_FN static void
-_cffi_free_array_arguments(struct _cffi_freeme_s *freeme)
-{
- do {
- void *p = (void *)freeme;
- freeme = freeme->next;
- PyObject_Free(p);
- } while (freeme != NULL);
-}
-
-/********** end CPython-specific section **********/
-#else
-_CFFI_UNUSED_FN
-static void (*_cffi_call_python_org)(struct _cffi_externpy_s *, char *);
-# define _cffi_call_python _cffi_call_python_org
-#endif
-
-
-#define _cffi_array_len(array) (sizeof(array) / sizeof((array)[0]))
-
-#define _cffi_prim_int(size, sign) \
- ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8 : _CFFI_PRIM_UINT8) : \
- (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) : \
- (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) : \
- (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) : \
- _CFFI__UNKNOWN_PRIM)
-
-#define _cffi_prim_float(size) \
- ((size) == sizeof(float) ? _CFFI_PRIM_FLOAT : \
- (size) == sizeof(double) ? _CFFI_PRIM_DOUBLE : \
- (size) == sizeof(long double) ? _CFFI__UNKNOWN_LONG_DOUBLE : \
- _CFFI__UNKNOWN_FLOAT_PRIM)
-
-#define _cffi_check_int(got, got_nonpos, expected) \
- ((got_nonpos) == (expected <= 0) && \
- (got) == (unsigned long long)expected)
-
-#ifdef MS_WIN32
-# define _cffi_stdcall __stdcall
-#else
-# define _cffi_stdcall /* nothing */
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-/************************************************************/
-
-
- #include "../raylib.h"
-
-
-/************************************************************/
-
-static void *_cffi_types[] = {
-/* 0 */ _CFFI_OP(_CFFI_OP_FUNCTION, 384), // AudioStream()(unsigned int, unsigned int, unsigned int)
-/* 1 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 8), // unsigned int
-/* 2 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 8),
-/* 3 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 8),
-/* 4 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 5 */ _CFFI_OP(_CFFI_OP_FUNCTION, 387), // BoundingBox()(Mesh)
-/* 6 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 12), // Mesh
-/* 7 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 8 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1148), // CharInfo *()(char const *, int, int *, int, int)
-/* 9 */ _CFFI_OP(_CFFI_OP_POINTER, 337), // char const *
-/* 10 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7), // int
-/* 11 */ _CFFI_OP(_CFFI_OP_POINTER, 10), // int *
-/* 12 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 13 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 14 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 15 */ _CFFI_OP(_CFFI_OP_FUNCTION, 61), // Color *()(Image)
-/* 16 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 8), // Image
-/* 17 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 18 */ _CFFI_OP(_CFFI_OP_FUNCTION, 61), // Color *()(Image, int, int *)
-/* 19 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 20 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 21 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 22 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 23 */ _CFFI_OP(_CFFI_OP_FUNCTION, 24), // Color()(Color, float)
-/* 24 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 6), // Color
-/* 25 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13), // float
-/* 26 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 27 */ _CFFI_OP(_CFFI_OP_FUNCTION, 24), // Color()(Vector3)
-/* 28 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 26), // Vector3
-/* 29 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 30 */ _CFFI_OP(_CFFI_OP_FUNCTION, 24), // Color()(Vector4)
-/* 31 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 27), // Vector4
-/* 32 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 33 */ _CFFI_OP(_CFFI_OP_FUNCTION, 24), // Color()(int)
-/* 34 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 35 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 36 */ _CFFI_OP(_CFFI_OP_FUNCTION, 66), // Font()(Image, Color, int)
-/* 37 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 38 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 39 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 40 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 41 */ _CFFI_OP(_CFFI_OP_FUNCTION, 66), // Font()(char const *)
-/* 42 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 43 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 44 */ _CFFI_OP(_CFFI_OP_FUNCTION, 66), // Font()(char const *, int, int *, int)
-/* 45 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 46 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 47 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 48 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 49 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 50 */ _CFFI_OP(_CFFI_OP_FUNCTION, 66), // Font()(void)
-/* 51 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 52 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(CharInfo const *, Rectangle * *, int, int, int, int)
-/* 53 */ _CFFI_OP(_CFFI_OP_POINTER, 1149), // CharInfo const *
-/* 54 */ _CFFI_OP(_CFFI_OP_POINTER, 1166), // Rectangle * *
-/* 55 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 56 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 57 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 58 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 59 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 60 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(Color *, int, int)
-/* 61 */ _CFFI_OP(_CFFI_OP_POINTER, 24), // Color *
-/* 62 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 63 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 64 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 65 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(Font, char const *, float, float, Color)
-/* 66 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 7), // Font
-/* 67 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 68 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 69 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 70 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 71 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 72 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(Image)
-/* 73 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 74 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 75 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(Image, Rectangle)
-/* 76 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 77 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 19), // Rectangle
-/* 78 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 79 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(Texture2D)
-/* 80 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 23), // Texture2D
-/* 81 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 82 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(char const *)
-/* 83 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 84 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 85 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(char const *, int, Color)
-/* 86 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 87 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 88 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 89 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 90 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(char const *, int, int, int, int)
-/* 91 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 92 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 93 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 94 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 95 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 96 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 97 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(int, int, Color)
-/* 98 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 99 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 100 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 101 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 102 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(int, int, Color, Color)
-/* 103 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 104 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 105 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 106 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 107 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 108 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(int, int, float)
-/* 109 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 110 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 111 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 112 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 113 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(int, int, float, Color, Color)
-/* 114 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 115 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 116 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 117 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 118 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 119 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 120 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(int, int, int)
-/* 121 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 122 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 123 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 124 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 125 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(int, int, int, int, Color, Color)
-/* 126 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 127 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 128 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 129 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 130 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 131 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 132 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 133 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(int, int, int, int, float)
-/* 134 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 135 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 136 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 137 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 138 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 139 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 140 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(void *, int, int, int)
-/* 141 */ _CFFI_OP(_CFFI_OP_POINTER, 1192), // void *
-/* 142 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 143 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 144 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 145 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 146 */ _CFFI_OP(_CFFI_OP_FUNCTION, 16), // Image()(void)
-/* 147 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 148 */ _CFFI_OP(_CFFI_OP_FUNCTION, 699), // Material *()(char const *, int *)
-/* 149 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 150 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 151 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 152 */ _CFFI_OP(_CFFI_OP_FUNCTION, 704), // Material()(void)
-/* 153 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 154 */ _CFFI_OP(_CFFI_OP_FUNCTION, 707), // Matrix()(Camera2D)
-/* 155 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 3), // Camera2D
-/* 156 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 157 */ _CFFI_OP(_CFFI_OP_FUNCTION, 707), // Matrix()(Camera3D)
-/* 158 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 4), // Camera3D
-/* 159 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 160 */ _CFFI_OP(_CFFI_OP_FUNCTION, 707), // Matrix()(void)
-/* 161 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 162 */ _CFFI_OP(_CFFI_OP_FUNCTION, 710), // Mesh *()(char const *, int *)
-/* 163 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 164 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 165 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 166 */ _CFFI_OP(_CFFI_OP_FUNCTION, 6), // Mesh()(Image, Vector3)
-/* 167 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 168 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 169 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 170 */ _CFFI_OP(_CFFI_OP_FUNCTION, 6), // Mesh()(float, float, float)
-/* 171 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 172 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 173 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 174 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 175 */ _CFFI_OP(_CFFI_OP_FUNCTION, 6), // Mesh()(float, float, int)
-/* 176 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 177 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 178 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 179 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 180 */ _CFFI_OP(_CFFI_OP_FUNCTION, 6), // Mesh()(float, float, int, int)
-/* 181 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 182 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 183 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 184 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 185 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 186 */ _CFFI_OP(_CFFI_OP_FUNCTION, 6), // Mesh()(float, int, int)
-/* 187 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 188 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 189 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 190 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 191 */ _CFFI_OP(_CFFI_OP_FUNCTION, 6), // Mesh()(int, float)
-/* 192 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 193 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 194 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 195 */ _CFFI_OP(_CFFI_OP_FUNCTION, 214), // Model()(Mesh)
-/* 196 */ _CFFI_OP(_CFFI_OP_NOOP, 6),
-/* 197 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 198 */ _CFFI_OP(_CFFI_OP_FUNCTION, 214), // Model()(char const *)
-/* 199 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 200 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 201 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1161), // ModelAnimation *()(char const *, int *)
-/* 202 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 203 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 204 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 205 */ _CFFI_OP(_CFFI_OP_FUNCTION, 371), // Music()(char const *)
-/* 206 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 207 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 208 */ _CFFI_OP(_CFFI_OP_FUNCTION, 213), // Ray()(Vector2, Camera3D)
-/* 209 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 25), // Vector2
-/* 210 */ _CFFI_OP(_CFFI_OP_NOOP, 158),
-/* 211 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 212 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1165), // RayHitInfo()(Ray, Model)
-/* 213 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 17), // Ray
-/* 214 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 13), // Model
-/* 215 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 216 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1165), // RayHitInfo()(Ray, Vector3, Vector3, Vector3)
-/* 217 */ _CFFI_OP(_CFFI_OP_NOOP, 213),
-/* 218 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 219 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 220 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 221 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 222 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1165), // RayHitInfo()(Ray, float)
-/* 223 */ _CFFI_OP(_CFFI_OP_NOOP, 213),
-/* 224 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 225 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 226 */ _CFFI_OP(_CFFI_OP_FUNCTION, 77), // Rectangle()(Image, float)
-/* 227 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 228 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 229 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 230 */ _CFFI_OP(_CFFI_OP_FUNCTION, 77), // Rectangle()(Rectangle, Rectangle)
-/* 231 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 232 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 233 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 234 */ _CFFI_OP(_CFFI_OP_FUNCTION, 800), // RenderTexture2D()(int, int)
-/* 235 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 236 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 237 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 238 */ _CFFI_OP(_CFFI_OP_FUNCTION, 258), // Shader()(char const *, char const *)
-/* 239 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 240 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 241 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 242 */ _CFFI_OP(_CFFI_OP_FUNCTION, 258), // Shader()(void)
-/* 243 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 244 */ _CFFI_OP(_CFFI_OP_FUNCTION, 433), // Sound()(Wave)
-/* 245 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 29), // Wave
-/* 246 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 247 */ _CFFI_OP(_CFFI_OP_FUNCTION, 433), // Sound()(char const *)
-/* 248 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 249 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 250 */ _CFFI_OP(_CFFI_OP_FUNCTION, 80), // Texture2D()(Image)
-/* 251 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 252 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 253 */ _CFFI_OP(_CFFI_OP_FUNCTION, 80), // Texture2D()(Image, int)
-/* 254 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 255 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 256 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 257 */ _CFFI_OP(_CFFI_OP_FUNCTION, 80), // Texture2D()(Shader, Texture2D, int)
-/* 258 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 21), // Shader
-/* 259 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 260 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 261 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 262 */ _CFFI_OP(_CFFI_OP_FUNCTION, 80), // Texture2D()(Shader, int)
-/* 263 */ _CFFI_OP(_CFFI_OP_NOOP, 258),
-/* 264 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 265 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 266 */ _CFFI_OP(_CFFI_OP_FUNCTION, 80), // Texture2D()(char const *)
-/* 267 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 268 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 269 */ _CFFI_OP(_CFFI_OP_FUNCTION, 80), // Texture2D()(void)
-/* 270 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 271 */ _CFFI_OP(_CFFI_OP_FUNCTION, 209), // Vector2()(Font, char const *, float, float)
-/* 272 */ _CFFI_OP(_CFFI_OP_NOOP, 66),
-/* 273 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 274 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 275 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 276 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 277 */ _CFFI_OP(_CFFI_OP_FUNCTION, 209), // Vector2()(Vector2, Camera2D)
-/* 278 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 279 */ _CFFI_OP(_CFFI_OP_NOOP, 155),
-/* 280 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 281 */ _CFFI_OP(_CFFI_OP_FUNCTION, 209), // Vector2()(Vector3, Camera3D)
-/* 282 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 283 */ _CFFI_OP(_CFFI_OP_NOOP, 158),
-/* 284 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 285 */ _CFFI_OP(_CFFI_OP_FUNCTION, 209), // Vector2()(Vector3, Camera3D, int, int)
-/* 286 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 287 */ _CFFI_OP(_CFFI_OP_NOOP, 158),
-/* 288 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 289 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 290 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 291 */ _CFFI_OP(_CFFI_OP_FUNCTION, 209), // Vector2()(int)
-/* 292 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 293 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 294 */ _CFFI_OP(_CFFI_OP_FUNCTION, 209), // Vector2()(void)
-/* 295 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 296 */ _CFFI_OP(_CFFI_OP_FUNCTION, 28), // Vector3()(Color)
-/* 297 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 298 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 299 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1175), // Vector4 *()(Image)
-/* 300 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 301 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 302 */ _CFFI_OP(_CFFI_OP_FUNCTION, 31), // Vector4()(Color)
-/* 303 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 304 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 305 */ _CFFI_OP(_CFFI_OP_FUNCTION, 245), // Wave()(Wave)
-/* 306 */ _CFFI_OP(_CFFI_OP_NOOP, 245),
-/* 307 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 308 */ _CFFI_OP(_CFFI_OP_FUNCTION, 245), // Wave()(char const *)
-/* 309 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 310 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 311 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1176), // char * *()(char const *, int *)
-/* 312 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 313 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 314 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 315 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1176), // char * *()(int *)
-/* 316 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 317 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 318 */ _CFFI_OP(_CFFI_OP_FUNCTION, 319), // char *()(char *, char const *, char const *)
-/* 319 */ _CFFI_OP(_CFFI_OP_POINTER, 337), // char *
-/* 320 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 321 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 322 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 323 */ _CFFI_OP(_CFFI_OP_FUNCTION, 319), // char *()(char const *)
-/* 324 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 325 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 326 */ _CFFI_OP(_CFFI_OP_FUNCTION, 319), // char *()(char const *, char const *, int)
-/* 327 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 328 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 329 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 330 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 331 */ _CFFI_OP(_CFFI_OP_FUNCTION, 319), // char *()(int *, int)
-/* 332 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 333 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 334 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 335 */ _CFFI_OP(_CFFI_OP_FUNCTION, 341), // char const * *()(char const *, char, int *)
-/* 336 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 337 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 2), // char
-/* 338 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 339 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 340 */ _CFFI_OP(_CFFI_OP_FUNCTION, 9), // char const *()(char const * *, int, char const *)
-/* 341 */ _CFFI_OP(_CFFI_OP_POINTER, 9), // char const * *
-/* 342 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 343 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 344 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 345 */ _CFFI_OP(_CFFI_OP_FUNCTION, 9), // char const *()(char const *)
-/* 346 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 347 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 348 */ _CFFI_OP(_CFFI_OP_FUNCTION, 9), // char const *()(char const *, ...)
-/* 349 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 350 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 1),
-/* 351 */ _CFFI_OP(_CFFI_OP_FUNCTION, 9), // char const *()(char const *, int, int)
-/* 352 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 353 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 354 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 355 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 356 */ _CFFI_OP(_CFFI_OP_FUNCTION, 9), // char const *()(int)
-/* 357 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 358 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 359 */ _CFFI_OP(_CFFI_OP_FUNCTION, 9), // char const *()(int, int *)
-/* 360 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 361 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 362 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 363 */ _CFFI_OP(_CFFI_OP_FUNCTION, 9), // char const *()(void)
-/* 364 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 365 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1180), // double()(void)
-/* 366 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 367 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1181), // float *()(Wave)
-/* 368 */ _CFFI_OP(_CFFI_OP_NOOP, 245),
-/* 369 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 370 */ _CFFI_OP(_CFFI_OP_FUNCTION, 25), // float()(Music)
-/* 371 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 15), // Music
-/* 372 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 373 */ _CFFI_OP(_CFFI_OP_FUNCTION, 25), // float()(int, int)
-/* 374 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 375 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 376 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 377 */ _CFFI_OP(_CFFI_OP_FUNCTION, 25), // float()(void)
-/* 378 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 379 */ _CFFI_OP(_CFFI_OP_FUNCTION, 11), // int *()(char const *, int *)
-/* 380 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 381 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 382 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 383 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(AudioStream)
-/* 384 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 0), // AudioStream
-/* 385 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 386 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(BoundingBox, BoundingBox)
-/* 387 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 2), // BoundingBox
-/* 388 */ _CFFI_OP(_CFFI_OP_NOOP, 387),
-/* 389 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 390 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(BoundingBox, Vector3, float)
-/* 391 */ _CFFI_OP(_CFFI_OP_NOOP, 387),
-/* 392 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 393 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 394 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 395 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Color)
-/* 396 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 397 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 398 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Font, int)
-/* 399 */ _CFFI_OP(_CFFI_OP_NOOP, 66),
-/* 400 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 401 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 402 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Model, ModelAnimation)
-/* 403 */ _CFFI_OP(_CFFI_OP_NOOP, 214),
-/* 404 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 14), // ModelAnimation
-/* 405 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 406 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Music)
-/* 407 */ _CFFI_OP(_CFFI_OP_NOOP, 371),
-/* 408 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 409 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Ray, BoundingBox)
-/* 410 */ _CFFI_OP(_CFFI_OP_NOOP, 213),
-/* 411 */ _CFFI_OP(_CFFI_OP_NOOP, 387),
-/* 412 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 413 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Ray, Vector3, float)
-/* 414 */ _CFFI_OP(_CFFI_OP_NOOP, 213),
-/* 415 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 416 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 417 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 418 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Ray, Vector3, float, Vector3 *)
-/* 419 */ _CFFI_OP(_CFFI_OP_NOOP, 213),
-/* 420 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 421 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 422 */ _CFFI_OP(_CFFI_OP_POINTER, 28), // Vector3 *
-/* 423 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 424 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Rectangle, Rectangle)
-/* 425 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 426 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 427 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 428 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Shader, char const *)
-/* 429 */ _CFFI_OP(_CFFI_OP_NOOP, 258),
-/* 430 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 431 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 432 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Sound)
-/* 433 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 22), // Sound
-/* 434 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 435 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Vector2, Rectangle)
-/* 436 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 437 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 438 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 439 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Vector2, Vector2, Vector2, Vector2)
-/* 440 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 441 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 442 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 443 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 444 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 445 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Vector2, Vector2, float)
-/* 446 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 447 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 448 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 449 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 450 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Vector2, float, Rectangle)
-/* 451 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 452 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 453 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 454 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 455 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Vector2, float, Vector2, float)
-/* 456 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 457 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 458 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 459 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 460 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 461 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(Vector3, float, Vector3, float)
-/* 462 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 463 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 464 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 465 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 466 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 467 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(char *, char const *)
-/* 468 */ _CFFI_OP(_CFFI_OP_NOOP, 319),
-/* 469 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 470 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 471 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(char const *)
-/* 472 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 473 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 474 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(char const *, char const *)
-/* 475 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 476 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 477 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 478 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(char const *, int *)
-/* 479 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 480 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 481 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 482 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(char const *, int)
-/* 483 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 484 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 485 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 486 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(int)
-/* 487 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 488 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 489 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(int, char const *)
-/* 490 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 491 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 492 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 493 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(int, int)
-/* 494 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 495 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 496 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 497 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(int, int, int)
-/* 498 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 499 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 500 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 501 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 502 */ _CFFI_OP(_CFFI_OP_FUNCTION, 10), // int()(void)
-/* 503 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 504 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1184), // long()(char const *)
-/* 505 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 506 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 507 */ _CFFI_OP(_CFFI_OP_FUNCTION, 508), // unsigned char *()(unsigned char *, int, int *)
-/* 508 */ _CFFI_OP(_CFFI_OP_POINTER, 1187), // unsigned char *
-/* 509 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 510 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 511 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 512 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1), // unsigned int()(char const *)
-/* 513 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 514 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 515 */ _CFFI_OP(_CFFI_OP_FUNCTION, 141), // void *()(void)
-/* 516 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 517 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(AudioStream)
-/* 518 */ _CFFI_OP(_CFFI_OP_NOOP, 384),
-/* 519 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 520 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(AudioStream, float)
-/* 521 */ _CFFI_OP(_CFFI_OP_NOOP, 384),
-/* 522 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 523 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 524 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(AudioStream, void const *, int)
-/* 525 */ _CFFI_OP(_CFFI_OP_NOOP, 384),
-/* 526 */ _CFFI_OP(_CFFI_OP_POINTER, 1192), // void const *
-/* 527 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 528 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 529 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(BoundingBox, Color)
-/* 530 */ _CFFI_OP(_CFFI_OP_NOOP, 387),
-/* 531 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 532 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 533 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Camera2D)
-/* 534 */ _CFFI_OP(_CFFI_OP_NOOP, 155),
-/* 535 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 536 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Camera3D *)
-/* 537 */ _CFFI_OP(_CFFI_OP_POINTER, 158), // Camera3D *
-/* 538 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 539 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Camera3D)
-/* 540 */ _CFFI_OP(_CFFI_OP_NOOP, 158),
-/* 541 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 542 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Camera3D, Texture2D, Rectangle, Vector3, float, Color)
-/* 543 */ _CFFI_OP(_CFFI_OP_NOOP, 158),
-/* 544 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 545 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 546 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 547 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 548 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 549 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 550 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Camera3D, Texture2D, Vector3, float, Color)
-/* 551 */ _CFFI_OP(_CFFI_OP_NOOP, 158),
-/* 552 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 553 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 554 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 555 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 556 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 557 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Camera3D, int)
-/* 558 */ _CFFI_OP(_CFFI_OP_NOOP, 158),
-/* 559 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 560 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 561 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Color)
-/* 562 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 563 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 564 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Font)
-/* 565 */ _CFFI_OP(_CFFI_OP_NOOP, 66),
-/* 566 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 567 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Font, char const *, Rectangle, float, float, int, Color)
-/* 568 */ _CFFI_OP(_CFFI_OP_NOOP, 66),
-/* 569 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 570 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 571 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 572 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 573 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 574 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 575 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 576 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Font, char const *, Rectangle, float, float, int, Color, int, int, Color, Color)
-/* 577 */ _CFFI_OP(_CFFI_OP_NOOP, 66),
-/* 578 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 579 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 580 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 581 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 582 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 583 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 584 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 585 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 586 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 587 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 588 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 589 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Font, char const *, Vector2, float, float, Color)
-/* 590 */ _CFFI_OP(_CFFI_OP_NOOP, 66),
-/* 591 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 592 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 593 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 594 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 595 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 596 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 597 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Font, int, Vector2, float, Color)
-/* 598 */ _CFFI_OP(_CFFI_OP_NOOP, 66),
-/* 599 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 600 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 601 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 602 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 603 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 604 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *)
-/* 605 */ _CFFI_OP(_CFFI_OP_POINTER, 16), // Image *
-/* 606 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 607 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Color)
-/* 608 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 609 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 610 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 611 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Color, Color)
-/* 612 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 613 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 614 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 615 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 616 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Color, float)
-/* 617 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 618 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 619 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 620 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 621 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Image)
-/* 622 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 623 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 624 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 625 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Image, Rectangle, Rectangle, Color)
-/* 626 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 627 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 628 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 629 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 630 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 631 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 632 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Rectangle)
-/* 633 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 634 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 635 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 636 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Rectangle, Color)
-/* 637 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 638 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 639 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 640 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 641 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Rectangle, int, Color)
-/* 642 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 643 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 644 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 645 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 646 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 647 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Vector2, Font, char const *, float, float, Color)
-/* 648 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 649 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 650 */ _CFFI_OP(_CFFI_OP_NOOP, 66),
-/* 651 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 652 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 653 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 654 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 655 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 656 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, Vector2, char const *, int, Color)
-/* 657 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 658 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 659 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 660 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 661 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 662 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 663 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, float)
-/* 664 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 665 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 666 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 667 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, int)
-/* 668 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 669 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 670 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 671 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, int, int)
-/* 672 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 673 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 674 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 675 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 676 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, int, int, int, int)
-/* 677 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 678 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 679 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 680 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 681 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 682 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 683 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image *, int, int, int, int, Color)
-/* 684 */ _CFFI_OP(_CFFI_OP_NOOP, 605),
-/* 685 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 686 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 687 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 688 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 689 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 690 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 691 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image)
-/* 692 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 693 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 694 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Image, char const *)
-/* 695 */ _CFFI_OP(_CFFI_OP_NOOP, 16),
-/* 696 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 697 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 698 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Material *, int, Texture2D)
-/* 699 */ _CFFI_OP(_CFFI_OP_POINTER, 704), // Material *
-/* 700 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 701 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 702 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 703 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Material)
-/* 704 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 9), // Material
-/* 705 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 706 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Matrix)
-/* 707 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 11), // Matrix
-/* 708 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 709 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Mesh *)
-/* 710 */ _CFFI_OP(_CFFI_OP_POINTER, 6), // Mesh *
-/* 711 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 712 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Mesh)
-/* 713 */ _CFFI_OP(_CFFI_OP_NOOP, 6),
-/* 714 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 715 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Mesh, char const *)
-/* 716 */ _CFFI_OP(_CFFI_OP_NOOP, 6),
-/* 717 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 718 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 719 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Model *, int, int)
-/* 720 */ _CFFI_OP(_CFFI_OP_POINTER, 214), // Model *
-/* 721 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 722 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 723 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 724 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Model)
-/* 725 */ _CFFI_OP(_CFFI_OP_NOOP, 214),
-/* 726 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 727 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Model, ModelAnimation, int)
-/* 728 */ _CFFI_OP(_CFFI_OP_NOOP, 214),
-/* 729 */ _CFFI_OP(_CFFI_OP_NOOP, 404),
-/* 730 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 731 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 732 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Model, Vector3, Vector3, float, Vector3, Color)
-/* 733 */ _CFFI_OP(_CFFI_OP_NOOP, 214),
-/* 734 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 735 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 736 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 737 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 738 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 739 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 740 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Model, Vector3, float, Color)
-/* 741 */ _CFFI_OP(_CFFI_OP_NOOP, 214),
-/* 742 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 743 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 744 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 745 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 746 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(ModelAnimation)
-/* 747 */ _CFFI_OP(_CFFI_OP_NOOP, 404),
-/* 748 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 749 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Music)
-/* 750 */ _CFFI_OP(_CFFI_OP_NOOP, 371),
-/* 751 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 752 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Music, float)
-/* 753 */ _CFFI_OP(_CFFI_OP_NOOP, 371),
-/* 754 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 755 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 756 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Music, int)
-/* 757 */ _CFFI_OP(_CFFI_OP_NOOP, 371),
-/* 758 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 759 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 760 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Ray, Color)
-/* 761 */ _CFFI_OP(_CFFI_OP_NOOP, 213),
-/* 762 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 763 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 764 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Rectangle, Color)
-/* 765 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 766 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 767 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 768 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Rectangle, Color, Color, Color, Color)
-/* 769 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 770 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 771 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 772 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 773 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 774 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 775 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Rectangle, Vector2, float, Color)
-/* 776 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 777 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 778 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 779 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 780 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 781 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Rectangle, float, int, Color)
-/* 782 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 783 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 784 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 785 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 786 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 787 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Rectangle, float, int, int, Color)
-/* 788 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 789 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 790 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 791 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 792 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 793 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 794 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Rectangle, int, Color)
-/* 795 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 796 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 797 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 798 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 799 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(RenderTexture2D)
-/* 800 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 20), // RenderTexture2D
-/* 801 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 802 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Shader)
-/* 803 */ _CFFI_OP(_CFFI_OP_NOOP, 258),
-/* 804 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 805 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Shader, int, Matrix)
-/* 806 */ _CFFI_OP(_CFFI_OP_NOOP, 258),
-/* 807 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 808 */ _CFFI_OP(_CFFI_OP_NOOP, 707),
-/* 809 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 810 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Shader, int, Texture2D)
-/* 811 */ _CFFI_OP(_CFFI_OP_NOOP, 258),
-/* 812 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 813 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 814 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 815 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Shader, int, void const *, int)
-/* 816 */ _CFFI_OP(_CFFI_OP_NOOP, 258),
-/* 817 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 818 */ _CFFI_OP(_CFFI_OP_NOOP, 526),
-/* 819 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 820 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 821 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Shader, int, void const *, int, int)
-/* 822 */ _CFFI_OP(_CFFI_OP_NOOP, 258),
-/* 823 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 824 */ _CFFI_OP(_CFFI_OP_NOOP, 526),
-/* 825 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 826 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 827 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 828 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Sound)
-/* 829 */ _CFFI_OP(_CFFI_OP_NOOP, 433),
-/* 830 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 831 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Sound, float)
-/* 832 */ _CFFI_OP(_CFFI_OP_NOOP, 433),
-/* 833 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 834 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 835 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Sound, void const *, int)
-/* 836 */ _CFFI_OP(_CFFI_OP_NOOP, 433),
-/* 837 */ _CFFI_OP(_CFFI_OP_NOOP, 526),
-/* 838 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 839 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 840 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D *)
-/* 841 */ _CFFI_OP(_CFFI_OP_POINTER, 80), // Texture2D *
-/* 842 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 843 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D)
-/* 844 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 845 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 846 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, NPatchInfo, Rectangle, Vector2, float, Color)
-/* 847 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 848 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 16), // NPatchInfo
-/* 849 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 850 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 851 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 852 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 853 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 854 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, Rectangle)
-/* 855 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 856 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 857 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 858 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, Rectangle, Rectangle, Vector2, float, Color)
-/* 859 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 860 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 861 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 862 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 863 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 864 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 865 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 866 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, Rectangle, Vector2, Color)
-/* 867 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 868 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 869 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 870 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 871 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 872 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, Vector2, Color)
-/* 873 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 874 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 875 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 876 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 877 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, Vector2, Vector2, Rectangle, Color)
-/* 878 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 879 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 880 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 881 */ _CFFI_OP(_CFFI_OP_NOOP, 77),
-/* 882 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 883 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 884 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, Vector2, float, float, Color)
-/* 885 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 886 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 887 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 888 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 889 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 890 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 891 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, Vector3, float, float, float, Color)
-/* 892 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 893 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 894 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 895 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 896 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 897 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 898 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 899 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, int)
-/* 900 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 901 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 902 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 903 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, int, int, Color)
-/* 904 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 905 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 906 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 907 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 908 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 909 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Texture2D, void const *)
-/* 910 */ _CFFI_OP(_CFFI_OP_NOOP, 80),
-/* 911 */ _CFFI_OP(_CFFI_OP_NOOP, 526),
-/* 912 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 913 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector2 *, int, Color)
-/* 914 */ _CFFI_OP(_CFFI_OP_POINTER, 209), // Vector2 *
-/* 915 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 916 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 917 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 918 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector2, Color)
-/* 919 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 920 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 921 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 922 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector2, Vector2, Color)
-/* 923 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 924 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 925 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 926 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 927 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector2, Vector2, Vector2, Color)
-/* 928 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 929 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 930 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 931 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 932 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 933 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector2, Vector2, float, Color)
-/* 934 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 935 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 936 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 937 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 938 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 939 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector2, float, Color)
-/* 940 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 941 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 942 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 943 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 944 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector2, float, float, int, int, int, Color)
-/* 945 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 946 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 947 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 948 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 949 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 950 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 951 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 952 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 953 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector2, float, int, int, int, Color)
-/* 954 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 955 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 956 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 957 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 958 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 959 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 960 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 961 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector2, int, float, float, Color)
-/* 962 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 963 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 964 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 965 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 966 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 967 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 968 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector3)
-/* 969 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 970 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 971 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector3, Color)
-/* 972 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 973 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 974 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 975 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector3, Vector2, Color)
-/* 976 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 977 */ _CFFI_OP(_CFFI_OP_NOOP, 209),
-/* 978 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 979 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 980 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector3, Vector3, Color)
-/* 981 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 982 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 983 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 984 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 985 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector3, float, Color)
-/* 986 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 987 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 988 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 989 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 990 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector3, float, Vector3, float, Color)
-/* 991 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 992 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 993 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 994 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 995 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 996 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 997 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector3, float, float, float, Color)
-/* 998 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 999 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1000 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1001 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1002 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1003 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1004 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector3, float, float, float, int, Color)
-/* 1005 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 1006 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1007 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1008 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1009 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1010 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1011 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1012 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Vector3, float, int, int, Color)
-/* 1013 */ _CFFI_OP(_CFFI_OP_NOOP, 28),
-/* 1014 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1015 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1016 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1017 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1018 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1019 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(VrDeviceInfo, Shader)
-/* 1020 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 28), // VrDeviceInfo
-/* 1021 */ _CFFI_OP(_CFFI_OP_NOOP, 258),
-/* 1022 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1023 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Wave *, int, int)
-/* 1024 */ _CFFI_OP(_CFFI_OP_POINTER, 245), // Wave *
-/* 1025 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1026 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1027 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1028 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Wave *, int, int, int)
-/* 1029 */ _CFFI_OP(_CFFI_OP_NOOP, 1024),
-/* 1030 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1031 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1032 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1033 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1034 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Wave)
-/* 1035 */ _CFFI_OP(_CFFI_OP_NOOP, 245),
-/* 1036 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1037 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(Wave, char const *)
-/* 1038 */ _CFFI_OP(_CFFI_OP_NOOP, 245),
-/* 1039 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 1040 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1041 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(char *, char const *, int *)
-/* 1042 */ _CFFI_OP(_CFFI_OP_NOOP, 319),
-/* 1043 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 1044 */ _CFFI_OP(_CFFI_OP_NOOP, 11),
-/* 1045 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1046 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(char const *)
-/* 1047 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 1048 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1049 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(char const *, int, int, int, Color)
-/* 1050 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 1051 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1052 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1053 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1054 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1055 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1056 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(float)
-/* 1057 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1058 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1059 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(float, float)
-/* 1060 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1061 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1062 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1063 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int)
-/* 1064 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1065 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1066 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, char const *, ...)
-/* 1067 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1068 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 1069 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 1),
-/* 1070 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, float)
-/* 1071 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1072 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1073 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1074 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int)
-/* 1075 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1076 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1077 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1078 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int, Color)
-/* 1079 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1080 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1081 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1082 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1083 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int, char const *)
-/* 1084 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1085 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1086 */ _CFFI_OP(_CFFI_OP_NOOP, 9),
-/* 1087 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1088 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int, float, Color)
-/* 1089 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1090 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1091 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1092 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1093 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1094 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int, float, Color, Color)
-/* 1095 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1096 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1097 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1098 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1099 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1100 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1101 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int, float, float, Color)
-/* 1102 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1103 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1104 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1105 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 13),
-/* 1106 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1107 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1108 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int, int, int)
-/* 1109 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1110 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1111 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1112 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1113 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1114 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int, int, int, Color)
-/* 1115 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1116 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1117 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1118 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1119 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1120 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1121 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int, int, int, Color, Color)
-/* 1122 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1123 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1124 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1125 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1126 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1127 */ _CFFI_OP(_CFFI_OP_NOOP, 24),
-/* 1128 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1129 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(int, int, int, int, int, int)
-/* 1130 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1131 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1132 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1133 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1134 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1135 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 7),
-/* 1136 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1137 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(unsigned int)
-/* 1138 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 8),
-/* 1139 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1140 */ _CFFI_OP(_CFFI_OP_FUNCTION, 1192), // void()(void)
-/* 1141 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0),
-/* 1142 */ _CFFI_OP(_CFFI_OP_ENUM, 0), // AndroidButton
-/* 1143 */ _CFFI_OP(_CFFI_OP_ENUM, 1), // BlendMode
-/* 1144 */ _CFFI_OP(_CFFI_OP_POINTER, 1145), // BoneInfo *
-/* 1145 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 1), // BoneInfo
-/* 1146 */ _CFFI_OP(_CFFI_OP_ENUM, 2), // CameraMode
-/* 1147 */ _CFFI_OP(_CFFI_OP_ENUM, 3), // CameraType
-/* 1148 */ _CFFI_OP(_CFFI_OP_POINTER, 1149), // CharInfo *
-/* 1149 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 5), // CharInfo
-/* 1150 */ _CFFI_OP(_CFFI_OP_ENUM, 4), // ConfigFlag
-/* 1151 */ _CFFI_OP(_CFFI_OP_ENUM, 5), // CubemapLayoutType
-/* 1152 */ _CFFI_OP(_CFFI_OP_ENUM, 6), // FontType
-/* 1153 */ _CFFI_OP(_CFFI_OP_ENUM, 7), // GamepadAxis
-/* 1154 */ _CFFI_OP(_CFFI_OP_ENUM, 8), // GamepadButton
-/* 1155 */ _CFFI_OP(_CFFI_OP_ENUM, 9), // GamepadNumber
-/* 1156 */ _CFFI_OP(_CFFI_OP_ENUM, 10), // GestureType
-/* 1157 */ _CFFI_OP(_CFFI_OP_ENUM, 11), // KeyboardKey
-/* 1158 */ _CFFI_OP(_CFFI_OP_POINTER, 1159), // MaterialMap *
-/* 1159 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 10), // MaterialMap
-/* 1160 */ _CFFI_OP(_CFFI_OP_ENUM, 12), // MaterialMapType
-/* 1161 */ _CFFI_OP(_CFFI_OP_POINTER, 404), // ModelAnimation *
-/* 1162 */ _CFFI_OP(_CFFI_OP_ENUM, 13), // MouseButton
-/* 1163 */ _CFFI_OP(_CFFI_OP_ENUM, 14), // NPatchType
-/* 1164 */ _CFFI_OP(_CFFI_OP_ENUM, 15), // PixelFormat
-/* 1165 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 18), // RayHitInfo
-/* 1166 */ _CFFI_OP(_CFFI_OP_POINTER, 77), // Rectangle *
-/* 1167 */ _CFFI_OP(_CFFI_OP_ENUM, 16), // ShaderLocationIndex
-/* 1168 */ _CFFI_OP(_CFFI_OP_ENUM, 17), // ShaderUniformDataType
-/* 1169 */ _CFFI_OP(_CFFI_OP_ENUM, 18), // TextureFilterMode
-/* 1170 */ _CFFI_OP(_CFFI_OP_ENUM, 19), // TextureWrapMode
-/* 1171 */ _CFFI_OP(_CFFI_OP_ENUM, 20), // TraceLogType
-/* 1172 */ _CFFI_OP(_CFFI_OP_POINTER, 1173), // Transform * *
-/* 1173 */ _CFFI_OP(_CFFI_OP_POINTER, 1174), // Transform *
-/* 1174 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 24), // Transform
-/* 1175 */ _CFFI_OP(_CFFI_OP_POINTER, 31), // Vector4 *
-/* 1176 */ _CFFI_OP(_CFFI_OP_POINTER, 319), // char * *
-/* 1177 */ _CFFI_OP(_CFFI_OP_POINTER, 348), // char const *(*)(char const *, ...)
-/* 1178 */ _CFFI_OP(_CFFI_OP_ARRAY, 337), // char[32]
-/* 1179 */ (_cffi_opcode_t)(32),
-/* 1180 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 14), // double
-/* 1181 */ _CFFI_OP(_CFFI_OP_POINTER, 25), // float *
-/* 1182 */ _CFFI_OP(_CFFI_OP_ARRAY, 25), // float[4]
-/* 1183 */ (_cffi_opcode_t)(4),
-/* 1184 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 9), // long
-/* 1185 */ _CFFI_OP(_CFFI_OP_POINTER, 1186), // rAudioBuffer *
-/* 1186 */ _CFFI_OP(_CFFI_OP_STRUCT_UNION, 30), // rAudioBuffer
-/* 1187 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 4), // unsigned char
-/* 1188 */ _CFFI_OP(_CFFI_OP_POINTER, 1), // unsigned int *
-/* 1189 */ _CFFI_OP(_CFFI_OP_POINTER, 1190), // unsigned short *
-/* 1190 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 6), // unsigned short
-/* 1191 */ _CFFI_OP(_CFFI_OP_POINTER, 1066), // void(*)(int, char const *, ...)
-/* 1192 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 0), // void
-};
-
-static int _cffi_const_KEY_BACK(unsigned long long *o)
-{
- int n = (KEY_BACK) <= 0;
- *o = (unsigned long long)((KEY_BACK) | 0); /* check that KEY_BACK is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_MENU(unsigned long long *o)
-{
- int n = (KEY_MENU) <= 0;
- *o = (unsigned long long)((KEY_MENU) | 0); /* check that KEY_MENU is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_VOLUME_UP(unsigned long long *o)
-{
- int n = (KEY_VOLUME_UP) <= 0;
- *o = (unsigned long long)((KEY_VOLUME_UP) | 0); /* check that KEY_VOLUME_UP is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_VOLUME_DOWN(unsigned long long *o)
-{
- int n = (KEY_VOLUME_DOWN) <= 0;
- *o = (unsigned long long)((KEY_VOLUME_DOWN) | 0); /* check that KEY_VOLUME_DOWN is an integer */
- return n;
-}
-
-static int _cffi_const_BLEND_ALPHA(unsigned long long *o)
-{
- int n = (BLEND_ALPHA) <= 0;
- *o = (unsigned long long)((BLEND_ALPHA) | 0); /* check that BLEND_ALPHA is an integer */
- return n;
-}
-
-static int _cffi_const_BLEND_ADDITIVE(unsigned long long *o)
-{
- int n = (BLEND_ADDITIVE) <= 0;
- *o = (unsigned long long)((BLEND_ADDITIVE) | 0); /* check that BLEND_ADDITIVE is an integer */
- return n;
-}
-
-static int _cffi_const_BLEND_MULTIPLIED(unsigned long long *o)
-{
- int n = (BLEND_MULTIPLIED) <= 0;
- *o = (unsigned long long)((BLEND_MULTIPLIED) | 0); /* check that BLEND_MULTIPLIED is an integer */
- return n;
-}
-
-static int _cffi_const_CAMERA_CUSTOM(unsigned long long *o)
-{
- int n = (CAMERA_CUSTOM) <= 0;
- *o = (unsigned long long)((CAMERA_CUSTOM) | 0); /* check that CAMERA_CUSTOM is an integer */
- return n;
-}
-
-static int _cffi_const_CAMERA_FREE(unsigned long long *o)
-{
- int n = (CAMERA_FREE) <= 0;
- *o = (unsigned long long)((CAMERA_FREE) | 0); /* check that CAMERA_FREE is an integer */
- return n;
-}
-
-static int _cffi_const_CAMERA_ORBITAL(unsigned long long *o)
-{
- int n = (CAMERA_ORBITAL) <= 0;
- *o = (unsigned long long)((CAMERA_ORBITAL) | 0); /* check that CAMERA_ORBITAL is an integer */
- return n;
-}
-
-static int _cffi_const_CAMERA_FIRST_PERSON(unsigned long long *o)
-{
- int n = (CAMERA_FIRST_PERSON) <= 0;
- *o = (unsigned long long)((CAMERA_FIRST_PERSON) | 0); /* check that CAMERA_FIRST_PERSON is an integer */
- return n;
-}
-
-static int _cffi_const_CAMERA_THIRD_PERSON(unsigned long long *o)
-{
- int n = (CAMERA_THIRD_PERSON) <= 0;
- *o = (unsigned long long)((CAMERA_THIRD_PERSON) | 0); /* check that CAMERA_THIRD_PERSON is an integer */
- return n;
-}
-
-static int _cffi_const_CAMERA_PERSPECTIVE(unsigned long long *o)
-{
- int n = (CAMERA_PERSPECTIVE) <= 0;
- *o = (unsigned long long)((CAMERA_PERSPECTIVE) | 0); /* check that CAMERA_PERSPECTIVE is an integer */
- return n;
-}
-
-static int _cffi_const_CAMERA_ORTHOGRAPHIC(unsigned long long *o)
-{
- int n = (CAMERA_ORTHOGRAPHIC) <= 0;
- *o = (unsigned long long)((CAMERA_ORTHOGRAPHIC) | 0); /* check that CAMERA_ORTHOGRAPHIC is an integer */
- return n;
-}
-
-static int _cffi_const_FLAG_RESERVED(unsigned long long *o)
-{
- int n = (FLAG_RESERVED) <= 0;
- *o = (unsigned long long)((FLAG_RESERVED) | 0); /* check that FLAG_RESERVED is an integer */
- return n;
-}
-
-static int _cffi_const_FLAG_FULLSCREEN_MODE(unsigned long long *o)
-{
- int n = (FLAG_FULLSCREEN_MODE) <= 0;
- *o = (unsigned long long)((FLAG_FULLSCREEN_MODE) | 0); /* check that FLAG_FULLSCREEN_MODE is an integer */
- return n;
-}
-
-static int _cffi_const_FLAG_WINDOW_RESIZABLE(unsigned long long *o)
-{
- int n = (FLAG_WINDOW_RESIZABLE) <= 0;
- *o = (unsigned long long)((FLAG_WINDOW_RESIZABLE) | 0); /* check that FLAG_WINDOW_RESIZABLE is an integer */
- return n;
-}
-
-static int _cffi_const_FLAG_WINDOW_UNDECORATED(unsigned long long *o)
-{
- int n = (FLAG_WINDOW_UNDECORATED) <= 0;
- *o = (unsigned long long)((FLAG_WINDOW_UNDECORATED) | 0); /* check that FLAG_WINDOW_UNDECORATED is an integer */
- return n;
-}
-
-static int _cffi_const_FLAG_WINDOW_TRANSPARENT(unsigned long long *o)
-{
- int n = (FLAG_WINDOW_TRANSPARENT) <= 0;
- *o = (unsigned long long)((FLAG_WINDOW_TRANSPARENT) | 0); /* check that FLAG_WINDOW_TRANSPARENT is an integer */
- return n;
-}
-
-static int _cffi_const_FLAG_WINDOW_HIDDEN(unsigned long long *o)
-{
- int n = (FLAG_WINDOW_HIDDEN) <= 0;
- *o = (unsigned long long)((FLAG_WINDOW_HIDDEN) | 0); /* check that FLAG_WINDOW_HIDDEN is an integer */
- return n;
-}
-
-static int _cffi_const_FLAG_WINDOW_ALWAYS_RUN(unsigned long long *o)
-{
- int n = (FLAG_WINDOW_ALWAYS_RUN) <= 0;
- *o = (unsigned long long)((FLAG_WINDOW_ALWAYS_RUN) | 0); /* check that FLAG_WINDOW_ALWAYS_RUN is an integer */
- return n;
-}
-
-static int _cffi_const_FLAG_MSAA_4X_HINT(unsigned long long *o)
-{
- int n = (FLAG_MSAA_4X_HINT) <= 0;
- *o = (unsigned long long)((FLAG_MSAA_4X_HINT) | 0); /* check that FLAG_MSAA_4X_HINT is an integer */
- return n;
-}
-
-static int _cffi_const_FLAG_VSYNC_HINT(unsigned long long *o)
-{
- int n = (FLAG_VSYNC_HINT) <= 0;
- *o = (unsigned long long)((FLAG_VSYNC_HINT) | 0); /* check that FLAG_VSYNC_HINT is an integer */
- return n;
-}
-
-static int _cffi_const_CUBEMAP_AUTO_DETECT(unsigned long long *o)
-{
- int n = (CUBEMAP_AUTO_DETECT) <= 0;
- *o = (unsigned long long)((CUBEMAP_AUTO_DETECT) | 0); /* check that CUBEMAP_AUTO_DETECT is an integer */
- return n;
-}
-
-static int _cffi_const_CUBEMAP_LINE_VERTICAL(unsigned long long *o)
-{
- int n = (CUBEMAP_LINE_VERTICAL) <= 0;
- *o = (unsigned long long)((CUBEMAP_LINE_VERTICAL) | 0); /* check that CUBEMAP_LINE_VERTICAL is an integer */
- return n;
-}
-
-static int _cffi_const_CUBEMAP_LINE_HORIZONTAL(unsigned long long *o)
-{
- int n = (CUBEMAP_LINE_HORIZONTAL) <= 0;
- *o = (unsigned long long)((CUBEMAP_LINE_HORIZONTAL) | 0); /* check that CUBEMAP_LINE_HORIZONTAL is an integer */
- return n;
-}
-
-static int _cffi_const_CUBEMAP_CROSS_THREE_BY_FOUR(unsigned long long *o)
-{
- int n = (CUBEMAP_CROSS_THREE_BY_FOUR) <= 0;
- *o = (unsigned long long)((CUBEMAP_CROSS_THREE_BY_FOUR) | 0); /* check that CUBEMAP_CROSS_THREE_BY_FOUR is an integer */
- return n;
-}
-
-static int _cffi_const_CUBEMAP_CROSS_FOUR_BY_THREE(unsigned long long *o)
-{
- int n = (CUBEMAP_CROSS_FOUR_BY_THREE) <= 0;
- *o = (unsigned long long)((CUBEMAP_CROSS_FOUR_BY_THREE) | 0); /* check that CUBEMAP_CROSS_FOUR_BY_THREE is an integer */
- return n;
-}
-
-static int _cffi_const_CUBEMAP_PANORAMA(unsigned long long *o)
-{
- int n = (CUBEMAP_PANORAMA) <= 0;
- *o = (unsigned long long)((CUBEMAP_PANORAMA) | 0); /* check that CUBEMAP_PANORAMA is an integer */
- return n;
-}
-
-static int _cffi_const_FONT_DEFAULT(unsigned long long *o)
-{
- int n = (FONT_DEFAULT) <= 0;
- *o = (unsigned long long)((FONT_DEFAULT) | 0); /* check that FONT_DEFAULT is an integer */
- return n;
-}
-
-static int _cffi_const_FONT_BITMAP(unsigned long long *o)
-{
- int n = (FONT_BITMAP) <= 0;
- *o = (unsigned long long)((FONT_BITMAP) | 0); /* check that FONT_BITMAP is an integer */
- return n;
-}
-
-static int _cffi_const_FONT_SDF(unsigned long long *o)
-{
- int n = (FONT_SDF) <= 0;
- *o = (unsigned long long)((FONT_SDF) | 0); /* check that FONT_SDF is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_AXIS_UNKNOWN(unsigned long long *o)
-{
- int n = (GAMEPAD_AXIS_UNKNOWN) <= 0;
- *o = (unsigned long long)((GAMEPAD_AXIS_UNKNOWN) | 0); /* check that GAMEPAD_AXIS_UNKNOWN is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_AXIS_LEFT_X(unsigned long long *o)
-{
- int n = (GAMEPAD_AXIS_LEFT_X) <= 0;
- *o = (unsigned long long)((GAMEPAD_AXIS_LEFT_X) | 0); /* check that GAMEPAD_AXIS_LEFT_X is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_AXIS_LEFT_Y(unsigned long long *o)
-{
- int n = (GAMEPAD_AXIS_LEFT_Y) <= 0;
- *o = (unsigned long long)((GAMEPAD_AXIS_LEFT_Y) | 0); /* check that GAMEPAD_AXIS_LEFT_Y is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_AXIS_RIGHT_X(unsigned long long *o)
-{
- int n = (GAMEPAD_AXIS_RIGHT_X) <= 0;
- *o = (unsigned long long)((GAMEPAD_AXIS_RIGHT_X) | 0); /* check that GAMEPAD_AXIS_RIGHT_X is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_AXIS_RIGHT_Y(unsigned long long *o)
-{
- int n = (GAMEPAD_AXIS_RIGHT_Y) <= 0;
- *o = (unsigned long long)((GAMEPAD_AXIS_RIGHT_Y) | 0); /* check that GAMEPAD_AXIS_RIGHT_Y is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_AXIS_LEFT_TRIGGER(unsigned long long *o)
-{
- int n = (GAMEPAD_AXIS_LEFT_TRIGGER) <= 0;
- *o = (unsigned long long)((GAMEPAD_AXIS_LEFT_TRIGGER) | 0); /* check that GAMEPAD_AXIS_LEFT_TRIGGER is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_AXIS_RIGHT_TRIGGER(unsigned long long *o)
-{
- int n = (GAMEPAD_AXIS_RIGHT_TRIGGER) <= 0;
- *o = (unsigned long long)((GAMEPAD_AXIS_RIGHT_TRIGGER) | 0); /* check that GAMEPAD_AXIS_RIGHT_TRIGGER is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_UNKNOWN(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_UNKNOWN) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_UNKNOWN) | 0); /* check that GAMEPAD_BUTTON_UNKNOWN is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_LEFT_FACE_UP(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_LEFT_FACE_UP) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_LEFT_FACE_UP) | 0); /* check that GAMEPAD_BUTTON_LEFT_FACE_UP is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_LEFT_FACE_RIGHT(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_LEFT_FACE_RIGHT) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_LEFT_FACE_RIGHT) | 0); /* check that GAMEPAD_BUTTON_LEFT_FACE_RIGHT is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_LEFT_FACE_DOWN(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_LEFT_FACE_DOWN) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_LEFT_FACE_DOWN) | 0); /* check that GAMEPAD_BUTTON_LEFT_FACE_DOWN is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_LEFT_FACE_LEFT(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_LEFT_FACE_LEFT) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_LEFT_FACE_LEFT) | 0); /* check that GAMEPAD_BUTTON_LEFT_FACE_LEFT is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_RIGHT_FACE_UP(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_RIGHT_FACE_UP) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_RIGHT_FACE_UP) | 0); /* check that GAMEPAD_BUTTON_RIGHT_FACE_UP is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_RIGHT_FACE_RIGHT(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_RIGHT_FACE_RIGHT) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_RIGHT_FACE_RIGHT) | 0); /* check that GAMEPAD_BUTTON_RIGHT_FACE_RIGHT is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_RIGHT_FACE_DOWN(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_RIGHT_FACE_DOWN) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_RIGHT_FACE_DOWN) | 0); /* check that GAMEPAD_BUTTON_RIGHT_FACE_DOWN is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_RIGHT_FACE_LEFT(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_RIGHT_FACE_LEFT) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_RIGHT_FACE_LEFT) | 0); /* check that GAMEPAD_BUTTON_RIGHT_FACE_LEFT is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_LEFT_TRIGGER_1(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_LEFT_TRIGGER_1) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_LEFT_TRIGGER_1) | 0); /* check that GAMEPAD_BUTTON_LEFT_TRIGGER_1 is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_LEFT_TRIGGER_2(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_LEFT_TRIGGER_2) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_LEFT_TRIGGER_2) | 0); /* check that GAMEPAD_BUTTON_LEFT_TRIGGER_2 is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_RIGHT_TRIGGER_1(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_RIGHT_TRIGGER_1) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_RIGHT_TRIGGER_1) | 0); /* check that GAMEPAD_BUTTON_RIGHT_TRIGGER_1 is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_RIGHT_TRIGGER_2(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_RIGHT_TRIGGER_2) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_RIGHT_TRIGGER_2) | 0); /* check that GAMEPAD_BUTTON_RIGHT_TRIGGER_2 is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_MIDDLE_LEFT(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_MIDDLE_LEFT) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_MIDDLE_LEFT) | 0); /* check that GAMEPAD_BUTTON_MIDDLE_LEFT is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_MIDDLE(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_MIDDLE) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_MIDDLE) | 0); /* check that GAMEPAD_BUTTON_MIDDLE is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_MIDDLE_RIGHT(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_MIDDLE_RIGHT) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_MIDDLE_RIGHT) | 0); /* check that GAMEPAD_BUTTON_MIDDLE_RIGHT is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_LEFT_THUMB(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_LEFT_THUMB) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_LEFT_THUMB) | 0); /* check that GAMEPAD_BUTTON_LEFT_THUMB is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_BUTTON_RIGHT_THUMB(unsigned long long *o)
-{
- int n = (GAMEPAD_BUTTON_RIGHT_THUMB) <= 0;
- *o = (unsigned long long)((GAMEPAD_BUTTON_RIGHT_THUMB) | 0); /* check that GAMEPAD_BUTTON_RIGHT_THUMB is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_PLAYER1(unsigned long long *o)
-{
- int n = (GAMEPAD_PLAYER1) <= 0;
- *o = (unsigned long long)((GAMEPAD_PLAYER1) | 0); /* check that GAMEPAD_PLAYER1 is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_PLAYER2(unsigned long long *o)
-{
- int n = (GAMEPAD_PLAYER2) <= 0;
- *o = (unsigned long long)((GAMEPAD_PLAYER2) | 0); /* check that GAMEPAD_PLAYER2 is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_PLAYER3(unsigned long long *o)
-{
- int n = (GAMEPAD_PLAYER3) <= 0;
- *o = (unsigned long long)((GAMEPAD_PLAYER3) | 0); /* check that GAMEPAD_PLAYER3 is an integer */
- return n;
-}
-
-static int _cffi_const_GAMEPAD_PLAYER4(unsigned long long *o)
-{
- int n = (GAMEPAD_PLAYER4) <= 0;
- *o = (unsigned long long)((GAMEPAD_PLAYER4) | 0); /* check that GAMEPAD_PLAYER4 is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_NONE(unsigned long long *o)
-{
- int n = (GESTURE_NONE) <= 0;
- *o = (unsigned long long)((GESTURE_NONE) | 0); /* check that GESTURE_NONE is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_TAP(unsigned long long *o)
-{
- int n = (GESTURE_TAP) <= 0;
- *o = (unsigned long long)((GESTURE_TAP) | 0); /* check that GESTURE_TAP is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_DOUBLETAP(unsigned long long *o)
-{
- int n = (GESTURE_DOUBLETAP) <= 0;
- *o = (unsigned long long)((GESTURE_DOUBLETAP) | 0); /* check that GESTURE_DOUBLETAP is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_HOLD(unsigned long long *o)
-{
- int n = (GESTURE_HOLD) <= 0;
- *o = (unsigned long long)((GESTURE_HOLD) | 0); /* check that GESTURE_HOLD is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_DRAG(unsigned long long *o)
-{
- int n = (GESTURE_DRAG) <= 0;
- *o = (unsigned long long)((GESTURE_DRAG) | 0); /* check that GESTURE_DRAG is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_SWIPE_RIGHT(unsigned long long *o)
-{
- int n = (GESTURE_SWIPE_RIGHT) <= 0;
- *o = (unsigned long long)((GESTURE_SWIPE_RIGHT) | 0); /* check that GESTURE_SWIPE_RIGHT is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_SWIPE_LEFT(unsigned long long *o)
-{
- int n = (GESTURE_SWIPE_LEFT) <= 0;
- *o = (unsigned long long)((GESTURE_SWIPE_LEFT) | 0); /* check that GESTURE_SWIPE_LEFT is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_SWIPE_UP(unsigned long long *o)
-{
- int n = (GESTURE_SWIPE_UP) <= 0;
- *o = (unsigned long long)((GESTURE_SWIPE_UP) | 0); /* check that GESTURE_SWIPE_UP is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_SWIPE_DOWN(unsigned long long *o)
-{
- int n = (GESTURE_SWIPE_DOWN) <= 0;
- *o = (unsigned long long)((GESTURE_SWIPE_DOWN) | 0); /* check that GESTURE_SWIPE_DOWN is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_PINCH_IN(unsigned long long *o)
-{
- int n = (GESTURE_PINCH_IN) <= 0;
- *o = (unsigned long long)((GESTURE_PINCH_IN) | 0); /* check that GESTURE_PINCH_IN is an integer */
- return n;
-}
-
-static int _cffi_const_GESTURE_PINCH_OUT(unsigned long long *o)
-{
- int n = (GESTURE_PINCH_OUT) <= 0;
- *o = (unsigned long long)((GESTURE_PINCH_OUT) | 0); /* check that GESTURE_PINCH_OUT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_APOSTROPHE(unsigned long long *o)
-{
- int n = (KEY_APOSTROPHE) <= 0;
- *o = (unsigned long long)((KEY_APOSTROPHE) | 0); /* check that KEY_APOSTROPHE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_COMMA(unsigned long long *o)
-{
- int n = (KEY_COMMA) <= 0;
- *o = (unsigned long long)((KEY_COMMA) | 0); /* check that KEY_COMMA is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_MINUS(unsigned long long *o)
-{
- int n = (KEY_MINUS) <= 0;
- *o = (unsigned long long)((KEY_MINUS) | 0); /* check that KEY_MINUS is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_PERIOD(unsigned long long *o)
-{
- int n = (KEY_PERIOD) <= 0;
- *o = (unsigned long long)((KEY_PERIOD) | 0); /* check that KEY_PERIOD is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_SLASH(unsigned long long *o)
-{
- int n = (KEY_SLASH) <= 0;
- *o = (unsigned long long)((KEY_SLASH) | 0); /* check that KEY_SLASH is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_ZERO(unsigned long long *o)
-{
- int n = (KEY_ZERO) <= 0;
- *o = (unsigned long long)((KEY_ZERO) | 0); /* check that KEY_ZERO is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_ONE(unsigned long long *o)
-{
- int n = (KEY_ONE) <= 0;
- *o = (unsigned long long)((KEY_ONE) | 0); /* check that KEY_ONE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_TWO(unsigned long long *o)
-{
- int n = (KEY_TWO) <= 0;
- *o = (unsigned long long)((KEY_TWO) | 0); /* check that KEY_TWO is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_THREE(unsigned long long *o)
-{
- int n = (KEY_THREE) <= 0;
- *o = (unsigned long long)((KEY_THREE) | 0); /* check that KEY_THREE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_FOUR(unsigned long long *o)
-{
- int n = (KEY_FOUR) <= 0;
- *o = (unsigned long long)((KEY_FOUR) | 0); /* check that KEY_FOUR is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_FIVE(unsigned long long *o)
-{
- int n = (KEY_FIVE) <= 0;
- *o = (unsigned long long)((KEY_FIVE) | 0); /* check that KEY_FIVE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_SIX(unsigned long long *o)
-{
- int n = (KEY_SIX) <= 0;
- *o = (unsigned long long)((KEY_SIX) | 0); /* check that KEY_SIX is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_SEVEN(unsigned long long *o)
-{
- int n = (KEY_SEVEN) <= 0;
- *o = (unsigned long long)((KEY_SEVEN) | 0); /* check that KEY_SEVEN is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_EIGHT(unsigned long long *o)
-{
- int n = (KEY_EIGHT) <= 0;
- *o = (unsigned long long)((KEY_EIGHT) | 0); /* check that KEY_EIGHT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_NINE(unsigned long long *o)
-{
- int n = (KEY_NINE) <= 0;
- *o = (unsigned long long)((KEY_NINE) | 0); /* check that KEY_NINE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_SEMICOLON(unsigned long long *o)
-{
- int n = (KEY_SEMICOLON) <= 0;
- *o = (unsigned long long)((KEY_SEMICOLON) | 0); /* check that KEY_SEMICOLON is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_EQUAL(unsigned long long *o)
-{
- int n = (KEY_EQUAL) <= 0;
- *o = (unsigned long long)((KEY_EQUAL) | 0); /* check that KEY_EQUAL is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_A(unsigned long long *o)
-{
- int n = (KEY_A) <= 0;
- *o = (unsigned long long)((KEY_A) | 0); /* check that KEY_A is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_B(unsigned long long *o)
-{
- int n = (KEY_B) <= 0;
- *o = (unsigned long long)((KEY_B) | 0); /* check that KEY_B is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_C(unsigned long long *o)
-{
- int n = (KEY_C) <= 0;
- *o = (unsigned long long)((KEY_C) | 0); /* check that KEY_C is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_D(unsigned long long *o)
-{
- int n = (KEY_D) <= 0;
- *o = (unsigned long long)((KEY_D) | 0); /* check that KEY_D is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_E(unsigned long long *o)
-{
- int n = (KEY_E) <= 0;
- *o = (unsigned long long)((KEY_E) | 0); /* check that KEY_E is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F(unsigned long long *o)
-{
- int n = (KEY_F) <= 0;
- *o = (unsigned long long)((KEY_F) | 0); /* check that KEY_F is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_G(unsigned long long *o)
-{
- int n = (KEY_G) <= 0;
- *o = (unsigned long long)((KEY_G) | 0); /* check that KEY_G is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_H(unsigned long long *o)
-{
- int n = (KEY_H) <= 0;
- *o = (unsigned long long)((KEY_H) | 0); /* check that KEY_H is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_I(unsigned long long *o)
-{
- int n = (KEY_I) <= 0;
- *o = (unsigned long long)((KEY_I) | 0); /* check that KEY_I is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_J(unsigned long long *o)
-{
- int n = (KEY_J) <= 0;
- *o = (unsigned long long)((KEY_J) | 0); /* check that KEY_J is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_K(unsigned long long *o)
-{
- int n = (KEY_K) <= 0;
- *o = (unsigned long long)((KEY_K) | 0); /* check that KEY_K is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_L(unsigned long long *o)
-{
- int n = (KEY_L) <= 0;
- *o = (unsigned long long)((KEY_L) | 0); /* check that KEY_L is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_M(unsigned long long *o)
-{
- int n = (KEY_M) <= 0;
- *o = (unsigned long long)((KEY_M) | 0); /* check that KEY_M is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_N(unsigned long long *o)
-{
- int n = (KEY_N) <= 0;
- *o = (unsigned long long)((KEY_N) | 0); /* check that KEY_N is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_O(unsigned long long *o)
-{
- int n = (KEY_O) <= 0;
- *o = (unsigned long long)((KEY_O) | 0); /* check that KEY_O is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_P(unsigned long long *o)
-{
- int n = (KEY_P) <= 0;
- *o = (unsigned long long)((KEY_P) | 0); /* check that KEY_P is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_Q(unsigned long long *o)
-{
- int n = (KEY_Q) <= 0;
- *o = (unsigned long long)((KEY_Q) | 0); /* check that KEY_Q is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_R(unsigned long long *o)
-{
- int n = (KEY_R) <= 0;
- *o = (unsigned long long)((KEY_R) | 0); /* check that KEY_R is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_S(unsigned long long *o)
-{
- int n = (KEY_S) <= 0;
- *o = (unsigned long long)((KEY_S) | 0); /* check that KEY_S is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_T(unsigned long long *o)
-{
- int n = (KEY_T) <= 0;
- *o = (unsigned long long)((KEY_T) | 0); /* check that KEY_T is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_U(unsigned long long *o)
-{
- int n = (KEY_U) <= 0;
- *o = (unsigned long long)((KEY_U) | 0); /* check that KEY_U is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_V(unsigned long long *o)
-{
- int n = (KEY_V) <= 0;
- *o = (unsigned long long)((KEY_V) | 0); /* check that KEY_V is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_W(unsigned long long *o)
-{
- int n = (KEY_W) <= 0;
- *o = (unsigned long long)((KEY_W) | 0); /* check that KEY_W is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_X(unsigned long long *o)
-{
- int n = (KEY_X) <= 0;
- *o = (unsigned long long)((KEY_X) | 0); /* check that KEY_X is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_Y(unsigned long long *o)
-{
- int n = (KEY_Y) <= 0;
- *o = (unsigned long long)((KEY_Y) | 0); /* check that KEY_Y is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_Z(unsigned long long *o)
-{
- int n = (KEY_Z) <= 0;
- *o = (unsigned long long)((KEY_Z) | 0); /* check that KEY_Z is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_SPACE(unsigned long long *o)
-{
- int n = (KEY_SPACE) <= 0;
- *o = (unsigned long long)((KEY_SPACE) | 0); /* check that KEY_SPACE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_ESCAPE(unsigned long long *o)
-{
- int n = (KEY_ESCAPE) <= 0;
- *o = (unsigned long long)((KEY_ESCAPE) | 0); /* check that KEY_ESCAPE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_ENTER(unsigned long long *o)
-{
- int n = (KEY_ENTER) <= 0;
- *o = (unsigned long long)((KEY_ENTER) | 0); /* check that KEY_ENTER is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_TAB(unsigned long long *o)
-{
- int n = (KEY_TAB) <= 0;
- *o = (unsigned long long)((KEY_TAB) | 0); /* check that KEY_TAB is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_BACKSPACE(unsigned long long *o)
-{
- int n = (KEY_BACKSPACE) <= 0;
- *o = (unsigned long long)((KEY_BACKSPACE) | 0); /* check that KEY_BACKSPACE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_INSERT(unsigned long long *o)
-{
- int n = (KEY_INSERT) <= 0;
- *o = (unsigned long long)((KEY_INSERT) | 0); /* check that KEY_INSERT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_DELETE(unsigned long long *o)
-{
- int n = (KEY_DELETE) <= 0;
- *o = (unsigned long long)((KEY_DELETE) | 0); /* check that KEY_DELETE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_RIGHT(unsigned long long *o)
-{
- int n = (KEY_RIGHT) <= 0;
- *o = (unsigned long long)((KEY_RIGHT) | 0); /* check that KEY_RIGHT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_LEFT(unsigned long long *o)
-{
- int n = (KEY_LEFT) <= 0;
- *o = (unsigned long long)((KEY_LEFT) | 0); /* check that KEY_LEFT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_DOWN(unsigned long long *o)
-{
- int n = (KEY_DOWN) <= 0;
- *o = (unsigned long long)((KEY_DOWN) | 0); /* check that KEY_DOWN is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_UP(unsigned long long *o)
-{
- int n = (KEY_UP) <= 0;
- *o = (unsigned long long)((KEY_UP) | 0); /* check that KEY_UP is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_PAGE_UP(unsigned long long *o)
-{
- int n = (KEY_PAGE_UP) <= 0;
- *o = (unsigned long long)((KEY_PAGE_UP) | 0); /* check that KEY_PAGE_UP is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_PAGE_DOWN(unsigned long long *o)
-{
- int n = (KEY_PAGE_DOWN) <= 0;
- *o = (unsigned long long)((KEY_PAGE_DOWN) | 0); /* check that KEY_PAGE_DOWN is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_HOME(unsigned long long *o)
-{
- int n = (KEY_HOME) <= 0;
- *o = (unsigned long long)((KEY_HOME) | 0); /* check that KEY_HOME is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_END(unsigned long long *o)
-{
- int n = (KEY_END) <= 0;
- *o = (unsigned long long)((KEY_END) | 0); /* check that KEY_END is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_CAPS_LOCK(unsigned long long *o)
-{
- int n = (KEY_CAPS_LOCK) <= 0;
- *o = (unsigned long long)((KEY_CAPS_LOCK) | 0); /* check that KEY_CAPS_LOCK is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_SCROLL_LOCK(unsigned long long *o)
-{
- int n = (KEY_SCROLL_LOCK) <= 0;
- *o = (unsigned long long)((KEY_SCROLL_LOCK) | 0); /* check that KEY_SCROLL_LOCK is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_NUM_LOCK(unsigned long long *o)
-{
- int n = (KEY_NUM_LOCK) <= 0;
- *o = (unsigned long long)((KEY_NUM_LOCK) | 0); /* check that KEY_NUM_LOCK is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_PRINT_SCREEN(unsigned long long *o)
-{
- int n = (KEY_PRINT_SCREEN) <= 0;
- *o = (unsigned long long)((KEY_PRINT_SCREEN) | 0); /* check that KEY_PRINT_SCREEN is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_PAUSE(unsigned long long *o)
-{
- int n = (KEY_PAUSE) <= 0;
- *o = (unsigned long long)((KEY_PAUSE) | 0); /* check that KEY_PAUSE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F1(unsigned long long *o)
-{
- int n = (KEY_F1) <= 0;
- *o = (unsigned long long)((KEY_F1) | 0); /* check that KEY_F1 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F2(unsigned long long *o)
-{
- int n = (KEY_F2) <= 0;
- *o = (unsigned long long)((KEY_F2) | 0); /* check that KEY_F2 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F3(unsigned long long *o)
-{
- int n = (KEY_F3) <= 0;
- *o = (unsigned long long)((KEY_F3) | 0); /* check that KEY_F3 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F4(unsigned long long *o)
-{
- int n = (KEY_F4) <= 0;
- *o = (unsigned long long)((KEY_F4) | 0); /* check that KEY_F4 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F5(unsigned long long *o)
-{
- int n = (KEY_F5) <= 0;
- *o = (unsigned long long)((KEY_F5) | 0); /* check that KEY_F5 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F6(unsigned long long *o)
-{
- int n = (KEY_F6) <= 0;
- *o = (unsigned long long)((KEY_F6) | 0); /* check that KEY_F6 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F7(unsigned long long *o)
-{
- int n = (KEY_F7) <= 0;
- *o = (unsigned long long)((KEY_F7) | 0); /* check that KEY_F7 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F8(unsigned long long *o)
-{
- int n = (KEY_F8) <= 0;
- *o = (unsigned long long)((KEY_F8) | 0); /* check that KEY_F8 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F9(unsigned long long *o)
-{
- int n = (KEY_F9) <= 0;
- *o = (unsigned long long)((KEY_F9) | 0); /* check that KEY_F9 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F10(unsigned long long *o)
-{
- int n = (KEY_F10) <= 0;
- *o = (unsigned long long)((KEY_F10) | 0); /* check that KEY_F10 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F11(unsigned long long *o)
-{
- int n = (KEY_F11) <= 0;
- *o = (unsigned long long)((KEY_F11) | 0); /* check that KEY_F11 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_F12(unsigned long long *o)
-{
- int n = (KEY_F12) <= 0;
- *o = (unsigned long long)((KEY_F12) | 0); /* check that KEY_F12 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_LEFT_SHIFT(unsigned long long *o)
-{
- int n = (KEY_LEFT_SHIFT) <= 0;
- *o = (unsigned long long)((KEY_LEFT_SHIFT) | 0); /* check that KEY_LEFT_SHIFT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_LEFT_CONTROL(unsigned long long *o)
-{
- int n = (KEY_LEFT_CONTROL) <= 0;
- *o = (unsigned long long)((KEY_LEFT_CONTROL) | 0); /* check that KEY_LEFT_CONTROL is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_LEFT_ALT(unsigned long long *o)
-{
- int n = (KEY_LEFT_ALT) <= 0;
- *o = (unsigned long long)((KEY_LEFT_ALT) | 0); /* check that KEY_LEFT_ALT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_LEFT_SUPER(unsigned long long *o)
-{
- int n = (KEY_LEFT_SUPER) <= 0;
- *o = (unsigned long long)((KEY_LEFT_SUPER) | 0); /* check that KEY_LEFT_SUPER is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_RIGHT_SHIFT(unsigned long long *o)
-{
- int n = (KEY_RIGHT_SHIFT) <= 0;
- *o = (unsigned long long)((KEY_RIGHT_SHIFT) | 0); /* check that KEY_RIGHT_SHIFT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_RIGHT_CONTROL(unsigned long long *o)
-{
- int n = (KEY_RIGHT_CONTROL) <= 0;
- *o = (unsigned long long)((KEY_RIGHT_CONTROL) | 0); /* check that KEY_RIGHT_CONTROL is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_RIGHT_ALT(unsigned long long *o)
-{
- int n = (KEY_RIGHT_ALT) <= 0;
- *o = (unsigned long long)((KEY_RIGHT_ALT) | 0); /* check that KEY_RIGHT_ALT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_RIGHT_SUPER(unsigned long long *o)
-{
- int n = (KEY_RIGHT_SUPER) <= 0;
- *o = (unsigned long long)((KEY_RIGHT_SUPER) | 0); /* check that KEY_RIGHT_SUPER is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KB_MENU(unsigned long long *o)
-{
- int n = (KEY_KB_MENU) <= 0;
- *o = (unsigned long long)((KEY_KB_MENU) | 0); /* check that KEY_KB_MENU is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_LEFT_BRACKET(unsigned long long *o)
-{
- int n = (KEY_LEFT_BRACKET) <= 0;
- *o = (unsigned long long)((KEY_LEFT_BRACKET) | 0); /* check that KEY_LEFT_BRACKET is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_BACKSLASH(unsigned long long *o)
-{
- int n = (KEY_BACKSLASH) <= 0;
- *o = (unsigned long long)((KEY_BACKSLASH) | 0); /* check that KEY_BACKSLASH is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_RIGHT_BRACKET(unsigned long long *o)
-{
- int n = (KEY_RIGHT_BRACKET) <= 0;
- *o = (unsigned long long)((KEY_RIGHT_BRACKET) | 0); /* check that KEY_RIGHT_BRACKET is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_GRAVE(unsigned long long *o)
-{
- int n = (KEY_GRAVE) <= 0;
- *o = (unsigned long long)((KEY_GRAVE) | 0); /* check that KEY_GRAVE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_0(unsigned long long *o)
-{
- int n = (KEY_KP_0) <= 0;
- *o = (unsigned long long)((KEY_KP_0) | 0); /* check that KEY_KP_0 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_1(unsigned long long *o)
-{
- int n = (KEY_KP_1) <= 0;
- *o = (unsigned long long)((KEY_KP_1) | 0); /* check that KEY_KP_1 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_2(unsigned long long *o)
-{
- int n = (KEY_KP_2) <= 0;
- *o = (unsigned long long)((KEY_KP_2) | 0); /* check that KEY_KP_2 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_3(unsigned long long *o)
-{
- int n = (KEY_KP_3) <= 0;
- *o = (unsigned long long)((KEY_KP_3) | 0); /* check that KEY_KP_3 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_4(unsigned long long *o)
-{
- int n = (KEY_KP_4) <= 0;
- *o = (unsigned long long)((KEY_KP_4) | 0); /* check that KEY_KP_4 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_5(unsigned long long *o)
-{
- int n = (KEY_KP_5) <= 0;
- *o = (unsigned long long)((KEY_KP_5) | 0); /* check that KEY_KP_5 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_6(unsigned long long *o)
-{
- int n = (KEY_KP_6) <= 0;
- *o = (unsigned long long)((KEY_KP_6) | 0); /* check that KEY_KP_6 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_7(unsigned long long *o)
-{
- int n = (KEY_KP_7) <= 0;
- *o = (unsigned long long)((KEY_KP_7) | 0); /* check that KEY_KP_7 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_8(unsigned long long *o)
-{
- int n = (KEY_KP_8) <= 0;
- *o = (unsigned long long)((KEY_KP_8) | 0); /* check that KEY_KP_8 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_9(unsigned long long *o)
-{
- int n = (KEY_KP_9) <= 0;
- *o = (unsigned long long)((KEY_KP_9) | 0); /* check that KEY_KP_9 is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_DECIMAL(unsigned long long *o)
-{
- int n = (KEY_KP_DECIMAL) <= 0;
- *o = (unsigned long long)((KEY_KP_DECIMAL) | 0); /* check that KEY_KP_DECIMAL is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_DIVIDE(unsigned long long *o)
-{
- int n = (KEY_KP_DIVIDE) <= 0;
- *o = (unsigned long long)((KEY_KP_DIVIDE) | 0); /* check that KEY_KP_DIVIDE is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_MULTIPLY(unsigned long long *o)
-{
- int n = (KEY_KP_MULTIPLY) <= 0;
- *o = (unsigned long long)((KEY_KP_MULTIPLY) | 0); /* check that KEY_KP_MULTIPLY is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_SUBTRACT(unsigned long long *o)
-{
- int n = (KEY_KP_SUBTRACT) <= 0;
- *o = (unsigned long long)((KEY_KP_SUBTRACT) | 0); /* check that KEY_KP_SUBTRACT is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_ADD(unsigned long long *o)
-{
- int n = (KEY_KP_ADD) <= 0;
- *o = (unsigned long long)((KEY_KP_ADD) | 0); /* check that KEY_KP_ADD is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_ENTER(unsigned long long *o)
-{
- int n = (KEY_KP_ENTER) <= 0;
- *o = (unsigned long long)((KEY_KP_ENTER) | 0); /* check that KEY_KP_ENTER is an integer */
- return n;
-}
-
-static int _cffi_const_KEY_KP_EQUAL(unsigned long long *o)
-{
- int n = (KEY_KP_EQUAL) <= 0;
- *o = (unsigned long long)((KEY_KP_EQUAL) | 0); /* check that KEY_KP_EQUAL is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_ALBEDO(unsigned long long *o)
-{
- int n = (MAP_ALBEDO) <= 0;
- *o = (unsigned long long)((MAP_ALBEDO) | 0); /* check that MAP_ALBEDO is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_METALNESS(unsigned long long *o)
-{
- int n = (MAP_METALNESS) <= 0;
- *o = (unsigned long long)((MAP_METALNESS) | 0); /* check that MAP_METALNESS is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_NORMAL(unsigned long long *o)
-{
- int n = (MAP_NORMAL) <= 0;
- *o = (unsigned long long)((MAP_NORMAL) | 0); /* check that MAP_NORMAL is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_ROUGHNESS(unsigned long long *o)
-{
- int n = (MAP_ROUGHNESS) <= 0;
- *o = (unsigned long long)((MAP_ROUGHNESS) | 0); /* check that MAP_ROUGHNESS is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_OCCLUSION(unsigned long long *o)
-{
- int n = (MAP_OCCLUSION) <= 0;
- *o = (unsigned long long)((MAP_OCCLUSION) | 0); /* check that MAP_OCCLUSION is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_EMISSION(unsigned long long *o)
-{
- int n = (MAP_EMISSION) <= 0;
- *o = (unsigned long long)((MAP_EMISSION) | 0); /* check that MAP_EMISSION is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_HEIGHT(unsigned long long *o)
-{
- int n = (MAP_HEIGHT) <= 0;
- *o = (unsigned long long)((MAP_HEIGHT) | 0); /* check that MAP_HEIGHT is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_CUBEMAP(unsigned long long *o)
-{
- int n = (MAP_CUBEMAP) <= 0;
- *o = (unsigned long long)((MAP_CUBEMAP) | 0); /* check that MAP_CUBEMAP is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_IRRADIANCE(unsigned long long *o)
-{
- int n = (MAP_IRRADIANCE) <= 0;
- *o = (unsigned long long)((MAP_IRRADIANCE) | 0); /* check that MAP_IRRADIANCE is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_PREFILTER(unsigned long long *o)
-{
- int n = (MAP_PREFILTER) <= 0;
- *o = (unsigned long long)((MAP_PREFILTER) | 0); /* check that MAP_PREFILTER is an integer */
- return n;
-}
-
-static int _cffi_const_MAP_BRDF(unsigned long long *o)
-{
- int n = (MAP_BRDF) <= 0;
- *o = (unsigned long long)((MAP_BRDF) | 0); /* check that MAP_BRDF is an integer */
- return n;
-}
-
-static int _cffi_const_MOUSE_LEFT_BUTTON(unsigned long long *o)
-{
- int n = (MOUSE_LEFT_BUTTON) <= 0;
- *o = (unsigned long long)((MOUSE_LEFT_BUTTON) | 0); /* check that MOUSE_LEFT_BUTTON is an integer */
- return n;
-}
-
-static int _cffi_const_MOUSE_RIGHT_BUTTON(unsigned long long *o)
-{
- int n = (MOUSE_RIGHT_BUTTON) <= 0;
- *o = (unsigned long long)((MOUSE_RIGHT_BUTTON) | 0); /* check that MOUSE_RIGHT_BUTTON is an integer */
- return n;
-}
-
-static int _cffi_const_MOUSE_MIDDLE_BUTTON(unsigned long long *o)
-{
- int n = (MOUSE_MIDDLE_BUTTON) <= 0;
- *o = (unsigned long long)((MOUSE_MIDDLE_BUTTON) | 0); /* check that MOUSE_MIDDLE_BUTTON is an integer */
- return n;
-}
-
-static int _cffi_const_NPT_9PATCH(unsigned long long *o)
-{
- int n = (NPT_9PATCH) <= 0;
- *o = (unsigned long long)((NPT_9PATCH) | 0); /* check that NPT_9PATCH is an integer */
- return n;
-}
-
-static int _cffi_const_NPT_3PATCH_VERTICAL(unsigned long long *o)
-{
- int n = (NPT_3PATCH_VERTICAL) <= 0;
- *o = (unsigned long long)((NPT_3PATCH_VERTICAL) | 0); /* check that NPT_3PATCH_VERTICAL is an integer */
- return n;
-}
-
-static int _cffi_const_NPT_3PATCH_HORIZONTAL(unsigned long long *o)
-{
- int n = (NPT_3PATCH_HORIZONTAL) <= 0;
- *o = (unsigned long long)((NPT_3PATCH_HORIZONTAL) | 0); /* check that NPT_3PATCH_HORIZONTAL is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_GRAYSCALE(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_GRAYSCALE) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_GRAYSCALE) | 0); /* check that UNCOMPRESSED_GRAYSCALE is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_GRAY_ALPHA(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_GRAY_ALPHA) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_GRAY_ALPHA) | 0); /* check that UNCOMPRESSED_GRAY_ALPHA is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_R5G6B5(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_R5G6B5) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_R5G6B5) | 0); /* check that UNCOMPRESSED_R5G6B5 is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_R8G8B8(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_R8G8B8) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_R8G8B8) | 0); /* check that UNCOMPRESSED_R8G8B8 is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_R5G5B5A1(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_R5G5B5A1) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_R5G5B5A1) | 0); /* check that UNCOMPRESSED_R5G5B5A1 is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_R4G4B4A4(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_R4G4B4A4) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_R4G4B4A4) | 0); /* check that UNCOMPRESSED_R4G4B4A4 is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_R8G8B8A8(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_R8G8B8A8) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_R8G8B8A8) | 0); /* check that UNCOMPRESSED_R8G8B8A8 is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_R32(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_R32) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_R32) | 0); /* check that UNCOMPRESSED_R32 is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_R32G32B32(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_R32G32B32) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_R32G32B32) | 0); /* check that UNCOMPRESSED_R32G32B32 is an integer */
- return n;
-}
-
-static int _cffi_const_UNCOMPRESSED_R32G32B32A32(unsigned long long *o)
-{
- int n = (UNCOMPRESSED_R32G32B32A32) <= 0;
- *o = (unsigned long long)((UNCOMPRESSED_R32G32B32A32) | 0); /* check that UNCOMPRESSED_R32G32B32A32 is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_DXT1_RGB(unsigned long long *o)
-{
- int n = (COMPRESSED_DXT1_RGB) <= 0;
- *o = (unsigned long long)((COMPRESSED_DXT1_RGB) | 0); /* check that COMPRESSED_DXT1_RGB is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_DXT1_RGBA(unsigned long long *o)
-{
- int n = (COMPRESSED_DXT1_RGBA) <= 0;
- *o = (unsigned long long)((COMPRESSED_DXT1_RGBA) | 0); /* check that COMPRESSED_DXT1_RGBA is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_DXT3_RGBA(unsigned long long *o)
-{
- int n = (COMPRESSED_DXT3_RGBA) <= 0;
- *o = (unsigned long long)((COMPRESSED_DXT3_RGBA) | 0); /* check that COMPRESSED_DXT3_RGBA is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_DXT5_RGBA(unsigned long long *o)
-{
- int n = (COMPRESSED_DXT5_RGBA) <= 0;
- *o = (unsigned long long)((COMPRESSED_DXT5_RGBA) | 0); /* check that COMPRESSED_DXT5_RGBA is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_ETC1_RGB(unsigned long long *o)
-{
- int n = (COMPRESSED_ETC1_RGB) <= 0;
- *o = (unsigned long long)((COMPRESSED_ETC1_RGB) | 0); /* check that COMPRESSED_ETC1_RGB is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_ETC2_RGB(unsigned long long *o)
-{
- int n = (COMPRESSED_ETC2_RGB) <= 0;
- *o = (unsigned long long)((COMPRESSED_ETC2_RGB) | 0); /* check that COMPRESSED_ETC2_RGB is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_ETC2_EAC_RGBA(unsigned long long *o)
-{
- int n = (COMPRESSED_ETC2_EAC_RGBA) <= 0;
- *o = (unsigned long long)((COMPRESSED_ETC2_EAC_RGBA) | 0); /* check that COMPRESSED_ETC2_EAC_RGBA is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_PVRT_RGB(unsigned long long *o)
-{
- int n = (COMPRESSED_PVRT_RGB) <= 0;
- *o = (unsigned long long)((COMPRESSED_PVRT_RGB) | 0); /* check that COMPRESSED_PVRT_RGB is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_PVRT_RGBA(unsigned long long *o)
-{
- int n = (COMPRESSED_PVRT_RGBA) <= 0;
- *o = (unsigned long long)((COMPRESSED_PVRT_RGBA) | 0); /* check that COMPRESSED_PVRT_RGBA is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_ASTC_4x4_RGBA(unsigned long long *o)
-{
- int n = (COMPRESSED_ASTC_4x4_RGBA) <= 0;
- *o = (unsigned long long)((COMPRESSED_ASTC_4x4_RGBA) | 0); /* check that COMPRESSED_ASTC_4x4_RGBA is an integer */
- return n;
-}
-
-static int _cffi_const_COMPRESSED_ASTC_8x8_RGBA(unsigned long long *o)
-{
- int n = (COMPRESSED_ASTC_8x8_RGBA) <= 0;
- *o = (unsigned long long)((COMPRESSED_ASTC_8x8_RGBA) | 0); /* check that COMPRESSED_ASTC_8x8_RGBA is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_VERTEX_POSITION(unsigned long long *o)
-{
- int n = (LOC_VERTEX_POSITION) <= 0;
- *o = (unsigned long long)((LOC_VERTEX_POSITION) | 0); /* check that LOC_VERTEX_POSITION is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_VERTEX_TEXCOORD01(unsigned long long *o)
-{
- int n = (LOC_VERTEX_TEXCOORD01) <= 0;
- *o = (unsigned long long)((LOC_VERTEX_TEXCOORD01) | 0); /* check that LOC_VERTEX_TEXCOORD01 is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_VERTEX_TEXCOORD02(unsigned long long *o)
-{
- int n = (LOC_VERTEX_TEXCOORD02) <= 0;
- *o = (unsigned long long)((LOC_VERTEX_TEXCOORD02) | 0); /* check that LOC_VERTEX_TEXCOORD02 is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_VERTEX_NORMAL(unsigned long long *o)
-{
- int n = (LOC_VERTEX_NORMAL) <= 0;
- *o = (unsigned long long)((LOC_VERTEX_NORMAL) | 0); /* check that LOC_VERTEX_NORMAL is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_VERTEX_TANGENT(unsigned long long *o)
-{
- int n = (LOC_VERTEX_TANGENT) <= 0;
- *o = (unsigned long long)((LOC_VERTEX_TANGENT) | 0); /* check that LOC_VERTEX_TANGENT is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_VERTEX_COLOR(unsigned long long *o)
-{
- int n = (LOC_VERTEX_COLOR) <= 0;
- *o = (unsigned long long)((LOC_VERTEX_COLOR) | 0); /* check that LOC_VERTEX_COLOR is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MATRIX_MVP(unsigned long long *o)
-{
- int n = (LOC_MATRIX_MVP) <= 0;
- *o = (unsigned long long)((LOC_MATRIX_MVP) | 0); /* check that LOC_MATRIX_MVP is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MATRIX_MODEL(unsigned long long *o)
-{
- int n = (LOC_MATRIX_MODEL) <= 0;
- *o = (unsigned long long)((LOC_MATRIX_MODEL) | 0); /* check that LOC_MATRIX_MODEL is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MATRIX_VIEW(unsigned long long *o)
-{
- int n = (LOC_MATRIX_VIEW) <= 0;
- *o = (unsigned long long)((LOC_MATRIX_VIEW) | 0); /* check that LOC_MATRIX_VIEW is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MATRIX_PROJECTION(unsigned long long *o)
-{
- int n = (LOC_MATRIX_PROJECTION) <= 0;
- *o = (unsigned long long)((LOC_MATRIX_PROJECTION) | 0); /* check that LOC_MATRIX_PROJECTION is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_VECTOR_VIEW(unsigned long long *o)
-{
- int n = (LOC_VECTOR_VIEW) <= 0;
- *o = (unsigned long long)((LOC_VECTOR_VIEW) | 0); /* check that LOC_VECTOR_VIEW is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_COLOR_DIFFUSE(unsigned long long *o)
-{
- int n = (LOC_COLOR_DIFFUSE) <= 0;
- *o = (unsigned long long)((LOC_COLOR_DIFFUSE) | 0); /* check that LOC_COLOR_DIFFUSE is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_COLOR_SPECULAR(unsigned long long *o)
-{
- int n = (LOC_COLOR_SPECULAR) <= 0;
- *o = (unsigned long long)((LOC_COLOR_SPECULAR) | 0); /* check that LOC_COLOR_SPECULAR is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_COLOR_AMBIENT(unsigned long long *o)
-{
- int n = (LOC_COLOR_AMBIENT) <= 0;
- *o = (unsigned long long)((LOC_COLOR_AMBIENT) | 0); /* check that LOC_COLOR_AMBIENT is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_ALBEDO(unsigned long long *o)
-{
- int n = (LOC_MAP_ALBEDO) <= 0;
- *o = (unsigned long long)((LOC_MAP_ALBEDO) | 0); /* check that LOC_MAP_ALBEDO is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_METALNESS(unsigned long long *o)
-{
- int n = (LOC_MAP_METALNESS) <= 0;
- *o = (unsigned long long)((LOC_MAP_METALNESS) | 0); /* check that LOC_MAP_METALNESS is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_NORMAL(unsigned long long *o)
-{
- int n = (LOC_MAP_NORMAL) <= 0;
- *o = (unsigned long long)((LOC_MAP_NORMAL) | 0); /* check that LOC_MAP_NORMAL is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_ROUGHNESS(unsigned long long *o)
-{
- int n = (LOC_MAP_ROUGHNESS) <= 0;
- *o = (unsigned long long)((LOC_MAP_ROUGHNESS) | 0); /* check that LOC_MAP_ROUGHNESS is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_OCCLUSION(unsigned long long *o)
-{
- int n = (LOC_MAP_OCCLUSION) <= 0;
- *o = (unsigned long long)((LOC_MAP_OCCLUSION) | 0); /* check that LOC_MAP_OCCLUSION is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_EMISSION(unsigned long long *o)
-{
- int n = (LOC_MAP_EMISSION) <= 0;
- *o = (unsigned long long)((LOC_MAP_EMISSION) | 0); /* check that LOC_MAP_EMISSION is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_HEIGHT(unsigned long long *o)
-{
- int n = (LOC_MAP_HEIGHT) <= 0;
- *o = (unsigned long long)((LOC_MAP_HEIGHT) | 0); /* check that LOC_MAP_HEIGHT is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_CUBEMAP(unsigned long long *o)
-{
- int n = (LOC_MAP_CUBEMAP) <= 0;
- *o = (unsigned long long)((LOC_MAP_CUBEMAP) | 0); /* check that LOC_MAP_CUBEMAP is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_IRRADIANCE(unsigned long long *o)
-{
- int n = (LOC_MAP_IRRADIANCE) <= 0;
- *o = (unsigned long long)((LOC_MAP_IRRADIANCE) | 0); /* check that LOC_MAP_IRRADIANCE is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_PREFILTER(unsigned long long *o)
-{
- int n = (LOC_MAP_PREFILTER) <= 0;
- *o = (unsigned long long)((LOC_MAP_PREFILTER) | 0); /* check that LOC_MAP_PREFILTER is an integer */
- return n;
-}
-
-static int _cffi_const_LOC_MAP_BRDF(unsigned long long *o)
-{
- int n = (LOC_MAP_BRDF) <= 0;
- *o = (unsigned long long)((LOC_MAP_BRDF) | 0); /* check that LOC_MAP_BRDF is an integer */
- return n;
-}
-
-static int _cffi_const_UNIFORM_FLOAT(unsigned long long *o)
-{
- int n = (UNIFORM_FLOAT) <= 0;
- *o = (unsigned long long)((UNIFORM_FLOAT) | 0); /* check that UNIFORM_FLOAT is an integer */
- return n;
-}
-
-static int _cffi_const_UNIFORM_VEC2(unsigned long long *o)
-{
- int n = (UNIFORM_VEC2) <= 0;
- *o = (unsigned long long)((UNIFORM_VEC2) | 0); /* check that UNIFORM_VEC2 is an integer */
- return n;
-}
-
-static int _cffi_const_UNIFORM_VEC3(unsigned long long *o)
-{
- int n = (UNIFORM_VEC3) <= 0;
- *o = (unsigned long long)((UNIFORM_VEC3) | 0); /* check that UNIFORM_VEC3 is an integer */
- return n;
-}
-
-static int _cffi_const_UNIFORM_VEC4(unsigned long long *o)
-{
- int n = (UNIFORM_VEC4) <= 0;
- *o = (unsigned long long)((UNIFORM_VEC4) | 0); /* check that UNIFORM_VEC4 is an integer */
- return n;
-}
-
-static int _cffi_const_UNIFORM_INT(unsigned long long *o)
-{
- int n = (UNIFORM_INT) <= 0;
- *o = (unsigned long long)((UNIFORM_INT) | 0); /* check that UNIFORM_INT is an integer */
- return n;
-}
-
-static int _cffi_const_UNIFORM_IVEC2(unsigned long long *o)
-{
- int n = (UNIFORM_IVEC2) <= 0;
- *o = (unsigned long long)((UNIFORM_IVEC2) | 0); /* check that UNIFORM_IVEC2 is an integer */
- return n;
-}
-
-static int _cffi_const_UNIFORM_IVEC3(unsigned long long *o)
-{
- int n = (UNIFORM_IVEC3) <= 0;
- *o = (unsigned long long)((UNIFORM_IVEC3) | 0); /* check that UNIFORM_IVEC3 is an integer */
- return n;
-}
-
-static int _cffi_const_UNIFORM_IVEC4(unsigned long long *o)
-{
- int n = (UNIFORM_IVEC4) <= 0;
- *o = (unsigned long long)((UNIFORM_IVEC4) | 0); /* check that UNIFORM_IVEC4 is an integer */
- return n;
-}
-
-static int _cffi_const_UNIFORM_SAMPLER2D(unsigned long long *o)
-{
- int n = (UNIFORM_SAMPLER2D) <= 0;
- *o = (unsigned long long)((UNIFORM_SAMPLER2D) | 0); /* check that UNIFORM_SAMPLER2D is an integer */
- return n;
-}
-
-static int _cffi_const_FILTER_POINT(unsigned long long *o)
-{
- int n = (FILTER_POINT) <= 0;
- *o = (unsigned long long)((FILTER_POINT) | 0); /* check that FILTER_POINT is an integer */
- return n;
-}
-
-static int _cffi_const_FILTER_BILINEAR(unsigned long long *o)
-{
- int n = (FILTER_BILINEAR) <= 0;
- *o = (unsigned long long)((FILTER_BILINEAR) | 0); /* check that FILTER_BILINEAR is an integer */
- return n;
-}
-
-static int _cffi_const_FILTER_TRILINEAR(unsigned long long *o)
-{
- int n = (FILTER_TRILINEAR) <= 0;
- *o = (unsigned long long)((FILTER_TRILINEAR) | 0); /* check that FILTER_TRILINEAR is an integer */
- return n;
-}
-
-static int _cffi_const_FILTER_ANISOTROPIC_4X(unsigned long long *o)
-{
- int n = (FILTER_ANISOTROPIC_4X) <= 0;
- *o = (unsigned long long)((FILTER_ANISOTROPIC_4X) | 0); /* check that FILTER_ANISOTROPIC_4X is an integer */
- return n;
-}
-
-static int _cffi_const_FILTER_ANISOTROPIC_8X(unsigned long long *o)
-{
- int n = (FILTER_ANISOTROPIC_8X) <= 0;
- *o = (unsigned long long)((FILTER_ANISOTROPIC_8X) | 0); /* check that FILTER_ANISOTROPIC_8X is an integer */
- return n;
-}
-
-static int _cffi_const_FILTER_ANISOTROPIC_16X(unsigned long long *o)
-{
- int n = (FILTER_ANISOTROPIC_16X) <= 0;
- *o = (unsigned long long)((FILTER_ANISOTROPIC_16X) | 0); /* check that FILTER_ANISOTROPIC_16X is an integer */
- return n;
-}
-
-static int _cffi_const_WRAP_REPEAT(unsigned long long *o)
-{
- int n = (WRAP_REPEAT) <= 0;
- *o = (unsigned long long)((WRAP_REPEAT) | 0); /* check that WRAP_REPEAT is an integer */
- return n;
-}
-
-static int _cffi_const_WRAP_CLAMP(unsigned long long *o)
-{
- int n = (WRAP_CLAMP) <= 0;
- *o = (unsigned long long)((WRAP_CLAMP) | 0); /* check that WRAP_CLAMP is an integer */
- return n;
-}
-
-static int _cffi_const_WRAP_MIRROR_REPEAT(unsigned long long *o)
-{
- int n = (WRAP_MIRROR_REPEAT) <= 0;
- *o = (unsigned long long)((WRAP_MIRROR_REPEAT) | 0); /* check that WRAP_MIRROR_REPEAT is an integer */
- return n;
-}
-
-static int _cffi_const_WRAP_MIRROR_CLAMP(unsigned long long *o)
-{
- int n = (WRAP_MIRROR_CLAMP) <= 0;
- *o = (unsigned long long)((WRAP_MIRROR_CLAMP) | 0); /* check that WRAP_MIRROR_CLAMP is an integer */
- return n;
-}
-
-static int _cffi_const_LOG_ALL(unsigned long long *o)
-{
- int n = (LOG_ALL) <= 0;
- *o = (unsigned long long)((LOG_ALL) | 0); /* check that LOG_ALL is an integer */
- return n;
-}
-
-static int _cffi_const_LOG_TRACE(unsigned long long *o)
-{
- int n = (LOG_TRACE) <= 0;
- *o = (unsigned long long)((LOG_TRACE) | 0); /* check that LOG_TRACE is an integer */
- return n;
-}
-
-static int _cffi_const_LOG_DEBUG(unsigned long long *o)
-{
- int n = (LOG_DEBUG) <= 0;
- *o = (unsigned long long)((LOG_DEBUG) | 0); /* check that LOG_DEBUG is an integer */
- return n;
-}
-
-static int _cffi_const_LOG_INFO(unsigned long long *o)
-{
- int n = (LOG_INFO) <= 0;
- *o = (unsigned long long)((LOG_INFO) | 0); /* check that LOG_INFO is an integer */
- return n;
-}
-
-static int _cffi_const_LOG_WARNING(unsigned long long *o)
-{
- int n = (LOG_WARNING) <= 0;
- *o = (unsigned long long)((LOG_WARNING) | 0); /* check that LOG_WARNING is an integer */
- return n;
-}
-
-static int _cffi_const_LOG_ERROR(unsigned long long *o)
-{
- int n = (LOG_ERROR) <= 0;
- *o = (unsigned long long)((LOG_ERROR) | 0); /* check that LOG_ERROR is an integer */
- return n;
-}
-
-static int _cffi_const_LOG_FATAL(unsigned long long *o)
-{
- int n = (LOG_FATAL) <= 0;
- *o = (unsigned long long)((LOG_FATAL) | 0); /* check that LOG_FATAL is an integer */
- return n;
-}
-
-static int _cffi_const_LOG_NONE(unsigned long long *o)
-{
- int n = (LOG_NONE) <= 0;
- *o = (unsigned long long)((LOG_NONE) | 0); /* check that LOG_NONE is an integer */
- return n;
-}
-
-static void _cffi_d_BeginBlendMode(int x0)
-{
- BeginBlendMode(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_BeginBlendMode(PyObject *self, PyObject *arg0)
-{
- int x0;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { BeginBlendMode(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_BeginBlendMode _cffi_d_BeginBlendMode
-#endif
-
-static void _cffi_d_BeginDrawing(void)
-{
- BeginDrawing();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_BeginDrawing(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { BeginDrawing(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_BeginDrawing _cffi_d_BeginDrawing
-#endif
-
-static void _cffi_d_BeginMode2D(Camera2D x0)
-{
- BeginMode2D(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_BeginMode2D(PyObject *self, PyObject *arg0)
-{
- Camera2D x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(155), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { BeginMode2D(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_BeginMode2D(Camera2D *x0)
-{
- { BeginMode2D(*x0); }
-}
-#endif
-
-static void _cffi_d_BeginMode3D(Camera3D x0)
-{
- BeginMode3D(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_BeginMode3D(PyObject *self, PyObject *arg0)
-{
- Camera3D x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(158), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { BeginMode3D(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_BeginMode3D(Camera3D *x0)
-{
- { BeginMode3D(*x0); }
-}
-#endif
-
-static void _cffi_d_BeginScissorMode(int x0, int x1, int x2, int x3)
-{
- BeginScissorMode(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_BeginScissorMode(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "BeginScissorMode", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { BeginScissorMode(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_BeginScissorMode _cffi_d_BeginScissorMode
-#endif
-
-static void _cffi_d_BeginShaderMode(Shader x0)
-{
- BeginShaderMode(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_BeginShaderMode(PyObject *self, PyObject *arg0)
-{
- Shader x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { BeginShaderMode(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_BeginShaderMode(Shader *x0)
-{
- { BeginShaderMode(*x0); }
-}
-#endif
-
-static void _cffi_d_BeginTextureMode(RenderTexture2D x0)
-{
- BeginTextureMode(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_BeginTextureMode(PyObject *self, PyObject *arg0)
-{
- RenderTexture2D x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(800), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { BeginTextureMode(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_BeginTextureMode(RenderTexture2D *x0)
-{
- { BeginTextureMode(*x0); }
-}
-#endif
-
-static void _cffi_d_BeginVrDrawing(void)
-{
- BeginVrDrawing();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_BeginVrDrawing(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { BeginVrDrawing(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_BeginVrDrawing _cffi_d_BeginVrDrawing
-#endif
-
-static int _cffi_d_ChangeDirectory(char const * x0)
-{
- return ChangeDirectory(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ChangeDirectory(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ChangeDirectory(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_ChangeDirectory _cffi_d_ChangeDirectory
-#endif
-
-static int _cffi_d_CheckCollisionBoxSphere(BoundingBox x0, Vector3 x1, float x2)
-{
- return CheckCollisionBoxSphere(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionBoxSphere(PyObject *self, PyObject *args)
-{
- BoundingBox x0;
- Vector3 x1;
- float x2;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionBoxSphere", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(387), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionBoxSphere(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionBoxSphere(BoundingBox *x0, Vector3 *x1, float x2)
-{
- int result;
- { result = CheckCollisionBoxSphere(*x0, *x1, x2); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionBoxes(BoundingBox x0, BoundingBox x1)
-{
- return CheckCollisionBoxes(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionBoxes(PyObject *self, PyObject *args)
-{
- BoundingBox x0;
- BoundingBox x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionBoxes", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(387), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(387), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionBoxes(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionBoxes(BoundingBox *x0, BoundingBox *x1)
-{
- int result;
- { result = CheckCollisionBoxes(*x0, *x1); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionCircleRec(Vector2 x0, float x1, Rectangle x2)
-{
- return CheckCollisionCircleRec(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionCircleRec(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- float x1;
- Rectangle x2;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionCircleRec", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(77), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionCircleRec(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionCircleRec(Vector2 *x0, float x1, Rectangle *x2)
-{
- int result;
- { result = CheckCollisionCircleRec(*x0, x1, *x2); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionCircles(Vector2 x0, float x1, Vector2 x2, float x3)
-{
- return CheckCollisionCircles(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionCircles(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- float x1;
- Vector2 x2;
- float x3;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionCircles", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(209), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionCircles(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionCircles(Vector2 *x0, float x1, Vector2 *x2, float x3)
-{
- int result;
- { result = CheckCollisionCircles(*x0, x1, *x2, x3); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionPointCircle(Vector2 x0, Vector2 x1, float x2)
-{
- return CheckCollisionPointCircle(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionPointCircle(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Vector2 x1;
- float x2;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionPointCircle", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionPointCircle(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionPointCircle(Vector2 *x0, Vector2 *x1, float x2)
-{
- int result;
- { result = CheckCollisionPointCircle(*x0, *x1, x2); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionPointRec(Vector2 x0, Rectangle x1)
-{
- return CheckCollisionPointRec(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionPointRec(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Rectangle x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionPointRec", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionPointRec(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionPointRec(Vector2 *x0, Rectangle *x1)
-{
- int result;
- { result = CheckCollisionPointRec(*x0, *x1); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionPointTriangle(Vector2 x0, Vector2 x1, Vector2 x2, Vector2 x3)
-{
- return CheckCollisionPointTriangle(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionPointTriangle(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Vector2 x1;
- Vector2 x2;
- Vector2 x3;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionPointTriangle", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(209), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(209), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionPointTriangle(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionPointTriangle(Vector2 *x0, Vector2 *x1, Vector2 *x2, Vector2 *x3)
-{
- int result;
- { result = CheckCollisionPointTriangle(*x0, *x1, *x2, *x3); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionRayBox(Ray x0, BoundingBox x1)
-{
- return CheckCollisionRayBox(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionRayBox(PyObject *self, PyObject *args)
-{
- Ray x0;
- BoundingBox x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionRayBox", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(213), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(387), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionRayBox(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionRayBox(Ray *x0, BoundingBox *x1)
-{
- int result;
- { result = CheckCollisionRayBox(*x0, *x1); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionRaySphere(Ray x0, Vector3 x1, float x2)
-{
- return CheckCollisionRaySphere(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionRaySphere(PyObject *self, PyObject *args)
-{
- Ray x0;
- Vector3 x1;
- float x2;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionRaySphere", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(213), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionRaySphere(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionRaySphere(Ray *x0, Vector3 *x1, float x2)
-{
- int result;
- { result = CheckCollisionRaySphere(*x0, *x1, x2); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionRaySphereEx(Ray x0, Vector3 x1, float x2, Vector3 * x3)
-{
- return CheckCollisionRaySphereEx(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionRaySphereEx(PyObject *self, PyObject *args)
-{
- Ray x0;
- Vector3 x1;
- float x2;
- Vector3 * x3;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionRaySphereEx", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(213), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(422), arg3, (char **)&x3);
- if (datasize != 0) {
- x3 = ((size_t)datasize) <= 640 ? (Vector3 *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(422), arg3, (char **)&x3,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionRaySphereEx(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionRaySphereEx(Ray *x0, Vector3 *x1, float x2, Vector3 * x3)
-{
- int result;
- { result = CheckCollisionRaySphereEx(*x0, *x1, x2, x3); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionRecs(Rectangle x0, Rectangle x1)
-{
- return CheckCollisionRecs(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionRecs(PyObject *self, PyObject *args)
-{
- Rectangle x0;
- Rectangle x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionRecs", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(77), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionRecs(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionRecs(Rectangle *x0, Rectangle *x1)
-{
- int result;
- { result = CheckCollisionRecs(*x0, *x1); }
- return result;
-}
-#endif
-
-static int _cffi_d_CheckCollisionSpheres(Vector3 x0, float x1, Vector3 x2, float x3)
-{
- return CheckCollisionSpheres(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CheckCollisionSpheres(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- float x1;
- Vector3 x2;
- float x3;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "CheckCollisionSpheres", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(28), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CheckCollisionSpheres(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_CheckCollisionSpheres(Vector3 *x0, float x1, Vector3 *x2, float x3)
-{
- int result;
- { result = CheckCollisionSpheres(*x0, x1, *x2, x3); }
- return result;
-}
-#endif
-
-static void _cffi_d_ClearBackground(Color x0)
-{
- ClearBackground(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ClearBackground(PyObject *self, PyObject *arg0)
-{
- Color x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(24), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ClearBackground(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ClearBackground(Color *x0)
-{
- { ClearBackground(*x0); }
-}
-#endif
-
-static void _cffi_d_ClearDirectoryFiles(void)
-{
- ClearDirectoryFiles();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ClearDirectoryFiles(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ClearDirectoryFiles(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ClearDirectoryFiles _cffi_d_ClearDirectoryFiles
-#endif
-
-static void _cffi_d_ClearDroppedFiles(void)
-{
- ClearDroppedFiles();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ClearDroppedFiles(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ClearDroppedFiles(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ClearDroppedFiles _cffi_d_ClearDroppedFiles
-#endif
-
-static void _cffi_d_CloseAudioDevice(void)
-{
- CloseAudioDevice();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CloseAudioDevice(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { CloseAudioDevice(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_CloseAudioDevice _cffi_d_CloseAudioDevice
-#endif
-
-static void _cffi_d_CloseAudioStream(AudioStream x0)
-{
- CloseAudioStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CloseAudioStream(PyObject *self, PyObject *arg0)
-{
- AudioStream x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { CloseAudioStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_CloseAudioStream(AudioStream *x0)
-{
- { CloseAudioStream(*x0); }
-}
-#endif
-
-static void _cffi_d_CloseVrSimulator(void)
-{
- CloseVrSimulator();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CloseVrSimulator(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { CloseVrSimulator(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_CloseVrSimulator _cffi_d_CloseVrSimulator
-#endif
-
-static void _cffi_d_CloseWindow(void)
-{
- CloseWindow();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CloseWindow(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { CloseWindow(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_CloseWindow _cffi_d_CloseWindow
-#endif
-
-static char const * _cffi_d_CodepointToUtf8(int x0, int * x1)
-{
- return CodepointToUtf8(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CodepointToUtf8(PyObject *self, PyObject *args)
-{
- int x0;
- int * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "CodepointToUtf8", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CodepointToUtf8(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_CodepointToUtf8 _cffi_d_CodepointToUtf8
-#endif
-
-static Color _cffi_d_ColorFromHSV(Vector3 x0)
-{
- return ColorFromHSV(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ColorFromHSV(PyObject *self, PyObject *arg0)
-{
- Vector3 x0;
- Color result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ColorFromHSV(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(24));
- return pyresult;
-}
-#else
-static void _cffi_f_ColorFromHSV(Color *result, Vector3 *x0)
-{
- { *result = ColorFromHSV(*x0); }
-}
-#endif
-
-static Color _cffi_d_ColorFromNormalized(Vector4 x0)
-{
- return ColorFromNormalized(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ColorFromNormalized(PyObject *self, PyObject *arg0)
-{
- Vector4 x0;
- Color result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(31), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ColorFromNormalized(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(24));
- return pyresult;
-}
-#else
-static void _cffi_f_ColorFromNormalized(Color *result, Vector4 *x0)
-{
- { *result = ColorFromNormalized(*x0); }
-}
-#endif
-
-static Vector4 _cffi_d_ColorNormalize(Color x0)
-{
- return ColorNormalize(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ColorNormalize(PyObject *self, PyObject *arg0)
-{
- Color x0;
- Vector4 result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(24), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ColorNormalize(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(31));
- return pyresult;
-}
-#else
-static void _cffi_f_ColorNormalize(Vector4 *result, Color *x0)
-{
- { *result = ColorNormalize(*x0); }
-}
-#endif
-
-static Vector3 _cffi_d_ColorToHSV(Color x0)
-{
- return ColorToHSV(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ColorToHSV(PyObject *self, PyObject *arg0)
-{
- Color x0;
- Vector3 result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(24), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ColorToHSV(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(28));
- return pyresult;
-}
-#else
-static void _cffi_f_ColorToHSV(Vector3 *result, Color *x0)
-{
- { *result = ColorToHSV(*x0); }
-}
-#endif
-
-static int _cffi_d_ColorToInt(Color x0)
-{
- return ColorToInt(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ColorToInt(PyObject *self, PyObject *arg0)
-{
- Color x0;
- int result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(24), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ColorToInt(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_ColorToInt(Color *x0)
-{
- int result;
- { result = ColorToInt(*x0); }
- return result;
-}
-#endif
-
-static unsigned char * _cffi_d_CompressData(unsigned char * x0, int x1, int * x2)
-{
- return CompressData(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_CompressData(PyObject *self, PyObject *args)
-{
- unsigned char * x0;
- int x1;
- int * x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- unsigned char * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "CompressData", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(508), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (unsigned char *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(508), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = CompressData(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(508));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_CompressData _cffi_d_CompressData
-#endif
-
-static unsigned char * _cffi_d_DecompressData(unsigned char * x0, int x1, int * x2)
-{
- return DecompressData(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DecompressData(PyObject *self, PyObject *args)
-{
- unsigned char * x0;
- int x1;
- int * x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- unsigned char * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DecompressData", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(508), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (unsigned char *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(508), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = DecompressData(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(508));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_DecompressData _cffi_d_DecompressData
-#endif
-
-static int _cffi_d_DirectoryExists(char const * x0)
-{
- return DirectoryExists(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DirectoryExists(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = DirectoryExists(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_DirectoryExists _cffi_d_DirectoryExists
-#endif
-
-static void _cffi_d_DisableCursor(void)
-{
- DisableCursor();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DisableCursor(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DisableCursor(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_DisableCursor _cffi_d_DisableCursor
-#endif
-
-static void _cffi_d_DrawBillboard(Camera3D x0, Texture2D x1, Vector3 x2, float x3, Color x4)
-{
- DrawBillboard(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawBillboard(PyObject *self, PyObject *args)
-{
- Camera3D x0;
- Texture2D x1;
- Vector3 x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawBillboard", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(158), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(80), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(28), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawBillboard(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawBillboard(Camera3D *x0, Texture2D *x1, Vector3 *x2, float x3, Color *x4)
-{
- { DrawBillboard(*x0, *x1, *x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawBillboardRec(Camera3D x0, Texture2D x1, Rectangle x2, Vector3 x3, float x4, Color x5)
-{
- DrawBillboardRec(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawBillboardRec(PyObject *self, PyObject *args)
-{
- Camera3D x0;
- Texture2D x1;
- Rectangle x2;
- Vector3 x3;
- float x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawBillboardRec", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(158), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(80), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(77), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(28), arg3) < 0)
- return NULL;
-
- x4 = (float)_cffi_to_c_float(arg4);
- if (x4 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawBillboardRec(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawBillboardRec(Camera3D *x0, Texture2D *x1, Rectangle *x2, Vector3 *x3, float x4, Color *x5)
-{
- { DrawBillboardRec(*x0, *x1, *x2, *x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawBoundingBox(BoundingBox x0, Color x1)
-{
- DrawBoundingBox(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawBoundingBox(PyObject *self, PyObject *args)
-{
- BoundingBox x0;
- Color x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "DrawBoundingBox", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(387), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawBoundingBox(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawBoundingBox(BoundingBox *x0, Color *x1)
-{
- { DrawBoundingBox(*x0, *x1); }
-}
-#endif
-
-static void _cffi_d_DrawCircle(int x0, int x1, float x2, Color x3)
-{
- DrawCircle(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCircle(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- float x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawCircle", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCircle(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCircle(int x0, int x1, float x2, Color *x3)
-{
- { DrawCircle(x0, x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawCircle3D(Vector3 x0, float x1, Vector3 x2, float x3, Color x4)
-{
- DrawCircle3D(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCircle3D(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- float x1;
- Vector3 x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawCircle3D", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(28), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCircle3D(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCircle3D(Vector3 *x0, float x1, Vector3 *x2, float x3, Color *x4)
-{
- { DrawCircle3D(*x0, x1, *x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawCircleGradient(int x0, int x1, float x2, Color x3, Color x4)
-{
- DrawCircleGradient(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCircleGradient(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- float x2;
- Color x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawCircleGradient", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCircleGradient(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCircleGradient(int x0, int x1, float x2, Color *x3, Color *x4)
-{
- { DrawCircleGradient(x0, x1, x2, *x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawCircleLines(int x0, int x1, float x2, Color x3)
-{
- DrawCircleLines(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCircleLines(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- float x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawCircleLines", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCircleLines(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCircleLines(int x0, int x1, float x2, Color *x3)
-{
- { DrawCircleLines(x0, x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawCircleSector(Vector2 x0, float x1, int x2, int x3, int x4, Color x5)
-{
- DrawCircleSector(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCircleSector(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- float x1;
- int x2;
- int x3;
- int x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawCircleSector", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCircleSector(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCircleSector(Vector2 *x0, float x1, int x2, int x3, int x4, Color *x5)
-{
- { DrawCircleSector(*x0, x1, x2, x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawCircleSectorLines(Vector2 x0, float x1, int x2, int x3, int x4, Color x5)
-{
- DrawCircleSectorLines(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCircleSectorLines(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- float x1;
- int x2;
- int x3;
- int x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawCircleSectorLines", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCircleSectorLines(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCircleSectorLines(Vector2 *x0, float x1, int x2, int x3, int x4, Color *x5)
-{
- { DrawCircleSectorLines(*x0, x1, x2, x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawCircleV(Vector2 x0, float x1, Color x2)
-{
- DrawCircleV(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCircleV(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- float x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawCircleV", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCircleV(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCircleV(Vector2 *x0, float x1, Color *x2)
-{
- { DrawCircleV(*x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawCube(Vector3 x0, float x1, float x2, float x3, Color x4)
-{
- DrawCube(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCube(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- float x1;
- float x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawCube", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCube(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCube(Vector3 *x0, float x1, float x2, float x3, Color *x4)
-{
- { DrawCube(*x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawCubeTexture(Texture2D x0, Vector3 x1, float x2, float x3, float x4, Color x5)
-{
- DrawCubeTexture(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCubeTexture(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- Vector3 x1;
- float x2;
- float x3;
- float x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawCubeTexture", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = (float)_cffi_to_c_float(arg4);
- if (x4 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCubeTexture(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCubeTexture(Texture2D *x0, Vector3 *x1, float x2, float x3, float x4, Color *x5)
-{
- { DrawCubeTexture(*x0, *x1, x2, x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawCubeV(Vector3 x0, Vector3 x1, Color x2)
-{
- DrawCubeV(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCubeV(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- Vector3 x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawCubeV", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCubeV(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCubeV(Vector3 *x0, Vector3 *x1, Color *x2)
-{
- { DrawCubeV(*x0, *x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawCubeWires(Vector3 x0, float x1, float x2, float x3, Color x4)
-{
- DrawCubeWires(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCubeWires(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- float x1;
- float x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawCubeWires", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCubeWires(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCubeWires(Vector3 *x0, float x1, float x2, float x3, Color *x4)
-{
- { DrawCubeWires(*x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawCubeWiresV(Vector3 x0, Vector3 x1, Color x2)
-{
- DrawCubeWiresV(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCubeWiresV(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- Vector3 x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawCubeWiresV", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCubeWiresV(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCubeWiresV(Vector3 *x0, Vector3 *x1, Color *x2)
-{
- { DrawCubeWiresV(*x0, *x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawCylinder(Vector3 x0, float x1, float x2, float x3, int x4, Color x5)
-{
- DrawCylinder(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCylinder(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- float x1;
- float x2;
- float x3;
- int x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawCylinder", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCylinder(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCylinder(Vector3 *x0, float x1, float x2, float x3, int x4, Color *x5)
-{
- { DrawCylinder(*x0, x1, x2, x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawCylinderWires(Vector3 x0, float x1, float x2, float x3, int x4, Color x5)
-{
- DrawCylinderWires(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawCylinderWires(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- float x1;
- float x2;
- float x3;
- int x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawCylinderWires", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawCylinderWires(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawCylinderWires(Vector3 *x0, float x1, float x2, float x3, int x4, Color *x5)
-{
- { DrawCylinderWires(*x0, x1, x2, x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawEllipse(int x0, int x1, float x2, float x3, Color x4)
-{
- DrawEllipse(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawEllipse(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- float x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawEllipse", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawEllipse(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawEllipse(int x0, int x1, float x2, float x3, Color *x4)
-{
- { DrawEllipse(x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawEllipseLines(int x0, int x1, float x2, float x3, Color x4)
-{
- DrawEllipseLines(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawEllipseLines(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- float x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawEllipseLines", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawEllipseLines(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawEllipseLines(int x0, int x1, float x2, float x3, Color *x4)
-{
- { DrawEllipseLines(x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawFPS(int x0, int x1)
-{
- DrawFPS(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawFPS(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "DrawFPS", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawFPS(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_DrawFPS _cffi_d_DrawFPS
-#endif
-
-static void _cffi_d_DrawGizmo(Vector3 x0)
-{
- DrawGizmo(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawGizmo(PyObject *self, PyObject *arg0)
-{
- Vector3 x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawGizmo(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawGizmo(Vector3 *x0)
-{
- { DrawGizmo(*x0); }
-}
-#endif
-
-static void _cffi_d_DrawGrid(int x0, float x1)
-{
- DrawGrid(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawGrid(PyObject *self, PyObject *args)
-{
- int x0;
- float x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "DrawGrid", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawGrid(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_DrawGrid _cffi_d_DrawGrid
-#endif
-
-static void _cffi_d_DrawLine(int x0, int x1, int x2, int x3, Color x4)
-{
- DrawLine(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawLine(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawLine", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawLine(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawLine(int x0, int x1, int x2, int x3, Color *x4)
-{
- { DrawLine(x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawLine3D(Vector3 x0, Vector3 x1, Color x2)
-{
- DrawLine3D(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawLine3D(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- Vector3 x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawLine3D", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawLine3D(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawLine3D(Vector3 *x0, Vector3 *x1, Color *x2)
-{
- { DrawLine3D(*x0, *x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawLineBezier(Vector2 x0, Vector2 x1, float x2, Color x3)
-{
- DrawLineBezier(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawLineBezier(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Vector2 x1;
- float x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawLineBezier", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawLineBezier(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawLineBezier(Vector2 *x0, Vector2 *x1, float x2, Color *x3)
-{
- { DrawLineBezier(*x0, *x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawLineEx(Vector2 x0, Vector2 x1, float x2, Color x3)
-{
- DrawLineEx(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawLineEx(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Vector2 x1;
- float x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawLineEx", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawLineEx(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawLineEx(Vector2 *x0, Vector2 *x1, float x2, Color *x3)
-{
- { DrawLineEx(*x0, *x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawLineStrip(Vector2 * x0, int x1, Color x2)
-{
- DrawLineStrip(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawLineStrip(PyObject *self, PyObject *args)
-{
- Vector2 * x0;
- int x1;
- Color x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawLineStrip", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(914), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Vector2 *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(914), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawLineStrip(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawLineStrip(Vector2 * x0, int x1, Color *x2)
-{
- { DrawLineStrip(x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawLineV(Vector2 x0, Vector2 x1, Color x2)
-{
- DrawLineV(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawLineV(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Vector2 x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawLineV", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawLineV(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawLineV(Vector2 *x0, Vector2 *x1, Color *x2)
-{
- { DrawLineV(*x0, *x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawModel(Model x0, Vector3 x1, float x2, Color x3)
-{
- DrawModel(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawModel(PyObject *self, PyObject *args)
-{
- Model x0;
- Vector3 x1;
- float x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawModel", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(214), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawModel(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawModel(Model *x0, Vector3 *x1, float x2, Color *x3)
-{
- { DrawModel(*x0, *x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawModelEx(Model x0, Vector3 x1, Vector3 x2, float x3, Vector3 x4, Color x5)
-{
- DrawModelEx(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawModelEx(PyObject *self, PyObject *args)
-{
- Model x0;
- Vector3 x1;
- Vector3 x2;
- float x3;
- Vector3 x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawModelEx", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(214), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(28), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(28), arg4) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawModelEx(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawModelEx(Model *x0, Vector3 *x1, Vector3 *x2, float x3, Vector3 *x4, Color *x5)
-{
- { DrawModelEx(*x0, *x1, *x2, x3, *x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawModelWires(Model x0, Vector3 x1, float x2, Color x3)
-{
- DrawModelWires(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawModelWires(PyObject *self, PyObject *args)
-{
- Model x0;
- Vector3 x1;
- float x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawModelWires", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(214), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawModelWires(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawModelWires(Model *x0, Vector3 *x1, float x2, Color *x3)
-{
- { DrawModelWires(*x0, *x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawModelWiresEx(Model x0, Vector3 x1, Vector3 x2, float x3, Vector3 x4, Color x5)
-{
- DrawModelWiresEx(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawModelWiresEx(PyObject *self, PyObject *args)
-{
- Model x0;
- Vector3 x1;
- Vector3 x2;
- float x3;
- Vector3 x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawModelWiresEx", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(214), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(28), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(28), arg4) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawModelWiresEx(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawModelWiresEx(Model *x0, Vector3 *x1, Vector3 *x2, float x3, Vector3 *x4, Color *x5)
-{
- { DrawModelWiresEx(*x0, *x1, *x2, x3, *x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawPixel(int x0, int x1, Color x2)
-{
- DrawPixel(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawPixel(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawPixel", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawPixel(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawPixel(int x0, int x1, Color *x2)
-{
- { DrawPixel(x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawPixelV(Vector2 x0, Color x1)
-{
- DrawPixelV(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawPixelV(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Color x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "DrawPixelV", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawPixelV(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawPixelV(Vector2 *x0, Color *x1)
-{
- { DrawPixelV(*x0, *x1); }
-}
-#endif
-
-static void _cffi_d_DrawPlane(Vector3 x0, Vector2 x1, Color x2)
-{
- DrawPlane(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawPlane(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- Vector2 x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawPlane", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawPlane(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawPlane(Vector3 *x0, Vector2 *x1, Color *x2)
-{
- { DrawPlane(*x0, *x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawPoint3D(Vector3 x0, Color x1)
-{
- DrawPoint3D(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawPoint3D(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- Color x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "DrawPoint3D", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawPoint3D(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawPoint3D(Vector3 *x0, Color *x1)
-{
- { DrawPoint3D(*x0, *x1); }
-}
-#endif
-
-static void _cffi_d_DrawPoly(Vector2 x0, int x1, float x2, float x3, Color x4)
-{
- DrawPoly(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawPoly(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- int x1;
- float x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawPoly", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawPoly(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawPoly(Vector2 *x0, int x1, float x2, float x3, Color *x4)
-{
- { DrawPoly(*x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawPolyLines(Vector2 x0, int x1, float x2, float x3, Color x4)
-{
- DrawPolyLines(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawPolyLines(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- int x1;
- float x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawPolyLines", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawPolyLines(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawPolyLines(Vector2 *x0, int x1, float x2, float x3, Color *x4)
-{
- { DrawPolyLines(*x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawRay(Ray x0, Color x1)
-{
- DrawRay(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRay(PyObject *self, PyObject *args)
-{
- Ray x0;
- Color x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "DrawRay", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(213), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRay(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRay(Ray *x0, Color *x1)
-{
- { DrawRay(*x0, *x1); }
-}
-#endif
-
-static void _cffi_d_DrawRectangle(int x0, int x1, int x2, int x3, Color x4)
-{
- DrawRectangle(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangle(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangle", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangle(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangle(int x0, int x1, int x2, int x3, Color *x4)
-{
- { DrawRectangle(x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawRectangleGradientEx(Rectangle x0, Color x1, Color x2, Color x3, Color x4)
-{
- DrawRectangleGradientEx(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangleGradientEx(PyObject *self, PyObject *args)
-{
- Rectangle x0;
- Color x1;
- Color x2;
- Color x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangleGradientEx", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(77), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangleGradientEx(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangleGradientEx(Rectangle *x0, Color *x1, Color *x2, Color *x3, Color *x4)
-{
- { DrawRectangleGradientEx(*x0, *x1, *x2, *x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawRectangleGradientH(int x0, int x1, int x2, int x3, Color x4, Color x5)
-{
- DrawRectangleGradientH(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangleGradientH(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int x3;
- Color x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangleGradientH", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangleGradientH(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangleGradientH(int x0, int x1, int x2, int x3, Color *x4, Color *x5)
-{
- { DrawRectangleGradientH(x0, x1, x2, x3, *x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawRectangleGradientV(int x0, int x1, int x2, int x3, Color x4, Color x5)
-{
- DrawRectangleGradientV(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangleGradientV(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int x3;
- Color x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangleGradientV", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangleGradientV(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangleGradientV(int x0, int x1, int x2, int x3, Color *x4, Color *x5)
-{
- { DrawRectangleGradientV(x0, x1, x2, x3, *x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawRectangleLines(int x0, int x1, int x2, int x3, Color x4)
-{
- DrawRectangleLines(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangleLines(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangleLines", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangleLines(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangleLines(int x0, int x1, int x2, int x3, Color *x4)
-{
- { DrawRectangleLines(x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawRectangleLinesEx(Rectangle x0, int x1, Color x2)
-{
- DrawRectangleLinesEx(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangleLinesEx(PyObject *self, PyObject *args)
-{
- Rectangle x0;
- int x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangleLinesEx", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(77), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangleLinesEx(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangleLinesEx(Rectangle *x0, int x1, Color *x2)
-{
- { DrawRectangleLinesEx(*x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawRectanglePro(Rectangle x0, Vector2 x1, float x2, Color x3)
-{
- DrawRectanglePro(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectanglePro(PyObject *self, PyObject *args)
-{
- Rectangle x0;
- Vector2 x1;
- float x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawRectanglePro", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(77), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectanglePro(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectanglePro(Rectangle *x0, Vector2 *x1, float x2, Color *x3)
-{
- { DrawRectanglePro(*x0, *x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawRectangleRec(Rectangle x0, Color x1)
-{
- DrawRectangleRec(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangleRec(PyObject *self, PyObject *args)
-{
- Rectangle x0;
- Color x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangleRec", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(77), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangleRec(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangleRec(Rectangle *x0, Color *x1)
-{
- { DrawRectangleRec(*x0, *x1); }
-}
-#endif
-
-static void _cffi_d_DrawRectangleRounded(Rectangle x0, float x1, int x2, Color x3)
-{
- DrawRectangleRounded(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangleRounded(PyObject *self, PyObject *args)
-{
- Rectangle x0;
- float x1;
- int x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangleRounded", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(77), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangleRounded(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangleRounded(Rectangle *x0, float x1, int x2, Color *x3)
-{
- { DrawRectangleRounded(*x0, x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawRectangleRoundedLines(Rectangle x0, float x1, int x2, int x3, Color x4)
-{
- DrawRectangleRoundedLines(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangleRoundedLines(PyObject *self, PyObject *args)
-{
- Rectangle x0;
- float x1;
- int x2;
- int x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangleRoundedLines", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(77), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangleRoundedLines(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangleRoundedLines(Rectangle *x0, float x1, int x2, int x3, Color *x4)
-{
- { DrawRectangleRoundedLines(*x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawRectangleV(Vector2 x0, Vector2 x1, Color x2)
-{
- DrawRectangleV(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRectangleV(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Vector2 x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawRectangleV", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRectangleV(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRectangleV(Vector2 *x0, Vector2 *x1, Color *x2)
-{
- { DrawRectangleV(*x0, *x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawRing(Vector2 x0, float x1, float x2, int x3, int x4, int x5, Color x6)
-{
- DrawRing(x0, x1, x2, x3, x4, x5, x6);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRing(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- float x1;
- float x2;
- int x3;
- int x4;
- int x5;
- Color x6;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
- PyObject *arg6;
-
- if (!PyArg_UnpackTuple(args, "DrawRing", 7, 7, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x5 = _cffi_to_c_int(arg5, int);
- if (x5 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x6, _cffi_type(24), arg6) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRing(x0, x1, x2, x3, x4, x5, x6); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRing(Vector2 *x0, float x1, float x2, int x3, int x4, int x5, Color *x6)
-{
- { DrawRing(*x0, x1, x2, x3, x4, x5, *x6); }
-}
-#endif
-
-static void _cffi_d_DrawRingLines(Vector2 x0, float x1, float x2, int x3, int x4, int x5, Color x6)
-{
- DrawRingLines(x0, x1, x2, x3, x4, x5, x6);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawRingLines(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- float x1;
- float x2;
- int x3;
- int x4;
- int x5;
- Color x6;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
- PyObject *arg6;
-
- if (!PyArg_UnpackTuple(args, "DrawRingLines", 7, 7, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x5 = _cffi_to_c_int(arg5, int);
- if (x5 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x6, _cffi_type(24), arg6) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawRingLines(x0, x1, x2, x3, x4, x5, x6); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawRingLines(Vector2 *x0, float x1, float x2, int x3, int x4, int x5, Color *x6)
-{
- { DrawRingLines(*x0, x1, x2, x3, x4, x5, *x6); }
-}
-#endif
-
-static void _cffi_d_DrawSphere(Vector3 x0, float x1, Color x2)
-{
- DrawSphere(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawSphere(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- float x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawSphere", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawSphere(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawSphere(Vector3 *x0, float x1, Color *x2)
-{
- { DrawSphere(*x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawSphereEx(Vector3 x0, float x1, int x2, int x3, Color x4)
-{
- DrawSphereEx(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawSphereEx(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- float x1;
- int x2;
- int x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawSphereEx", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawSphereEx(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawSphereEx(Vector3 *x0, float x1, int x2, int x3, Color *x4)
-{
- { DrawSphereEx(*x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawSphereWires(Vector3 x0, float x1, int x2, int x3, Color x4)
-{
- DrawSphereWires(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawSphereWires(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- float x1;
- int x2;
- int x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawSphereWires", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawSphereWires(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawSphereWires(Vector3 *x0, float x1, int x2, int x3, Color *x4)
-{
- { DrawSphereWires(*x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawText(char const * x0, int x1, int x2, int x3, Color x4)
-{
- DrawText(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawText(PyObject *self, PyObject *args)
-{
- char const * x0;
- int x1;
- int x2;
- int x3;
- Color x4;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawText", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawText(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawText(char const * x0, int x1, int x2, int x3, Color *x4)
-{
- { DrawText(x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawTextCodepoint(Font x0, int x1, Vector2 x2, float x3, Color x4)
-{
- DrawTextCodepoint(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTextCodepoint(PyObject *self, PyObject *args)
-{
- Font x0;
- int x1;
- Vector2 x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawTextCodepoint", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(66), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(209), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTextCodepoint(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTextCodepoint(Font *x0, int x1, Vector2 *x2, float x3, Color *x4)
-{
- { DrawTextCodepoint(*x0, x1, *x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawTextEx(Font x0, char const * x1, Vector2 x2, float x3, float x4, Color x5)
-{
- DrawTextEx(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTextEx(PyObject *self, PyObject *args)
-{
- Font x0;
- char const * x1;
- Vector2 x2;
- float x3;
- float x4;
- Color x5;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawTextEx", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(66), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x2, _cffi_type(209), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = (float)_cffi_to_c_float(arg4);
- if (x4 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTextEx(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTextEx(Font *x0, char const * x1, Vector2 *x2, float x3, float x4, Color *x5)
-{
- { DrawTextEx(*x0, x1, *x2, x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawTextRec(Font x0, char const * x1, Rectangle x2, float x3, float x4, int x5, Color x6)
-{
- DrawTextRec(x0, x1, x2, x3, x4, x5, x6);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTextRec(PyObject *self, PyObject *args)
-{
- Font x0;
- char const * x1;
- Rectangle x2;
- float x3;
- float x4;
- int x5;
- Color x6;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
- PyObject *arg6;
-
- if (!PyArg_UnpackTuple(args, "DrawTextRec", 7, 7, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(66), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x2, _cffi_type(77), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = (float)_cffi_to_c_float(arg4);
- if (x4 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x5 = _cffi_to_c_int(arg5, int);
- if (x5 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x6, _cffi_type(24), arg6) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTextRec(x0, x1, x2, x3, x4, x5, x6); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTextRec(Font *x0, char const * x1, Rectangle *x2, float x3, float x4, int x5, Color *x6)
-{
- { DrawTextRec(*x0, x1, *x2, x3, x4, x5, *x6); }
-}
-#endif
-
-static void _cffi_d_DrawTextRecEx(Font x0, char const * x1, Rectangle x2, float x3, float x4, int x5, Color x6, int x7, int x8, Color x9, Color x10)
-{
- DrawTextRecEx(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTextRecEx(PyObject *self, PyObject *args)
-{
- Font x0;
- char const * x1;
- Rectangle x2;
- float x3;
- float x4;
- int x5;
- Color x6;
- int x7;
- int x8;
- Color x9;
- Color x10;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
- PyObject *arg6;
- PyObject *arg7;
- PyObject *arg8;
- PyObject *arg9;
- PyObject *arg10;
-
- if (!PyArg_UnpackTuple(args, "DrawTextRecEx", 11, 11, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(66), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x2, _cffi_type(77), arg2) < 0)
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = (float)_cffi_to_c_float(arg4);
- if (x4 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x5 = _cffi_to_c_int(arg5, int);
- if (x5 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x6, _cffi_type(24), arg6) < 0)
- return NULL;
-
- x7 = _cffi_to_c_int(arg7, int);
- if (x7 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x8 = _cffi_to_c_int(arg8, int);
- if (x8 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x9, _cffi_type(24), arg9) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x10, _cffi_type(24), arg10) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTextRecEx(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTextRecEx(Font *x0, char const * x1, Rectangle *x2, float x3, float x4, int x5, Color *x6, int x7, int x8, Color *x9, Color *x10)
-{
- { DrawTextRecEx(*x0, x1, *x2, x3, x4, x5, *x6, x7, x8, *x9, *x10); }
-}
-#endif
-
-static void _cffi_d_DrawTexture(Texture2D x0, int x1, int x2, Color x3)
-{
- DrawTexture(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTexture(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- int x1;
- int x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawTexture", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTexture(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTexture(Texture2D *x0, int x1, int x2, Color *x3)
-{
- { DrawTexture(*x0, x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawTextureEx(Texture2D x0, Vector2 x1, float x2, float x3, Color x4)
-{
- DrawTextureEx(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTextureEx(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- Vector2 x1;
- float x2;
- float x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawTextureEx", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTextureEx(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTextureEx(Texture2D *x0, Vector2 *x1, float x2, float x3, Color *x4)
-{
- { DrawTextureEx(*x0, *x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawTextureNPatch(Texture2D x0, NPatchInfo x1, Rectangle x2, Vector2 x3, float x4, Color x5)
-{
- DrawTextureNPatch(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTextureNPatch(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- NPatchInfo x1;
- Rectangle x2;
- Vector2 x3;
- float x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawTextureNPatch", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(848), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(77), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(209), arg3) < 0)
- return NULL;
-
- x4 = (float)_cffi_to_c_float(arg4);
- if (x4 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTextureNPatch(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTextureNPatch(Texture2D *x0, NPatchInfo *x1, Rectangle *x2, Vector2 *x3, float x4, Color *x5)
-{
- { DrawTextureNPatch(*x0, *x1, *x2, *x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawTexturePro(Texture2D x0, Rectangle x1, Rectangle x2, Vector2 x3, float x4, Color x5)
-{
- DrawTexturePro(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTexturePro(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- Rectangle x1;
- Rectangle x2;
- Vector2 x3;
- float x4;
- Color x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "DrawTexturePro", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(77), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(209), arg3) < 0)
- return NULL;
-
- x4 = (float)_cffi_to_c_float(arg4);
- if (x4 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTexturePro(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTexturePro(Texture2D *x0, Rectangle *x1, Rectangle *x2, Vector2 *x3, float x4, Color *x5)
-{
- { DrawTexturePro(*x0, *x1, *x2, *x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_DrawTextureQuad(Texture2D x0, Vector2 x1, Vector2 x2, Rectangle x3, Color x4)
-{
- DrawTextureQuad(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTextureQuad(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- Vector2 x1;
- Vector2 x2;
- Rectangle x3;
- Color x4;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "DrawTextureQuad", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(209), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(77), arg3) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTextureQuad(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTextureQuad(Texture2D *x0, Vector2 *x1, Vector2 *x2, Rectangle *x3, Color *x4)
-{
- { DrawTextureQuad(*x0, *x1, *x2, *x3, *x4); }
-}
-#endif
-
-static void _cffi_d_DrawTextureRec(Texture2D x0, Rectangle x1, Vector2 x2, Color x3)
-{
- DrawTextureRec(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTextureRec(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- Rectangle x1;
- Vector2 x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawTextureRec", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(209), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTextureRec(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTextureRec(Texture2D *x0, Rectangle *x1, Vector2 *x2, Color *x3)
-{
- { DrawTextureRec(*x0, *x1, *x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawTextureV(Texture2D x0, Vector2 x1, Color x2)
-{
- DrawTextureV(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTextureV(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- Vector2 x1;
- Color x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawTextureV", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTextureV(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTextureV(Texture2D *x0, Vector2 *x1, Color *x2)
-{
- { DrawTextureV(*x0, *x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawTriangle(Vector2 x0, Vector2 x1, Vector2 x2, Color x3)
-{
- DrawTriangle(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTriangle(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Vector2 x1;
- Vector2 x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawTriangle", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(209), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTriangle(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTriangle(Vector2 *x0, Vector2 *x1, Vector2 *x2, Color *x3)
-{
- { DrawTriangle(*x0, *x1, *x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawTriangleFan(Vector2 * x0, int x1, Color x2)
-{
- DrawTriangleFan(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTriangleFan(PyObject *self, PyObject *args)
-{
- Vector2 * x0;
- int x1;
- Color x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawTriangleFan", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(914), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Vector2 *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(914), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTriangleFan(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTriangleFan(Vector2 * x0, int x1, Color *x2)
-{
- { DrawTriangleFan(x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_DrawTriangleLines(Vector2 x0, Vector2 x1, Vector2 x2, Color x3)
-{
- DrawTriangleLines(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTriangleLines(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Vector2 x1;
- Vector2 x2;
- Color x3;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "DrawTriangleLines", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(209), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTriangleLines(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTriangleLines(Vector2 *x0, Vector2 *x1, Vector2 *x2, Color *x3)
-{
- { DrawTriangleLines(*x0, *x1, *x2, *x3); }
-}
-#endif
-
-static void _cffi_d_DrawTriangleStrip(Vector2 * x0, int x1, Color x2)
-{
- DrawTriangleStrip(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_DrawTriangleStrip(PyObject *self, PyObject *args)
-{
- Vector2 * x0;
- int x1;
- Color x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "DrawTriangleStrip", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(914), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Vector2 *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(914), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { DrawTriangleStrip(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_DrawTriangleStrip(Vector2 * x0, int x1, Color *x2)
-{
- { DrawTriangleStrip(x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_EnableCursor(void)
-{
- EnableCursor();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_EnableCursor(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { EnableCursor(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_EnableCursor _cffi_d_EnableCursor
-#endif
-
-static void _cffi_d_EndBlendMode(void)
-{
- EndBlendMode();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_EndBlendMode(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { EndBlendMode(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_EndBlendMode _cffi_d_EndBlendMode
-#endif
-
-static void _cffi_d_EndDrawing(void)
-{
- EndDrawing();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_EndDrawing(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { EndDrawing(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_EndDrawing _cffi_d_EndDrawing
-#endif
-
-static void _cffi_d_EndMode2D(void)
-{
- EndMode2D();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_EndMode2D(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { EndMode2D(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_EndMode2D _cffi_d_EndMode2D
-#endif
-
-static void _cffi_d_EndMode3D(void)
-{
- EndMode3D();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_EndMode3D(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { EndMode3D(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_EndMode3D _cffi_d_EndMode3D
-#endif
-
-static void _cffi_d_EndScissorMode(void)
-{
- EndScissorMode();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_EndScissorMode(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { EndScissorMode(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_EndScissorMode _cffi_d_EndScissorMode
-#endif
-
-static void _cffi_d_EndShaderMode(void)
-{
- EndShaderMode();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_EndShaderMode(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { EndShaderMode(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_EndShaderMode _cffi_d_EndShaderMode
-#endif
-
-static void _cffi_d_EndTextureMode(void)
-{
- EndTextureMode();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_EndTextureMode(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { EndTextureMode(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_EndTextureMode _cffi_d_EndTextureMode
-#endif
-
-static void _cffi_d_EndVrDrawing(void)
-{
- EndVrDrawing();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_EndVrDrawing(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { EndVrDrawing(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_EndVrDrawing _cffi_d_EndVrDrawing
-#endif
-
-static void _cffi_d_ExportImage(Image x0, char const * x1)
-{
- ExportImage(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ExportImage(PyObject *self, PyObject *args)
-{
- Image x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ExportImage", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ExportImage(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ExportImage(Image *x0, char const * x1)
-{
- { ExportImage(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_ExportImageAsCode(Image x0, char const * x1)
-{
- ExportImageAsCode(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ExportImageAsCode(PyObject *self, PyObject *args)
-{
- Image x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ExportImageAsCode", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ExportImageAsCode(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ExportImageAsCode(Image *x0, char const * x1)
-{
- { ExportImageAsCode(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_ExportMesh(Mesh x0, char const * x1)
-{
- ExportMesh(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ExportMesh(PyObject *self, PyObject *args)
-{
- Mesh x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ExportMesh", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(6), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ExportMesh(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ExportMesh(Mesh *x0, char const * x1)
-{
- { ExportMesh(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_ExportWave(Wave x0, char const * x1)
-{
- ExportWave(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ExportWave(PyObject *self, PyObject *args)
-{
- Wave x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ExportWave", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(245), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ExportWave(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ExportWave(Wave *x0, char const * x1)
-{
- { ExportWave(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_ExportWaveAsCode(Wave x0, char const * x1)
-{
- ExportWaveAsCode(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ExportWaveAsCode(PyObject *self, PyObject *args)
-{
- Wave x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ExportWaveAsCode", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(245), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ExportWaveAsCode(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ExportWaveAsCode(Wave *x0, char const * x1)
-{
- { ExportWaveAsCode(*x0, x1); }
-}
-#endif
-
-static Color _cffi_d_Fade(Color x0, float x1)
-{
- return Fade(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_Fade(PyObject *self, PyObject *args)
-{
- Color x0;
- float x1;
- Color result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "Fade", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(24), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = Fade(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(24));
- return pyresult;
-}
-#else
-static void _cffi_f_Fade(Color *result, Color *x0, float x1)
-{
- { *result = Fade(*x0, x1); }
-}
-#endif
-
-static int _cffi_d_FileExists(char const * x0)
-{
- return FileExists(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_FileExists(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = FileExists(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_FileExists _cffi_d_FileExists
-#endif
-
-static Image _cffi_d_GenImageCellular(int x0, int x1, int x2)
-{
- return GenImageCellular(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenImageCellular(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenImageCellular", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenImageCellular(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GenImageCellular(Image *result, int x0, int x1, int x2)
-{
- { *result = GenImageCellular(x0, x1, x2); }
-}
-#endif
-
-static Image _cffi_d_GenImageChecked(int x0, int x1, int x2, int x3, Color x4, Color x5)
-{
- return GenImageChecked(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenImageChecked(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int x3;
- Color x4;
- Color x5;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "GenImageChecked", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenImageChecked(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GenImageChecked(Image *result, int x0, int x1, int x2, int x3, Color *x4, Color *x5)
-{
- { *result = GenImageChecked(x0, x1, x2, x3, *x4, *x5); }
-}
-#endif
-
-static Image _cffi_d_GenImageColor(int x0, int x1, Color x2)
-{
- return GenImageColor(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenImageColor(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- Color x2;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenImageColor", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenImageColor(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GenImageColor(Image *result, int x0, int x1, Color *x2)
-{
- { *result = GenImageColor(x0, x1, *x2); }
-}
-#endif
-
-static Image _cffi_d_GenImageFontAtlas(CharInfo const * x0, Rectangle * * x1, int x2, int x3, int x4, int x5)
-{
- return GenImageFontAtlas(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenImageFontAtlas(PyObject *self, PyObject *args)
-{
- CharInfo const * x0;
- Rectangle * * x1;
- int x2;
- int x3;
- int x4;
- int x5;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "GenImageFontAtlas", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(53), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (CharInfo const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(53), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(54), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (Rectangle * *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(54), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x5 = _cffi_to_c_int(arg5, int);
- if (x5 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenImageFontAtlas(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_GenImageFontAtlas(Image *result, CharInfo const * x0, Rectangle * * x1, int x2, int x3, int x4, int x5)
-{
- { *result = GenImageFontAtlas(x0, x1, x2, x3, x4, x5); }
-}
-#endif
-
-static Image _cffi_d_GenImageGradientH(int x0, int x1, Color x2, Color x3)
-{
- return GenImageGradientH(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenImageGradientH(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- Color x2;
- Color x3;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "GenImageGradientH", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenImageGradientH(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GenImageGradientH(Image *result, int x0, int x1, Color *x2, Color *x3)
-{
- { *result = GenImageGradientH(x0, x1, *x2, *x3); }
-}
-#endif
-
-static Image _cffi_d_GenImageGradientRadial(int x0, int x1, float x2, Color x3, Color x4)
-{
- return GenImageGradientRadial(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenImageGradientRadial(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- float x2;
- Color x3;
- Color x4;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "GenImageGradientRadial", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenImageGradientRadial(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GenImageGradientRadial(Image *result, int x0, int x1, float x2, Color *x3, Color *x4)
-{
- { *result = GenImageGradientRadial(x0, x1, x2, *x3, *x4); }
-}
-#endif
-
-static Image _cffi_d_GenImageGradientV(int x0, int x1, Color x2, Color x3)
-{
- return GenImageGradientV(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenImageGradientV(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- Color x2;
- Color x3;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "GenImageGradientV", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenImageGradientV(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GenImageGradientV(Image *result, int x0, int x1, Color *x2, Color *x3)
-{
- { *result = GenImageGradientV(x0, x1, *x2, *x3); }
-}
-#endif
-
-static Image _cffi_d_GenImagePerlinNoise(int x0, int x1, int x2, int x3, float x4)
-{
- return GenImagePerlinNoise(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenImagePerlinNoise(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int x3;
- float x4;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "GenImagePerlinNoise", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = (float)_cffi_to_c_float(arg4);
- if (x4 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenImagePerlinNoise(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GenImagePerlinNoise(Image *result, int x0, int x1, int x2, int x3, float x4)
-{
- { *result = GenImagePerlinNoise(x0, x1, x2, x3, x4); }
-}
-#endif
-
-static Image _cffi_d_GenImageWhiteNoise(int x0, int x1, float x2)
-{
- return GenImageWhiteNoise(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenImageWhiteNoise(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- float x2;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenImageWhiteNoise", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenImageWhiteNoise(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GenImageWhiteNoise(Image *result, int x0, int x1, float x2)
-{
- { *result = GenImageWhiteNoise(x0, x1, x2); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshCube(float x0, float x1, float x2)
-{
- return GenMeshCube(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshCube(PyObject *self, PyObject *args)
-{
- float x0;
- float x1;
- float x2;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenMeshCube", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = (float)_cffi_to_c_float(arg0);
- if (x0 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshCube(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshCube(Mesh *result, float x0, float x1, float x2)
-{
- { *result = GenMeshCube(x0, x1, x2); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshCubicmap(Image x0, Vector3 x1)
-{
- return GenMeshCubicmap(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshCubicmap(PyObject *self, PyObject *args)
-{
- Image x0;
- Vector3 x1;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GenMeshCubicmap", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshCubicmap(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshCubicmap(Mesh *result, Image *x0, Vector3 *x1)
-{
- { *result = GenMeshCubicmap(*x0, *x1); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshCylinder(float x0, float x1, int x2)
-{
- return GenMeshCylinder(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshCylinder(PyObject *self, PyObject *args)
-{
- float x0;
- float x1;
- int x2;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenMeshCylinder", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = (float)_cffi_to_c_float(arg0);
- if (x0 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshCylinder(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshCylinder(Mesh *result, float x0, float x1, int x2)
-{
- { *result = GenMeshCylinder(x0, x1, x2); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshHeightmap(Image x0, Vector3 x1)
-{
- return GenMeshHeightmap(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshHeightmap(PyObject *self, PyObject *args)
-{
- Image x0;
- Vector3 x1;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GenMeshHeightmap", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshHeightmap(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshHeightmap(Mesh *result, Image *x0, Vector3 *x1)
-{
- { *result = GenMeshHeightmap(*x0, *x1); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshHemiSphere(float x0, int x1, int x2)
-{
- return GenMeshHemiSphere(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshHemiSphere(PyObject *self, PyObject *args)
-{
- float x0;
- int x1;
- int x2;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenMeshHemiSphere", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = (float)_cffi_to_c_float(arg0);
- if (x0 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshHemiSphere(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshHemiSphere(Mesh *result, float x0, int x1, int x2)
-{
- { *result = GenMeshHemiSphere(x0, x1, x2); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshKnot(float x0, float x1, int x2, int x3)
-{
- return GenMeshKnot(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshKnot(PyObject *self, PyObject *args)
-{
- float x0;
- float x1;
- int x2;
- int x3;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "GenMeshKnot", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- x0 = (float)_cffi_to_c_float(arg0);
- if (x0 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshKnot(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshKnot(Mesh *result, float x0, float x1, int x2, int x3)
-{
- { *result = GenMeshKnot(x0, x1, x2, x3); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshPlane(float x0, float x1, int x2, int x3)
-{
- return GenMeshPlane(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshPlane(PyObject *self, PyObject *args)
-{
- float x0;
- float x1;
- int x2;
- int x3;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "GenMeshPlane", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- x0 = (float)_cffi_to_c_float(arg0);
- if (x0 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshPlane(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshPlane(Mesh *result, float x0, float x1, int x2, int x3)
-{
- { *result = GenMeshPlane(x0, x1, x2, x3); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshPoly(int x0, float x1)
-{
- return GenMeshPoly(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshPoly(PyObject *self, PyObject *args)
-{
- int x0;
- float x1;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GenMeshPoly", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshPoly(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshPoly(Mesh *result, int x0, float x1)
-{
- { *result = GenMeshPoly(x0, x1); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshSphere(float x0, int x1, int x2)
-{
- return GenMeshSphere(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshSphere(PyObject *self, PyObject *args)
-{
- float x0;
- int x1;
- int x2;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenMeshSphere", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = (float)_cffi_to_c_float(arg0);
- if (x0 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshSphere(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshSphere(Mesh *result, float x0, int x1, int x2)
-{
- { *result = GenMeshSphere(x0, x1, x2); }
-}
-#endif
-
-static Mesh _cffi_d_GenMeshTorus(float x0, float x1, int x2, int x3)
-{
- return GenMeshTorus(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenMeshTorus(PyObject *self, PyObject *args)
-{
- float x0;
- float x1;
- int x2;
- int x3;
- Mesh result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "GenMeshTorus", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- x0 = (float)_cffi_to_c_float(arg0);
- if (x0 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenMeshTorus(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(6));
- return pyresult;
-}
-#else
-static void _cffi_f_GenMeshTorus(Mesh *result, float x0, float x1, int x2, int x3)
-{
- { *result = GenMeshTorus(x0, x1, x2, x3); }
-}
-#endif
-
-static Texture2D _cffi_d_GenTextureBRDF(Shader x0, int x1)
-{
- return GenTextureBRDF(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenTextureBRDF(PyObject *self, PyObject *args)
-{
- Shader x0;
- int x1;
- Texture2D result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GenTextureBRDF", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenTextureBRDF(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(80));
- return pyresult;
-}
-#else
-static void _cffi_f_GenTextureBRDF(Texture2D *result, Shader *x0, int x1)
-{
- { *result = GenTextureBRDF(*x0, x1); }
-}
-#endif
-
-static Texture2D _cffi_d_GenTextureCubemap(Shader x0, Texture2D x1, int x2)
-{
- return GenTextureCubemap(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenTextureCubemap(PyObject *self, PyObject *args)
-{
- Shader x0;
- Texture2D x1;
- int x2;
- Texture2D result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenTextureCubemap", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(80), arg1) < 0)
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenTextureCubemap(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(80));
- return pyresult;
-}
-#else
-static void _cffi_f_GenTextureCubemap(Texture2D *result, Shader *x0, Texture2D *x1, int x2)
-{
- { *result = GenTextureCubemap(*x0, *x1, x2); }
-}
-#endif
-
-static Texture2D _cffi_d_GenTextureIrradiance(Shader x0, Texture2D x1, int x2)
-{
- return GenTextureIrradiance(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenTextureIrradiance(PyObject *self, PyObject *args)
-{
- Shader x0;
- Texture2D x1;
- int x2;
- Texture2D result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenTextureIrradiance", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(80), arg1) < 0)
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenTextureIrradiance(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(80));
- return pyresult;
-}
-#else
-static void _cffi_f_GenTextureIrradiance(Texture2D *result, Shader *x0, Texture2D *x1, int x2)
-{
- { *result = GenTextureIrradiance(*x0, *x1, x2); }
-}
-#endif
-
-static void _cffi_d_GenTextureMipmaps(Texture2D * x0)
-{
- GenTextureMipmaps(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenTextureMipmaps(PyObject *self, PyObject *arg0)
-{
- Texture2D * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(841), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Texture2D *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(841), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { GenTextureMipmaps(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_GenTextureMipmaps _cffi_d_GenTextureMipmaps
-#endif
-
-static Texture2D _cffi_d_GenTexturePrefilter(Shader x0, Texture2D x1, int x2)
-{
- return GenTexturePrefilter(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GenTexturePrefilter(PyObject *self, PyObject *args)
-{
- Shader x0;
- Texture2D x1;
- int x2;
- Texture2D result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GenTexturePrefilter", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(80), arg1) < 0)
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GenTexturePrefilter(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(80));
- return pyresult;
-}
-#else
-static void _cffi_f_GenTexturePrefilter(Texture2D *result, Shader *x0, Texture2D *x1, int x2)
-{
- { *result = GenTexturePrefilter(*x0, *x1, x2); }
-}
-#endif
-
-static Matrix _cffi_d_GetCameraMatrix(Camera3D x0)
-{
- return GetCameraMatrix(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetCameraMatrix(PyObject *self, PyObject *arg0)
-{
- Camera3D x0;
- Matrix result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(158), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetCameraMatrix(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(707));
- return pyresult;
-}
-#else
-static void _cffi_f_GetCameraMatrix(Matrix *result, Camera3D *x0)
-{
- { *result = GetCameraMatrix(*x0); }
-}
-#endif
-
-static Matrix _cffi_d_GetCameraMatrix2D(Camera2D x0)
-{
- return GetCameraMatrix2D(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetCameraMatrix2D(PyObject *self, PyObject *arg0)
-{
- Camera2D x0;
- Matrix result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(155), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetCameraMatrix2D(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(707));
- return pyresult;
-}
-#else
-static void _cffi_f_GetCameraMatrix2D(Matrix *result, Camera2D *x0)
-{
- { *result = GetCameraMatrix2D(*x0); }
-}
-#endif
-
-static char const * _cffi_d_GetClipboardText(void)
-{
- return GetClipboardText();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetClipboardText(PyObject *self, PyObject *noarg)
-{
- char const * result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetClipboardText(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- return pyresult;
-}
-#else
-# define _cffi_f_GetClipboardText _cffi_d_GetClipboardText
-#endif
-
-static int * _cffi_d_GetCodepoints(char const * x0, int * x1)
-{
- return GetCodepoints(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetCodepoints(PyObject *self, PyObject *args)
-{
- char const * x0;
- int * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetCodepoints", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetCodepoints(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(11));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetCodepoints _cffi_d_GetCodepoints
-#endif
-
-static int _cffi_d_GetCodepointsCount(char const * x0)
-{
- return GetCodepointsCount(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetCodepointsCount(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetCodepointsCount(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetCodepointsCount _cffi_d_GetCodepointsCount
-#endif
-
-static RayHitInfo _cffi_d_GetCollisionRayGround(Ray x0, float x1)
-{
- return GetCollisionRayGround(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetCollisionRayGround(PyObject *self, PyObject *args)
-{
- Ray x0;
- float x1;
- RayHitInfo result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetCollisionRayGround", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(213), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetCollisionRayGround(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(1165));
- return pyresult;
-}
-#else
-static void _cffi_f_GetCollisionRayGround(RayHitInfo *result, Ray *x0, float x1)
-{
- { *result = GetCollisionRayGround(*x0, x1); }
-}
-#endif
-
-static RayHitInfo _cffi_d_GetCollisionRayModel(Ray x0, Model x1)
-{
- return GetCollisionRayModel(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetCollisionRayModel(PyObject *self, PyObject *args)
-{
- Ray x0;
- Model x1;
- RayHitInfo result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetCollisionRayModel", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(213), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(214), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetCollisionRayModel(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(1165));
- return pyresult;
-}
-#else
-static void _cffi_f_GetCollisionRayModel(RayHitInfo *result, Ray *x0, Model *x1)
-{
- { *result = GetCollisionRayModel(*x0, *x1); }
-}
-#endif
-
-static RayHitInfo _cffi_d_GetCollisionRayTriangle(Ray x0, Vector3 x1, Vector3 x2, Vector3 x3)
-{
- return GetCollisionRayTriangle(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetCollisionRayTriangle(PyObject *self, PyObject *args)
-{
- Ray x0;
- Vector3 x1;
- Vector3 x2;
- Vector3 x3;
- RayHitInfo result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "GetCollisionRayTriangle", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(213), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(28), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(28), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(28), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetCollisionRayTriangle(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(1165));
- return pyresult;
-}
-#else
-static void _cffi_f_GetCollisionRayTriangle(RayHitInfo *result, Ray *x0, Vector3 *x1, Vector3 *x2, Vector3 *x3)
-{
- { *result = GetCollisionRayTriangle(*x0, *x1, *x2, *x3); }
-}
-#endif
-
-static Rectangle _cffi_d_GetCollisionRec(Rectangle x0, Rectangle x1)
-{
- return GetCollisionRec(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetCollisionRec(PyObject *self, PyObject *args)
-{
- Rectangle x0;
- Rectangle x1;
- Rectangle result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetCollisionRec", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(77), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetCollisionRec(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(77));
- return pyresult;
-}
-#else
-static void _cffi_f_GetCollisionRec(Rectangle *result, Rectangle *x0, Rectangle *x1)
-{
- { *result = GetCollisionRec(*x0, *x1); }
-}
-#endif
-
-static Color _cffi_d_GetColor(int x0)
-{
- return GetColor(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetColor(PyObject *self, PyObject *arg0)
-{
- int x0;
- Color result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetColor(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(24));
- return pyresult;
-}
-#else
-static void _cffi_f_GetColor(Color *result, int x0)
-{
- { *result = GetColor(x0); }
-}
-#endif
-
-static char * * _cffi_d_GetDirectoryFiles(char const * x0, int * x1)
-{
- return GetDirectoryFiles(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetDirectoryFiles(PyObject *self, PyObject *args)
-{
- char const * x0;
- int * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char * * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetDirectoryFiles", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetDirectoryFiles(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(1176));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetDirectoryFiles _cffi_d_GetDirectoryFiles
-#endif
-
-static char const * _cffi_d_GetDirectoryPath(char const * x0)
-{
- return GetDirectoryPath(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetDirectoryPath(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetDirectoryPath(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetDirectoryPath _cffi_d_GetDirectoryPath
-#endif
-
-static char * * _cffi_d_GetDroppedFiles(int * x0)
-{
- return GetDroppedFiles(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetDroppedFiles(PyObject *self, PyObject *arg0)
-{
- int * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char * * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetDroppedFiles(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(1176));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetDroppedFiles _cffi_d_GetDroppedFiles
-#endif
-
-static char const * _cffi_d_GetExtension(char const * x0)
-{
- return GetExtension(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetExtension(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetExtension(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetExtension _cffi_d_GetExtension
-#endif
-
-static int _cffi_d_GetFPS(void)
-{
- return GetFPS();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetFPS(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetFPS(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetFPS _cffi_d_GetFPS
-#endif
-
-static long _cffi_d_GetFileModTime(char const * x0)
-{
- return GetFileModTime(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetFileModTime(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- long result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetFileModTime(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, long);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetFileModTime _cffi_d_GetFileModTime
-#endif
-
-static char const * _cffi_d_GetFileName(char const * x0)
-{
- return GetFileName(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetFileName(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetFileName(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetFileName _cffi_d_GetFileName
-#endif
-
-static char const * _cffi_d_GetFileNameWithoutExt(char const * x0)
-{
- return GetFileNameWithoutExt(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetFileNameWithoutExt(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetFileNameWithoutExt(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetFileNameWithoutExt _cffi_d_GetFileNameWithoutExt
-#endif
-
-static Font _cffi_d_GetFontDefault(void)
-{
- return GetFontDefault();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetFontDefault(PyObject *self, PyObject *noarg)
-{
- Font result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetFontDefault(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(66));
- return pyresult;
-}
-#else
-static void _cffi_f_GetFontDefault(Font *result)
-{
- { *result = GetFontDefault(); }
-}
-#endif
-
-static float _cffi_d_GetFrameTime(void)
-{
- return GetFrameTime();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetFrameTime(PyObject *self, PyObject *noarg)
-{
- float result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetFrameTime(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_float(result);
- return pyresult;
-}
-#else
-# define _cffi_f_GetFrameTime _cffi_d_GetFrameTime
-#endif
-
-static int _cffi_d_GetGamepadAxisCount(int x0)
-{
- return GetGamepadAxisCount(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGamepadAxisCount(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGamepadAxisCount(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetGamepadAxisCount _cffi_d_GetGamepadAxisCount
-#endif
-
-static float _cffi_d_GetGamepadAxisMovement(int x0, int x1)
-{
- return GetGamepadAxisMovement(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGamepadAxisMovement(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- float result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetGamepadAxisMovement", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGamepadAxisMovement(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_float(result);
- return pyresult;
-}
-#else
-# define _cffi_f_GetGamepadAxisMovement _cffi_d_GetGamepadAxisMovement
-#endif
-
-static int _cffi_d_GetGamepadButtonPressed(void)
-{
- return GetGamepadButtonPressed();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGamepadButtonPressed(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGamepadButtonPressed(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetGamepadButtonPressed _cffi_d_GetGamepadButtonPressed
-#endif
-
-static char const * _cffi_d_GetGamepadName(int x0)
-{
- return GetGamepadName(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGamepadName(PyObject *self, PyObject *arg0)
-{
- int x0;
- char const * result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGamepadName(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- return pyresult;
-}
-#else
-# define _cffi_f_GetGamepadName _cffi_d_GetGamepadName
-#endif
-
-static int _cffi_d_GetGestureDetected(void)
-{
- return GetGestureDetected();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGestureDetected(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGestureDetected(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetGestureDetected _cffi_d_GetGestureDetected
-#endif
-
-static float _cffi_d_GetGestureDragAngle(void)
-{
- return GetGestureDragAngle();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGestureDragAngle(PyObject *self, PyObject *noarg)
-{
- float result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGestureDragAngle(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_float(result);
- return pyresult;
-}
-#else
-# define _cffi_f_GetGestureDragAngle _cffi_d_GetGestureDragAngle
-#endif
-
-static Vector2 _cffi_d_GetGestureDragVector(void)
-{
- return GetGestureDragVector();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGestureDragVector(PyObject *self, PyObject *noarg)
-{
- Vector2 result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGestureDragVector(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- return pyresult;
-}
-#else
-static void _cffi_f_GetGestureDragVector(Vector2 *result)
-{
- { *result = GetGestureDragVector(); }
-}
-#endif
-
-static float _cffi_d_GetGestureHoldDuration(void)
-{
- return GetGestureHoldDuration();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGestureHoldDuration(PyObject *self, PyObject *noarg)
-{
- float result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGestureHoldDuration(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_float(result);
- return pyresult;
-}
-#else
-# define _cffi_f_GetGestureHoldDuration _cffi_d_GetGestureHoldDuration
-#endif
-
-static float _cffi_d_GetGesturePinchAngle(void)
-{
- return GetGesturePinchAngle();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGesturePinchAngle(PyObject *self, PyObject *noarg)
-{
- float result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGesturePinchAngle(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_float(result);
- return pyresult;
-}
-#else
-# define _cffi_f_GetGesturePinchAngle _cffi_d_GetGesturePinchAngle
-#endif
-
-static Vector2 _cffi_d_GetGesturePinchVector(void)
-{
- return GetGesturePinchVector();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGesturePinchVector(PyObject *self, PyObject *noarg)
-{
- Vector2 result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGesturePinchVector(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- return pyresult;
-}
-#else
-static void _cffi_f_GetGesturePinchVector(Vector2 *result)
-{
- { *result = GetGesturePinchVector(); }
-}
-#endif
-
-static int _cffi_d_GetGlyphIndex(Font x0, int x1)
-{
- return GetGlyphIndex(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetGlyphIndex(PyObject *self, PyObject *args)
-{
- Font x0;
- int x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetGlyphIndex", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(66), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetGlyphIndex(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_GetGlyphIndex(Font *x0, int x1)
-{
- int result;
- { result = GetGlyphIndex(*x0, x1); }
- return result;
-}
-#endif
-
-static Rectangle _cffi_d_GetImageAlphaBorder(Image x0, float x1)
-{
- return GetImageAlphaBorder(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetImageAlphaBorder(PyObject *self, PyObject *args)
-{
- Image x0;
- float x1;
- Rectangle result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetImageAlphaBorder", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetImageAlphaBorder(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(77));
- return pyresult;
-}
-#else
-static void _cffi_f_GetImageAlphaBorder(Rectangle *result, Image *x0, float x1)
-{
- { *result = GetImageAlphaBorder(*x0, x1); }
-}
-#endif
-
-static Color * _cffi_d_GetImageData(Image x0)
-{
- return GetImageData(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetImageData(PyObject *self, PyObject *arg0)
-{
- Image x0;
- Color * result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetImageData(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(61));
- return pyresult;
-}
-#else
-static Color * _cffi_f_GetImageData(Image *x0)
-{
- Color * result;
- { result = GetImageData(*x0); }
- return result;
-}
-#endif
-
-static Vector4 * _cffi_d_GetImageDataNormalized(Image x0)
-{
- return GetImageDataNormalized(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetImageDataNormalized(PyObject *self, PyObject *arg0)
-{
- Image x0;
- Vector4 * result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetImageDataNormalized(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(1175));
- return pyresult;
-}
-#else
-static Vector4 * _cffi_f_GetImageDataNormalized(Image *x0)
-{
- Vector4 * result;
- { result = GetImageDataNormalized(*x0); }
- return result;
-}
-#endif
-
-static int _cffi_d_GetKeyPressed(void)
-{
- return GetKeyPressed();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetKeyPressed(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetKeyPressed(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetKeyPressed _cffi_d_GetKeyPressed
-#endif
-
-static Matrix _cffi_d_GetMatrixModelview(void)
-{
- return GetMatrixModelview();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMatrixModelview(PyObject *self, PyObject *noarg)
-{
- Matrix result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMatrixModelview(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(707));
- return pyresult;
-}
-#else
-static void _cffi_f_GetMatrixModelview(Matrix *result)
-{
- { *result = GetMatrixModelview(); }
-}
-#endif
-
-static Matrix _cffi_d_GetMatrixProjection(void)
-{
- return GetMatrixProjection();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMatrixProjection(PyObject *self, PyObject *noarg)
-{
- Matrix result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMatrixProjection(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(707));
- return pyresult;
-}
-#else
-static void _cffi_f_GetMatrixProjection(Matrix *result)
-{
- { *result = GetMatrixProjection(); }
-}
-#endif
-
-static int _cffi_d_GetMonitorCount(void)
-{
- return GetMonitorCount();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMonitorCount(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMonitorCount(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetMonitorCount _cffi_d_GetMonitorCount
-#endif
-
-static int _cffi_d_GetMonitorHeight(int x0)
-{
- return GetMonitorHeight(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMonitorHeight(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMonitorHeight(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetMonitorHeight _cffi_d_GetMonitorHeight
-#endif
-
-static char const * _cffi_d_GetMonitorName(int x0)
-{
- return GetMonitorName(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMonitorName(PyObject *self, PyObject *arg0)
-{
- int x0;
- char const * result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMonitorName(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- return pyresult;
-}
-#else
-# define _cffi_f_GetMonitorName _cffi_d_GetMonitorName
-#endif
-
-static int _cffi_d_GetMonitorPhysicalHeight(int x0)
-{
- return GetMonitorPhysicalHeight(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMonitorPhysicalHeight(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMonitorPhysicalHeight(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetMonitorPhysicalHeight _cffi_d_GetMonitorPhysicalHeight
-#endif
-
-static int _cffi_d_GetMonitorPhysicalWidth(int x0)
-{
- return GetMonitorPhysicalWidth(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMonitorPhysicalWidth(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMonitorPhysicalWidth(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetMonitorPhysicalWidth _cffi_d_GetMonitorPhysicalWidth
-#endif
-
-static int _cffi_d_GetMonitorWidth(int x0)
-{
- return GetMonitorWidth(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMonitorWidth(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMonitorWidth(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetMonitorWidth _cffi_d_GetMonitorWidth
-#endif
-
-static Vector2 _cffi_d_GetMousePosition(void)
-{
- return GetMousePosition();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMousePosition(PyObject *self, PyObject *noarg)
-{
- Vector2 result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMousePosition(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- return pyresult;
-}
-#else
-static void _cffi_f_GetMousePosition(Vector2 *result)
-{
- { *result = GetMousePosition(); }
-}
-#endif
-
-static Ray _cffi_d_GetMouseRay(Vector2 x0, Camera3D x1)
-{
- return GetMouseRay(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMouseRay(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Camera3D x1;
- Ray result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetMouseRay", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(158), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMouseRay(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(213));
- return pyresult;
-}
-#else
-static void _cffi_f_GetMouseRay(Ray *result, Vector2 *x0, Camera3D *x1)
-{
- { *result = GetMouseRay(*x0, *x1); }
-}
-#endif
-
-static int _cffi_d_GetMouseWheelMove(void)
-{
- return GetMouseWheelMove();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMouseWheelMove(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMouseWheelMove(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetMouseWheelMove _cffi_d_GetMouseWheelMove
-#endif
-
-static int _cffi_d_GetMouseX(void)
-{
- return GetMouseX();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMouseX(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMouseX(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetMouseX _cffi_d_GetMouseX
-#endif
-
-static int _cffi_d_GetMouseY(void)
-{
- return GetMouseY();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMouseY(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMouseY(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetMouseY _cffi_d_GetMouseY
-#endif
-
-static float _cffi_d_GetMusicTimeLength(Music x0)
-{
- return GetMusicTimeLength(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMusicTimeLength(PyObject *self, PyObject *arg0)
-{
- Music x0;
- float result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMusicTimeLength(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_float(result);
- return pyresult;
-}
-#else
-static float _cffi_f_GetMusicTimeLength(Music *x0)
-{
- float result;
- { result = GetMusicTimeLength(*x0); }
- return result;
-}
-#endif
-
-static float _cffi_d_GetMusicTimePlayed(Music x0)
-{
- return GetMusicTimePlayed(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetMusicTimePlayed(PyObject *self, PyObject *arg0)
-{
- Music x0;
- float result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetMusicTimePlayed(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_float(result);
- return pyresult;
-}
-#else
-static float _cffi_f_GetMusicTimePlayed(Music *x0)
-{
- float result;
- { result = GetMusicTimePlayed(*x0); }
- return result;
-}
-#endif
-
-static int _cffi_d_GetNextCodepoint(char const * x0, int * x1)
-{
- return GetNextCodepoint(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetNextCodepoint(PyObject *self, PyObject *args)
-{
- char const * x0;
- int * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetNextCodepoint", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetNextCodepoint(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetNextCodepoint _cffi_d_GetNextCodepoint
-#endif
-
-static int _cffi_d_GetPixelDataSize(int x0, int x1, int x2)
-{
- return GetPixelDataSize(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetPixelDataSize(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "GetPixelDataSize", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetPixelDataSize(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetPixelDataSize _cffi_d_GetPixelDataSize
-#endif
-
-static char const * _cffi_d_GetPrevDirectoryPath(char const * x0)
-{
- return GetPrevDirectoryPath(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetPrevDirectoryPath(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetPrevDirectoryPath(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_GetPrevDirectoryPath _cffi_d_GetPrevDirectoryPath
-#endif
-
-static int _cffi_d_GetRandomValue(int x0, int x1)
-{
- return GetRandomValue(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetRandomValue(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetRandomValue", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetRandomValue(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetRandomValue _cffi_d_GetRandomValue
-#endif
-
-static Image _cffi_d_GetScreenData(void)
-{
- return GetScreenData();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetScreenData(PyObject *self, PyObject *noarg)
-{
- Image result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetScreenData(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GetScreenData(Image *result)
-{
- { *result = GetScreenData(); }
-}
-#endif
-
-static int _cffi_d_GetScreenHeight(void)
-{
- return GetScreenHeight();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetScreenHeight(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetScreenHeight(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetScreenHeight _cffi_d_GetScreenHeight
-#endif
-
-static Vector2 _cffi_d_GetScreenToWorld2D(Vector2 x0, Camera2D x1)
-{
- return GetScreenToWorld2D(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetScreenToWorld2D(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Camera2D x1;
- Vector2 result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetScreenToWorld2D", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(155), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetScreenToWorld2D(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- return pyresult;
-}
-#else
-static void _cffi_f_GetScreenToWorld2D(Vector2 *result, Vector2 *x0, Camera2D *x1)
-{
- { *result = GetScreenToWorld2D(*x0, *x1); }
-}
-#endif
-
-static int _cffi_d_GetScreenWidth(void)
-{
- return GetScreenWidth();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetScreenWidth(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetScreenWidth(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetScreenWidth _cffi_d_GetScreenWidth
-#endif
-
-static Shader _cffi_d_GetShaderDefault(void)
-{
- return GetShaderDefault();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetShaderDefault(PyObject *self, PyObject *noarg)
-{
- Shader result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetShaderDefault(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(258));
- return pyresult;
-}
-#else
-static void _cffi_f_GetShaderDefault(Shader *result)
-{
- { *result = GetShaderDefault(); }
-}
-#endif
-
-static int _cffi_d_GetShaderLocation(Shader x0, char const * x1)
-{
- return GetShaderLocation(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetShaderLocation(PyObject *self, PyObject *args)
-{
- Shader x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetShaderLocation", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetShaderLocation(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static int _cffi_f_GetShaderLocation(Shader *x0, char const * x1)
-{
- int result;
- { result = GetShaderLocation(*x0, x1); }
- return result;
-}
-#endif
-
-static int _cffi_d_GetSoundsPlaying(void)
-{
- return GetSoundsPlaying();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetSoundsPlaying(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetSoundsPlaying(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetSoundsPlaying _cffi_d_GetSoundsPlaying
-#endif
-
-static Image _cffi_d_GetTextureData(Texture2D x0)
-{
- return GetTextureData(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetTextureData(PyObject *self, PyObject *arg0)
-{
- Texture2D x0;
- Image result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetTextureData(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_GetTextureData(Image *result, Texture2D *x0)
-{
- { *result = GetTextureData(*x0); }
-}
-#endif
-
-static Texture2D _cffi_d_GetTextureDefault(void)
-{
- return GetTextureDefault();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetTextureDefault(PyObject *self, PyObject *noarg)
-{
- Texture2D result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetTextureDefault(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(80));
- return pyresult;
-}
-#else
-static void _cffi_f_GetTextureDefault(Texture2D *result)
-{
- { *result = GetTextureDefault(); }
-}
-#endif
-
-static double _cffi_d_GetTime(void)
-{
- return GetTime();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetTime(PyObject *self, PyObject *noarg)
-{
- double result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetTime(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_double(result);
- return pyresult;
-}
-#else
-# define _cffi_f_GetTime _cffi_d_GetTime
-#endif
-
-static int _cffi_d_GetTouchPointsCount(void)
-{
- return GetTouchPointsCount();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetTouchPointsCount(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetTouchPointsCount(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetTouchPointsCount _cffi_d_GetTouchPointsCount
-#endif
-
-static Vector2 _cffi_d_GetTouchPosition(int x0)
-{
- return GetTouchPosition(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetTouchPosition(PyObject *self, PyObject *arg0)
-{
- int x0;
- Vector2 result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetTouchPosition(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- return pyresult;
-}
-#else
-static void _cffi_f_GetTouchPosition(Vector2 *result, int x0)
-{
- { *result = GetTouchPosition(x0); }
-}
-#endif
-
-static int _cffi_d_GetTouchX(void)
-{
- return GetTouchX();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetTouchX(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetTouchX(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetTouchX _cffi_d_GetTouchX
-#endif
-
-static int _cffi_d_GetTouchY(void)
-{
- return GetTouchY();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetTouchY(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetTouchY(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_GetTouchY _cffi_d_GetTouchY
-#endif
-
-static float * _cffi_d_GetWaveData(Wave x0)
-{
- return GetWaveData(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetWaveData(PyObject *self, PyObject *arg0)
-{
- Wave x0;
- float * result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(245), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetWaveData(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(1181));
- return pyresult;
-}
-#else
-static float * _cffi_f_GetWaveData(Wave *x0)
-{
- float * result;
- { result = GetWaveData(*x0); }
- return result;
-}
-#endif
-
-static void * _cffi_d_GetWindowHandle(void)
-{
- return GetWindowHandle();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetWindowHandle(PyObject *self, PyObject *noarg)
-{
- void * result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetWindowHandle(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(141));
- return pyresult;
-}
-#else
-# define _cffi_f_GetWindowHandle _cffi_d_GetWindowHandle
-#endif
-
-static Vector2 _cffi_d_GetWindowPosition(void)
-{
- return GetWindowPosition();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetWindowPosition(PyObject *self, PyObject *noarg)
-{
- Vector2 result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetWindowPosition(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- return pyresult;
-}
-#else
-static void _cffi_f_GetWindowPosition(Vector2 *result)
-{
- { *result = GetWindowPosition(); }
-}
-#endif
-
-static char const * _cffi_d_GetWorkingDirectory(void)
-{
- return GetWorkingDirectory();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetWorkingDirectory(PyObject *self, PyObject *noarg)
-{
- char const * result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetWorkingDirectory(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- return pyresult;
-}
-#else
-# define _cffi_f_GetWorkingDirectory _cffi_d_GetWorkingDirectory
-#endif
-
-static Vector2 _cffi_d_GetWorldToScreen(Vector3 x0, Camera3D x1)
-{
- return GetWorldToScreen(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetWorldToScreen(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- Camera3D x1;
- Vector2 result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetWorldToScreen", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(158), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetWorldToScreen(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- return pyresult;
-}
-#else
-static void _cffi_f_GetWorldToScreen(Vector2 *result, Vector3 *x0, Camera3D *x1)
-{
- { *result = GetWorldToScreen(*x0, *x1); }
-}
-#endif
-
-static Vector2 _cffi_d_GetWorldToScreen2D(Vector2 x0, Camera2D x1)
-{
- return GetWorldToScreen2D(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetWorldToScreen2D(PyObject *self, PyObject *args)
-{
- Vector2 x0;
- Camera2D x1;
- Vector2 result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "GetWorldToScreen2D", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(209), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(155), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetWorldToScreen2D(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- return pyresult;
-}
-#else
-static void _cffi_f_GetWorldToScreen2D(Vector2 *result, Vector2 *x0, Camera2D *x1)
-{
- { *result = GetWorldToScreen2D(*x0, *x1); }
-}
-#endif
-
-static Vector2 _cffi_d_GetWorldToScreenEx(Vector3 x0, Camera3D x1, int x2, int x3)
-{
- return GetWorldToScreenEx(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_GetWorldToScreenEx(PyObject *self, PyObject *args)
-{
- Vector3 x0;
- Camera3D x1;
- int x2;
- int x3;
- Vector2 result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "GetWorldToScreenEx", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(28), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(158), arg1) < 0)
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = GetWorldToScreenEx(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- return pyresult;
-}
-#else
-static void _cffi_f_GetWorldToScreenEx(Vector2 *result, Vector3 *x0, Camera3D *x1, int x2, int x3)
-{
- { *result = GetWorldToScreenEx(*x0, *x1, x2, x3); }
-}
-#endif
-
-static void _cffi_d_HideCursor(void)
-{
- HideCursor();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_HideCursor(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { HideCursor(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_HideCursor _cffi_d_HideCursor
-#endif
-
-static void _cffi_d_HideWindow(void)
-{
- HideWindow();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_HideWindow(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { HideWindow(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_HideWindow _cffi_d_HideWindow
-#endif
-
-static void _cffi_d_ImageAlphaClear(Image * x0, Color x1, float x2)
-{
- ImageAlphaClear(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageAlphaClear(PyObject *self, PyObject *args)
-{
- Image * x0;
- Color x1;
- float x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "ImageAlphaClear", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageAlphaClear(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageAlphaClear(Image * x0, Color *x1, float x2)
-{
- { ImageAlphaClear(x0, *x1, x2); }
-}
-#endif
-
-static void _cffi_d_ImageAlphaCrop(Image * x0, float x1)
-{
- ImageAlphaCrop(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageAlphaCrop(PyObject *self, PyObject *args)
-{
- Image * x0;
- float x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ImageAlphaCrop", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageAlphaCrop(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageAlphaCrop _cffi_d_ImageAlphaCrop
-#endif
-
-static void _cffi_d_ImageAlphaMask(Image * x0, Image x1)
-{
- ImageAlphaMask(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageAlphaMask(PyObject *self, PyObject *args)
-{
- Image * x0;
- Image x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ImageAlphaMask", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(16), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageAlphaMask(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageAlphaMask(Image * x0, Image *x1)
-{
- { ImageAlphaMask(x0, *x1); }
-}
-#endif
-
-static void _cffi_d_ImageAlphaPremultiply(Image * x0)
-{
- ImageAlphaPremultiply(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageAlphaPremultiply(PyObject *self, PyObject *arg0)
-{
- Image * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageAlphaPremultiply(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageAlphaPremultiply _cffi_d_ImageAlphaPremultiply
-#endif
-
-static void _cffi_d_ImageColorBrightness(Image * x0, int x1)
-{
- ImageColorBrightness(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageColorBrightness(PyObject *self, PyObject *args)
-{
- Image * x0;
- int x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ImageColorBrightness", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageColorBrightness(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageColorBrightness _cffi_d_ImageColorBrightness
-#endif
-
-static void _cffi_d_ImageColorContrast(Image * x0, float x1)
-{
- ImageColorContrast(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageColorContrast(PyObject *self, PyObject *args)
-{
- Image * x0;
- float x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ImageColorContrast", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageColorContrast(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageColorContrast _cffi_d_ImageColorContrast
-#endif
-
-static void _cffi_d_ImageColorGrayscale(Image * x0)
-{
- ImageColorGrayscale(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageColorGrayscale(PyObject *self, PyObject *arg0)
-{
- Image * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageColorGrayscale(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageColorGrayscale _cffi_d_ImageColorGrayscale
-#endif
-
-static void _cffi_d_ImageColorInvert(Image * x0)
-{
- ImageColorInvert(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageColorInvert(PyObject *self, PyObject *arg0)
-{
- Image * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageColorInvert(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageColorInvert _cffi_d_ImageColorInvert
-#endif
-
-static void _cffi_d_ImageColorReplace(Image * x0, Color x1, Color x2)
-{
- ImageColorReplace(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageColorReplace(PyObject *self, PyObject *args)
-{
- Image * x0;
- Color x1;
- Color x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "ImageColorReplace", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageColorReplace(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageColorReplace(Image * x0, Color *x1, Color *x2)
-{
- { ImageColorReplace(x0, *x1, *x2); }
-}
-#endif
-
-static void _cffi_d_ImageColorTint(Image * x0, Color x1)
-{
- ImageColorTint(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageColorTint(PyObject *self, PyObject *args)
-{
- Image * x0;
- Color x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ImageColorTint", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageColorTint(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageColorTint(Image * x0, Color *x1)
-{
- { ImageColorTint(x0, *x1); }
-}
-#endif
-
-static Image _cffi_d_ImageCopy(Image x0)
-{
- return ImageCopy(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageCopy(PyObject *self, PyObject *arg0)
-{
- Image x0;
- Image result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ImageCopy(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_ImageCopy(Image *result, Image *x0)
-{
- { *result = ImageCopy(*x0); }
-}
-#endif
-
-static void _cffi_d_ImageCrop(Image * x0, Rectangle x1)
-{
- ImageCrop(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageCrop(PyObject *self, PyObject *args)
-{
- Image * x0;
- Rectangle x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ImageCrop", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageCrop(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageCrop(Image * x0, Rectangle *x1)
-{
- { ImageCrop(x0, *x1); }
-}
-#endif
-
-static void _cffi_d_ImageDither(Image * x0, int x1, int x2, int x3, int x4)
-{
- ImageDither(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageDither(PyObject *self, PyObject *args)
-{
- Image * x0;
- int x1;
- int x2;
- int x3;
- int x4;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "ImageDither", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageDither(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageDither _cffi_d_ImageDither
-#endif
-
-static void _cffi_d_ImageDraw(Image * x0, Image x1, Rectangle x2, Rectangle x3, Color x4)
-{
- ImageDraw(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageDraw(PyObject *self, PyObject *args)
-{
- Image * x0;
- Image x1;
- Rectangle x2;
- Rectangle x3;
- Color x4;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "ImageDraw", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(16), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(77), arg2) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(77), arg3) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageDraw(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageDraw(Image * x0, Image *x1, Rectangle *x2, Rectangle *x3, Color *x4)
-{
- { ImageDraw(x0, *x1, *x2, *x3, *x4); }
-}
-#endif
-
-static void _cffi_d_ImageDrawRectangle(Image * x0, Rectangle x1, Color x2)
-{
- ImageDrawRectangle(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageDrawRectangle(PyObject *self, PyObject *args)
-{
- Image * x0;
- Rectangle x1;
- Color x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "ImageDrawRectangle", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageDrawRectangle(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageDrawRectangle(Image * x0, Rectangle *x1, Color *x2)
-{
- { ImageDrawRectangle(x0, *x1, *x2); }
-}
-#endif
-
-static void _cffi_d_ImageDrawRectangleLines(Image * x0, Rectangle x1, int x2, Color x3)
-{
- ImageDrawRectangleLines(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageDrawRectangleLines(PyObject *self, PyObject *args)
-{
- Image * x0;
- Rectangle x1;
- int x2;
- Color x3;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "ImageDrawRectangleLines", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x3, _cffi_type(24), arg3) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageDrawRectangleLines(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageDrawRectangleLines(Image * x0, Rectangle *x1, int x2, Color *x3)
-{
- { ImageDrawRectangleLines(x0, *x1, x2, *x3); }
-}
-#endif
-
-static void _cffi_d_ImageDrawText(Image * x0, Vector2 x1, char const * x2, int x3, Color x4)
-{
- ImageDrawText(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageDrawText(PyObject *self, PyObject *args)
-{
- Image * x0;
- Vector2 x1;
- char const * x2;
- int x3;
- Color x4;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "ImageDrawText", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageDrawText(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageDrawText(Image * x0, Vector2 *x1, char const * x2, int x3, Color *x4)
-{
- { ImageDrawText(x0, *x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_ImageDrawTextEx(Image * x0, Vector2 x1, Font x2, char const * x3, float x4, float x5, Color x6)
-{
- ImageDrawTextEx(x0, x1, x2, x3, x4, x5, x6);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageDrawTextEx(PyObject *self, PyObject *args)
-{
- Image * x0;
- Vector2 x1;
- Font x2;
- char const * x3;
- float x4;
- float x5;
- Color x6;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
- PyObject *arg6;
-
- if (!PyArg_UnpackTuple(args, "ImageDrawTextEx", 7, 7, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(209), arg1) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(66), arg2) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg3, (char **)&x3);
- if (datasize != 0) {
- x3 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg3, (char **)&x3,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x4 = (float)_cffi_to_c_float(arg4);
- if (x4 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x5 = (float)_cffi_to_c_float(arg5);
- if (x5 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x6, _cffi_type(24), arg6) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageDrawTextEx(x0, x1, x2, x3, x4, x5, x6); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageDrawTextEx(Image * x0, Vector2 *x1, Font *x2, char const * x3, float x4, float x5, Color *x6)
-{
- { ImageDrawTextEx(x0, *x1, *x2, x3, x4, x5, *x6); }
-}
-#endif
-
-static Color * _cffi_d_ImageExtractPalette(Image x0, int x1, int * x2)
-{
- return ImageExtractPalette(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageExtractPalette(PyObject *self, PyObject *args)
-{
- Image x0;
- int x1;
- int * x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Color * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "ImageExtractPalette", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ImageExtractPalette(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(61));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static Color * _cffi_f_ImageExtractPalette(Image *x0, int x1, int * x2)
-{
- Color * result;
- { result = ImageExtractPalette(*x0, x1, x2); }
- return result;
-}
-#endif
-
-static void _cffi_d_ImageFlipHorizontal(Image * x0)
-{
- ImageFlipHorizontal(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageFlipHorizontal(PyObject *self, PyObject *arg0)
-{
- Image * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageFlipHorizontal(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageFlipHorizontal _cffi_d_ImageFlipHorizontal
-#endif
-
-static void _cffi_d_ImageFlipVertical(Image * x0)
-{
- ImageFlipVertical(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageFlipVertical(PyObject *self, PyObject *arg0)
-{
- Image * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageFlipVertical(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageFlipVertical _cffi_d_ImageFlipVertical
-#endif
-
-static void _cffi_d_ImageFormat(Image * x0, int x1)
-{
- ImageFormat(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageFormat(PyObject *self, PyObject *args)
-{
- Image * x0;
- int x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ImageFormat", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageFormat(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageFormat _cffi_d_ImageFormat
-#endif
-
-static Image _cffi_d_ImageFromImage(Image x0, Rectangle x1)
-{
- return ImageFromImage(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageFromImage(PyObject *self, PyObject *args)
-{
- Image x0;
- Rectangle x1;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ImageFromImage", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ImageFromImage(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- return pyresult;
-}
-#else
-static void _cffi_f_ImageFromImage(Image *result, Image *x0, Rectangle *x1)
-{
- { *result = ImageFromImage(*x0, *x1); }
-}
-#endif
-
-static void _cffi_d_ImageMipmaps(Image * x0)
-{
- ImageMipmaps(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageMipmaps(PyObject *self, PyObject *arg0)
-{
- Image * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageMipmaps(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageMipmaps _cffi_d_ImageMipmaps
-#endif
-
-static void _cffi_d_ImageResize(Image * x0, int x1, int x2)
-{
- ImageResize(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageResize(PyObject *self, PyObject *args)
-{
- Image * x0;
- int x1;
- int x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "ImageResize", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageResize(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageResize _cffi_d_ImageResize
-#endif
-
-static void _cffi_d_ImageResizeCanvas(Image * x0, int x1, int x2, int x3, int x4, Color x5)
-{
- ImageResizeCanvas(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageResizeCanvas(PyObject *self, PyObject *args)
-{
- Image * x0;
- int x1;
- int x2;
- int x3;
- int x4;
- Color x5;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "ImageResizeCanvas", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x5, _cffi_type(24), arg5) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageResizeCanvas(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageResizeCanvas(Image * x0, int x1, int x2, int x3, int x4, Color *x5)
-{
- { ImageResizeCanvas(x0, x1, x2, x3, x4, *x5); }
-}
-#endif
-
-static void _cffi_d_ImageResizeNN(Image * x0, int x1, int x2)
-{
- ImageResizeNN(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageResizeNN(PyObject *self, PyObject *args)
-{
- Image * x0;
- int x1;
- int x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "ImageResizeNN", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageResizeNN(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageResizeNN _cffi_d_ImageResizeNN
-#endif
-
-static void _cffi_d_ImageRotateCCW(Image * x0)
-{
- ImageRotateCCW(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageRotateCCW(PyObject *self, PyObject *arg0)
-{
- Image * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageRotateCCW(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageRotateCCW _cffi_d_ImageRotateCCW
-#endif
-
-static void _cffi_d_ImageRotateCW(Image * x0)
-{
- ImageRotateCW(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageRotateCW(PyObject *self, PyObject *arg0)
-{
- Image * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageRotateCW(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ImageRotateCW _cffi_d_ImageRotateCW
-#endif
-
-static Image _cffi_d_ImageText(char const * x0, int x1, Color x2)
-{
- return ImageText(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageText(PyObject *self, PyObject *args)
-{
- char const * x0;
- int x1;
- Color x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "ImageText", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(24), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ImageText(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_ImageText(Image *result, char const * x0, int x1, Color *x2)
-{
- { *result = ImageText(x0, x1, *x2); }
-}
-#endif
-
-static Image _cffi_d_ImageTextEx(Font x0, char const * x1, float x2, float x3, Color x4)
-{
- return ImageTextEx(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageTextEx(PyObject *self, PyObject *args)
-{
- Font x0;
- char const * x1;
- float x2;
- float x3;
- Color x4;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "ImageTextEx", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(66), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x4, _cffi_type(24), arg4) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = ImageTextEx(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_ImageTextEx(Image *result, Font *x0, char const * x1, float x2, float x3, Color *x4)
-{
- { *result = ImageTextEx(*x0, x1, x2, x3, *x4); }
-}
-#endif
-
-static void _cffi_d_ImageToPOT(Image * x0, Color x1)
-{
- ImageToPOT(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ImageToPOT(PyObject *self, PyObject *args)
-{
- Image * x0;
- Color x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "ImageToPOT", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(605), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Image *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(605), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ImageToPOT(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ImageToPOT(Image * x0, Color *x1)
-{
- { ImageToPOT(x0, *x1); }
-}
-#endif
-
-static void _cffi_d_InitAudioDevice(void)
-{
- InitAudioDevice();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_InitAudioDevice(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { InitAudioDevice(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_InitAudioDevice _cffi_d_InitAudioDevice
-#endif
-
-static AudioStream _cffi_d_InitAudioStream(unsigned int x0, unsigned int x1, unsigned int x2)
-{
- return InitAudioStream(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_InitAudioStream(PyObject *self, PyObject *args)
-{
- unsigned int x0;
- unsigned int x1;
- unsigned int x2;
- AudioStream result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "InitAudioStream", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, unsigned int);
- if (x0 == (unsigned int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, unsigned int);
- if (x1 == (unsigned int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, unsigned int);
- if (x2 == (unsigned int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = InitAudioStream(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(384));
- return pyresult;
-}
-#else
-static void _cffi_f_InitAudioStream(AudioStream *result, unsigned int x0, unsigned int x1, unsigned int x2)
-{
- { *result = InitAudioStream(x0, x1, x2); }
-}
-#endif
-
-static void _cffi_d_InitVrSimulator(void)
-{
- InitVrSimulator();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_InitVrSimulator(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { InitVrSimulator(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_InitVrSimulator _cffi_d_InitVrSimulator
-#endif
-
-static void _cffi_d_InitWindow(int x0, int x1, char const * x2)
-{
- InitWindow(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_InitWindow(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- char const * x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "InitWindow", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { InitWindow(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_InitWindow _cffi_d_InitWindow
-#endif
-
-static int _cffi_d_IsAudioDeviceReady(void)
-{
- return IsAudioDeviceReady();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsAudioDeviceReady(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsAudioDeviceReady(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsAudioDeviceReady _cffi_d_IsAudioDeviceReady
-#endif
-
-static int _cffi_d_IsAudioStreamPlaying(AudioStream x0)
-{
- return IsAudioStreamPlaying(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsAudioStreamPlaying(PyObject *self, PyObject *arg0)
-{
- AudioStream x0;
- int result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsAudioStreamPlaying(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_IsAudioStreamPlaying(AudioStream *x0)
-{
- int result;
- { result = IsAudioStreamPlaying(*x0); }
- return result;
-}
-#endif
-
-static int _cffi_d_IsAudioStreamProcessed(AudioStream x0)
-{
- return IsAudioStreamProcessed(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsAudioStreamProcessed(PyObject *self, PyObject *arg0)
-{
- AudioStream x0;
- int result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsAudioStreamProcessed(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_IsAudioStreamProcessed(AudioStream *x0)
-{
- int result;
- { result = IsAudioStreamProcessed(*x0); }
- return result;
-}
-#endif
-
-static int _cffi_d_IsCursorHidden(void)
-{
- return IsCursorHidden();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsCursorHidden(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsCursorHidden(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsCursorHidden _cffi_d_IsCursorHidden
-#endif
-
-static int _cffi_d_IsFileDropped(void)
-{
- return IsFileDropped();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsFileDropped(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsFileDropped(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsFileDropped _cffi_d_IsFileDropped
-#endif
-
-static int _cffi_d_IsFileExtension(char const * x0, char const * x1)
-{
- return IsFileExtension(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsFileExtension(PyObject *self, PyObject *args)
-{
- char const * x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "IsFileExtension", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsFileExtension(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_IsFileExtension _cffi_d_IsFileExtension
-#endif
-
-static int _cffi_d_IsGamepadAvailable(int x0)
-{
- return IsGamepadAvailable(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsGamepadAvailable(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsGamepadAvailable(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsGamepadAvailable _cffi_d_IsGamepadAvailable
-#endif
-
-static int _cffi_d_IsGamepadButtonDown(int x0, int x1)
-{
- return IsGamepadButtonDown(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsGamepadButtonDown(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "IsGamepadButtonDown", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsGamepadButtonDown(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsGamepadButtonDown _cffi_d_IsGamepadButtonDown
-#endif
-
-static int _cffi_d_IsGamepadButtonPressed(int x0, int x1)
-{
- return IsGamepadButtonPressed(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsGamepadButtonPressed(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "IsGamepadButtonPressed", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsGamepadButtonPressed(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsGamepadButtonPressed _cffi_d_IsGamepadButtonPressed
-#endif
-
-static int _cffi_d_IsGamepadButtonReleased(int x0, int x1)
-{
- return IsGamepadButtonReleased(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsGamepadButtonReleased(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "IsGamepadButtonReleased", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsGamepadButtonReleased(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsGamepadButtonReleased _cffi_d_IsGamepadButtonReleased
-#endif
-
-static int _cffi_d_IsGamepadButtonUp(int x0, int x1)
-{
- return IsGamepadButtonUp(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsGamepadButtonUp(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "IsGamepadButtonUp", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsGamepadButtonUp(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsGamepadButtonUp _cffi_d_IsGamepadButtonUp
-#endif
-
-static int _cffi_d_IsGamepadName(int x0, char const * x1)
-{
- return IsGamepadName(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsGamepadName(PyObject *self, PyObject *args)
-{
- int x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "IsGamepadName", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsGamepadName(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_IsGamepadName _cffi_d_IsGamepadName
-#endif
-
-static int _cffi_d_IsGestureDetected(int x0)
-{
- return IsGestureDetected(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsGestureDetected(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsGestureDetected(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsGestureDetected _cffi_d_IsGestureDetected
-#endif
-
-static int _cffi_d_IsKeyDown(int x0)
-{
- return IsKeyDown(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsKeyDown(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsKeyDown(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsKeyDown _cffi_d_IsKeyDown
-#endif
-
-static int _cffi_d_IsKeyPressed(int x0)
-{
- return IsKeyPressed(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsKeyPressed(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsKeyPressed(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsKeyPressed _cffi_d_IsKeyPressed
-#endif
-
-static int _cffi_d_IsKeyReleased(int x0)
-{
- return IsKeyReleased(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsKeyReleased(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsKeyReleased(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsKeyReleased _cffi_d_IsKeyReleased
-#endif
-
-static int _cffi_d_IsKeyUp(int x0)
-{
- return IsKeyUp(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsKeyUp(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsKeyUp(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsKeyUp _cffi_d_IsKeyUp
-#endif
-
-static int _cffi_d_IsModelAnimationValid(Model x0, ModelAnimation x1)
-{
- return IsModelAnimationValid(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsModelAnimationValid(PyObject *self, PyObject *args)
-{
- Model x0;
- ModelAnimation x1;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "IsModelAnimationValid", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(214), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(404), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsModelAnimationValid(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_IsModelAnimationValid(Model *x0, ModelAnimation *x1)
-{
- int result;
- { result = IsModelAnimationValid(*x0, *x1); }
- return result;
-}
-#endif
-
-static int _cffi_d_IsMouseButtonDown(int x0)
-{
- return IsMouseButtonDown(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsMouseButtonDown(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsMouseButtonDown(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsMouseButtonDown _cffi_d_IsMouseButtonDown
-#endif
-
-static int _cffi_d_IsMouseButtonPressed(int x0)
-{
- return IsMouseButtonPressed(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsMouseButtonPressed(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsMouseButtonPressed(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsMouseButtonPressed _cffi_d_IsMouseButtonPressed
-#endif
-
-static int _cffi_d_IsMouseButtonReleased(int x0)
-{
- return IsMouseButtonReleased(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsMouseButtonReleased(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsMouseButtonReleased(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsMouseButtonReleased _cffi_d_IsMouseButtonReleased
-#endif
-
-static int _cffi_d_IsMouseButtonUp(int x0)
-{
- return IsMouseButtonUp(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsMouseButtonUp(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsMouseButtonUp(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsMouseButtonUp _cffi_d_IsMouseButtonUp
-#endif
-
-static int _cffi_d_IsMusicPlaying(Music x0)
-{
- return IsMusicPlaying(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsMusicPlaying(PyObject *self, PyObject *arg0)
-{
- Music x0;
- int result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsMusicPlaying(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_IsMusicPlaying(Music *x0)
-{
- int result;
- { result = IsMusicPlaying(*x0); }
- return result;
-}
-#endif
-
-static int _cffi_d_IsSoundPlaying(Sound x0)
-{
- return IsSoundPlaying(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsSoundPlaying(PyObject *self, PyObject *arg0)
-{
- Sound x0;
- int result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsSoundPlaying(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-static int _cffi_f_IsSoundPlaying(Sound *x0)
-{
- int result;
- { result = IsSoundPlaying(*x0); }
- return result;
-}
-#endif
-
-static int _cffi_d_IsVrSimulatorReady(void)
-{
- return IsVrSimulatorReady();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsVrSimulatorReady(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsVrSimulatorReady(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsVrSimulatorReady _cffi_d_IsVrSimulatorReady
-#endif
-
-static int _cffi_d_IsWindowHidden(void)
-{
- return IsWindowHidden();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsWindowHidden(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsWindowHidden(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsWindowHidden _cffi_d_IsWindowHidden
-#endif
-
-static int _cffi_d_IsWindowMinimized(void)
-{
- return IsWindowMinimized();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsWindowMinimized(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsWindowMinimized(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsWindowMinimized _cffi_d_IsWindowMinimized
-#endif
-
-static int _cffi_d_IsWindowReady(void)
-{
- return IsWindowReady();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsWindowReady(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsWindowReady(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsWindowReady _cffi_d_IsWindowReady
-#endif
-
-static int _cffi_d_IsWindowResized(void)
-{
- return IsWindowResized();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_IsWindowResized(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = IsWindowResized(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_IsWindowResized _cffi_d_IsWindowResized
-#endif
-
-static Font _cffi_d_LoadFont(char const * x0)
-{
- return LoadFont(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadFont(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Font result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadFont(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(66));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadFont(Font *result, char const * x0)
-{
- { *result = LoadFont(x0); }
-}
-#endif
-
-static CharInfo * _cffi_d_LoadFontData(char const * x0, int x1, int * x2, int x3, int x4)
-{
- return LoadFontData(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadFontData(PyObject *self, PyObject *args)
-{
- char const * x0;
- int x1;
- int * x2;
- int x3;
- int x4;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- CharInfo * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "LoadFontData", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadFontData(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(1148));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_LoadFontData _cffi_d_LoadFontData
-#endif
-
-static Font _cffi_d_LoadFontEx(char const * x0, int x1, int * x2, int x3)
-{
- return LoadFontEx(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadFontEx(PyObject *self, PyObject *args)
-{
- char const * x0;
- int x1;
- int * x2;
- int x3;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Font result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "LoadFontEx", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadFontEx(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(66));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadFontEx(Font *result, char const * x0, int x1, int * x2, int x3)
-{
- { *result = LoadFontEx(x0, x1, x2, x3); }
-}
-#endif
-
-static Font _cffi_d_LoadFontFromImage(Image x0, Color x1, int x2)
-{
- return LoadFontFromImage(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadFontFromImage(PyObject *self, PyObject *args)
-{
- Image x0;
- Color x1;
- int x2;
- Font result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "LoadFontFromImage", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(24), arg1) < 0)
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadFontFromImage(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(66));
- return pyresult;
-}
-#else
-static void _cffi_f_LoadFontFromImage(Font *result, Image *x0, Color *x1, int x2)
-{
- { *result = LoadFontFromImage(*x0, *x1, x2); }
-}
-#endif
-
-static Image _cffi_d_LoadImage(char const * x0)
-{
- return LoadImage(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadImage(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Image result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadImage(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadImage(Image *result, char const * x0)
-{
- { *result = LoadImage(x0); }
-}
-#endif
-
-static Image _cffi_d_LoadImageEx(Color * x0, int x1, int x2)
-{
- return LoadImageEx(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadImageEx(PyObject *self, PyObject *args)
-{
- Color * x0;
- int x1;
- int x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "LoadImageEx", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(61), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Color *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(61), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadImageEx(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadImageEx(Image *result, Color * x0, int x1, int x2)
-{
- { *result = LoadImageEx(x0, x1, x2); }
-}
-#endif
-
-static Image _cffi_d_LoadImagePro(void * x0, int x1, int x2, int x3)
-{
- return LoadImagePro(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadImagePro(PyObject *self, PyObject *args)
-{
- void * x0;
- int x1;
- int x2;
- int x3;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "LoadImagePro", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(141), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (void *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(141), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadImagePro(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadImagePro(Image *result, void * x0, int x1, int x2, int x3)
-{
- { *result = LoadImagePro(x0, x1, x2, x3); }
-}
-#endif
-
-static Image _cffi_d_LoadImageRaw(char const * x0, int x1, int x2, int x3, int x4)
-{
- return LoadImageRaw(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadImageRaw(PyObject *self, PyObject *args)
-{
- char const * x0;
- int x1;
- int x2;
- int x3;
- int x4;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Image result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "LoadImageRaw", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadImageRaw(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(16));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadImageRaw(Image *result, char const * x0, int x1, int x2, int x3, int x4)
-{
- { *result = LoadImageRaw(x0, x1, x2, x3, x4); }
-}
-#endif
-
-static Material _cffi_d_LoadMaterialDefault(void)
-{
- return LoadMaterialDefault();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadMaterialDefault(PyObject *self, PyObject *noarg)
-{
- Material result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadMaterialDefault(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(704));
- return pyresult;
-}
-#else
-static void _cffi_f_LoadMaterialDefault(Material *result)
-{
- { *result = LoadMaterialDefault(); }
-}
-#endif
-
-static Material * _cffi_d_LoadMaterials(char const * x0, int * x1)
-{
- return LoadMaterials(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadMaterials(PyObject *self, PyObject *args)
-{
- char const * x0;
- int * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Material * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "LoadMaterials", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadMaterials(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(699));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_LoadMaterials _cffi_d_LoadMaterials
-#endif
-
-static Mesh * _cffi_d_LoadMeshes(char const * x0, int * x1)
-{
- return LoadMeshes(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadMeshes(PyObject *self, PyObject *args)
-{
- char const * x0;
- int * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Mesh * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "LoadMeshes", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadMeshes(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(710));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_LoadMeshes _cffi_d_LoadMeshes
-#endif
-
-static Model _cffi_d_LoadModel(char const * x0)
-{
- return LoadModel(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadModel(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Model result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadModel(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(214));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadModel(Model *result, char const * x0)
-{
- { *result = LoadModel(x0); }
-}
-#endif
-
-static ModelAnimation * _cffi_d_LoadModelAnimations(char const * x0, int * x1)
-{
- return LoadModelAnimations(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadModelAnimations(PyObject *self, PyObject *args)
-{
- char const * x0;
- int * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- ModelAnimation * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "LoadModelAnimations", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadModelAnimations(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(1161));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_LoadModelAnimations _cffi_d_LoadModelAnimations
-#endif
-
-static Model _cffi_d_LoadModelFromMesh(Mesh x0)
-{
- return LoadModelFromMesh(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadModelFromMesh(PyObject *self, PyObject *arg0)
-{
- Mesh x0;
- Model result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(6), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadModelFromMesh(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(214));
- return pyresult;
-}
-#else
-static void _cffi_f_LoadModelFromMesh(Model *result, Mesh *x0)
-{
- { *result = LoadModelFromMesh(*x0); }
-}
-#endif
-
-static Music _cffi_d_LoadMusicStream(char const * x0)
-{
- return LoadMusicStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadMusicStream(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Music result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadMusicStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(371));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadMusicStream(Music *result, char const * x0)
-{
- { *result = LoadMusicStream(x0); }
-}
-#endif
-
-static RenderTexture2D _cffi_d_LoadRenderTexture(int x0, int x1)
-{
- return LoadRenderTexture(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadRenderTexture(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- RenderTexture2D result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "LoadRenderTexture", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadRenderTexture(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(800));
- return pyresult;
-}
-#else
-static void _cffi_f_LoadRenderTexture(RenderTexture2D *result, int x0, int x1)
-{
- { *result = LoadRenderTexture(x0, x1); }
-}
-#endif
-
-static Shader _cffi_d_LoadShader(char const * x0, char const * x1)
-{
- return LoadShader(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadShader(PyObject *self, PyObject *args)
-{
- char const * x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Shader result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "LoadShader", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadShader(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(258));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadShader(Shader *result, char const * x0, char const * x1)
-{
- { *result = LoadShader(x0, x1); }
-}
-#endif
-
-static Shader _cffi_d_LoadShaderCode(char const * x0, char const * x1)
-{
- return LoadShaderCode(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadShaderCode(PyObject *self, PyObject *args)
-{
- char const * x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Shader result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "LoadShaderCode", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadShaderCode(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(258));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadShaderCode(Shader *result, char const * x0, char const * x1)
-{
- { *result = LoadShaderCode(x0, x1); }
-}
-#endif
-
-static Sound _cffi_d_LoadSound(char const * x0)
-{
- return LoadSound(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadSound(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Sound result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadSound(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(433));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadSound(Sound *result, char const * x0)
-{
- { *result = LoadSound(x0); }
-}
-#endif
-
-static Sound _cffi_d_LoadSoundFromWave(Wave x0)
-{
- return LoadSoundFromWave(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadSoundFromWave(PyObject *self, PyObject *arg0)
-{
- Wave x0;
- Sound result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(245), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadSoundFromWave(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(433));
- return pyresult;
-}
-#else
-static void _cffi_f_LoadSoundFromWave(Sound *result, Wave *x0)
-{
- { *result = LoadSoundFromWave(*x0); }
-}
-#endif
-
-static char * _cffi_d_LoadText(char const * x0)
-{
- return LoadText(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadText(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadText(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(319));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_LoadText _cffi_d_LoadText
-#endif
-
-static Texture2D _cffi_d_LoadTexture(char const * x0)
-{
- return LoadTexture(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadTexture(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Texture2D result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadTexture(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(80));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadTexture(Texture2D *result, char const * x0)
-{
- { *result = LoadTexture(x0); }
-}
-#endif
-
-static Texture2D _cffi_d_LoadTextureCubemap(Image x0, int x1)
-{
- return LoadTextureCubemap(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadTextureCubemap(PyObject *self, PyObject *args)
-{
- Image x0;
- int x1;
- Texture2D result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "LoadTextureCubemap", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadTextureCubemap(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(80));
- return pyresult;
-}
-#else
-static void _cffi_f_LoadTextureCubemap(Texture2D *result, Image *x0, int x1)
-{
- { *result = LoadTextureCubemap(*x0, x1); }
-}
-#endif
-
-static Texture2D _cffi_d_LoadTextureFromImage(Image x0)
-{
- return LoadTextureFromImage(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadTextureFromImage(PyObject *self, PyObject *arg0)
-{
- Image x0;
- Texture2D result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadTextureFromImage(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(80));
- return pyresult;
-}
-#else
-static void _cffi_f_LoadTextureFromImage(Texture2D *result, Image *x0)
-{
- { *result = LoadTextureFromImage(*x0); }
-}
-#endif
-
-static Wave _cffi_d_LoadWave(char const * x0)
-{
- return LoadWave(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_LoadWave(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Wave result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = LoadWave(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(245));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_LoadWave(Wave *result, char const * x0)
-{
- { *result = LoadWave(x0); }
-}
-#endif
-
-static int _cffi_d_MeasureText(char const * x0, int x1)
-{
- return MeasureText(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_MeasureText(PyObject *self, PyObject *args)
-{
- char const * x0;
- int x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "MeasureText", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = MeasureText(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_MeasureText _cffi_d_MeasureText
-#endif
-
-static Vector2 _cffi_d_MeasureTextEx(Font x0, char const * x1, float x2, float x3)
-{
- return MeasureTextEx(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_MeasureTextEx(PyObject *self, PyObject *args)
-{
- Font x0;
- char const * x1;
- float x2;
- float x3;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- Vector2 result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "MeasureTextEx", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(66), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x2 = (float)_cffi_to_c_float(arg2);
- if (x2 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = (float)_cffi_to_c_float(arg3);
- if (x3 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = MeasureTextEx(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(209));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-static void _cffi_f_MeasureTextEx(Vector2 *result, Font *x0, char const * x1, float x2, float x3)
-{
- { *result = MeasureTextEx(*x0, x1, x2, x3); }
-}
-#endif
-
-static void _cffi_d_MeshBinormals(Mesh * x0)
-{
- MeshBinormals(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_MeshBinormals(PyObject *self, PyObject *arg0)
-{
- Mesh * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(710), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Mesh *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(710), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { MeshBinormals(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_MeshBinormals _cffi_d_MeshBinormals
-#endif
-
-static BoundingBox _cffi_d_MeshBoundingBox(Mesh x0)
-{
- return MeshBoundingBox(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_MeshBoundingBox(PyObject *self, PyObject *arg0)
-{
- Mesh x0;
- BoundingBox result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(6), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = MeshBoundingBox(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(387));
- return pyresult;
-}
-#else
-static void _cffi_f_MeshBoundingBox(BoundingBox *result, Mesh *x0)
-{
- { *result = MeshBoundingBox(*x0); }
-}
-#endif
-
-static void _cffi_d_MeshTangents(Mesh * x0)
-{
- MeshTangents(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_MeshTangents(PyObject *self, PyObject *arg0)
-{
- Mesh * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(710), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Mesh *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(710), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { MeshTangents(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_MeshTangents _cffi_d_MeshTangents
-#endif
-
-static void _cffi_d_OpenURL(char const * x0)
-{
- OpenURL(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_OpenURL(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { OpenURL(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_OpenURL _cffi_d_OpenURL
-#endif
-
-static void _cffi_d_PauseAudioStream(AudioStream x0)
-{
- PauseAudioStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_PauseAudioStream(PyObject *self, PyObject *arg0)
-{
- AudioStream x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { PauseAudioStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_PauseAudioStream(AudioStream *x0)
-{
- { PauseAudioStream(*x0); }
-}
-#endif
-
-static void _cffi_d_PauseMusicStream(Music x0)
-{
- PauseMusicStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_PauseMusicStream(PyObject *self, PyObject *arg0)
-{
- Music x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { PauseMusicStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_PauseMusicStream(Music *x0)
-{
- { PauseMusicStream(*x0); }
-}
-#endif
-
-static void _cffi_d_PauseSound(Sound x0)
-{
- PauseSound(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_PauseSound(PyObject *self, PyObject *arg0)
-{
- Sound x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { PauseSound(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_PauseSound(Sound *x0)
-{
- { PauseSound(*x0); }
-}
-#endif
-
-static void _cffi_d_PlayAudioStream(AudioStream x0)
-{
- PlayAudioStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_PlayAudioStream(PyObject *self, PyObject *arg0)
-{
- AudioStream x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { PlayAudioStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_PlayAudioStream(AudioStream *x0)
-{
- { PlayAudioStream(*x0); }
-}
-#endif
-
-static void _cffi_d_PlayMusicStream(Music x0)
-{
- PlayMusicStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_PlayMusicStream(PyObject *self, PyObject *arg0)
-{
- Music x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { PlayMusicStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_PlayMusicStream(Music *x0)
-{
- { PlayMusicStream(*x0); }
-}
-#endif
-
-static void _cffi_d_PlaySound(Sound x0)
-{
- PlaySound(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_PlaySound(PyObject *self, PyObject *arg0)
-{
- Sound x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { PlaySound(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_PlaySound(Sound *x0)
-{
- { PlaySound(*x0); }
-}
-#endif
-
-static void _cffi_d_PlaySoundMulti(Sound x0)
-{
- PlaySoundMulti(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_PlaySoundMulti(PyObject *self, PyObject *arg0)
-{
- Sound x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { PlaySoundMulti(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_PlaySoundMulti(Sound *x0)
-{
- { PlaySoundMulti(*x0); }
-}
-#endif
-
-static void _cffi_d_ResumeAudioStream(AudioStream x0)
-{
- ResumeAudioStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ResumeAudioStream(PyObject *self, PyObject *arg0)
-{
- AudioStream x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ResumeAudioStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ResumeAudioStream(AudioStream *x0)
-{
- { ResumeAudioStream(*x0); }
-}
-#endif
-
-static void _cffi_d_ResumeMusicStream(Music x0)
-{
- ResumeMusicStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ResumeMusicStream(PyObject *self, PyObject *arg0)
-{
- Music x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ResumeMusicStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ResumeMusicStream(Music *x0)
-{
- { ResumeMusicStream(*x0); }
-}
-#endif
-
-static void _cffi_d_ResumeSound(Sound x0)
-{
- ResumeSound(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ResumeSound(PyObject *self, PyObject *arg0)
-{
- Sound x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ResumeSound(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_ResumeSound(Sound *x0)
-{
- { ResumeSound(*x0); }
-}
-#endif
-
-static void _cffi_d_SetAudioStreamPitch(AudioStream x0, float x1)
-{
- SetAudioStreamPitch(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetAudioStreamPitch(PyObject *self, PyObject *args)
-{
- AudioStream x0;
- float x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetAudioStreamPitch", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetAudioStreamPitch(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetAudioStreamPitch(AudioStream *x0, float x1)
-{
- { SetAudioStreamPitch(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetAudioStreamVolume(AudioStream x0, float x1)
-{
- SetAudioStreamVolume(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetAudioStreamVolume(PyObject *self, PyObject *args)
-{
- AudioStream x0;
- float x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetAudioStreamVolume", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetAudioStreamVolume(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetAudioStreamVolume(AudioStream *x0, float x1)
-{
- { SetAudioStreamVolume(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetCameraAltControl(int x0)
-{
- SetCameraAltControl(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetCameraAltControl(PyObject *self, PyObject *arg0)
-{
- int x0;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetCameraAltControl(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetCameraAltControl _cffi_d_SetCameraAltControl
-#endif
-
-static void _cffi_d_SetCameraMode(Camera3D x0, int x1)
-{
- SetCameraMode(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetCameraMode(PyObject *self, PyObject *args)
-{
- Camera3D x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetCameraMode", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(158), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetCameraMode(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetCameraMode(Camera3D *x0, int x1)
-{
- { SetCameraMode(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetCameraMoveControls(int x0, int x1, int x2, int x3, int x4, int x5)
-{
- SetCameraMoveControls(x0, x1, x2, x3, x4, x5);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetCameraMoveControls(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- int x2;
- int x3;
- int x4;
- int x5;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
- PyObject *arg5;
-
- if (!PyArg_UnpackTuple(args, "SetCameraMoveControls", 6, 6, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x5 = _cffi_to_c_int(arg5, int);
- if (x5 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetCameraMoveControls(x0, x1, x2, x3, x4, x5); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetCameraMoveControls _cffi_d_SetCameraMoveControls
-#endif
-
-static void _cffi_d_SetCameraPanControl(int x0)
-{
- SetCameraPanControl(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetCameraPanControl(PyObject *self, PyObject *arg0)
-{
- int x0;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetCameraPanControl(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetCameraPanControl _cffi_d_SetCameraPanControl
-#endif
-
-static void _cffi_d_SetCameraSmoothZoomControl(int x0)
-{
- SetCameraSmoothZoomControl(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetCameraSmoothZoomControl(PyObject *self, PyObject *arg0)
-{
- int x0;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetCameraSmoothZoomControl(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetCameraSmoothZoomControl _cffi_d_SetCameraSmoothZoomControl
-#endif
-
-static void _cffi_d_SetClipboardText(char const * x0)
-{
- SetClipboardText(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetClipboardText(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetClipboardText(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetClipboardText _cffi_d_SetClipboardText
-#endif
-
-static void _cffi_d_SetConfigFlags(unsigned int x0)
-{
- SetConfigFlags(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetConfigFlags(PyObject *self, PyObject *arg0)
-{
- unsigned int x0;
-
- x0 = _cffi_to_c_int(arg0, unsigned int);
- if (x0 == (unsigned int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetConfigFlags(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetConfigFlags _cffi_d_SetConfigFlags
-#endif
-
-static void _cffi_d_SetExitKey(int x0)
-{
- SetExitKey(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetExitKey(PyObject *self, PyObject *arg0)
-{
- int x0;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetExitKey(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetExitKey _cffi_d_SetExitKey
-#endif
-
-static void _cffi_d_SetGesturesEnabled(unsigned int x0)
-{
- SetGesturesEnabled(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetGesturesEnabled(PyObject *self, PyObject *arg0)
-{
- unsigned int x0;
-
- x0 = _cffi_to_c_int(arg0, unsigned int);
- if (x0 == (unsigned int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetGesturesEnabled(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetGesturesEnabled _cffi_d_SetGesturesEnabled
-#endif
-
-static void _cffi_d_SetMasterVolume(float x0)
-{
- SetMasterVolume(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMasterVolume(PyObject *self, PyObject *arg0)
-{
- float x0;
-
- x0 = (float)_cffi_to_c_float(arg0);
- if (x0 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMasterVolume(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetMasterVolume _cffi_d_SetMasterVolume
-#endif
-
-static void _cffi_d_SetMaterialTexture(Material * x0, int x1, Texture2D x2)
-{
- SetMaterialTexture(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMaterialTexture(PyObject *self, PyObject *args)
-{
- Material * x0;
- int x1;
- Texture2D x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "SetMaterialTexture", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(699), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Material *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(699), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(80), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMaterialTexture(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetMaterialTexture(Material * x0, int x1, Texture2D *x2)
-{
- { SetMaterialTexture(x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_SetMatrixModelview(Matrix x0)
-{
- SetMatrixModelview(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMatrixModelview(PyObject *self, PyObject *arg0)
-{
- Matrix x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(707), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMatrixModelview(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetMatrixModelview(Matrix *x0)
-{
- { SetMatrixModelview(*x0); }
-}
-#endif
-
-static void _cffi_d_SetMatrixProjection(Matrix x0)
-{
- SetMatrixProjection(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMatrixProjection(PyObject *self, PyObject *arg0)
-{
- Matrix x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(707), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMatrixProjection(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetMatrixProjection(Matrix *x0)
-{
- { SetMatrixProjection(*x0); }
-}
-#endif
-
-static void _cffi_d_SetModelMeshMaterial(Model * x0, int x1, int x2)
-{
- SetModelMeshMaterial(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetModelMeshMaterial(PyObject *self, PyObject *args)
-{
- Model * x0;
- int x1;
- int x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "SetModelMeshMaterial", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(720), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Model *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(720), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetModelMeshMaterial(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetModelMeshMaterial _cffi_d_SetModelMeshMaterial
-#endif
-
-static void _cffi_d_SetMouseOffset(int x0, int x1)
-{
- SetMouseOffset(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMouseOffset(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetMouseOffset", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMouseOffset(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetMouseOffset _cffi_d_SetMouseOffset
-#endif
-
-static void _cffi_d_SetMousePosition(int x0, int x1)
-{
- SetMousePosition(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMousePosition(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetMousePosition", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMousePosition(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetMousePosition _cffi_d_SetMousePosition
-#endif
-
-static void _cffi_d_SetMouseScale(float x0, float x1)
-{
- SetMouseScale(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMouseScale(PyObject *self, PyObject *args)
-{
- float x0;
- float x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetMouseScale", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = (float)_cffi_to_c_float(arg0);
- if (x0 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMouseScale(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetMouseScale _cffi_d_SetMouseScale
-#endif
-
-static void _cffi_d_SetMusicLoopCount(Music x0, int x1)
-{
- SetMusicLoopCount(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMusicLoopCount(PyObject *self, PyObject *args)
-{
- Music x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetMusicLoopCount", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMusicLoopCount(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetMusicLoopCount(Music *x0, int x1)
-{
- { SetMusicLoopCount(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetMusicPitch(Music x0, float x1)
-{
- SetMusicPitch(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMusicPitch(PyObject *self, PyObject *args)
-{
- Music x0;
- float x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetMusicPitch", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMusicPitch(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetMusicPitch(Music *x0, float x1)
-{
- { SetMusicPitch(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetMusicVolume(Music x0, float x1)
-{
- SetMusicVolume(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetMusicVolume(PyObject *self, PyObject *args)
-{
- Music x0;
- float x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetMusicVolume", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetMusicVolume(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetMusicVolume(Music *x0, float x1)
-{
- { SetMusicVolume(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetShaderValue(Shader x0, int x1, void const * x2, int x3)
-{
- SetShaderValue(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetShaderValue(PyObject *self, PyObject *args)
-{
- Shader x0;
- int x1;
- void const * x2;
- int x3;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "SetShaderValue", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(526), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (void const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(526), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetShaderValue(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetShaderValue(Shader *x0, int x1, void const * x2, int x3)
-{
- { SetShaderValue(*x0, x1, x2, x3); }
-}
-#endif
-
-static void _cffi_d_SetShaderValueMatrix(Shader x0, int x1, Matrix x2)
-{
- SetShaderValueMatrix(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetShaderValueMatrix(PyObject *self, PyObject *args)
-{
- Shader x0;
- int x1;
- Matrix x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "SetShaderValueMatrix", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(707), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetShaderValueMatrix(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetShaderValueMatrix(Shader *x0, int x1, Matrix *x2)
-{
- { SetShaderValueMatrix(*x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_SetShaderValueTexture(Shader x0, int x1, Texture2D x2)
-{
- SetShaderValueTexture(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetShaderValueTexture(PyObject *self, PyObject *args)
-{
- Shader x0;
- int x1;
- Texture2D x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "SetShaderValueTexture", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- if (_cffi_to_c((char *)&x2, _cffi_type(80), arg2) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetShaderValueTexture(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetShaderValueTexture(Shader *x0, int x1, Texture2D *x2)
-{
- { SetShaderValueTexture(*x0, x1, *x2); }
-}
-#endif
-
-static void _cffi_d_SetShaderValueV(Shader x0, int x1, void const * x2, int x3, int x4)
-{
- SetShaderValueV(x0, x1, x2, x3, x4);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetShaderValueV(PyObject *self, PyObject *args)
-{
- Shader x0;
- int x1;
- void const * x2;
- int x3;
- int x4;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
- PyObject *arg4;
-
- if (!PyArg_UnpackTuple(args, "SetShaderValueV", 5, 5, &arg0, &arg1, &arg2, &arg3, &arg4))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(526), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (void const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(526), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x4 = _cffi_to_c_int(arg4, int);
- if (x4 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetShaderValueV(x0, x1, x2, x3, x4); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetShaderValueV(Shader *x0, int x1, void const * x2, int x3, int x4)
-{
- { SetShaderValueV(*x0, x1, x2, x3, x4); }
-}
-#endif
-
-static void _cffi_d_SetShapesTexture(Texture2D x0, Rectangle x1)
-{
- SetShapesTexture(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetShapesTexture(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- Rectangle x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetShapesTexture", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(77), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetShapesTexture(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetShapesTexture(Texture2D *x0, Rectangle *x1)
-{
- { SetShapesTexture(*x0, *x1); }
-}
-#endif
-
-static void _cffi_d_SetSoundPitch(Sound x0, float x1)
-{
- SetSoundPitch(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetSoundPitch(PyObject *self, PyObject *args)
-{
- Sound x0;
- float x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetSoundPitch", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetSoundPitch(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetSoundPitch(Sound *x0, float x1)
-{
- { SetSoundPitch(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetSoundVolume(Sound x0, float x1)
-{
- SetSoundVolume(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetSoundVolume(PyObject *self, PyObject *args)
-{
- Sound x0;
- float x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetSoundVolume", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- x1 = (float)_cffi_to_c_float(arg1);
- if (x1 == (float)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetSoundVolume(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetSoundVolume(Sound *x0, float x1)
-{
- { SetSoundVolume(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetTargetFPS(int x0)
-{
- SetTargetFPS(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetTargetFPS(PyObject *self, PyObject *arg0)
-{
- int x0;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetTargetFPS(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetTargetFPS _cffi_d_SetTargetFPS
-#endif
-
-static void _cffi_d_SetTextureFilter(Texture2D x0, int x1)
-{
- SetTextureFilter(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetTextureFilter(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetTextureFilter", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetTextureFilter(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetTextureFilter(Texture2D *x0, int x1)
-{
- { SetTextureFilter(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetTextureWrap(Texture2D x0, int x1)
-{
- SetTextureWrap(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetTextureWrap(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetTextureWrap", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetTextureWrap(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetTextureWrap(Texture2D *x0, int x1)
-{
- { SetTextureWrap(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_SetTraceLogExit(int x0)
-{
- SetTraceLogExit(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetTraceLogExit(PyObject *self, PyObject *arg0)
-{
- int x0;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetTraceLogExit(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetTraceLogExit _cffi_d_SetTraceLogExit
-#endif
-
-static void _cffi_d_SetTraceLogLevel(int x0)
-{
- SetTraceLogLevel(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetTraceLogLevel(PyObject *self, PyObject *arg0)
-{
- int x0;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetTraceLogLevel(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetTraceLogLevel _cffi_d_SetTraceLogLevel
-#endif
-
-static void _cffi_d_SetVrConfiguration(VrDeviceInfo x0, Shader x1)
-{
- SetVrConfiguration(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetVrConfiguration(PyObject *self, PyObject *args)
-{
- VrDeviceInfo x0;
- Shader x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetVrConfiguration", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(1020), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(258), arg1) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetVrConfiguration(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetVrConfiguration(VrDeviceInfo *x0, Shader *x1)
-{
- { SetVrConfiguration(*x0, *x1); }
-}
-#endif
-
-static void _cffi_d_SetWindowIcon(Image x0)
-{
- SetWindowIcon(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetWindowIcon(PyObject *self, PyObject *arg0)
-{
- Image x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetWindowIcon(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_SetWindowIcon(Image *x0)
-{
- { SetWindowIcon(*x0); }
-}
-#endif
-
-static void _cffi_d_SetWindowMinSize(int x0, int x1)
-{
- SetWindowMinSize(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetWindowMinSize(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetWindowMinSize", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetWindowMinSize(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetWindowMinSize _cffi_d_SetWindowMinSize
-#endif
-
-static void _cffi_d_SetWindowMonitor(int x0)
-{
- SetWindowMonitor(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetWindowMonitor(PyObject *self, PyObject *arg0)
-{
- int x0;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetWindowMonitor(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetWindowMonitor _cffi_d_SetWindowMonitor
-#endif
-
-static void _cffi_d_SetWindowPosition(int x0, int x1)
-{
- SetWindowPosition(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetWindowPosition(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetWindowPosition", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetWindowPosition(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetWindowPosition _cffi_d_SetWindowPosition
-#endif
-
-static void _cffi_d_SetWindowSize(int x0, int x1)
-{
- SetWindowSize(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetWindowSize(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "SetWindowSize", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetWindowSize(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetWindowSize _cffi_d_SetWindowSize
-#endif
-
-static void _cffi_d_SetWindowTitle(char const * x0)
-{
- SetWindowTitle(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_SetWindowTitle(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { SetWindowTitle(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_SetWindowTitle _cffi_d_SetWindowTitle
-#endif
-
-static void _cffi_d_ShowCursor(void)
-{
- ShowCursor();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ShowCursor(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ShowCursor(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ShowCursor _cffi_d_ShowCursor
-#endif
-
-static void _cffi_d_StopAudioStream(AudioStream x0)
-{
- StopAudioStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_StopAudioStream(PyObject *self, PyObject *arg0)
-{
- AudioStream x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { StopAudioStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_StopAudioStream(AudioStream *x0)
-{
- { StopAudioStream(*x0); }
-}
-#endif
-
-static void _cffi_d_StopMusicStream(Music x0)
-{
- StopMusicStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_StopMusicStream(PyObject *self, PyObject *arg0)
-{
- Music x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { StopMusicStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_StopMusicStream(Music *x0)
-{
- { StopMusicStream(*x0); }
-}
-#endif
-
-static void _cffi_d_StopSound(Sound x0)
-{
- StopSound(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_StopSound(PyObject *self, PyObject *arg0)
-{
- Sound x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { StopSound(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_StopSound(Sound *x0)
-{
- { StopSound(*x0); }
-}
-#endif
-
-static void _cffi_d_StopSoundMulti(void)
-{
- StopSoundMulti();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_StopSoundMulti(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { StopSoundMulti(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_StopSoundMulti _cffi_d_StopSoundMulti
-#endif
-
-static int _cffi_d_StorageLoadValue(int x0)
-{
- return StorageLoadValue(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_StorageLoadValue(PyObject *self, PyObject *arg0)
-{
- int x0;
- int result;
- PyObject *pyresult;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = StorageLoadValue(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_StorageLoadValue _cffi_d_StorageLoadValue
-#endif
-
-static void _cffi_d_StorageSaveValue(int x0, int x1)
-{
- StorageSaveValue(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_StorageSaveValue(PyObject *self, PyObject *args)
-{
- int x0;
- int x1;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "StorageSaveValue", 2, 2, &arg0, &arg1))
- return NULL;
-
- x0 = _cffi_to_c_int(arg0, int);
- if (x0 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { StorageSaveValue(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_StorageSaveValue _cffi_d_StorageSaveValue
-#endif
-
-static void _cffi_d_TakeScreenshot(char const * x0)
-{
- TakeScreenshot(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TakeScreenshot(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { TakeScreenshot(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_TakeScreenshot _cffi_d_TakeScreenshot
-#endif
-
-static void _cffi_d_TextAppend(char * x0, char const * x1, int * x2)
-{
- TextAppend(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextAppend(PyObject *self, PyObject *args)
-{
- char * x0;
- char const * x1;
- int * x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "TextAppend", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(319), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(319), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { TextAppend(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_TextAppend _cffi_d_TextAppend
-#endif
-
-static int _cffi_d_TextCopy(char * x0, char const * x1)
-{
- return TextCopy(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextCopy(PyObject *self, PyObject *args)
-{
- char * x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "TextCopy", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(319), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(319), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextCopy(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextCopy _cffi_d_TextCopy
-#endif
-
-static int _cffi_d_TextFindIndex(char const * x0, char const * x1)
-{
- return TextFindIndex(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextFindIndex(PyObject *self, PyObject *args)
-{
- char const * x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "TextFindIndex", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextFindIndex(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextFindIndex _cffi_d_TextFindIndex
-#endif
-
-static void _cffi_const_TextFormat(char *o)
-{
- *(char const *(* *)(char const *, ...))o = TextFormat;
-}
-
-static char * _cffi_d_TextInsert(char const * x0, char const * x1, int x2)
-{
- return TextInsert(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextInsert(PyObject *self, PyObject *args)
-{
- char const * x0;
- char const * x1;
- int x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "TextInsert", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextInsert(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(319));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextInsert _cffi_d_TextInsert
-#endif
-
-static int _cffi_d_TextIsEqual(char const * x0, char const * x1)
-{
- return TextIsEqual(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextIsEqual(PyObject *self, PyObject *args)
-{
- char const * x0;
- char const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "TextIsEqual", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextIsEqual(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextIsEqual _cffi_d_TextIsEqual
-#endif
-
-static char const * _cffi_d_TextJoin(char const * * x0, int x1, char const * x2)
-{
- return TextJoin(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextJoin(PyObject *self, PyObject *args)
-{
- char const * * x0;
- int x1;
- char const * x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "TextJoin", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(341), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const * *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(341), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextJoin(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextJoin _cffi_d_TextJoin
-#endif
-
-static unsigned int _cffi_d_TextLength(char const * x0)
-{
- return TextLength(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextLength(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- unsigned int result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextLength(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, unsigned int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextLength _cffi_d_TextLength
-#endif
-
-static char * _cffi_d_TextReplace(char * x0, char const * x1, char const * x2)
-{
- return TextReplace(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextReplace(PyObject *self, PyObject *args)
-{
- char * x0;
- char const * x1;
- char const * x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "TextReplace", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(319), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(319), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextReplace(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(319));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextReplace _cffi_d_TextReplace
-#endif
-
-static char const * * _cffi_d_TextSplit(char const * x0, char x1, int * x2)
-{
- return TextSplit(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextSplit(PyObject *self, PyObject *args)
-{
- char const * x0;
- char x1;
- int * x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "TextSplit", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = (char)_cffi_to_c_char(arg1);
- if (x1 == (char)-1 && PyErr_Occurred())
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg2, (char **)&x2);
- if (datasize != 0) {
- x2 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg2, (char **)&x2,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextSplit(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(341));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextSplit _cffi_d_TextSplit
-#endif
-
-static char const * _cffi_d_TextSubtext(char const * x0, int x1, int x2)
-{
- return TextSubtext(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextSubtext(PyObject *self, PyObject *args)
-{
- char const * x0;
- int x1;
- int x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "TextSubtext", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextSubtext(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextSubtext _cffi_d_TextSubtext
-#endif
-
-static int _cffi_d_TextToInteger(char const * x0)
-{
- return TextToInteger(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextToInteger(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- int result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextToInteger(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextToInteger _cffi_d_TextToInteger
-#endif
-
-static char const * _cffi_d_TextToLower(char const * x0)
-{
- return TextToLower(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextToLower(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextToLower(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextToLower _cffi_d_TextToLower
-#endif
-
-static char const * _cffi_d_TextToPascal(char const * x0)
-{
- return TextToPascal(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextToPascal(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextToPascal(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextToPascal _cffi_d_TextToPascal
-#endif
-
-static char const * _cffi_d_TextToUpper(char const * x0)
-{
- return TextToUpper(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextToUpper(PyObject *self, PyObject *arg0)
-{
- char const * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char const * result;
- PyObject *pyresult;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(9), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (char const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(9), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextToUpper(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(9));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextToUpper _cffi_d_TextToUpper
-#endif
-
-static char * _cffi_d_TextToUtf8(int * x0, int x1)
-{
- return TextToUtf8(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_TextToUtf8(PyObject *self, PyObject *args)
-{
- int * x0;
- int x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- char * result;
- PyObject *pyresult;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "TextToUtf8", 2, 2, &arg0, &arg1))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(11), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (int *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(11), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = TextToUtf8(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_pointer((char *)result, _cffi_type(319));
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- return pyresult;
-}
-#else
-# define _cffi_f_TextToUtf8 _cffi_d_TextToUtf8
-#endif
-
-static void _cffi_d_ToggleFullscreen(void)
-{
- ToggleFullscreen();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ToggleFullscreen(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ToggleFullscreen(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ToggleFullscreen _cffi_d_ToggleFullscreen
-#endif
-
-static void _cffi_d_ToggleVrMode(void)
-{
- ToggleVrMode();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_ToggleVrMode(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { ToggleVrMode(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_ToggleVrMode _cffi_d_ToggleVrMode
-#endif
-
-static void _cffi_const_TraceLog(char *o)
-{
- *(void(* *)(int, char const *, ...))o = TraceLog;
-}
-
-static void _cffi_d_UnhideWindow(void)
-{
- UnhideWindow();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnhideWindow(PyObject *self, PyObject *noarg)
-{
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnhideWindow(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_UnhideWindow _cffi_d_UnhideWindow
-#endif
-
-static void _cffi_d_UnloadFont(Font x0)
-{
- UnloadFont(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadFont(PyObject *self, PyObject *arg0)
-{
- Font x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(66), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadFont(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadFont(Font *x0)
-{
- { UnloadFont(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadImage(Image x0)
-{
- UnloadImage(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadImage(PyObject *self, PyObject *arg0)
-{
- Image x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(16), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadImage(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadImage(Image *x0)
-{
- { UnloadImage(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadMaterial(Material x0)
-{
- UnloadMaterial(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadMaterial(PyObject *self, PyObject *arg0)
-{
- Material x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(704), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadMaterial(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadMaterial(Material *x0)
-{
- { UnloadMaterial(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadMesh(Mesh x0)
-{
- UnloadMesh(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadMesh(PyObject *self, PyObject *arg0)
-{
- Mesh x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(6), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadMesh(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadMesh(Mesh *x0)
-{
- { UnloadMesh(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadModel(Model x0)
-{
- UnloadModel(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadModel(PyObject *self, PyObject *arg0)
-{
- Model x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(214), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadModel(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadModel(Model *x0)
-{
- { UnloadModel(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadModelAnimation(ModelAnimation x0)
-{
- UnloadModelAnimation(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadModelAnimation(PyObject *self, PyObject *arg0)
-{
- ModelAnimation x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(404), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadModelAnimation(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadModelAnimation(ModelAnimation *x0)
-{
- { UnloadModelAnimation(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadMusicStream(Music x0)
-{
- UnloadMusicStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadMusicStream(PyObject *self, PyObject *arg0)
-{
- Music x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadMusicStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadMusicStream(Music *x0)
-{
- { UnloadMusicStream(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadRenderTexture(RenderTexture2D x0)
-{
- UnloadRenderTexture(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadRenderTexture(PyObject *self, PyObject *arg0)
-{
- RenderTexture2D x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(800), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadRenderTexture(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadRenderTexture(RenderTexture2D *x0)
-{
- { UnloadRenderTexture(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadShader(Shader x0)
-{
- UnloadShader(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadShader(PyObject *self, PyObject *arg0)
-{
- Shader x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(258), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadShader(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadShader(Shader *x0)
-{
- { UnloadShader(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadSound(Sound x0)
-{
- UnloadSound(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadSound(PyObject *self, PyObject *arg0)
-{
- Sound x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadSound(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadSound(Sound *x0)
-{
- { UnloadSound(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadTexture(Texture2D x0)
-{
- UnloadTexture(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadTexture(PyObject *self, PyObject *arg0)
-{
- Texture2D x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadTexture(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadTexture(Texture2D *x0)
-{
- { UnloadTexture(*x0); }
-}
-#endif
-
-static void _cffi_d_UnloadWave(Wave x0)
-{
- UnloadWave(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UnloadWave(PyObject *self, PyObject *arg0)
-{
- Wave x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(245), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UnloadWave(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UnloadWave(Wave *x0)
-{
- { UnloadWave(*x0); }
-}
-#endif
-
-static void _cffi_d_UpdateAudioStream(AudioStream x0, void const * x1, int x2)
-{
- UpdateAudioStream(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UpdateAudioStream(PyObject *self, PyObject *args)
-{
- AudioStream x0;
- void const * x1;
- int x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "UpdateAudioStream", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(384), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(526), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (void const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(526), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UpdateAudioStream(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UpdateAudioStream(AudioStream *x0, void const * x1, int x2)
-{
- { UpdateAudioStream(*x0, x1, x2); }
-}
-#endif
-
-static void _cffi_d_UpdateCamera(Camera3D * x0)
-{
- UpdateCamera(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UpdateCamera(PyObject *self, PyObject *arg0)
-{
- Camera3D * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(537), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Camera3D *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(537), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UpdateCamera(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_UpdateCamera _cffi_d_UpdateCamera
-#endif
-
-static void _cffi_d_UpdateModelAnimation(Model x0, ModelAnimation x1, int x2)
-{
- UpdateModelAnimation(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UpdateModelAnimation(PyObject *self, PyObject *args)
-{
- Model x0;
- ModelAnimation x1;
- int x2;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "UpdateModelAnimation", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(214), arg0) < 0)
- return NULL;
-
- if (_cffi_to_c((char *)&x1, _cffi_type(404), arg1) < 0)
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UpdateModelAnimation(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UpdateModelAnimation(Model *x0, ModelAnimation *x1, int x2)
-{
- { UpdateModelAnimation(*x0, *x1, x2); }
-}
-#endif
-
-static void _cffi_d_UpdateMusicStream(Music x0)
-{
- UpdateMusicStream(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UpdateMusicStream(PyObject *self, PyObject *arg0)
-{
- Music x0;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(371), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UpdateMusicStream(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UpdateMusicStream(Music *x0)
-{
- { UpdateMusicStream(*x0); }
-}
-#endif
-
-static void _cffi_d_UpdateSound(Sound x0, void const * x1, int x2)
-{
- UpdateSound(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UpdateSound(PyObject *self, PyObject *args)
-{
- Sound x0;
- void const * x1;
- int x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "UpdateSound", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(433), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(526), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (void const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(526), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UpdateSound(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UpdateSound(Sound *x0, void const * x1, int x2)
-{
- { UpdateSound(*x0, x1, x2); }
-}
-#endif
-
-static void _cffi_d_UpdateTexture(Texture2D x0, void const * x1)
-{
- UpdateTexture(x0, x1);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UpdateTexture(PyObject *self, PyObject *args)
-{
- Texture2D x0;
- void const * x1;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
-
- if (!PyArg_UnpackTuple(args, "UpdateTexture", 2, 2, &arg0, &arg1))
- return NULL;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(80), arg0) < 0)
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(526), arg1, (char **)&x1);
- if (datasize != 0) {
- x1 = ((size_t)datasize) <= 640 ? (void const *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(526), arg1, (char **)&x1,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UpdateTexture(x0, x1); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-static void _cffi_f_UpdateTexture(Texture2D *x0, void const * x1)
-{
- { UpdateTexture(*x0, x1); }
-}
-#endif
-
-static void _cffi_d_UpdateVrTracking(Camera3D * x0)
-{
- UpdateVrTracking(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_UpdateVrTracking(PyObject *self, PyObject *arg0)
-{
- Camera3D * x0;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(537), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Camera3D *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(537), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { UpdateVrTracking(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_UpdateVrTracking _cffi_d_UpdateVrTracking
-#endif
-
-static Wave _cffi_d_WaveCopy(Wave x0)
-{
- return WaveCopy(x0);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_WaveCopy(PyObject *self, PyObject *arg0)
-{
- Wave x0;
- Wave result;
- PyObject *pyresult;
-
- if (_cffi_to_c((char *)&x0, _cffi_type(245), arg0) < 0)
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = WaveCopy(x0); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- pyresult = _cffi_from_c_struct((char *)&result, _cffi_type(245));
- return pyresult;
-}
-#else
-static void _cffi_f_WaveCopy(Wave *result, Wave *x0)
-{
- { *result = WaveCopy(*x0); }
-}
-#endif
-
-static void _cffi_d_WaveCrop(Wave * x0, int x1, int x2)
-{
- WaveCrop(x0, x1, x2);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_WaveCrop(PyObject *self, PyObject *args)
-{
- Wave * x0;
- int x1;
- int x2;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
-
- if (!PyArg_UnpackTuple(args, "WaveCrop", 3, 3, &arg0, &arg1, &arg2))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(1024), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Wave *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(1024), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { WaveCrop(x0, x1, x2); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_WaveCrop _cffi_d_WaveCrop
-#endif
-
-static void _cffi_d_WaveFormat(Wave * x0, int x1, int x2, int x3)
-{
- WaveFormat(x0, x1, x2, x3);
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_WaveFormat(PyObject *self, PyObject *args)
-{
- Wave * x0;
- int x1;
- int x2;
- int x3;
- Py_ssize_t datasize;
- struct _cffi_freeme_s *large_args_free = NULL;
- PyObject *arg0;
- PyObject *arg1;
- PyObject *arg2;
- PyObject *arg3;
-
- if (!PyArg_UnpackTuple(args, "WaveFormat", 4, 4, &arg0, &arg1, &arg2, &arg3))
- return NULL;
-
- datasize = _cffi_prepare_pointer_call_argument(
- _cffi_type(1024), arg0, (char **)&x0);
- if (datasize != 0) {
- x0 = ((size_t)datasize) <= 640 ? (Wave *)alloca((size_t)datasize) : NULL;
- if (_cffi_convert_array_argument(_cffi_type(1024), arg0, (char **)&x0,
- datasize, &large_args_free) < 0)
- return NULL;
- }
-
- x1 = _cffi_to_c_int(arg1, int);
- if (x1 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x2 = _cffi_to_c_int(arg2, int);
- if (x2 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- x3 = _cffi_to_c_int(arg3, int);
- if (x3 == (int)-1 && PyErr_Occurred())
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { WaveFormat(x0, x1, x2, x3); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- if (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);
- Py_INCREF(Py_None);
- return Py_None;
-}
-#else
-# define _cffi_f_WaveFormat _cffi_d_WaveFormat
-#endif
-
-static int _cffi_d_WindowShouldClose(void)
-{
- return WindowShouldClose();
-}
-#ifndef PYPY_VERSION
-static PyObject *
-_cffi_f_WindowShouldClose(PyObject *self, PyObject *noarg)
-{
- int result;
- PyObject *pyresult;
-
- Py_BEGIN_ALLOW_THREADS
- _cffi_restore_errno();
- { result = WindowShouldClose(); }
- _cffi_save_errno();
- Py_END_ALLOW_THREADS
-
- (void)self; /* unused */
- (void)noarg; /* unused */
- pyresult = _cffi_from_c_int(result, int);
- return pyresult;
-}
-#else
-# define _cffi_f_WindowShouldClose _cffi_d_WindowShouldClose
-#endif
-
-static int _cffi_const_LOC_MAP_DIFFUSE(unsigned long long *o)
-{
- int n = (LOC_MAP_DIFFUSE) <= 0;
- *o = (unsigned long long)((LOC_MAP_DIFFUSE) | 0); /* check that LOC_MAP_DIFFUSE is an integer */
- if (!_cffi_check_int(*o, n, 14U))
- n |= 2;
- return n;
-}
-
-static int _cffi_const_LOC_MAP_SPECULAR(unsigned long long *o)
-{
- int n = (LOC_MAP_SPECULAR) <= 0;
- *o = (unsigned long long)((LOC_MAP_SPECULAR) | 0); /* check that LOC_MAP_SPECULAR is an integer */
- if (!_cffi_check_int(*o, n, 15U))
- n |= 2;
- return n;
-}
-
-static int _cffi_const_MAP_DIFFUSE(unsigned long long *o)
-{
- int n = (MAP_DIFFUSE) <= 0;
- *o = (unsigned long long)((MAP_DIFFUSE) | 0); /* check that MAP_DIFFUSE is an integer */
- if (!_cffi_check_int(*o, n, 0))
- n |= 2;
- return n;
-}
-
-static int _cffi_const_MAP_SPECULAR(unsigned long long *o)
-{
- int n = (MAP_SPECULAR) <= 0;
- *o = (unsigned long long)((MAP_SPECULAR) | 0); /* check that MAP_SPECULAR is an integer */
- if (!_cffi_check_int(*o, n, 1U))
- n |= 2;
- return n;
-}
-
-static int _cffi_const_MAX_TOUCH_POINTS(unsigned long long *o)
-{
- int n = (MAX_TOUCH_POINTS) <= 0;
- *o = (unsigned long long)((MAX_TOUCH_POINTS) | 0); /* check that MAX_TOUCH_POINTS is an integer */
- if (!_cffi_check_int(*o, n, 10U))
- n |= 2;
- return n;
-}
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__AudioStream(AudioStream *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->sampleRate) | 0); /* check that 'AudioStream.sampleRate' is an integer */
- (void)((p->sampleSize) | 0); /* check that 'AudioStream.sampleSize' is an integer */
- (void)((p->channels) | 0); /* check that 'AudioStream.channels' is an integer */
- { rAudioBuffer * *tmp = &p->buffer; (void)tmp; }
-}
-struct _cffi_align__AudioStream { char x; AudioStream y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__BoneInfo(BoneInfo *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { char(*tmp)[32] = &p->name; (void)tmp; }
- (void)((p->parent) | 0); /* check that 'BoneInfo.parent' is an integer */
-}
-struct _cffi_align__BoneInfo { char x; BoneInfo y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__BoundingBox(BoundingBox *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { Vector3 *tmp = &p->min; (void)tmp; }
- { Vector3 *tmp = &p->max; (void)tmp; }
-}
-struct _cffi_align__BoundingBox { char x; BoundingBox y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Camera2D(Camera2D *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { Vector2 *tmp = &p->offset; (void)tmp; }
- { Vector2 *tmp = &p->target; (void)tmp; }
- { float *tmp = &p->rotation; (void)tmp; }
- { float *tmp = &p->zoom; (void)tmp; }
-}
-struct _cffi_align__Camera2D { char x; Camera2D y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Camera3D(Camera3D *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { Vector3 *tmp = &p->position; (void)tmp; }
- { Vector3 *tmp = &p->target; (void)tmp; }
- { Vector3 *tmp = &p->up; (void)tmp; }
- { float *tmp = &p->fovy; (void)tmp; }
- (void)((p->type) | 0); /* check that 'Camera3D.type' is an integer */
-}
-struct _cffi_align__Camera3D { char x; Camera3D y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__CharInfo(CharInfo *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->value) | 0); /* check that 'CharInfo.value' is an integer */
- (void)((p->offsetX) | 0); /* check that 'CharInfo.offsetX' is an integer */
- (void)((p->offsetY) | 0); /* check that 'CharInfo.offsetY' is an integer */
- (void)((p->advanceX) | 0); /* check that 'CharInfo.advanceX' is an integer */
- { Image *tmp = &p->image; (void)tmp; }
-}
-struct _cffi_align__CharInfo { char x; CharInfo y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Color(Color *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->r) | 0); /* check that 'Color.r' is an integer */
- (void)((p->g) | 0); /* check that 'Color.g' is an integer */
- (void)((p->b) | 0); /* check that 'Color.b' is an integer */
- (void)((p->a) | 0); /* check that 'Color.a' is an integer */
-}
-struct _cffi_align__Color { char x; Color y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Font(Font *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->baseSize) | 0); /* check that 'Font.baseSize' is an integer */
- (void)((p->charsCount) | 0); /* check that 'Font.charsCount' is an integer */
- { Texture2D *tmp = &p->texture; (void)tmp; }
- { Rectangle * *tmp = &p->recs; (void)tmp; }
- { CharInfo * *tmp = &p->chars; (void)tmp; }
-}
-struct _cffi_align__Font { char x; Font y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Image(Image *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { void * *tmp = &p->data; (void)tmp; }
- (void)((p->width) | 0); /* check that 'Image.width' is an integer */
- (void)((p->height) | 0); /* check that 'Image.height' is an integer */
- (void)((p->mipmaps) | 0); /* check that 'Image.mipmaps' is an integer */
- (void)((p->format) | 0); /* check that 'Image.format' is an integer */
-}
-struct _cffi_align__Image { char x; Image y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Material(Material *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { Shader *tmp = &p->shader; (void)tmp; }
- { MaterialMap * *tmp = &p->maps; (void)tmp; }
- { float * *tmp = &p->params; (void)tmp; }
-}
-struct _cffi_align__Material { char x; Material y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__MaterialMap(MaterialMap *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { Texture2D *tmp = &p->texture; (void)tmp; }
- { Color *tmp = &p->color; (void)tmp; }
- { float *tmp = &p->value; (void)tmp; }
-}
-struct _cffi_align__MaterialMap { char x; MaterialMap y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Matrix(Matrix *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { float *tmp = &p->m0; (void)tmp; }
- { float *tmp = &p->m4; (void)tmp; }
- { float *tmp = &p->m8; (void)tmp; }
- { float *tmp = &p->m12; (void)tmp; }
- { float *tmp = &p->m1; (void)tmp; }
- { float *tmp = &p->m5; (void)tmp; }
- { float *tmp = &p->m9; (void)tmp; }
- { float *tmp = &p->m13; (void)tmp; }
- { float *tmp = &p->m2; (void)tmp; }
- { float *tmp = &p->m6; (void)tmp; }
- { float *tmp = &p->m10; (void)tmp; }
- { float *tmp = &p->m14; (void)tmp; }
- { float *tmp = &p->m3; (void)tmp; }
- { float *tmp = &p->m7; (void)tmp; }
- { float *tmp = &p->m11; (void)tmp; }
- { float *tmp = &p->m15; (void)tmp; }
-}
-struct _cffi_align__Matrix { char x; Matrix y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Mesh(Mesh *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->vertexCount) | 0); /* check that 'Mesh.vertexCount' is an integer */
- (void)((p->triangleCount) | 0); /* check that 'Mesh.triangleCount' is an integer */
- { float * *tmp = &p->vertices; (void)tmp; }
- { float * *tmp = &p->texcoords; (void)tmp; }
- { float * *tmp = &p->texcoords2; (void)tmp; }
- { float * *tmp = &p->normals; (void)tmp; }
- { float * *tmp = &p->tangents; (void)tmp; }
- { unsigned char * *tmp = &p->colors; (void)tmp; }
- { unsigned short * *tmp = &p->indices; (void)tmp; }
- { float * *tmp = &p->animVertices; (void)tmp; }
- { float * *tmp = &p->animNormals; (void)tmp; }
- { int * *tmp = &p->boneIds; (void)tmp; }
- { float * *tmp = &p->boneWeights; (void)tmp; }
- (void)((p->vaoId) | 0); /* check that 'Mesh.vaoId' is an integer */
- { unsigned int * *tmp = &p->vboId; (void)tmp; }
-}
-struct _cffi_align__Mesh { char x; Mesh y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Model(Model *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { Matrix *tmp = &p->transform; (void)tmp; }
- (void)((p->meshCount) | 0); /* check that 'Model.meshCount' is an integer */
- { Mesh * *tmp = &p->meshes; (void)tmp; }
- (void)((p->materialCount) | 0); /* check that 'Model.materialCount' is an integer */
- { Material * *tmp = &p->materials; (void)tmp; }
- { int * *tmp = &p->meshMaterial; (void)tmp; }
- (void)((p->boneCount) | 0); /* check that 'Model.boneCount' is an integer */
- { BoneInfo * *tmp = &p->bones; (void)tmp; }
- { Transform * *tmp = &p->bindPose; (void)tmp; }
-}
-struct _cffi_align__Model { char x; Model y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__ModelAnimation(ModelAnimation *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->boneCount) | 0); /* check that 'ModelAnimation.boneCount' is an integer */
- { BoneInfo * *tmp = &p->bones; (void)tmp; }
- (void)((p->frameCount) | 0); /* check that 'ModelAnimation.frameCount' is an integer */
- { Transform * * *tmp = &p->framePoses; (void)tmp; }
-}
-struct _cffi_align__ModelAnimation { char x; ModelAnimation y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Music(Music *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->ctxType) | 0); /* check that 'Music.ctxType' is an integer */
- { void * *tmp = &p->ctxData; (void)tmp; }
- (void)((p->sampleCount) | 0); /* check that 'Music.sampleCount' is an integer */
- (void)((p->loopCount) | 0); /* check that 'Music.loopCount' is an integer */
- { AudioStream *tmp = &p->stream; (void)tmp; }
-}
-struct _cffi_align__Music { char x; Music y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__NPatchInfo(NPatchInfo *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { Rectangle *tmp = &p->sourceRec; (void)tmp; }
- (void)((p->left) | 0); /* check that 'NPatchInfo.left' is an integer */
- (void)((p->top) | 0); /* check that 'NPatchInfo.top' is an integer */
- (void)((p->right) | 0); /* check that 'NPatchInfo.right' is an integer */
- (void)((p->bottom) | 0); /* check that 'NPatchInfo.bottom' is an integer */
- (void)((p->type) | 0); /* check that 'NPatchInfo.type' is an integer */
-}
-struct _cffi_align__NPatchInfo { char x; NPatchInfo y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Ray(Ray *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { Vector3 *tmp = &p->position; (void)tmp; }
- { Vector3 *tmp = &p->direction; (void)tmp; }
-}
-struct _cffi_align__Ray { char x; Ray y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__RayHitInfo(RayHitInfo *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->hit) | 0); /* check that 'RayHitInfo.hit' is an integer */
- { float *tmp = &p->distance; (void)tmp; }
- { Vector3 *tmp = &p->position; (void)tmp; }
- { Vector3 *tmp = &p->normal; (void)tmp; }
-}
-struct _cffi_align__RayHitInfo { char x; RayHitInfo y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Rectangle(Rectangle *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { float *tmp = &p->x; (void)tmp; }
- { float *tmp = &p->y; (void)tmp; }
- { float *tmp = &p->width; (void)tmp; }
- { float *tmp = &p->height; (void)tmp; }
-}
-struct _cffi_align__Rectangle { char x; Rectangle y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__RenderTexture2D(RenderTexture2D *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->id) | 0); /* check that 'RenderTexture2D.id' is an integer */
- { Texture2D *tmp = &p->texture; (void)tmp; }
- { Texture2D *tmp = &p->depth; (void)tmp; }
- (void)((p->depthTexture) | 0); /* check that 'RenderTexture2D.depthTexture' is an integer */
-}
-struct _cffi_align__RenderTexture2D { char x; RenderTexture2D y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Shader(Shader *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->id) | 0); /* check that 'Shader.id' is an integer */
- { int * *tmp = &p->locs; (void)tmp; }
-}
-struct _cffi_align__Shader { char x; Shader y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Sound(Sound *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->sampleCount) | 0); /* check that 'Sound.sampleCount' is an integer */
- { AudioStream *tmp = &p->stream; (void)tmp; }
-}
-struct _cffi_align__Sound { char x; Sound y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Texture2D(Texture2D *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->id) | 0); /* check that 'Texture2D.id' is an integer */
- (void)((p->width) | 0); /* check that 'Texture2D.width' is an integer */
- (void)((p->height) | 0); /* check that 'Texture2D.height' is an integer */
- (void)((p->mipmaps) | 0); /* check that 'Texture2D.mipmaps' is an integer */
- (void)((p->format) | 0); /* check that 'Texture2D.format' is an integer */
-}
-struct _cffi_align__Texture2D { char x; Texture2D y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Transform(Transform *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { Vector3 *tmp = &p->translation; (void)tmp; }
- { Vector4 *tmp = &p->rotation; (void)tmp; }
- { Vector3 *tmp = &p->scale; (void)tmp; }
-}
-struct _cffi_align__Transform { char x; Transform y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Vector2(Vector2 *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { float *tmp = &p->x; (void)tmp; }
- { float *tmp = &p->y; (void)tmp; }
-}
-struct _cffi_align__Vector2 { char x; Vector2 y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Vector3(Vector3 *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { float *tmp = &p->x; (void)tmp; }
- { float *tmp = &p->y; (void)tmp; }
- { float *tmp = &p->z; (void)tmp; }
-}
-struct _cffi_align__Vector3 { char x; Vector3 y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Vector4(Vector4 *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- { float *tmp = &p->x; (void)tmp; }
- { float *tmp = &p->y; (void)tmp; }
- { float *tmp = &p->z; (void)tmp; }
- { float *tmp = &p->w; (void)tmp; }
-}
-struct _cffi_align__Vector4 { char x; Vector4 y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__VrDeviceInfo(VrDeviceInfo *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->hResolution) | 0); /* check that 'VrDeviceInfo.hResolution' is an integer */
- (void)((p->vResolution) | 0); /* check that 'VrDeviceInfo.vResolution' is an integer */
- { float *tmp = &p->hScreenSize; (void)tmp; }
- { float *tmp = &p->vScreenSize; (void)tmp; }
- { float *tmp = &p->vScreenCenter; (void)tmp; }
- { float *tmp = &p->eyeToScreenDistance; (void)tmp; }
- { float *tmp = &p->lensSeparationDistance; (void)tmp; }
- { float *tmp = &p->interpupillaryDistance; (void)tmp; }
- { float(*tmp)[4] = &p->lensDistortionValues; (void)tmp; }
- { float(*tmp)[4] = &p->chromaAbCorrection; (void)tmp; }
-}
-struct _cffi_align__VrDeviceInfo { char x; VrDeviceInfo y; };
-
-_CFFI_UNUSED_FN
-static void _cffi_checkfld__Wave(Wave *p)
-{
- /* only to generate compile-time warnings or errors */
- (void)p;
- (void)((p->sampleCount) | 0); /* check that 'Wave.sampleCount' is an integer */
- (void)((p->sampleRate) | 0); /* check that 'Wave.sampleRate' is an integer */
- (void)((p->sampleSize) | 0); /* check that 'Wave.sampleSize' is an integer */
- (void)((p->channels) | 0); /* check that 'Wave.channels' is an integer */
- { void * *tmp = &p->data; (void)tmp; }
-}
-struct _cffi_align__Wave { char x; Wave y; };
-
-static const struct _cffi_global_s _cffi_globals[] = {
- { "BLEND_ADDITIVE", (void *)_cffi_const_BLEND_ADDITIVE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "BLEND_ALPHA", (void *)_cffi_const_BLEND_ALPHA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "BLEND_MULTIPLIED", (void *)_cffi_const_BLEND_MULTIPLIED, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "BeginBlendMode", (void *)_cffi_f_BeginBlendMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1063), (void *)_cffi_d_BeginBlendMode },
- { "BeginDrawing", (void *)_cffi_f_BeginDrawing, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_BeginDrawing },
- { "BeginMode2D", (void *)_cffi_f_BeginMode2D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 533), (void *)_cffi_d_BeginMode2D },
- { "BeginMode3D", (void *)_cffi_f_BeginMode3D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 539), (void *)_cffi_d_BeginMode3D },
- { "BeginScissorMode", (void *)_cffi_f_BeginScissorMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1108), (void *)_cffi_d_BeginScissorMode },
- { "BeginShaderMode", (void *)_cffi_f_BeginShaderMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 802), (void *)_cffi_d_BeginShaderMode },
- { "BeginTextureMode", (void *)_cffi_f_BeginTextureMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 799), (void *)_cffi_d_BeginTextureMode },
- { "BeginVrDrawing", (void *)_cffi_f_BeginVrDrawing, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_BeginVrDrawing },
- { "CAMERA_CUSTOM", (void *)_cffi_const_CAMERA_CUSTOM, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CAMERA_FIRST_PERSON", (void *)_cffi_const_CAMERA_FIRST_PERSON, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CAMERA_FREE", (void *)_cffi_const_CAMERA_FREE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CAMERA_ORBITAL", (void *)_cffi_const_CAMERA_ORBITAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CAMERA_ORTHOGRAPHIC", (void *)_cffi_const_CAMERA_ORTHOGRAPHIC, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CAMERA_PERSPECTIVE", (void *)_cffi_const_CAMERA_PERSPECTIVE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CAMERA_THIRD_PERSON", (void *)_cffi_const_CAMERA_THIRD_PERSON, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_ASTC_4x4_RGBA", (void *)_cffi_const_COMPRESSED_ASTC_4x4_RGBA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_ASTC_8x8_RGBA", (void *)_cffi_const_COMPRESSED_ASTC_8x8_RGBA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_DXT1_RGB", (void *)_cffi_const_COMPRESSED_DXT1_RGB, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_DXT1_RGBA", (void *)_cffi_const_COMPRESSED_DXT1_RGBA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_DXT3_RGBA", (void *)_cffi_const_COMPRESSED_DXT3_RGBA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_DXT5_RGBA", (void *)_cffi_const_COMPRESSED_DXT5_RGBA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_ETC1_RGB", (void *)_cffi_const_COMPRESSED_ETC1_RGB, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_ETC2_EAC_RGBA", (void *)_cffi_const_COMPRESSED_ETC2_EAC_RGBA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_ETC2_RGB", (void *)_cffi_const_COMPRESSED_ETC2_RGB, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_PVRT_RGB", (void *)_cffi_const_COMPRESSED_PVRT_RGB, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "COMPRESSED_PVRT_RGBA", (void *)_cffi_const_COMPRESSED_PVRT_RGBA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CUBEMAP_AUTO_DETECT", (void *)_cffi_const_CUBEMAP_AUTO_DETECT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CUBEMAP_CROSS_FOUR_BY_THREE", (void *)_cffi_const_CUBEMAP_CROSS_FOUR_BY_THREE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CUBEMAP_CROSS_THREE_BY_FOUR", (void *)_cffi_const_CUBEMAP_CROSS_THREE_BY_FOUR, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CUBEMAP_LINE_HORIZONTAL", (void *)_cffi_const_CUBEMAP_LINE_HORIZONTAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CUBEMAP_LINE_VERTICAL", (void *)_cffi_const_CUBEMAP_LINE_VERTICAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "CUBEMAP_PANORAMA", (void *)_cffi_const_CUBEMAP_PANORAMA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "ChangeDirectory", (void *)_cffi_f_ChangeDirectory, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 471), (void *)_cffi_d_ChangeDirectory },
- { "CheckCollisionBoxSphere", (void *)_cffi_f_CheckCollisionBoxSphere, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 390), (void *)_cffi_d_CheckCollisionBoxSphere },
- { "CheckCollisionBoxes", (void *)_cffi_f_CheckCollisionBoxes, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 386), (void *)_cffi_d_CheckCollisionBoxes },
- { "CheckCollisionCircleRec", (void *)_cffi_f_CheckCollisionCircleRec, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 450), (void *)_cffi_d_CheckCollisionCircleRec },
- { "CheckCollisionCircles", (void *)_cffi_f_CheckCollisionCircles, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 455), (void *)_cffi_d_CheckCollisionCircles },
- { "CheckCollisionPointCircle", (void *)_cffi_f_CheckCollisionPointCircle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 445), (void *)_cffi_d_CheckCollisionPointCircle },
- { "CheckCollisionPointRec", (void *)_cffi_f_CheckCollisionPointRec, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 435), (void *)_cffi_d_CheckCollisionPointRec },
- { "CheckCollisionPointTriangle", (void *)_cffi_f_CheckCollisionPointTriangle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 439), (void *)_cffi_d_CheckCollisionPointTriangle },
- { "CheckCollisionRayBox", (void *)_cffi_f_CheckCollisionRayBox, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 409), (void *)_cffi_d_CheckCollisionRayBox },
- { "CheckCollisionRaySphere", (void *)_cffi_f_CheckCollisionRaySphere, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 413), (void *)_cffi_d_CheckCollisionRaySphere },
- { "CheckCollisionRaySphereEx", (void *)_cffi_f_CheckCollisionRaySphereEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 418), (void *)_cffi_d_CheckCollisionRaySphereEx },
- { "CheckCollisionRecs", (void *)_cffi_f_CheckCollisionRecs, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 424), (void *)_cffi_d_CheckCollisionRecs },
- { "CheckCollisionSpheres", (void *)_cffi_f_CheckCollisionSpheres, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 461), (void *)_cffi_d_CheckCollisionSpheres },
- { "ClearBackground", (void *)_cffi_f_ClearBackground, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 561), (void *)_cffi_d_ClearBackground },
- { "ClearDirectoryFiles", (void *)_cffi_f_ClearDirectoryFiles, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_ClearDirectoryFiles },
- { "ClearDroppedFiles", (void *)_cffi_f_ClearDroppedFiles, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_ClearDroppedFiles },
- { "CloseAudioDevice", (void *)_cffi_f_CloseAudioDevice, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_CloseAudioDevice },
- { "CloseAudioStream", (void *)_cffi_f_CloseAudioStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 517), (void *)_cffi_d_CloseAudioStream },
- { "CloseVrSimulator", (void *)_cffi_f_CloseVrSimulator, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_CloseVrSimulator },
- { "CloseWindow", (void *)_cffi_f_CloseWindow, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_CloseWindow },
- { "CodepointToUtf8", (void *)_cffi_f_CodepointToUtf8, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 359), (void *)_cffi_d_CodepointToUtf8 },
- { "ColorFromHSV", (void *)_cffi_f_ColorFromHSV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 27), (void *)_cffi_d_ColorFromHSV },
- { "ColorFromNormalized", (void *)_cffi_f_ColorFromNormalized, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 30), (void *)_cffi_d_ColorFromNormalized },
- { "ColorNormalize", (void *)_cffi_f_ColorNormalize, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 302), (void *)_cffi_d_ColorNormalize },
- { "ColorToHSV", (void *)_cffi_f_ColorToHSV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 296), (void *)_cffi_d_ColorToHSV },
- { "ColorToInt", (void *)_cffi_f_ColorToInt, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 395), (void *)_cffi_d_ColorToInt },
- { "CompressData", (void *)_cffi_f_CompressData, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 507), (void *)_cffi_d_CompressData },
- { "DecompressData", (void *)_cffi_f_DecompressData, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 507), (void *)_cffi_d_DecompressData },
- { "DirectoryExists", (void *)_cffi_f_DirectoryExists, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 471), (void *)_cffi_d_DirectoryExists },
- { "DisableCursor", (void *)_cffi_f_DisableCursor, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_DisableCursor },
- { "DrawBillboard", (void *)_cffi_f_DrawBillboard, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 550), (void *)_cffi_d_DrawBillboard },
- { "DrawBillboardRec", (void *)_cffi_f_DrawBillboardRec, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 542), (void *)_cffi_d_DrawBillboardRec },
- { "DrawBoundingBox", (void *)_cffi_f_DrawBoundingBox, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 529), (void *)_cffi_d_DrawBoundingBox },
- { "DrawCircle", (void *)_cffi_f_DrawCircle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1088), (void *)_cffi_d_DrawCircle },
- { "DrawCircle3D", (void *)_cffi_f_DrawCircle3D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 990), (void *)_cffi_d_DrawCircle3D },
- { "DrawCircleGradient", (void *)_cffi_f_DrawCircleGradient, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1094), (void *)_cffi_d_DrawCircleGradient },
- { "DrawCircleLines", (void *)_cffi_f_DrawCircleLines, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1088), (void *)_cffi_d_DrawCircleLines },
- { "DrawCircleSector", (void *)_cffi_f_DrawCircleSector, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 953), (void *)_cffi_d_DrawCircleSector },
- { "DrawCircleSectorLines", (void *)_cffi_f_DrawCircleSectorLines, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 953), (void *)_cffi_d_DrawCircleSectorLines },
- { "DrawCircleV", (void *)_cffi_f_DrawCircleV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 939), (void *)_cffi_d_DrawCircleV },
- { "DrawCube", (void *)_cffi_f_DrawCube, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 997), (void *)_cffi_d_DrawCube },
- { "DrawCubeTexture", (void *)_cffi_f_DrawCubeTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 891), (void *)_cffi_d_DrawCubeTexture },
- { "DrawCubeV", (void *)_cffi_f_DrawCubeV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 980), (void *)_cffi_d_DrawCubeV },
- { "DrawCubeWires", (void *)_cffi_f_DrawCubeWires, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 997), (void *)_cffi_d_DrawCubeWires },
- { "DrawCubeWiresV", (void *)_cffi_f_DrawCubeWiresV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 980), (void *)_cffi_d_DrawCubeWiresV },
- { "DrawCylinder", (void *)_cffi_f_DrawCylinder, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1004), (void *)_cffi_d_DrawCylinder },
- { "DrawCylinderWires", (void *)_cffi_f_DrawCylinderWires, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1004), (void *)_cffi_d_DrawCylinderWires },
- { "DrawEllipse", (void *)_cffi_f_DrawEllipse, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1101), (void *)_cffi_d_DrawEllipse },
- { "DrawEllipseLines", (void *)_cffi_f_DrawEllipseLines, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1101), (void *)_cffi_d_DrawEllipseLines },
- { "DrawFPS", (void *)_cffi_f_DrawFPS, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1074), (void *)_cffi_d_DrawFPS },
- { "DrawGizmo", (void *)_cffi_f_DrawGizmo, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 968), (void *)_cffi_d_DrawGizmo },
- { "DrawGrid", (void *)_cffi_f_DrawGrid, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1070), (void *)_cffi_d_DrawGrid },
- { "DrawLine", (void *)_cffi_f_DrawLine, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1114), (void *)_cffi_d_DrawLine },
- { "DrawLine3D", (void *)_cffi_f_DrawLine3D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 980), (void *)_cffi_d_DrawLine3D },
- { "DrawLineBezier", (void *)_cffi_f_DrawLineBezier, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 933), (void *)_cffi_d_DrawLineBezier },
- { "DrawLineEx", (void *)_cffi_f_DrawLineEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 933), (void *)_cffi_d_DrawLineEx },
- { "DrawLineStrip", (void *)_cffi_f_DrawLineStrip, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 913), (void *)_cffi_d_DrawLineStrip },
- { "DrawLineV", (void *)_cffi_f_DrawLineV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 922), (void *)_cffi_d_DrawLineV },
- { "DrawModel", (void *)_cffi_f_DrawModel, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 740), (void *)_cffi_d_DrawModel },
- { "DrawModelEx", (void *)_cffi_f_DrawModelEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 732), (void *)_cffi_d_DrawModelEx },
- { "DrawModelWires", (void *)_cffi_f_DrawModelWires, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 740), (void *)_cffi_d_DrawModelWires },
- { "DrawModelWiresEx", (void *)_cffi_f_DrawModelWiresEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 732), (void *)_cffi_d_DrawModelWiresEx },
- { "DrawPixel", (void *)_cffi_f_DrawPixel, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1078), (void *)_cffi_d_DrawPixel },
- { "DrawPixelV", (void *)_cffi_f_DrawPixelV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 918), (void *)_cffi_d_DrawPixelV },
- { "DrawPlane", (void *)_cffi_f_DrawPlane, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 975), (void *)_cffi_d_DrawPlane },
- { "DrawPoint3D", (void *)_cffi_f_DrawPoint3D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 971), (void *)_cffi_d_DrawPoint3D },
- { "DrawPoly", (void *)_cffi_f_DrawPoly, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 961), (void *)_cffi_d_DrawPoly },
- { "DrawPolyLines", (void *)_cffi_f_DrawPolyLines, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 961), (void *)_cffi_d_DrawPolyLines },
- { "DrawRay", (void *)_cffi_f_DrawRay, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 760), (void *)_cffi_d_DrawRay },
- { "DrawRectangle", (void *)_cffi_f_DrawRectangle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1114), (void *)_cffi_d_DrawRectangle },
- { "DrawRectangleGradientEx", (void *)_cffi_f_DrawRectangleGradientEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 768), (void *)_cffi_d_DrawRectangleGradientEx },
- { "DrawRectangleGradientH", (void *)_cffi_f_DrawRectangleGradientH, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1121), (void *)_cffi_d_DrawRectangleGradientH },
- { "DrawRectangleGradientV", (void *)_cffi_f_DrawRectangleGradientV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1121), (void *)_cffi_d_DrawRectangleGradientV },
- { "DrawRectangleLines", (void *)_cffi_f_DrawRectangleLines, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1114), (void *)_cffi_d_DrawRectangleLines },
- { "DrawRectangleLinesEx", (void *)_cffi_f_DrawRectangleLinesEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 794), (void *)_cffi_d_DrawRectangleLinesEx },
- { "DrawRectanglePro", (void *)_cffi_f_DrawRectanglePro, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 775), (void *)_cffi_d_DrawRectanglePro },
- { "DrawRectangleRec", (void *)_cffi_f_DrawRectangleRec, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 764), (void *)_cffi_d_DrawRectangleRec },
- { "DrawRectangleRounded", (void *)_cffi_f_DrawRectangleRounded, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 781), (void *)_cffi_d_DrawRectangleRounded },
- { "DrawRectangleRoundedLines", (void *)_cffi_f_DrawRectangleRoundedLines, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 787), (void *)_cffi_d_DrawRectangleRoundedLines },
- { "DrawRectangleV", (void *)_cffi_f_DrawRectangleV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 922), (void *)_cffi_d_DrawRectangleV },
- { "DrawRing", (void *)_cffi_f_DrawRing, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 944), (void *)_cffi_d_DrawRing },
- { "DrawRingLines", (void *)_cffi_f_DrawRingLines, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 944), (void *)_cffi_d_DrawRingLines },
- { "DrawSphere", (void *)_cffi_f_DrawSphere, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 985), (void *)_cffi_d_DrawSphere },
- { "DrawSphereEx", (void *)_cffi_f_DrawSphereEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1012), (void *)_cffi_d_DrawSphereEx },
- { "DrawSphereWires", (void *)_cffi_f_DrawSphereWires, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1012), (void *)_cffi_d_DrawSphereWires },
- { "DrawText", (void *)_cffi_f_DrawText, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1049), (void *)_cffi_d_DrawText },
- { "DrawTextCodepoint", (void *)_cffi_f_DrawTextCodepoint, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 597), (void *)_cffi_d_DrawTextCodepoint },
- { "DrawTextEx", (void *)_cffi_f_DrawTextEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 589), (void *)_cffi_d_DrawTextEx },
- { "DrawTextRec", (void *)_cffi_f_DrawTextRec, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 567), (void *)_cffi_d_DrawTextRec },
- { "DrawTextRecEx", (void *)_cffi_f_DrawTextRecEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 576), (void *)_cffi_d_DrawTextRecEx },
- { "DrawTexture", (void *)_cffi_f_DrawTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 903), (void *)_cffi_d_DrawTexture },
- { "DrawTextureEx", (void *)_cffi_f_DrawTextureEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 884), (void *)_cffi_d_DrawTextureEx },
- { "DrawTextureNPatch", (void *)_cffi_f_DrawTextureNPatch, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 846), (void *)_cffi_d_DrawTextureNPatch },
- { "DrawTexturePro", (void *)_cffi_f_DrawTexturePro, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 858), (void *)_cffi_d_DrawTexturePro },
- { "DrawTextureQuad", (void *)_cffi_f_DrawTextureQuad, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 877), (void *)_cffi_d_DrawTextureQuad },
- { "DrawTextureRec", (void *)_cffi_f_DrawTextureRec, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 866), (void *)_cffi_d_DrawTextureRec },
- { "DrawTextureV", (void *)_cffi_f_DrawTextureV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 872), (void *)_cffi_d_DrawTextureV },
- { "DrawTriangle", (void *)_cffi_f_DrawTriangle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 927), (void *)_cffi_d_DrawTriangle },
- { "DrawTriangleFan", (void *)_cffi_f_DrawTriangleFan, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 913), (void *)_cffi_d_DrawTriangleFan },
- { "DrawTriangleLines", (void *)_cffi_f_DrawTriangleLines, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 927), (void *)_cffi_d_DrawTriangleLines },
- { "DrawTriangleStrip", (void *)_cffi_f_DrawTriangleStrip, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 913), (void *)_cffi_d_DrawTriangleStrip },
- { "EnableCursor", (void *)_cffi_f_EnableCursor, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_EnableCursor },
- { "EndBlendMode", (void *)_cffi_f_EndBlendMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_EndBlendMode },
- { "EndDrawing", (void *)_cffi_f_EndDrawing, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_EndDrawing },
- { "EndMode2D", (void *)_cffi_f_EndMode2D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_EndMode2D },
- { "EndMode3D", (void *)_cffi_f_EndMode3D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_EndMode3D },
- { "EndScissorMode", (void *)_cffi_f_EndScissorMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_EndScissorMode },
- { "EndShaderMode", (void *)_cffi_f_EndShaderMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_EndShaderMode },
- { "EndTextureMode", (void *)_cffi_f_EndTextureMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_EndTextureMode },
- { "EndVrDrawing", (void *)_cffi_f_EndVrDrawing, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_EndVrDrawing },
- { "ExportImage", (void *)_cffi_f_ExportImage, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 694), (void *)_cffi_d_ExportImage },
- { "ExportImageAsCode", (void *)_cffi_f_ExportImageAsCode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 694), (void *)_cffi_d_ExportImageAsCode },
- { "ExportMesh", (void *)_cffi_f_ExportMesh, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 715), (void *)_cffi_d_ExportMesh },
- { "ExportWave", (void *)_cffi_f_ExportWave, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1037), (void *)_cffi_d_ExportWave },
- { "ExportWaveAsCode", (void *)_cffi_f_ExportWaveAsCode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1037), (void *)_cffi_d_ExportWaveAsCode },
- { "FILTER_ANISOTROPIC_16X", (void *)_cffi_const_FILTER_ANISOTROPIC_16X, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FILTER_ANISOTROPIC_4X", (void *)_cffi_const_FILTER_ANISOTROPIC_4X, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FILTER_ANISOTROPIC_8X", (void *)_cffi_const_FILTER_ANISOTROPIC_8X, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FILTER_BILINEAR", (void *)_cffi_const_FILTER_BILINEAR, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FILTER_POINT", (void *)_cffi_const_FILTER_POINT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FILTER_TRILINEAR", (void *)_cffi_const_FILTER_TRILINEAR, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FLAG_FULLSCREEN_MODE", (void *)_cffi_const_FLAG_FULLSCREEN_MODE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FLAG_MSAA_4X_HINT", (void *)_cffi_const_FLAG_MSAA_4X_HINT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FLAG_RESERVED", (void *)_cffi_const_FLAG_RESERVED, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FLAG_VSYNC_HINT", (void *)_cffi_const_FLAG_VSYNC_HINT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FLAG_WINDOW_ALWAYS_RUN", (void *)_cffi_const_FLAG_WINDOW_ALWAYS_RUN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FLAG_WINDOW_HIDDEN", (void *)_cffi_const_FLAG_WINDOW_HIDDEN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FLAG_WINDOW_RESIZABLE", (void *)_cffi_const_FLAG_WINDOW_RESIZABLE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FLAG_WINDOW_TRANSPARENT", (void *)_cffi_const_FLAG_WINDOW_TRANSPARENT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FLAG_WINDOW_UNDECORATED", (void *)_cffi_const_FLAG_WINDOW_UNDECORATED, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FONT_BITMAP", (void *)_cffi_const_FONT_BITMAP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FONT_DEFAULT", (void *)_cffi_const_FONT_DEFAULT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "FONT_SDF", (void *)_cffi_const_FONT_SDF, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "Fade", (void *)_cffi_f_Fade, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 23), (void *)_cffi_d_Fade },
- { "FileExists", (void *)_cffi_f_FileExists, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 471), (void *)_cffi_d_FileExists },
- { "GAMEPAD_AXIS_LEFT_TRIGGER", (void *)_cffi_const_GAMEPAD_AXIS_LEFT_TRIGGER, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_AXIS_LEFT_X", (void *)_cffi_const_GAMEPAD_AXIS_LEFT_X, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_AXIS_LEFT_Y", (void *)_cffi_const_GAMEPAD_AXIS_LEFT_Y, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_AXIS_RIGHT_TRIGGER", (void *)_cffi_const_GAMEPAD_AXIS_RIGHT_TRIGGER, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_AXIS_RIGHT_X", (void *)_cffi_const_GAMEPAD_AXIS_RIGHT_X, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_AXIS_RIGHT_Y", (void *)_cffi_const_GAMEPAD_AXIS_RIGHT_Y, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_AXIS_UNKNOWN", (void *)_cffi_const_GAMEPAD_AXIS_UNKNOWN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_LEFT_FACE_DOWN", (void *)_cffi_const_GAMEPAD_BUTTON_LEFT_FACE_DOWN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_LEFT_FACE_LEFT", (void *)_cffi_const_GAMEPAD_BUTTON_LEFT_FACE_LEFT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_LEFT_FACE_RIGHT", (void *)_cffi_const_GAMEPAD_BUTTON_LEFT_FACE_RIGHT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_LEFT_FACE_UP", (void *)_cffi_const_GAMEPAD_BUTTON_LEFT_FACE_UP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_LEFT_THUMB", (void *)_cffi_const_GAMEPAD_BUTTON_LEFT_THUMB, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_LEFT_TRIGGER_1", (void *)_cffi_const_GAMEPAD_BUTTON_LEFT_TRIGGER_1, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_LEFT_TRIGGER_2", (void *)_cffi_const_GAMEPAD_BUTTON_LEFT_TRIGGER_2, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_MIDDLE", (void *)_cffi_const_GAMEPAD_BUTTON_MIDDLE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_MIDDLE_LEFT", (void *)_cffi_const_GAMEPAD_BUTTON_MIDDLE_LEFT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_MIDDLE_RIGHT", (void *)_cffi_const_GAMEPAD_BUTTON_MIDDLE_RIGHT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_RIGHT_FACE_DOWN", (void *)_cffi_const_GAMEPAD_BUTTON_RIGHT_FACE_DOWN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_RIGHT_FACE_LEFT", (void *)_cffi_const_GAMEPAD_BUTTON_RIGHT_FACE_LEFT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_RIGHT_FACE_RIGHT", (void *)_cffi_const_GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_RIGHT_FACE_UP", (void *)_cffi_const_GAMEPAD_BUTTON_RIGHT_FACE_UP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_RIGHT_THUMB", (void *)_cffi_const_GAMEPAD_BUTTON_RIGHT_THUMB, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_RIGHT_TRIGGER_1", (void *)_cffi_const_GAMEPAD_BUTTON_RIGHT_TRIGGER_1, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_RIGHT_TRIGGER_2", (void *)_cffi_const_GAMEPAD_BUTTON_RIGHT_TRIGGER_2, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_BUTTON_UNKNOWN", (void *)_cffi_const_GAMEPAD_BUTTON_UNKNOWN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_PLAYER1", (void *)_cffi_const_GAMEPAD_PLAYER1, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_PLAYER2", (void *)_cffi_const_GAMEPAD_PLAYER2, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_PLAYER3", (void *)_cffi_const_GAMEPAD_PLAYER3, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GAMEPAD_PLAYER4", (void *)_cffi_const_GAMEPAD_PLAYER4, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_DOUBLETAP", (void *)_cffi_const_GESTURE_DOUBLETAP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_DRAG", (void *)_cffi_const_GESTURE_DRAG, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_HOLD", (void *)_cffi_const_GESTURE_HOLD, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_NONE", (void *)_cffi_const_GESTURE_NONE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_PINCH_IN", (void *)_cffi_const_GESTURE_PINCH_IN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_PINCH_OUT", (void *)_cffi_const_GESTURE_PINCH_OUT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_SWIPE_DOWN", (void *)_cffi_const_GESTURE_SWIPE_DOWN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_SWIPE_LEFT", (void *)_cffi_const_GESTURE_SWIPE_LEFT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_SWIPE_RIGHT", (void *)_cffi_const_GESTURE_SWIPE_RIGHT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_SWIPE_UP", (void *)_cffi_const_GESTURE_SWIPE_UP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GESTURE_TAP", (void *)_cffi_const_GESTURE_TAP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "GenImageCellular", (void *)_cffi_f_GenImageCellular, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 120), (void *)_cffi_d_GenImageCellular },
- { "GenImageChecked", (void *)_cffi_f_GenImageChecked, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 125), (void *)_cffi_d_GenImageChecked },
- { "GenImageColor", (void *)_cffi_f_GenImageColor, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 97), (void *)_cffi_d_GenImageColor },
- { "GenImageFontAtlas", (void *)_cffi_f_GenImageFontAtlas, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 52), (void *)_cffi_d_GenImageFontAtlas },
- { "GenImageGradientH", (void *)_cffi_f_GenImageGradientH, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 102), (void *)_cffi_d_GenImageGradientH },
- { "GenImageGradientRadial", (void *)_cffi_f_GenImageGradientRadial, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 113), (void *)_cffi_d_GenImageGradientRadial },
- { "GenImageGradientV", (void *)_cffi_f_GenImageGradientV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 102), (void *)_cffi_d_GenImageGradientV },
- { "GenImagePerlinNoise", (void *)_cffi_f_GenImagePerlinNoise, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 133), (void *)_cffi_d_GenImagePerlinNoise },
- { "GenImageWhiteNoise", (void *)_cffi_f_GenImageWhiteNoise, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 108), (void *)_cffi_d_GenImageWhiteNoise },
- { "GenMeshCube", (void *)_cffi_f_GenMeshCube, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 170), (void *)_cffi_d_GenMeshCube },
- { "GenMeshCubicmap", (void *)_cffi_f_GenMeshCubicmap, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 166), (void *)_cffi_d_GenMeshCubicmap },
- { "GenMeshCylinder", (void *)_cffi_f_GenMeshCylinder, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 175), (void *)_cffi_d_GenMeshCylinder },
- { "GenMeshHeightmap", (void *)_cffi_f_GenMeshHeightmap, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 166), (void *)_cffi_d_GenMeshHeightmap },
- { "GenMeshHemiSphere", (void *)_cffi_f_GenMeshHemiSphere, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 186), (void *)_cffi_d_GenMeshHemiSphere },
- { "GenMeshKnot", (void *)_cffi_f_GenMeshKnot, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 180), (void *)_cffi_d_GenMeshKnot },
- { "GenMeshPlane", (void *)_cffi_f_GenMeshPlane, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 180), (void *)_cffi_d_GenMeshPlane },
- { "GenMeshPoly", (void *)_cffi_f_GenMeshPoly, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 191), (void *)_cffi_d_GenMeshPoly },
- { "GenMeshSphere", (void *)_cffi_f_GenMeshSphere, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 186), (void *)_cffi_d_GenMeshSphere },
- { "GenMeshTorus", (void *)_cffi_f_GenMeshTorus, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 180), (void *)_cffi_d_GenMeshTorus },
- { "GenTextureBRDF", (void *)_cffi_f_GenTextureBRDF, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 262), (void *)_cffi_d_GenTextureBRDF },
- { "GenTextureCubemap", (void *)_cffi_f_GenTextureCubemap, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 257), (void *)_cffi_d_GenTextureCubemap },
- { "GenTextureIrradiance", (void *)_cffi_f_GenTextureIrradiance, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 257), (void *)_cffi_d_GenTextureIrradiance },
- { "GenTextureMipmaps", (void *)_cffi_f_GenTextureMipmaps, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 840), (void *)_cffi_d_GenTextureMipmaps },
- { "GenTexturePrefilter", (void *)_cffi_f_GenTexturePrefilter, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 257), (void *)_cffi_d_GenTexturePrefilter },
- { "GetCameraMatrix", (void *)_cffi_f_GetCameraMatrix, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 157), (void *)_cffi_d_GetCameraMatrix },
- { "GetCameraMatrix2D", (void *)_cffi_f_GetCameraMatrix2D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 154), (void *)_cffi_d_GetCameraMatrix2D },
- { "GetClipboardText", (void *)_cffi_f_GetClipboardText, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 363), (void *)_cffi_d_GetClipboardText },
- { "GetCodepoints", (void *)_cffi_f_GetCodepoints, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 379), (void *)_cffi_d_GetCodepoints },
- { "GetCodepointsCount", (void *)_cffi_f_GetCodepointsCount, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 471), (void *)_cffi_d_GetCodepointsCount },
- { "GetCollisionRayGround", (void *)_cffi_f_GetCollisionRayGround, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 222), (void *)_cffi_d_GetCollisionRayGround },
- { "GetCollisionRayModel", (void *)_cffi_f_GetCollisionRayModel, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 212), (void *)_cffi_d_GetCollisionRayModel },
- { "GetCollisionRayTriangle", (void *)_cffi_f_GetCollisionRayTriangle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 216), (void *)_cffi_d_GetCollisionRayTriangle },
- { "GetCollisionRec", (void *)_cffi_f_GetCollisionRec, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 230), (void *)_cffi_d_GetCollisionRec },
- { "GetColor", (void *)_cffi_f_GetColor, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 33), (void *)_cffi_d_GetColor },
- { "GetDirectoryFiles", (void *)_cffi_f_GetDirectoryFiles, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 311), (void *)_cffi_d_GetDirectoryFiles },
- { "GetDirectoryPath", (void *)_cffi_f_GetDirectoryPath, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 345), (void *)_cffi_d_GetDirectoryPath },
- { "GetDroppedFiles", (void *)_cffi_f_GetDroppedFiles, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 315), (void *)_cffi_d_GetDroppedFiles },
- { "GetExtension", (void *)_cffi_f_GetExtension, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 345), (void *)_cffi_d_GetExtension },
- { "GetFPS", (void *)_cffi_f_GetFPS, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetFPS },
- { "GetFileModTime", (void *)_cffi_f_GetFileModTime, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 504), (void *)_cffi_d_GetFileModTime },
- { "GetFileName", (void *)_cffi_f_GetFileName, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 345), (void *)_cffi_d_GetFileName },
- { "GetFileNameWithoutExt", (void *)_cffi_f_GetFileNameWithoutExt, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 345), (void *)_cffi_d_GetFileNameWithoutExt },
- { "GetFontDefault", (void *)_cffi_f_GetFontDefault, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 50), (void *)_cffi_d_GetFontDefault },
- { "GetFrameTime", (void *)_cffi_f_GetFrameTime, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 377), (void *)_cffi_d_GetFrameTime },
- { "GetGamepadAxisCount", (void *)_cffi_f_GetGamepadAxisCount, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_GetGamepadAxisCount },
- { "GetGamepadAxisMovement", (void *)_cffi_f_GetGamepadAxisMovement, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 373), (void *)_cffi_d_GetGamepadAxisMovement },
- { "GetGamepadButtonPressed", (void *)_cffi_f_GetGamepadButtonPressed, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetGamepadButtonPressed },
- { "GetGamepadName", (void *)_cffi_f_GetGamepadName, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 356), (void *)_cffi_d_GetGamepadName },
- { "GetGestureDetected", (void *)_cffi_f_GetGestureDetected, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetGestureDetected },
- { "GetGestureDragAngle", (void *)_cffi_f_GetGestureDragAngle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 377), (void *)_cffi_d_GetGestureDragAngle },
- { "GetGestureDragVector", (void *)_cffi_f_GetGestureDragVector, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 294), (void *)_cffi_d_GetGestureDragVector },
- { "GetGestureHoldDuration", (void *)_cffi_f_GetGestureHoldDuration, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 377), (void *)_cffi_d_GetGestureHoldDuration },
- { "GetGesturePinchAngle", (void *)_cffi_f_GetGesturePinchAngle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 377), (void *)_cffi_d_GetGesturePinchAngle },
- { "GetGesturePinchVector", (void *)_cffi_f_GetGesturePinchVector, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 294), (void *)_cffi_d_GetGesturePinchVector },
- { "GetGlyphIndex", (void *)_cffi_f_GetGlyphIndex, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 398), (void *)_cffi_d_GetGlyphIndex },
- { "GetImageAlphaBorder", (void *)_cffi_f_GetImageAlphaBorder, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 226), (void *)_cffi_d_GetImageAlphaBorder },
- { "GetImageData", (void *)_cffi_f_GetImageData, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 15), (void *)_cffi_d_GetImageData },
- { "GetImageDataNormalized", (void *)_cffi_f_GetImageDataNormalized, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 299), (void *)_cffi_d_GetImageDataNormalized },
- { "GetKeyPressed", (void *)_cffi_f_GetKeyPressed, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetKeyPressed },
- { "GetMatrixModelview", (void *)_cffi_f_GetMatrixModelview, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 160), (void *)_cffi_d_GetMatrixModelview },
- { "GetMatrixProjection", (void *)_cffi_f_GetMatrixProjection, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 160), (void *)_cffi_d_GetMatrixProjection },
- { "GetMonitorCount", (void *)_cffi_f_GetMonitorCount, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetMonitorCount },
- { "GetMonitorHeight", (void *)_cffi_f_GetMonitorHeight, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_GetMonitorHeight },
- { "GetMonitorName", (void *)_cffi_f_GetMonitorName, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 356), (void *)_cffi_d_GetMonitorName },
- { "GetMonitorPhysicalHeight", (void *)_cffi_f_GetMonitorPhysicalHeight, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_GetMonitorPhysicalHeight },
- { "GetMonitorPhysicalWidth", (void *)_cffi_f_GetMonitorPhysicalWidth, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_GetMonitorPhysicalWidth },
- { "GetMonitorWidth", (void *)_cffi_f_GetMonitorWidth, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_GetMonitorWidth },
- { "GetMousePosition", (void *)_cffi_f_GetMousePosition, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 294), (void *)_cffi_d_GetMousePosition },
- { "GetMouseRay", (void *)_cffi_f_GetMouseRay, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 208), (void *)_cffi_d_GetMouseRay },
- { "GetMouseWheelMove", (void *)_cffi_f_GetMouseWheelMove, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetMouseWheelMove },
- { "GetMouseX", (void *)_cffi_f_GetMouseX, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetMouseX },
- { "GetMouseY", (void *)_cffi_f_GetMouseY, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetMouseY },
- { "GetMusicTimeLength", (void *)_cffi_f_GetMusicTimeLength, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 370), (void *)_cffi_d_GetMusicTimeLength },
- { "GetMusicTimePlayed", (void *)_cffi_f_GetMusicTimePlayed, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 370), (void *)_cffi_d_GetMusicTimePlayed },
- { "GetNextCodepoint", (void *)_cffi_f_GetNextCodepoint, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 478), (void *)_cffi_d_GetNextCodepoint },
- { "GetPixelDataSize", (void *)_cffi_f_GetPixelDataSize, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 497), (void *)_cffi_d_GetPixelDataSize },
- { "GetPrevDirectoryPath", (void *)_cffi_f_GetPrevDirectoryPath, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 345), (void *)_cffi_d_GetPrevDirectoryPath },
- { "GetRandomValue", (void *)_cffi_f_GetRandomValue, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 493), (void *)_cffi_d_GetRandomValue },
- { "GetScreenData", (void *)_cffi_f_GetScreenData, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 146), (void *)_cffi_d_GetScreenData },
- { "GetScreenHeight", (void *)_cffi_f_GetScreenHeight, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetScreenHeight },
- { "GetScreenToWorld2D", (void *)_cffi_f_GetScreenToWorld2D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 277), (void *)_cffi_d_GetScreenToWorld2D },
- { "GetScreenWidth", (void *)_cffi_f_GetScreenWidth, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetScreenWidth },
- { "GetShaderDefault", (void *)_cffi_f_GetShaderDefault, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 242), (void *)_cffi_d_GetShaderDefault },
- { "GetShaderLocation", (void *)_cffi_f_GetShaderLocation, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 428), (void *)_cffi_d_GetShaderLocation },
- { "GetSoundsPlaying", (void *)_cffi_f_GetSoundsPlaying, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetSoundsPlaying },
- { "GetTextureData", (void *)_cffi_f_GetTextureData, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 79), (void *)_cffi_d_GetTextureData },
- { "GetTextureDefault", (void *)_cffi_f_GetTextureDefault, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 269), (void *)_cffi_d_GetTextureDefault },
- { "GetTime", (void *)_cffi_f_GetTime, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 365), (void *)_cffi_d_GetTime },
- { "GetTouchPointsCount", (void *)_cffi_f_GetTouchPointsCount, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetTouchPointsCount },
- { "GetTouchPosition", (void *)_cffi_f_GetTouchPosition, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 291), (void *)_cffi_d_GetTouchPosition },
- { "GetTouchX", (void *)_cffi_f_GetTouchX, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetTouchX },
- { "GetTouchY", (void *)_cffi_f_GetTouchY, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_GetTouchY },
- { "GetWaveData", (void *)_cffi_f_GetWaveData, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 367), (void *)_cffi_d_GetWaveData },
- { "GetWindowHandle", (void *)_cffi_f_GetWindowHandle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 515), (void *)_cffi_d_GetWindowHandle },
- { "GetWindowPosition", (void *)_cffi_f_GetWindowPosition, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 294), (void *)_cffi_d_GetWindowPosition },
- { "GetWorkingDirectory", (void *)_cffi_f_GetWorkingDirectory, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 363), (void *)_cffi_d_GetWorkingDirectory },
- { "GetWorldToScreen", (void *)_cffi_f_GetWorldToScreen, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 281), (void *)_cffi_d_GetWorldToScreen },
- { "GetWorldToScreen2D", (void *)_cffi_f_GetWorldToScreen2D, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 277), (void *)_cffi_d_GetWorldToScreen2D },
- { "GetWorldToScreenEx", (void *)_cffi_f_GetWorldToScreenEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 285), (void *)_cffi_d_GetWorldToScreenEx },
- { "HideCursor", (void *)_cffi_f_HideCursor, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_HideCursor },
- { "HideWindow", (void *)_cffi_f_HideWindow, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_HideWindow },
- { "ImageAlphaClear", (void *)_cffi_f_ImageAlphaClear, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 616), (void *)_cffi_d_ImageAlphaClear },
- { "ImageAlphaCrop", (void *)_cffi_f_ImageAlphaCrop, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 663), (void *)_cffi_d_ImageAlphaCrop },
- { "ImageAlphaMask", (void *)_cffi_f_ImageAlphaMask, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 621), (void *)_cffi_d_ImageAlphaMask },
- { "ImageAlphaPremultiply", (void *)_cffi_f_ImageAlphaPremultiply, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 604), (void *)_cffi_d_ImageAlphaPremultiply },
- { "ImageColorBrightness", (void *)_cffi_f_ImageColorBrightness, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 667), (void *)_cffi_d_ImageColorBrightness },
- { "ImageColorContrast", (void *)_cffi_f_ImageColorContrast, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 663), (void *)_cffi_d_ImageColorContrast },
- { "ImageColorGrayscale", (void *)_cffi_f_ImageColorGrayscale, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 604), (void *)_cffi_d_ImageColorGrayscale },
- { "ImageColorInvert", (void *)_cffi_f_ImageColorInvert, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 604), (void *)_cffi_d_ImageColorInvert },
- { "ImageColorReplace", (void *)_cffi_f_ImageColorReplace, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 611), (void *)_cffi_d_ImageColorReplace },
- { "ImageColorTint", (void *)_cffi_f_ImageColorTint, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 607), (void *)_cffi_d_ImageColorTint },
- { "ImageCopy", (void *)_cffi_f_ImageCopy, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 72), (void *)_cffi_d_ImageCopy },
- { "ImageCrop", (void *)_cffi_f_ImageCrop, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 632), (void *)_cffi_d_ImageCrop },
- { "ImageDither", (void *)_cffi_f_ImageDither, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 676), (void *)_cffi_d_ImageDither },
- { "ImageDraw", (void *)_cffi_f_ImageDraw, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 625), (void *)_cffi_d_ImageDraw },
- { "ImageDrawRectangle", (void *)_cffi_f_ImageDrawRectangle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 636), (void *)_cffi_d_ImageDrawRectangle },
- { "ImageDrawRectangleLines", (void *)_cffi_f_ImageDrawRectangleLines, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 641), (void *)_cffi_d_ImageDrawRectangleLines },
- { "ImageDrawText", (void *)_cffi_f_ImageDrawText, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 656), (void *)_cffi_d_ImageDrawText },
- { "ImageDrawTextEx", (void *)_cffi_f_ImageDrawTextEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 647), (void *)_cffi_d_ImageDrawTextEx },
- { "ImageExtractPalette", (void *)_cffi_f_ImageExtractPalette, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 18), (void *)_cffi_d_ImageExtractPalette },
- { "ImageFlipHorizontal", (void *)_cffi_f_ImageFlipHorizontal, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 604), (void *)_cffi_d_ImageFlipHorizontal },
- { "ImageFlipVertical", (void *)_cffi_f_ImageFlipVertical, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 604), (void *)_cffi_d_ImageFlipVertical },
- { "ImageFormat", (void *)_cffi_f_ImageFormat, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 667), (void *)_cffi_d_ImageFormat },
- { "ImageFromImage", (void *)_cffi_f_ImageFromImage, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 75), (void *)_cffi_d_ImageFromImage },
- { "ImageMipmaps", (void *)_cffi_f_ImageMipmaps, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 604), (void *)_cffi_d_ImageMipmaps },
- { "ImageResize", (void *)_cffi_f_ImageResize, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 671), (void *)_cffi_d_ImageResize },
- { "ImageResizeCanvas", (void *)_cffi_f_ImageResizeCanvas, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 683), (void *)_cffi_d_ImageResizeCanvas },
- { "ImageResizeNN", (void *)_cffi_f_ImageResizeNN, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 671), (void *)_cffi_d_ImageResizeNN },
- { "ImageRotateCCW", (void *)_cffi_f_ImageRotateCCW, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 604), (void *)_cffi_d_ImageRotateCCW },
- { "ImageRotateCW", (void *)_cffi_f_ImageRotateCW, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 604), (void *)_cffi_d_ImageRotateCW },
- { "ImageText", (void *)_cffi_f_ImageText, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 85), (void *)_cffi_d_ImageText },
- { "ImageTextEx", (void *)_cffi_f_ImageTextEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 65), (void *)_cffi_d_ImageTextEx },
- { "ImageToPOT", (void *)_cffi_f_ImageToPOT, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 607), (void *)_cffi_d_ImageToPOT },
- { "InitAudioDevice", (void *)_cffi_f_InitAudioDevice, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_InitAudioDevice },
- { "InitAudioStream", (void *)_cffi_f_InitAudioStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 0), (void *)_cffi_d_InitAudioStream },
- { "InitVrSimulator", (void *)_cffi_f_InitVrSimulator, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_InitVrSimulator },
- { "InitWindow", (void *)_cffi_f_InitWindow, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1083), (void *)_cffi_d_InitWindow },
- { "IsAudioDeviceReady", (void *)_cffi_f_IsAudioDeviceReady, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_IsAudioDeviceReady },
- { "IsAudioStreamPlaying", (void *)_cffi_f_IsAudioStreamPlaying, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 383), (void *)_cffi_d_IsAudioStreamPlaying },
- { "IsAudioStreamProcessed", (void *)_cffi_f_IsAudioStreamProcessed, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 383), (void *)_cffi_d_IsAudioStreamProcessed },
- { "IsCursorHidden", (void *)_cffi_f_IsCursorHidden, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_IsCursorHidden },
- { "IsFileDropped", (void *)_cffi_f_IsFileDropped, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_IsFileDropped },
- { "IsFileExtension", (void *)_cffi_f_IsFileExtension, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 474), (void *)_cffi_d_IsFileExtension },
- { "IsGamepadAvailable", (void *)_cffi_f_IsGamepadAvailable, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsGamepadAvailable },
- { "IsGamepadButtonDown", (void *)_cffi_f_IsGamepadButtonDown, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 493), (void *)_cffi_d_IsGamepadButtonDown },
- { "IsGamepadButtonPressed", (void *)_cffi_f_IsGamepadButtonPressed, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 493), (void *)_cffi_d_IsGamepadButtonPressed },
- { "IsGamepadButtonReleased", (void *)_cffi_f_IsGamepadButtonReleased, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 493), (void *)_cffi_d_IsGamepadButtonReleased },
- { "IsGamepadButtonUp", (void *)_cffi_f_IsGamepadButtonUp, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 493), (void *)_cffi_d_IsGamepadButtonUp },
- { "IsGamepadName", (void *)_cffi_f_IsGamepadName, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 489), (void *)_cffi_d_IsGamepadName },
- { "IsGestureDetected", (void *)_cffi_f_IsGestureDetected, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsGestureDetected },
- { "IsKeyDown", (void *)_cffi_f_IsKeyDown, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsKeyDown },
- { "IsKeyPressed", (void *)_cffi_f_IsKeyPressed, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsKeyPressed },
- { "IsKeyReleased", (void *)_cffi_f_IsKeyReleased, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsKeyReleased },
- { "IsKeyUp", (void *)_cffi_f_IsKeyUp, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsKeyUp },
- { "IsModelAnimationValid", (void *)_cffi_f_IsModelAnimationValid, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 402), (void *)_cffi_d_IsModelAnimationValid },
- { "IsMouseButtonDown", (void *)_cffi_f_IsMouseButtonDown, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsMouseButtonDown },
- { "IsMouseButtonPressed", (void *)_cffi_f_IsMouseButtonPressed, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsMouseButtonPressed },
- { "IsMouseButtonReleased", (void *)_cffi_f_IsMouseButtonReleased, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsMouseButtonReleased },
- { "IsMouseButtonUp", (void *)_cffi_f_IsMouseButtonUp, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_IsMouseButtonUp },
- { "IsMusicPlaying", (void *)_cffi_f_IsMusicPlaying, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 406), (void *)_cffi_d_IsMusicPlaying },
- { "IsSoundPlaying", (void *)_cffi_f_IsSoundPlaying, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 432), (void *)_cffi_d_IsSoundPlaying },
- { "IsVrSimulatorReady", (void *)_cffi_f_IsVrSimulatorReady, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_IsVrSimulatorReady },
- { "IsWindowHidden", (void *)_cffi_f_IsWindowHidden, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_IsWindowHidden },
- { "IsWindowMinimized", (void *)_cffi_f_IsWindowMinimized, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_IsWindowMinimized },
- { "IsWindowReady", (void *)_cffi_f_IsWindowReady, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_IsWindowReady },
- { "IsWindowResized", (void *)_cffi_f_IsWindowResized, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_IsWindowResized },
- { "KEY_A", (void *)_cffi_const_KEY_A, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_APOSTROPHE", (void *)_cffi_const_KEY_APOSTROPHE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_B", (void *)_cffi_const_KEY_B, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_BACK", (void *)_cffi_const_KEY_BACK, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_BACKSLASH", (void *)_cffi_const_KEY_BACKSLASH, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_BACKSPACE", (void *)_cffi_const_KEY_BACKSPACE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_C", (void *)_cffi_const_KEY_C, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_CAPS_LOCK", (void *)_cffi_const_KEY_CAPS_LOCK, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_COMMA", (void *)_cffi_const_KEY_COMMA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_D", (void *)_cffi_const_KEY_D, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_DELETE", (void *)_cffi_const_KEY_DELETE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_DOWN", (void *)_cffi_const_KEY_DOWN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_E", (void *)_cffi_const_KEY_E, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_EIGHT", (void *)_cffi_const_KEY_EIGHT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_END", (void *)_cffi_const_KEY_END, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_ENTER", (void *)_cffi_const_KEY_ENTER, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_EQUAL", (void *)_cffi_const_KEY_EQUAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_ESCAPE", (void *)_cffi_const_KEY_ESCAPE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F", (void *)_cffi_const_KEY_F, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F1", (void *)_cffi_const_KEY_F1, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F10", (void *)_cffi_const_KEY_F10, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F11", (void *)_cffi_const_KEY_F11, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F12", (void *)_cffi_const_KEY_F12, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F2", (void *)_cffi_const_KEY_F2, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F3", (void *)_cffi_const_KEY_F3, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F4", (void *)_cffi_const_KEY_F4, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F5", (void *)_cffi_const_KEY_F5, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F6", (void *)_cffi_const_KEY_F6, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F7", (void *)_cffi_const_KEY_F7, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F8", (void *)_cffi_const_KEY_F8, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_F9", (void *)_cffi_const_KEY_F9, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_FIVE", (void *)_cffi_const_KEY_FIVE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_FOUR", (void *)_cffi_const_KEY_FOUR, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_G", (void *)_cffi_const_KEY_G, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_GRAVE", (void *)_cffi_const_KEY_GRAVE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_H", (void *)_cffi_const_KEY_H, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_HOME", (void *)_cffi_const_KEY_HOME, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_I", (void *)_cffi_const_KEY_I, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_INSERT", (void *)_cffi_const_KEY_INSERT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_J", (void *)_cffi_const_KEY_J, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_K", (void *)_cffi_const_KEY_K, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KB_MENU", (void *)_cffi_const_KEY_KB_MENU, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_0", (void *)_cffi_const_KEY_KP_0, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_1", (void *)_cffi_const_KEY_KP_1, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_2", (void *)_cffi_const_KEY_KP_2, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_3", (void *)_cffi_const_KEY_KP_3, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_4", (void *)_cffi_const_KEY_KP_4, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_5", (void *)_cffi_const_KEY_KP_5, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_6", (void *)_cffi_const_KEY_KP_6, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_7", (void *)_cffi_const_KEY_KP_7, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_8", (void *)_cffi_const_KEY_KP_8, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_9", (void *)_cffi_const_KEY_KP_9, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_ADD", (void *)_cffi_const_KEY_KP_ADD, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_DECIMAL", (void *)_cffi_const_KEY_KP_DECIMAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_DIVIDE", (void *)_cffi_const_KEY_KP_DIVIDE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_ENTER", (void *)_cffi_const_KEY_KP_ENTER, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_EQUAL", (void *)_cffi_const_KEY_KP_EQUAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_MULTIPLY", (void *)_cffi_const_KEY_KP_MULTIPLY, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_KP_SUBTRACT", (void *)_cffi_const_KEY_KP_SUBTRACT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_L", (void *)_cffi_const_KEY_L, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_LEFT", (void *)_cffi_const_KEY_LEFT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_LEFT_ALT", (void *)_cffi_const_KEY_LEFT_ALT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_LEFT_BRACKET", (void *)_cffi_const_KEY_LEFT_BRACKET, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_LEFT_CONTROL", (void *)_cffi_const_KEY_LEFT_CONTROL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_LEFT_SHIFT", (void *)_cffi_const_KEY_LEFT_SHIFT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_LEFT_SUPER", (void *)_cffi_const_KEY_LEFT_SUPER, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_M", (void *)_cffi_const_KEY_M, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_MENU", (void *)_cffi_const_KEY_MENU, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_MINUS", (void *)_cffi_const_KEY_MINUS, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_N", (void *)_cffi_const_KEY_N, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_NINE", (void *)_cffi_const_KEY_NINE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_NUM_LOCK", (void *)_cffi_const_KEY_NUM_LOCK, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_O", (void *)_cffi_const_KEY_O, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_ONE", (void *)_cffi_const_KEY_ONE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_P", (void *)_cffi_const_KEY_P, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_PAGE_DOWN", (void *)_cffi_const_KEY_PAGE_DOWN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_PAGE_UP", (void *)_cffi_const_KEY_PAGE_UP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_PAUSE", (void *)_cffi_const_KEY_PAUSE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_PERIOD", (void *)_cffi_const_KEY_PERIOD, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_PRINT_SCREEN", (void *)_cffi_const_KEY_PRINT_SCREEN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_Q", (void *)_cffi_const_KEY_Q, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_R", (void *)_cffi_const_KEY_R, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_RIGHT", (void *)_cffi_const_KEY_RIGHT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_RIGHT_ALT", (void *)_cffi_const_KEY_RIGHT_ALT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_RIGHT_BRACKET", (void *)_cffi_const_KEY_RIGHT_BRACKET, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_RIGHT_CONTROL", (void *)_cffi_const_KEY_RIGHT_CONTROL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_RIGHT_SHIFT", (void *)_cffi_const_KEY_RIGHT_SHIFT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_RIGHT_SUPER", (void *)_cffi_const_KEY_RIGHT_SUPER, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_S", (void *)_cffi_const_KEY_S, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_SCROLL_LOCK", (void *)_cffi_const_KEY_SCROLL_LOCK, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_SEMICOLON", (void *)_cffi_const_KEY_SEMICOLON, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_SEVEN", (void *)_cffi_const_KEY_SEVEN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_SIX", (void *)_cffi_const_KEY_SIX, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_SLASH", (void *)_cffi_const_KEY_SLASH, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_SPACE", (void *)_cffi_const_KEY_SPACE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_T", (void *)_cffi_const_KEY_T, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_TAB", (void *)_cffi_const_KEY_TAB, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_THREE", (void *)_cffi_const_KEY_THREE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_TWO", (void *)_cffi_const_KEY_TWO, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_U", (void *)_cffi_const_KEY_U, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_UP", (void *)_cffi_const_KEY_UP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_V", (void *)_cffi_const_KEY_V, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_VOLUME_DOWN", (void *)_cffi_const_KEY_VOLUME_DOWN, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_VOLUME_UP", (void *)_cffi_const_KEY_VOLUME_UP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_W", (void *)_cffi_const_KEY_W, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_X", (void *)_cffi_const_KEY_X, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_Y", (void *)_cffi_const_KEY_Y, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_Z", (void *)_cffi_const_KEY_Z, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "KEY_ZERO", (void *)_cffi_const_KEY_ZERO, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_COLOR_AMBIENT", (void *)_cffi_const_LOC_COLOR_AMBIENT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_COLOR_DIFFUSE", (void *)_cffi_const_LOC_COLOR_DIFFUSE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_COLOR_SPECULAR", (void *)_cffi_const_LOC_COLOR_SPECULAR, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_ALBEDO", (void *)_cffi_const_LOC_MAP_ALBEDO, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_BRDF", (void *)_cffi_const_LOC_MAP_BRDF, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_CUBEMAP", (void *)_cffi_const_LOC_MAP_CUBEMAP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_DIFFUSE", (void *)_cffi_const_LOC_MAP_DIFFUSE, _CFFI_OP(_CFFI_OP_CONSTANT_INT, -1), (void *)0 },
- { "LOC_MAP_EMISSION", (void *)_cffi_const_LOC_MAP_EMISSION, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_HEIGHT", (void *)_cffi_const_LOC_MAP_HEIGHT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_IRRADIANCE", (void *)_cffi_const_LOC_MAP_IRRADIANCE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_METALNESS", (void *)_cffi_const_LOC_MAP_METALNESS, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_NORMAL", (void *)_cffi_const_LOC_MAP_NORMAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_OCCLUSION", (void *)_cffi_const_LOC_MAP_OCCLUSION, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_PREFILTER", (void *)_cffi_const_LOC_MAP_PREFILTER, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_ROUGHNESS", (void *)_cffi_const_LOC_MAP_ROUGHNESS, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MAP_SPECULAR", (void *)_cffi_const_LOC_MAP_SPECULAR, _CFFI_OP(_CFFI_OP_CONSTANT_INT, -1), (void *)0 },
- { "LOC_MATRIX_MODEL", (void *)_cffi_const_LOC_MATRIX_MODEL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MATRIX_MVP", (void *)_cffi_const_LOC_MATRIX_MVP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MATRIX_PROJECTION", (void *)_cffi_const_LOC_MATRIX_PROJECTION, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_MATRIX_VIEW", (void *)_cffi_const_LOC_MATRIX_VIEW, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_VECTOR_VIEW", (void *)_cffi_const_LOC_VECTOR_VIEW, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_VERTEX_COLOR", (void *)_cffi_const_LOC_VERTEX_COLOR, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_VERTEX_NORMAL", (void *)_cffi_const_LOC_VERTEX_NORMAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_VERTEX_POSITION", (void *)_cffi_const_LOC_VERTEX_POSITION, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_VERTEX_TANGENT", (void *)_cffi_const_LOC_VERTEX_TANGENT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_VERTEX_TEXCOORD01", (void *)_cffi_const_LOC_VERTEX_TEXCOORD01, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOC_VERTEX_TEXCOORD02", (void *)_cffi_const_LOC_VERTEX_TEXCOORD02, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOG_ALL", (void *)_cffi_const_LOG_ALL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOG_DEBUG", (void *)_cffi_const_LOG_DEBUG, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOG_ERROR", (void *)_cffi_const_LOG_ERROR, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOG_FATAL", (void *)_cffi_const_LOG_FATAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOG_INFO", (void *)_cffi_const_LOG_INFO, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOG_NONE", (void *)_cffi_const_LOG_NONE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOG_TRACE", (void *)_cffi_const_LOG_TRACE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LOG_WARNING", (void *)_cffi_const_LOG_WARNING, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "LoadFont", (void *)_cffi_f_LoadFont, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 41), (void *)_cffi_d_LoadFont },
- { "LoadFontData", (void *)_cffi_f_LoadFontData, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 8), (void *)_cffi_d_LoadFontData },
- { "LoadFontEx", (void *)_cffi_f_LoadFontEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 44), (void *)_cffi_d_LoadFontEx },
- { "LoadFontFromImage", (void *)_cffi_f_LoadFontFromImage, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 36), (void *)_cffi_d_LoadFontFromImage },
- { "LoadImage", (void *)_cffi_f_LoadImage, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 82), (void *)_cffi_d_LoadImage },
- { "LoadImageEx", (void *)_cffi_f_LoadImageEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 60), (void *)_cffi_d_LoadImageEx },
- { "LoadImagePro", (void *)_cffi_f_LoadImagePro, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 140), (void *)_cffi_d_LoadImagePro },
- { "LoadImageRaw", (void *)_cffi_f_LoadImageRaw, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 90), (void *)_cffi_d_LoadImageRaw },
- { "LoadMaterialDefault", (void *)_cffi_f_LoadMaterialDefault, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 152), (void *)_cffi_d_LoadMaterialDefault },
- { "LoadMaterials", (void *)_cffi_f_LoadMaterials, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 148), (void *)_cffi_d_LoadMaterials },
- { "LoadMeshes", (void *)_cffi_f_LoadMeshes, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 162), (void *)_cffi_d_LoadMeshes },
- { "LoadModel", (void *)_cffi_f_LoadModel, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 198), (void *)_cffi_d_LoadModel },
- { "LoadModelAnimations", (void *)_cffi_f_LoadModelAnimations, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 201), (void *)_cffi_d_LoadModelAnimations },
- { "LoadModelFromMesh", (void *)_cffi_f_LoadModelFromMesh, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 195), (void *)_cffi_d_LoadModelFromMesh },
- { "LoadMusicStream", (void *)_cffi_f_LoadMusicStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 205), (void *)_cffi_d_LoadMusicStream },
- { "LoadRenderTexture", (void *)_cffi_f_LoadRenderTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 234), (void *)_cffi_d_LoadRenderTexture },
- { "LoadShader", (void *)_cffi_f_LoadShader, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 238), (void *)_cffi_d_LoadShader },
- { "LoadShaderCode", (void *)_cffi_f_LoadShaderCode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 238), (void *)_cffi_d_LoadShaderCode },
- { "LoadSound", (void *)_cffi_f_LoadSound, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 247), (void *)_cffi_d_LoadSound },
- { "LoadSoundFromWave", (void *)_cffi_f_LoadSoundFromWave, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 244), (void *)_cffi_d_LoadSoundFromWave },
- { "LoadText", (void *)_cffi_f_LoadText, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 323), (void *)_cffi_d_LoadText },
- { "LoadTexture", (void *)_cffi_f_LoadTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 266), (void *)_cffi_d_LoadTexture },
- { "LoadTextureCubemap", (void *)_cffi_f_LoadTextureCubemap, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 253), (void *)_cffi_d_LoadTextureCubemap },
- { "LoadTextureFromImage", (void *)_cffi_f_LoadTextureFromImage, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 250), (void *)_cffi_d_LoadTextureFromImage },
- { "LoadWave", (void *)_cffi_f_LoadWave, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 308), (void *)_cffi_d_LoadWave },
- { "MAP_ALBEDO", (void *)_cffi_const_MAP_ALBEDO, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_BRDF", (void *)_cffi_const_MAP_BRDF, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_CUBEMAP", (void *)_cffi_const_MAP_CUBEMAP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_DIFFUSE", (void *)_cffi_const_MAP_DIFFUSE, _CFFI_OP(_CFFI_OP_CONSTANT_INT, -1), (void *)0 },
- { "MAP_EMISSION", (void *)_cffi_const_MAP_EMISSION, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_HEIGHT", (void *)_cffi_const_MAP_HEIGHT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_IRRADIANCE", (void *)_cffi_const_MAP_IRRADIANCE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_METALNESS", (void *)_cffi_const_MAP_METALNESS, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_NORMAL", (void *)_cffi_const_MAP_NORMAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_OCCLUSION", (void *)_cffi_const_MAP_OCCLUSION, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_PREFILTER", (void *)_cffi_const_MAP_PREFILTER, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_ROUGHNESS", (void *)_cffi_const_MAP_ROUGHNESS, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MAP_SPECULAR", (void *)_cffi_const_MAP_SPECULAR, _CFFI_OP(_CFFI_OP_CONSTANT_INT, -1), (void *)0 },
- { "MAX_TOUCH_POINTS", (void *)_cffi_const_MAX_TOUCH_POINTS, _CFFI_OP(_CFFI_OP_CONSTANT_INT, -1), (void *)0 },
- { "MOUSE_LEFT_BUTTON", (void *)_cffi_const_MOUSE_LEFT_BUTTON, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MOUSE_MIDDLE_BUTTON", (void *)_cffi_const_MOUSE_MIDDLE_BUTTON, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MOUSE_RIGHT_BUTTON", (void *)_cffi_const_MOUSE_RIGHT_BUTTON, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "MeasureText", (void *)_cffi_f_MeasureText, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 482), (void *)_cffi_d_MeasureText },
- { "MeasureTextEx", (void *)_cffi_f_MeasureTextEx, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 271), (void *)_cffi_d_MeasureTextEx },
- { "MeshBinormals", (void *)_cffi_f_MeshBinormals, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 709), (void *)_cffi_d_MeshBinormals },
- { "MeshBoundingBox", (void *)_cffi_f_MeshBoundingBox, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 5), (void *)_cffi_d_MeshBoundingBox },
- { "MeshTangents", (void *)_cffi_f_MeshTangents, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 709), (void *)_cffi_d_MeshTangents },
- { "NPT_3PATCH_HORIZONTAL", (void *)_cffi_const_NPT_3PATCH_HORIZONTAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "NPT_3PATCH_VERTICAL", (void *)_cffi_const_NPT_3PATCH_VERTICAL, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "NPT_9PATCH", (void *)_cffi_const_NPT_9PATCH, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "OpenURL", (void *)_cffi_f_OpenURL, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1046), (void *)_cffi_d_OpenURL },
- { "PauseAudioStream", (void *)_cffi_f_PauseAudioStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 517), (void *)_cffi_d_PauseAudioStream },
- { "PauseMusicStream", (void *)_cffi_f_PauseMusicStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 749), (void *)_cffi_d_PauseMusicStream },
- { "PauseSound", (void *)_cffi_f_PauseSound, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 828), (void *)_cffi_d_PauseSound },
- { "PlayAudioStream", (void *)_cffi_f_PlayAudioStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 517), (void *)_cffi_d_PlayAudioStream },
- { "PlayMusicStream", (void *)_cffi_f_PlayMusicStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 749), (void *)_cffi_d_PlayMusicStream },
- { "PlaySound", (void *)_cffi_f_PlaySound, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 828), (void *)_cffi_d_PlaySound },
- { "PlaySoundMulti", (void *)_cffi_f_PlaySoundMulti, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 828), (void *)_cffi_d_PlaySoundMulti },
- { "ResumeAudioStream", (void *)_cffi_f_ResumeAudioStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 517), (void *)_cffi_d_ResumeAudioStream },
- { "ResumeMusicStream", (void *)_cffi_f_ResumeMusicStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 749), (void *)_cffi_d_ResumeMusicStream },
- { "ResumeSound", (void *)_cffi_f_ResumeSound, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 828), (void *)_cffi_d_ResumeSound },
- { "SetAudioStreamPitch", (void *)_cffi_f_SetAudioStreamPitch, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 520), (void *)_cffi_d_SetAudioStreamPitch },
- { "SetAudioStreamVolume", (void *)_cffi_f_SetAudioStreamVolume, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 520), (void *)_cffi_d_SetAudioStreamVolume },
- { "SetCameraAltControl", (void *)_cffi_f_SetCameraAltControl, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1063), (void *)_cffi_d_SetCameraAltControl },
- { "SetCameraMode", (void *)_cffi_f_SetCameraMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 557), (void *)_cffi_d_SetCameraMode },
- { "SetCameraMoveControls", (void *)_cffi_f_SetCameraMoveControls, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1129), (void *)_cffi_d_SetCameraMoveControls },
- { "SetCameraPanControl", (void *)_cffi_f_SetCameraPanControl, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1063), (void *)_cffi_d_SetCameraPanControl },
- { "SetCameraSmoothZoomControl", (void *)_cffi_f_SetCameraSmoothZoomControl, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1063), (void *)_cffi_d_SetCameraSmoothZoomControl },
- { "SetClipboardText", (void *)_cffi_f_SetClipboardText, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1046), (void *)_cffi_d_SetClipboardText },
- { "SetConfigFlags", (void *)_cffi_f_SetConfigFlags, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1137), (void *)_cffi_d_SetConfigFlags },
- { "SetExitKey", (void *)_cffi_f_SetExitKey, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1063), (void *)_cffi_d_SetExitKey },
- { "SetGesturesEnabled", (void *)_cffi_f_SetGesturesEnabled, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1137), (void *)_cffi_d_SetGesturesEnabled },
- { "SetMasterVolume", (void *)_cffi_f_SetMasterVolume, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1056), (void *)_cffi_d_SetMasterVolume },
- { "SetMaterialTexture", (void *)_cffi_f_SetMaterialTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 698), (void *)_cffi_d_SetMaterialTexture },
- { "SetMatrixModelview", (void *)_cffi_f_SetMatrixModelview, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 706), (void *)_cffi_d_SetMatrixModelview },
- { "SetMatrixProjection", (void *)_cffi_f_SetMatrixProjection, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 706), (void *)_cffi_d_SetMatrixProjection },
- { "SetModelMeshMaterial", (void *)_cffi_f_SetModelMeshMaterial, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 719), (void *)_cffi_d_SetModelMeshMaterial },
- { "SetMouseOffset", (void *)_cffi_f_SetMouseOffset, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1074), (void *)_cffi_d_SetMouseOffset },
- { "SetMousePosition", (void *)_cffi_f_SetMousePosition, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1074), (void *)_cffi_d_SetMousePosition },
- { "SetMouseScale", (void *)_cffi_f_SetMouseScale, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1059), (void *)_cffi_d_SetMouseScale },
- { "SetMusicLoopCount", (void *)_cffi_f_SetMusicLoopCount, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 756), (void *)_cffi_d_SetMusicLoopCount },
- { "SetMusicPitch", (void *)_cffi_f_SetMusicPitch, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 752), (void *)_cffi_d_SetMusicPitch },
- { "SetMusicVolume", (void *)_cffi_f_SetMusicVolume, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 752), (void *)_cffi_d_SetMusicVolume },
- { "SetShaderValue", (void *)_cffi_f_SetShaderValue, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 815), (void *)_cffi_d_SetShaderValue },
- { "SetShaderValueMatrix", (void *)_cffi_f_SetShaderValueMatrix, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 805), (void *)_cffi_d_SetShaderValueMatrix },
- { "SetShaderValueTexture", (void *)_cffi_f_SetShaderValueTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 810), (void *)_cffi_d_SetShaderValueTexture },
- { "SetShaderValueV", (void *)_cffi_f_SetShaderValueV, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 821), (void *)_cffi_d_SetShaderValueV },
- { "SetShapesTexture", (void *)_cffi_f_SetShapesTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 854), (void *)_cffi_d_SetShapesTexture },
- { "SetSoundPitch", (void *)_cffi_f_SetSoundPitch, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 831), (void *)_cffi_d_SetSoundPitch },
- { "SetSoundVolume", (void *)_cffi_f_SetSoundVolume, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 831), (void *)_cffi_d_SetSoundVolume },
- { "SetTargetFPS", (void *)_cffi_f_SetTargetFPS, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1063), (void *)_cffi_d_SetTargetFPS },
- { "SetTextureFilter", (void *)_cffi_f_SetTextureFilter, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 899), (void *)_cffi_d_SetTextureFilter },
- { "SetTextureWrap", (void *)_cffi_f_SetTextureWrap, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 899), (void *)_cffi_d_SetTextureWrap },
- { "SetTraceLogExit", (void *)_cffi_f_SetTraceLogExit, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1063), (void *)_cffi_d_SetTraceLogExit },
- { "SetTraceLogLevel", (void *)_cffi_f_SetTraceLogLevel, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1063), (void *)_cffi_d_SetTraceLogLevel },
- { "SetVrConfiguration", (void *)_cffi_f_SetVrConfiguration, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1019), (void *)_cffi_d_SetVrConfiguration },
- { "SetWindowIcon", (void *)_cffi_f_SetWindowIcon, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 691), (void *)_cffi_d_SetWindowIcon },
- { "SetWindowMinSize", (void *)_cffi_f_SetWindowMinSize, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1074), (void *)_cffi_d_SetWindowMinSize },
- { "SetWindowMonitor", (void *)_cffi_f_SetWindowMonitor, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1063), (void *)_cffi_d_SetWindowMonitor },
- { "SetWindowPosition", (void *)_cffi_f_SetWindowPosition, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1074), (void *)_cffi_d_SetWindowPosition },
- { "SetWindowSize", (void *)_cffi_f_SetWindowSize, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1074), (void *)_cffi_d_SetWindowSize },
- { "SetWindowTitle", (void *)_cffi_f_SetWindowTitle, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1046), (void *)_cffi_d_SetWindowTitle },
- { "ShowCursor", (void *)_cffi_f_ShowCursor, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_ShowCursor },
- { "StopAudioStream", (void *)_cffi_f_StopAudioStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 517), (void *)_cffi_d_StopAudioStream },
- { "StopMusicStream", (void *)_cffi_f_StopMusicStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 749), (void *)_cffi_d_StopMusicStream },
- { "StopSound", (void *)_cffi_f_StopSound, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 828), (void *)_cffi_d_StopSound },
- { "StopSoundMulti", (void *)_cffi_f_StopSoundMulti, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_StopSoundMulti },
- { "StorageLoadValue", (void *)_cffi_f_StorageLoadValue, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 486), (void *)_cffi_d_StorageLoadValue },
- { "StorageSaveValue", (void *)_cffi_f_StorageSaveValue, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1074), (void *)_cffi_d_StorageSaveValue },
- { "TakeScreenshot", (void *)_cffi_f_TakeScreenshot, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1046), (void *)_cffi_d_TakeScreenshot },
- { "TextAppend", (void *)_cffi_f_TextAppend, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1041), (void *)_cffi_d_TextAppend },
- { "TextCopy", (void *)_cffi_f_TextCopy, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 467), (void *)_cffi_d_TextCopy },
- { "TextFindIndex", (void *)_cffi_f_TextFindIndex, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 474), (void *)_cffi_d_TextFindIndex },
- { "TextFormat", (void *)_cffi_const_TextFormat, _CFFI_OP(_CFFI_OP_CONSTANT, 1177), (void *)0 },
- { "TextInsert", (void *)_cffi_f_TextInsert, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 326), (void *)_cffi_d_TextInsert },
- { "TextIsEqual", (void *)_cffi_f_TextIsEqual, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 474), (void *)_cffi_d_TextIsEqual },
- { "TextJoin", (void *)_cffi_f_TextJoin, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 340), (void *)_cffi_d_TextJoin },
- { "TextLength", (void *)_cffi_f_TextLength, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 512), (void *)_cffi_d_TextLength },
- { "TextReplace", (void *)_cffi_f_TextReplace, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 318), (void *)_cffi_d_TextReplace },
- { "TextSplit", (void *)_cffi_f_TextSplit, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 335), (void *)_cffi_d_TextSplit },
- { "TextSubtext", (void *)_cffi_f_TextSubtext, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 351), (void *)_cffi_d_TextSubtext },
- { "TextToInteger", (void *)_cffi_f_TextToInteger, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 471), (void *)_cffi_d_TextToInteger },
- { "TextToLower", (void *)_cffi_f_TextToLower, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 345), (void *)_cffi_d_TextToLower },
- { "TextToPascal", (void *)_cffi_f_TextToPascal, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 345), (void *)_cffi_d_TextToPascal },
- { "TextToUpper", (void *)_cffi_f_TextToUpper, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 345), (void *)_cffi_d_TextToUpper },
- { "TextToUtf8", (void *)_cffi_f_TextToUtf8, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 331), (void *)_cffi_d_TextToUtf8 },
- { "ToggleFullscreen", (void *)_cffi_f_ToggleFullscreen, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_ToggleFullscreen },
- { "ToggleVrMode", (void *)_cffi_f_ToggleVrMode, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_ToggleVrMode },
- { "TraceLog", (void *)_cffi_const_TraceLog, _CFFI_OP(_CFFI_OP_CONSTANT, 1191), (void *)0 },
- { "UNCOMPRESSED_GRAYSCALE", (void *)_cffi_const_UNCOMPRESSED_GRAYSCALE, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNCOMPRESSED_GRAY_ALPHA", (void *)_cffi_const_UNCOMPRESSED_GRAY_ALPHA, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNCOMPRESSED_R32", (void *)_cffi_const_UNCOMPRESSED_R32, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNCOMPRESSED_R32G32B32", (void *)_cffi_const_UNCOMPRESSED_R32G32B32, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNCOMPRESSED_R32G32B32A32", (void *)_cffi_const_UNCOMPRESSED_R32G32B32A32, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNCOMPRESSED_R4G4B4A4", (void *)_cffi_const_UNCOMPRESSED_R4G4B4A4, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNCOMPRESSED_R5G5B5A1", (void *)_cffi_const_UNCOMPRESSED_R5G5B5A1, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNCOMPRESSED_R5G6B5", (void *)_cffi_const_UNCOMPRESSED_R5G6B5, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNCOMPRESSED_R8G8B8", (void *)_cffi_const_UNCOMPRESSED_R8G8B8, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNCOMPRESSED_R8G8B8A8", (void *)_cffi_const_UNCOMPRESSED_R8G8B8A8, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNIFORM_FLOAT", (void *)_cffi_const_UNIFORM_FLOAT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNIFORM_INT", (void *)_cffi_const_UNIFORM_INT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNIFORM_IVEC2", (void *)_cffi_const_UNIFORM_IVEC2, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNIFORM_IVEC3", (void *)_cffi_const_UNIFORM_IVEC3, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNIFORM_IVEC4", (void *)_cffi_const_UNIFORM_IVEC4, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNIFORM_SAMPLER2D", (void *)_cffi_const_UNIFORM_SAMPLER2D, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNIFORM_VEC2", (void *)_cffi_const_UNIFORM_VEC2, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNIFORM_VEC3", (void *)_cffi_const_UNIFORM_VEC3, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UNIFORM_VEC4", (void *)_cffi_const_UNIFORM_VEC4, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "UnhideWindow", (void *)_cffi_f_UnhideWindow, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 1140), (void *)_cffi_d_UnhideWindow },
- { "UnloadFont", (void *)_cffi_f_UnloadFont, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 564), (void *)_cffi_d_UnloadFont },
- { "UnloadImage", (void *)_cffi_f_UnloadImage, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 691), (void *)_cffi_d_UnloadImage },
- { "UnloadMaterial", (void *)_cffi_f_UnloadMaterial, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 703), (void *)_cffi_d_UnloadMaterial },
- { "UnloadMesh", (void *)_cffi_f_UnloadMesh, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 712), (void *)_cffi_d_UnloadMesh },
- { "UnloadModel", (void *)_cffi_f_UnloadModel, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 724), (void *)_cffi_d_UnloadModel },
- { "UnloadModelAnimation", (void *)_cffi_f_UnloadModelAnimation, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 746), (void *)_cffi_d_UnloadModelAnimation },
- { "UnloadMusicStream", (void *)_cffi_f_UnloadMusicStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 749), (void *)_cffi_d_UnloadMusicStream },
- { "UnloadRenderTexture", (void *)_cffi_f_UnloadRenderTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 799), (void *)_cffi_d_UnloadRenderTexture },
- { "UnloadShader", (void *)_cffi_f_UnloadShader, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 802), (void *)_cffi_d_UnloadShader },
- { "UnloadSound", (void *)_cffi_f_UnloadSound, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 828), (void *)_cffi_d_UnloadSound },
- { "UnloadTexture", (void *)_cffi_f_UnloadTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 843), (void *)_cffi_d_UnloadTexture },
- { "UnloadWave", (void *)_cffi_f_UnloadWave, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 1034), (void *)_cffi_d_UnloadWave },
- { "UpdateAudioStream", (void *)_cffi_f_UpdateAudioStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 524), (void *)_cffi_d_UpdateAudioStream },
- { "UpdateCamera", (void *)_cffi_f_UpdateCamera, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 536), (void *)_cffi_d_UpdateCamera },
- { "UpdateModelAnimation", (void *)_cffi_f_UpdateModelAnimation, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 727), (void *)_cffi_d_UpdateModelAnimation },
- { "UpdateMusicStream", (void *)_cffi_f_UpdateMusicStream, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 749), (void *)_cffi_d_UpdateMusicStream },
- { "UpdateSound", (void *)_cffi_f_UpdateSound, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 835), (void *)_cffi_d_UpdateSound },
- { "UpdateTexture", (void *)_cffi_f_UpdateTexture, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 909), (void *)_cffi_d_UpdateTexture },
- { "UpdateVrTracking", (void *)_cffi_f_UpdateVrTracking, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 536), (void *)_cffi_d_UpdateVrTracking },
- { "WRAP_CLAMP", (void *)_cffi_const_WRAP_CLAMP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "WRAP_MIRROR_CLAMP", (void *)_cffi_const_WRAP_MIRROR_CLAMP, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "WRAP_MIRROR_REPEAT", (void *)_cffi_const_WRAP_MIRROR_REPEAT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "WRAP_REPEAT", (void *)_cffi_const_WRAP_REPEAT, _CFFI_OP(_CFFI_OP_ENUM, -1), (void *)0 },
- { "WaveCopy", (void *)_cffi_f_WaveCopy, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_O, 305), (void *)_cffi_d_WaveCopy },
- { "WaveCrop", (void *)_cffi_f_WaveCrop, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1023), (void *)_cffi_d_WaveCrop },
- { "WaveFormat", (void *)_cffi_f_WaveFormat, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 1028), (void *)_cffi_d_WaveFormat },
- { "WindowShouldClose", (void *)_cffi_f_WindowShouldClose, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_N, 502), (void *)_cffi_d_WindowShouldClose },
-};
-
-static const struct _cffi_field_s _cffi_fields[] = {
- { "sampleRate", offsetof(AudioStream, sampleRate),
- sizeof(((AudioStream *)0)->sampleRate),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "sampleSize", offsetof(AudioStream, sampleSize),
- sizeof(((AudioStream *)0)->sampleSize),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "channels", offsetof(AudioStream, channels),
- sizeof(((AudioStream *)0)->channels),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "buffer", offsetof(AudioStream, buffer),
- sizeof(((AudioStream *)0)->buffer),
- _CFFI_OP(_CFFI_OP_NOOP, 1185) },
- { "name", offsetof(BoneInfo, name),
- sizeof(((BoneInfo *)0)->name),
- _CFFI_OP(_CFFI_OP_NOOP, 1178) },
- { "parent", offsetof(BoneInfo, parent),
- sizeof(((BoneInfo *)0)->parent),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "min", offsetof(BoundingBox, min),
- sizeof(((BoundingBox *)0)->min),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "max", offsetof(BoundingBox, max),
- sizeof(((BoundingBox *)0)->max),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "offset", offsetof(Camera2D, offset),
- sizeof(((Camera2D *)0)->offset),
- _CFFI_OP(_CFFI_OP_NOOP, 209) },
- { "target", offsetof(Camera2D, target),
- sizeof(((Camera2D *)0)->target),
- _CFFI_OP(_CFFI_OP_NOOP, 209) },
- { "rotation", offsetof(Camera2D, rotation),
- sizeof(((Camera2D *)0)->rotation),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "zoom", offsetof(Camera2D, zoom),
- sizeof(((Camera2D *)0)->zoom),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "position", offsetof(Camera3D, position),
- sizeof(((Camera3D *)0)->position),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "target", offsetof(Camera3D, target),
- sizeof(((Camera3D *)0)->target),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "up", offsetof(Camera3D, up),
- sizeof(((Camera3D *)0)->up),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "fovy", offsetof(Camera3D, fovy),
- sizeof(((Camera3D *)0)->fovy),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "type", offsetof(Camera3D, type),
- sizeof(((Camera3D *)0)->type),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "value", offsetof(CharInfo, value),
- sizeof(((CharInfo *)0)->value),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "offsetX", offsetof(CharInfo, offsetX),
- sizeof(((CharInfo *)0)->offsetX),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "offsetY", offsetof(CharInfo, offsetY),
- sizeof(((CharInfo *)0)->offsetY),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "advanceX", offsetof(CharInfo, advanceX),
- sizeof(((CharInfo *)0)->advanceX),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "image", offsetof(CharInfo, image),
- sizeof(((CharInfo *)0)->image),
- _CFFI_OP(_CFFI_OP_NOOP, 16) },
- { "r", offsetof(Color, r),
- sizeof(((Color *)0)->r),
- _CFFI_OP(_CFFI_OP_NOOP, 1187) },
- { "g", offsetof(Color, g),
- sizeof(((Color *)0)->g),
- _CFFI_OP(_CFFI_OP_NOOP, 1187) },
- { "b", offsetof(Color, b),
- sizeof(((Color *)0)->b),
- _CFFI_OP(_CFFI_OP_NOOP, 1187) },
- { "a", offsetof(Color, a),
- sizeof(((Color *)0)->a),
- _CFFI_OP(_CFFI_OP_NOOP, 1187) },
- { "baseSize", offsetof(Font, baseSize),
- sizeof(((Font *)0)->baseSize),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "charsCount", offsetof(Font, charsCount),
- sizeof(((Font *)0)->charsCount),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "texture", offsetof(Font, texture),
- sizeof(((Font *)0)->texture),
- _CFFI_OP(_CFFI_OP_NOOP, 80) },
- { "recs", offsetof(Font, recs),
- sizeof(((Font *)0)->recs),
- _CFFI_OP(_CFFI_OP_NOOP, 1166) },
- { "chars", offsetof(Font, chars),
- sizeof(((Font *)0)->chars),
- _CFFI_OP(_CFFI_OP_NOOP, 1148) },
- { "data", offsetof(Image, data),
- sizeof(((Image *)0)->data),
- _CFFI_OP(_CFFI_OP_NOOP, 141) },
- { "width", offsetof(Image, width),
- sizeof(((Image *)0)->width),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "height", offsetof(Image, height),
- sizeof(((Image *)0)->height),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "mipmaps", offsetof(Image, mipmaps),
- sizeof(((Image *)0)->mipmaps),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "format", offsetof(Image, format),
- sizeof(((Image *)0)->format),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "shader", offsetof(Material, shader),
- sizeof(((Material *)0)->shader),
- _CFFI_OP(_CFFI_OP_NOOP, 258) },
- { "maps", offsetof(Material, maps),
- sizeof(((Material *)0)->maps),
- _CFFI_OP(_CFFI_OP_NOOP, 1158) },
- { "params", offsetof(Material, params),
- sizeof(((Material *)0)->params),
- _CFFI_OP(_CFFI_OP_NOOP, 1181) },
- { "texture", offsetof(MaterialMap, texture),
- sizeof(((MaterialMap *)0)->texture),
- _CFFI_OP(_CFFI_OP_NOOP, 80) },
- { "color", offsetof(MaterialMap, color),
- sizeof(((MaterialMap *)0)->color),
- _CFFI_OP(_CFFI_OP_NOOP, 24) },
- { "value", offsetof(MaterialMap, value),
- sizeof(((MaterialMap *)0)->value),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m0", offsetof(Matrix, m0),
- sizeof(((Matrix *)0)->m0),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m4", offsetof(Matrix, m4),
- sizeof(((Matrix *)0)->m4),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m8", offsetof(Matrix, m8),
- sizeof(((Matrix *)0)->m8),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m12", offsetof(Matrix, m12),
- sizeof(((Matrix *)0)->m12),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m1", offsetof(Matrix, m1),
- sizeof(((Matrix *)0)->m1),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m5", offsetof(Matrix, m5),
- sizeof(((Matrix *)0)->m5),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m9", offsetof(Matrix, m9),
- sizeof(((Matrix *)0)->m9),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m13", offsetof(Matrix, m13),
- sizeof(((Matrix *)0)->m13),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m2", offsetof(Matrix, m2),
- sizeof(((Matrix *)0)->m2),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m6", offsetof(Matrix, m6),
- sizeof(((Matrix *)0)->m6),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m10", offsetof(Matrix, m10),
- sizeof(((Matrix *)0)->m10),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m14", offsetof(Matrix, m14),
- sizeof(((Matrix *)0)->m14),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m3", offsetof(Matrix, m3),
- sizeof(((Matrix *)0)->m3),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m7", offsetof(Matrix, m7),
- sizeof(((Matrix *)0)->m7),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m11", offsetof(Matrix, m11),
- sizeof(((Matrix *)0)->m11),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "m15", offsetof(Matrix, m15),
- sizeof(((Matrix *)0)->m15),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "vertexCount", offsetof(Mesh, vertexCount),
- sizeof(((Mesh *)0)->vertexCount),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "triangleCount", offsetof(Mesh, triangleCount),
- sizeof(((Mesh *)0)->triangleCount),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "vertices", offsetof(Mesh, vertices),
- sizeof(((Mesh *)0)->vertices),
- _CFFI_OP(_CFFI_OP_NOOP, 1181) },
- { "texcoords", offsetof(Mesh, texcoords),
- sizeof(((Mesh *)0)->texcoords),
- _CFFI_OP(_CFFI_OP_NOOP, 1181) },
- { "texcoords2", offsetof(Mesh, texcoords2),
- sizeof(((Mesh *)0)->texcoords2),
- _CFFI_OP(_CFFI_OP_NOOP, 1181) },
- { "normals", offsetof(Mesh, normals),
- sizeof(((Mesh *)0)->normals),
- _CFFI_OP(_CFFI_OP_NOOP, 1181) },
- { "tangents", offsetof(Mesh, tangents),
- sizeof(((Mesh *)0)->tangents),
- _CFFI_OP(_CFFI_OP_NOOP, 1181) },
- { "colors", offsetof(Mesh, colors),
- sizeof(((Mesh *)0)->colors),
- _CFFI_OP(_CFFI_OP_NOOP, 508) },
- { "indices", offsetof(Mesh, indices),
- sizeof(((Mesh *)0)->indices),
- _CFFI_OP(_CFFI_OP_NOOP, 1189) },
- { "animVertices", offsetof(Mesh, animVertices),
- sizeof(((Mesh *)0)->animVertices),
- _CFFI_OP(_CFFI_OP_NOOP, 1181) },
- { "animNormals", offsetof(Mesh, animNormals),
- sizeof(((Mesh *)0)->animNormals),
- _CFFI_OP(_CFFI_OP_NOOP, 1181) },
- { "boneIds", offsetof(Mesh, boneIds),
- sizeof(((Mesh *)0)->boneIds),
- _CFFI_OP(_CFFI_OP_NOOP, 11) },
- { "boneWeights", offsetof(Mesh, boneWeights),
- sizeof(((Mesh *)0)->boneWeights),
- _CFFI_OP(_CFFI_OP_NOOP, 1181) },
- { "vaoId", offsetof(Mesh, vaoId),
- sizeof(((Mesh *)0)->vaoId),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "vboId", offsetof(Mesh, vboId),
- sizeof(((Mesh *)0)->vboId),
- _CFFI_OP(_CFFI_OP_NOOP, 1188) },
- { "transform", offsetof(Model, transform),
- sizeof(((Model *)0)->transform),
- _CFFI_OP(_CFFI_OP_NOOP, 707) },
- { "meshCount", offsetof(Model, meshCount),
- sizeof(((Model *)0)->meshCount),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "meshes", offsetof(Model, meshes),
- sizeof(((Model *)0)->meshes),
- _CFFI_OP(_CFFI_OP_NOOP, 710) },
- { "materialCount", offsetof(Model, materialCount),
- sizeof(((Model *)0)->materialCount),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "materials", offsetof(Model, materials),
- sizeof(((Model *)0)->materials),
- _CFFI_OP(_CFFI_OP_NOOP, 699) },
- { "meshMaterial", offsetof(Model, meshMaterial),
- sizeof(((Model *)0)->meshMaterial),
- _CFFI_OP(_CFFI_OP_NOOP, 11) },
- { "boneCount", offsetof(Model, boneCount),
- sizeof(((Model *)0)->boneCount),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "bones", offsetof(Model, bones),
- sizeof(((Model *)0)->bones),
- _CFFI_OP(_CFFI_OP_NOOP, 1144) },
- { "bindPose", offsetof(Model, bindPose),
- sizeof(((Model *)0)->bindPose),
- _CFFI_OP(_CFFI_OP_NOOP, 1173) },
- { "boneCount", offsetof(ModelAnimation, boneCount),
- sizeof(((ModelAnimation *)0)->boneCount),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "bones", offsetof(ModelAnimation, bones),
- sizeof(((ModelAnimation *)0)->bones),
- _CFFI_OP(_CFFI_OP_NOOP, 1144) },
- { "frameCount", offsetof(ModelAnimation, frameCount),
- sizeof(((ModelAnimation *)0)->frameCount),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "framePoses", offsetof(ModelAnimation, framePoses),
- sizeof(((ModelAnimation *)0)->framePoses),
- _CFFI_OP(_CFFI_OP_NOOP, 1172) },
- { "ctxType", offsetof(Music, ctxType),
- sizeof(((Music *)0)->ctxType),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "ctxData", offsetof(Music, ctxData),
- sizeof(((Music *)0)->ctxData),
- _CFFI_OP(_CFFI_OP_NOOP, 141) },
- { "sampleCount", offsetof(Music, sampleCount),
- sizeof(((Music *)0)->sampleCount),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "loopCount", offsetof(Music, loopCount),
- sizeof(((Music *)0)->loopCount),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "stream", offsetof(Music, stream),
- sizeof(((Music *)0)->stream),
- _CFFI_OP(_CFFI_OP_NOOP, 384) },
- { "sourceRec", offsetof(NPatchInfo, sourceRec),
- sizeof(((NPatchInfo *)0)->sourceRec),
- _CFFI_OP(_CFFI_OP_NOOP, 77) },
- { "left", offsetof(NPatchInfo, left),
- sizeof(((NPatchInfo *)0)->left),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "top", offsetof(NPatchInfo, top),
- sizeof(((NPatchInfo *)0)->top),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "right", offsetof(NPatchInfo, right),
- sizeof(((NPatchInfo *)0)->right),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "bottom", offsetof(NPatchInfo, bottom),
- sizeof(((NPatchInfo *)0)->bottom),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "type", offsetof(NPatchInfo, type),
- sizeof(((NPatchInfo *)0)->type),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "position", offsetof(Ray, position),
- sizeof(((Ray *)0)->position),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "direction", offsetof(Ray, direction),
- sizeof(((Ray *)0)->direction),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "hit", offsetof(RayHitInfo, hit),
- sizeof(((RayHitInfo *)0)->hit),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "distance", offsetof(RayHitInfo, distance),
- sizeof(((RayHitInfo *)0)->distance),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "position", offsetof(RayHitInfo, position),
- sizeof(((RayHitInfo *)0)->position),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "normal", offsetof(RayHitInfo, normal),
- sizeof(((RayHitInfo *)0)->normal),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "x", offsetof(Rectangle, x),
- sizeof(((Rectangle *)0)->x),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "y", offsetof(Rectangle, y),
- sizeof(((Rectangle *)0)->y),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "width", offsetof(Rectangle, width),
- sizeof(((Rectangle *)0)->width),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "height", offsetof(Rectangle, height),
- sizeof(((Rectangle *)0)->height),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "id", offsetof(RenderTexture2D, id),
- sizeof(((RenderTexture2D *)0)->id),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "texture", offsetof(RenderTexture2D, texture),
- sizeof(((RenderTexture2D *)0)->texture),
- _CFFI_OP(_CFFI_OP_NOOP, 80) },
- { "depth", offsetof(RenderTexture2D, depth),
- sizeof(((RenderTexture2D *)0)->depth),
- _CFFI_OP(_CFFI_OP_NOOP, 80) },
- { "depthTexture", offsetof(RenderTexture2D, depthTexture),
- sizeof(((RenderTexture2D *)0)->depthTexture),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "id", offsetof(Shader, id),
- sizeof(((Shader *)0)->id),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "locs", offsetof(Shader, locs),
- sizeof(((Shader *)0)->locs),
- _CFFI_OP(_CFFI_OP_NOOP, 11) },
- { "sampleCount", offsetof(Sound, sampleCount),
- sizeof(((Sound *)0)->sampleCount),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "stream", offsetof(Sound, stream),
- sizeof(((Sound *)0)->stream),
- _CFFI_OP(_CFFI_OP_NOOP, 384) },
- { "id", offsetof(Texture2D, id),
- sizeof(((Texture2D *)0)->id),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "width", offsetof(Texture2D, width),
- sizeof(((Texture2D *)0)->width),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "height", offsetof(Texture2D, height),
- sizeof(((Texture2D *)0)->height),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "mipmaps", offsetof(Texture2D, mipmaps),
- sizeof(((Texture2D *)0)->mipmaps),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "format", offsetof(Texture2D, format),
- sizeof(((Texture2D *)0)->format),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "translation", offsetof(Transform, translation),
- sizeof(((Transform *)0)->translation),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "rotation", offsetof(Transform, rotation),
- sizeof(((Transform *)0)->rotation),
- _CFFI_OP(_CFFI_OP_NOOP, 31) },
- { "scale", offsetof(Transform, scale),
- sizeof(((Transform *)0)->scale),
- _CFFI_OP(_CFFI_OP_NOOP, 28) },
- { "x", offsetof(Vector2, x),
- sizeof(((Vector2 *)0)->x),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "y", offsetof(Vector2, y),
- sizeof(((Vector2 *)0)->y),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "x", offsetof(Vector3, x),
- sizeof(((Vector3 *)0)->x),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "y", offsetof(Vector3, y),
- sizeof(((Vector3 *)0)->y),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "z", offsetof(Vector3, z),
- sizeof(((Vector3 *)0)->z),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "x", offsetof(Vector4, x),
- sizeof(((Vector4 *)0)->x),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "y", offsetof(Vector4, y),
- sizeof(((Vector4 *)0)->y),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "z", offsetof(Vector4, z),
- sizeof(((Vector4 *)0)->z),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "w", offsetof(Vector4, w),
- sizeof(((Vector4 *)0)->w),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "hResolution", offsetof(VrDeviceInfo, hResolution),
- sizeof(((VrDeviceInfo *)0)->hResolution),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "vResolution", offsetof(VrDeviceInfo, vResolution),
- sizeof(((VrDeviceInfo *)0)->vResolution),
- _CFFI_OP(_CFFI_OP_NOOP, 10) },
- { "hScreenSize", offsetof(VrDeviceInfo, hScreenSize),
- sizeof(((VrDeviceInfo *)0)->hScreenSize),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "vScreenSize", offsetof(VrDeviceInfo, vScreenSize),
- sizeof(((VrDeviceInfo *)0)->vScreenSize),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "vScreenCenter", offsetof(VrDeviceInfo, vScreenCenter),
- sizeof(((VrDeviceInfo *)0)->vScreenCenter),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "eyeToScreenDistance", offsetof(VrDeviceInfo, eyeToScreenDistance),
- sizeof(((VrDeviceInfo *)0)->eyeToScreenDistance),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "lensSeparationDistance", offsetof(VrDeviceInfo, lensSeparationDistance),
- sizeof(((VrDeviceInfo *)0)->lensSeparationDistance),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "interpupillaryDistance", offsetof(VrDeviceInfo, interpupillaryDistance),
- sizeof(((VrDeviceInfo *)0)->interpupillaryDistance),
- _CFFI_OP(_CFFI_OP_NOOP, 25) },
- { "lensDistortionValues", offsetof(VrDeviceInfo, lensDistortionValues),
- sizeof(((VrDeviceInfo *)0)->lensDistortionValues),
- _CFFI_OP(_CFFI_OP_NOOP, 1182) },
- { "chromaAbCorrection", offsetof(VrDeviceInfo, chromaAbCorrection),
- sizeof(((VrDeviceInfo *)0)->chromaAbCorrection),
- _CFFI_OP(_CFFI_OP_NOOP, 1182) },
- { "sampleCount", offsetof(Wave, sampleCount),
- sizeof(((Wave *)0)->sampleCount),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "sampleRate", offsetof(Wave, sampleRate),
- sizeof(((Wave *)0)->sampleRate),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "sampleSize", offsetof(Wave, sampleSize),
- sizeof(((Wave *)0)->sampleSize),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "channels", offsetof(Wave, channels),
- sizeof(((Wave *)0)->channels),
- _CFFI_OP(_CFFI_OP_NOOP, 1) },
- { "data", offsetof(Wave, data),
- sizeof(((Wave *)0)->data),
- _CFFI_OP(_CFFI_OP_NOOP, 141) },
-};
-
-static const struct _cffi_struct_union_s _cffi_struct_unions[] = {
- { "AudioStream", 384, _CFFI_F_CHECK_FIELDS,
- sizeof(AudioStream), offsetof(struct _cffi_align__AudioStream, y), 0, 4 },
- { "BoneInfo", 1145, _CFFI_F_CHECK_FIELDS,
- sizeof(BoneInfo), offsetof(struct _cffi_align__BoneInfo, y), 4, 2 },
- { "BoundingBox", 387, _CFFI_F_CHECK_FIELDS,
- sizeof(BoundingBox), offsetof(struct _cffi_align__BoundingBox, y), 6, 2 },
- { "Camera2D", 155, _CFFI_F_CHECK_FIELDS,
- sizeof(Camera2D), offsetof(struct _cffi_align__Camera2D, y), 8, 4 },
- { "Camera3D", 158, _CFFI_F_CHECK_FIELDS,
- sizeof(Camera3D), offsetof(struct _cffi_align__Camera3D, y), 12, 5 },
- { "CharInfo", 1149, _CFFI_F_CHECK_FIELDS,
- sizeof(CharInfo), offsetof(struct _cffi_align__CharInfo, y), 17, 5 },
- { "Color", 24, _CFFI_F_CHECK_FIELDS,
- sizeof(Color), offsetof(struct _cffi_align__Color, y), 22, 4 },
- { "Font", 66, _CFFI_F_CHECK_FIELDS,
- sizeof(Font), offsetof(struct _cffi_align__Font, y), 26, 5 },
- { "Image", 16, _CFFI_F_CHECK_FIELDS,
- sizeof(Image), offsetof(struct _cffi_align__Image, y), 31, 5 },
- { "Material", 704, _CFFI_F_CHECK_FIELDS,
- sizeof(Material), offsetof(struct _cffi_align__Material, y), 36, 3 },
- { "MaterialMap", 1159, _CFFI_F_CHECK_FIELDS,
- sizeof(MaterialMap), offsetof(struct _cffi_align__MaterialMap, y), 39, 3 },
- { "Matrix", 707, _CFFI_F_CHECK_FIELDS,
- sizeof(Matrix), offsetof(struct _cffi_align__Matrix, y), 42, 16 },
- { "Mesh", 6, _CFFI_F_CHECK_FIELDS,
- sizeof(Mesh), offsetof(struct _cffi_align__Mesh, y), 58, 15 },
- { "Model", 214, _CFFI_F_CHECK_FIELDS,
- sizeof(Model), offsetof(struct _cffi_align__Model, y), 73, 9 },
- { "ModelAnimation", 404, _CFFI_F_CHECK_FIELDS,
- sizeof(ModelAnimation), offsetof(struct _cffi_align__ModelAnimation, y), 82, 4 },
- { "Music", 371, _CFFI_F_CHECK_FIELDS,
- sizeof(Music), offsetof(struct _cffi_align__Music, y), 86, 5 },
- { "NPatchInfo", 848, _CFFI_F_CHECK_FIELDS,
- sizeof(NPatchInfo), offsetof(struct _cffi_align__NPatchInfo, y), 91, 6 },
- { "Ray", 213, _CFFI_F_CHECK_FIELDS,
- sizeof(Ray), offsetof(struct _cffi_align__Ray, y), 97, 2 },
- { "RayHitInfo", 1165, _CFFI_F_CHECK_FIELDS,
- sizeof(RayHitInfo), offsetof(struct _cffi_align__RayHitInfo, y), 99, 4 },
- { "Rectangle", 77, _CFFI_F_CHECK_FIELDS,
- sizeof(Rectangle), offsetof(struct _cffi_align__Rectangle, y), 103, 4 },
- { "RenderTexture2D", 800, _CFFI_F_CHECK_FIELDS,
- sizeof(RenderTexture2D), offsetof(struct _cffi_align__RenderTexture2D, y), 107, 4 },
- { "Shader", 258, _CFFI_F_CHECK_FIELDS,
- sizeof(Shader), offsetof(struct _cffi_align__Shader, y), 111, 2 },
- { "Sound", 433, _CFFI_F_CHECK_FIELDS,
- sizeof(Sound), offsetof(struct _cffi_align__Sound, y), 113, 2 },
- { "Texture2D", 80, _CFFI_F_CHECK_FIELDS,
- sizeof(Texture2D), offsetof(struct _cffi_align__Texture2D, y), 115, 5 },
- { "Transform", 1174, _CFFI_F_CHECK_FIELDS,
- sizeof(Transform), offsetof(struct _cffi_align__Transform, y), 120, 3 },
- { "Vector2", 209, _CFFI_F_CHECK_FIELDS,
- sizeof(Vector2), offsetof(struct _cffi_align__Vector2, y), 123, 2 },
- { "Vector3", 28, _CFFI_F_CHECK_FIELDS,
- sizeof(Vector3), offsetof(struct _cffi_align__Vector3, y), 125, 3 },
- { "Vector4", 31, _CFFI_F_CHECK_FIELDS,
- sizeof(Vector4), offsetof(struct _cffi_align__Vector4, y), 128, 4 },
- { "VrDeviceInfo", 1020, _CFFI_F_CHECK_FIELDS,
- sizeof(VrDeviceInfo), offsetof(struct _cffi_align__VrDeviceInfo, y), 132, 10 },
- { "Wave", 245, _CFFI_F_CHECK_FIELDS,
- sizeof(Wave), offsetof(struct _cffi_align__Wave, y), 142, 5 },
- { "rAudioBuffer", 1186, _CFFI_F_OPAQUE,
- (size_t)-1, -1, -1, 0 /* opaque */ },
-};
-
-static const struct _cffi_enum_s _cffi_enums[] = {
- { "$AndroidButton", 1142, _cffi_prim_int(sizeof(AndroidButton), ((AndroidButton)-1) <= 0),
- "KEY_BACK,KEY_MENU,KEY_VOLUME_UP,KEY_VOLUME_DOWN" },
- { "$BlendMode", 1143, _cffi_prim_int(sizeof(BlendMode), ((BlendMode)-1) <= 0),
- "BLEND_ALPHA,BLEND_ADDITIVE,BLEND_MULTIPLIED" },
- { "$CameraMode", 1146, _cffi_prim_int(sizeof(CameraMode), ((CameraMode)-1) <= 0),
- "CAMERA_CUSTOM,CAMERA_FREE,CAMERA_ORBITAL,CAMERA_FIRST_PERSON,CAMERA_THIRD_PERSON" },
- { "$CameraType", 1147, _cffi_prim_int(sizeof(CameraType), ((CameraType)-1) <= 0),
- "CAMERA_PERSPECTIVE,CAMERA_ORTHOGRAPHIC" },
- { "$ConfigFlag", 1150, _cffi_prim_int(sizeof(ConfigFlag), ((ConfigFlag)-1) <= 0),
- "FLAG_RESERVED,FLAG_FULLSCREEN_MODE,FLAG_WINDOW_RESIZABLE,FLAG_WINDOW_UNDECORATED,FLAG_WINDOW_TRANSPARENT,FLAG_WINDOW_HIDDEN,FLAG_WINDOW_ALWAYS_RUN,FLAG_MSAA_4X_HINT,FLAG_VSYNC_HINT" },
- { "$CubemapLayoutType", 1151, _cffi_prim_int(sizeof(CubemapLayoutType), ((CubemapLayoutType)-1) <= 0),
- "CUBEMAP_AUTO_DETECT,CUBEMAP_LINE_VERTICAL,CUBEMAP_LINE_HORIZONTAL,CUBEMAP_CROSS_THREE_BY_FOUR,CUBEMAP_CROSS_FOUR_BY_THREE,CUBEMAP_PANORAMA" },
- { "$FontType", 1152, _cffi_prim_int(sizeof(FontType), ((FontType)-1) <= 0),
- "FONT_DEFAULT,FONT_BITMAP,FONT_SDF" },
- { "$GamepadAxis", 1153, _cffi_prim_int(sizeof(GamepadAxis), ((GamepadAxis)-1) <= 0),
- "GAMEPAD_AXIS_UNKNOWN,GAMEPAD_AXIS_LEFT_X,GAMEPAD_AXIS_LEFT_Y,GAMEPAD_AXIS_RIGHT_X,GAMEPAD_AXIS_RIGHT_Y,GAMEPAD_AXIS_LEFT_TRIGGER,GAMEPAD_AXIS_RIGHT_TRIGGER" },
- { "$GamepadButton", 1154, _cffi_prim_int(sizeof(GamepadButton), ((GamepadButton)-1) <= 0),
- "GAMEPAD_BUTTON_UNKNOWN,GAMEPAD_BUTTON_LEFT_FACE_UP,GAMEPAD_BUTTON_LEFT_FACE_RIGHT,GAMEPAD_BUTTON_LEFT_FACE_DOWN,GAMEPAD_BUTTON_LEFT_FACE_LEFT,GAMEPAD_BUTTON_RIGHT_FACE_UP,GAMEPAD_BUTTON_RIGHT_FACE_RIGHT,GAMEPAD_BUTTON_RIGHT_FACE_DOWN,GAMEPAD_BUTTON_RIGHT_FACE_LEFT,GAMEPAD_BUTTON_LEFT_TRIGGER_1,GAMEPAD_BUTTON_LEFT_TRIGGER_2,GAMEPAD_BUTTON_RIGHT_TRIGGER_1,GAMEPAD_BUTTON_RIGHT_TRIGGER_2,GAMEPAD_BUTTON_MIDDLE_LEFT,GAMEPAD_BUTTON_MIDDLE,GAMEPAD_BUTTON_MIDDLE_RIGHT,GAMEPAD_BUTTON_LEFT_THUMB,GAMEPAD_BUTTON_RIGHT_THUMB" },
- { "$GamepadNumber", 1155, _cffi_prim_int(sizeof(GamepadNumber), ((GamepadNumber)-1) <= 0),
- "GAMEPAD_PLAYER1,GAMEPAD_PLAYER2,GAMEPAD_PLAYER3,GAMEPAD_PLAYER4" },
- { "$GestureType", 1156, _cffi_prim_int(sizeof(GestureType), ((GestureType)-1) <= 0),
- "GESTURE_NONE,GESTURE_TAP,GESTURE_DOUBLETAP,GESTURE_HOLD,GESTURE_DRAG,GESTURE_SWIPE_RIGHT,GESTURE_SWIPE_LEFT,GESTURE_SWIPE_UP,GESTURE_SWIPE_DOWN,GESTURE_PINCH_IN,GESTURE_PINCH_OUT" },
- { "$KeyboardKey", 1157, _cffi_prim_int(sizeof(KeyboardKey), ((KeyboardKey)-1) <= 0),
- "KEY_APOSTROPHE,KEY_COMMA,KEY_MINUS,KEY_PERIOD,KEY_SLASH,KEY_ZERO,KEY_ONE,KEY_TWO,KEY_THREE,KEY_FOUR,KEY_FIVE,KEY_SIX,KEY_SEVEN,KEY_EIGHT,KEY_NINE,KEY_SEMICOLON,KEY_EQUAL,KEY_A,KEY_B,KEY_C,KEY_D,KEY_E,KEY_F,KEY_G,KEY_H,KEY_I,KEY_J,KEY_K,KEY_L,KEY_M,KEY_N,KEY_O,KEY_P,KEY_Q,KEY_R,KEY_S,KEY_T,KEY_U,KEY_V,KEY_W,KEY_X,KEY_Y,KEY_Z,KEY_SPACE,KEY_ESCAPE,KEY_ENTER,KEY_TAB,KEY_BACKSPACE,KEY_INSERT,KEY_DELETE,KEY_RIGHT,KEY_LEFT,KEY_DOWN,KEY_UP,KEY_PAGE_UP,KEY_PAGE_DOWN,KEY_HOME,KEY_END,KEY_CAPS_LOCK,KEY_SCROLL_LOCK,KEY_NUM_LOCK,KEY_PRINT_SCREEN,KEY_PAUSE,KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,KEY_F9,KEY_F10,KEY_F11,KEY_F12,KEY_LEFT_SHIFT,KEY_LEFT_CONTROL,KEY_LEFT_ALT,KEY_LEFT_SUPER,KEY_RIGHT_SHIFT,KEY_RIGHT_CONTROL,KEY_RIGHT_ALT,KEY_RIGHT_SUPER,KEY_KB_MENU,KEY_LEFT_BRACKET,KEY_BACKSLASH,KEY_RIGHT_BRACKET,KEY_GRAVE,KEY_KP_0,KEY_KP_1,KEY_KP_2,KEY_KP_3,KEY_KP_4,KEY_KP_5,KEY_KP_6,KEY_KP_7,KEY_KP_8,KEY_KP_9,KEY_KP_DECIMAL,KEY_KP_DIVIDE,KEY_KP_MULTIPLY,KEY_KP_SUBTRACT,KEY_KP_ADD,KEY_KP_ENTER,KEY_KP_EQUAL" },
- { "$MaterialMapType", 1160, _cffi_prim_int(sizeof(MaterialMapType), ((MaterialMapType)-1) <= 0),
- "MAP_ALBEDO,MAP_METALNESS,MAP_NORMAL,MAP_ROUGHNESS,MAP_OCCLUSION,MAP_EMISSION,MAP_HEIGHT,MAP_CUBEMAP,MAP_IRRADIANCE,MAP_PREFILTER,MAP_BRDF" },
- { "$MouseButton", 1162, _cffi_prim_int(sizeof(MouseButton), ((MouseButton)-1) <= 0),
- "MOUSE_LEFT_BUTTON,MOUSE_RIGHT_BUTTON,MOUSE_MIDDLE_BUTTON" },
- { "$NPatchType", 1163, _cffi_prim_int(sizeof(NPatchType), ((NPatchType)-1) <= 0),
- "NPT_9PATCH,NPT_3PATCH_VERTICAL,NPT_3PATCH_HORIZONTAL" },
- { "$PixelFormat", 1164, _cffi_prim_int(sizeof(PixelFormat), ((PixelFormat)-1) <= 0),
- "UNCOMPRESSED_GRAYSCALE,UNCOMPRESSED_GRAY_ALPHA,UNCOMPRESSED_R5G6B5,UNCOMPRESSED_R8G8B8,UNCOMPRESSED_R5G5B5A1,UNCOMPRESSED_R4G4B4A4,UNCOMPRESSED_R8G8B8A8,UNCOMPRESSED_R32,UNCOMPRESSED_R32G32B32,UNCOMPRESSED_R32G32B32A32,COMPRESSED_DXT1_RGB,COMPRESSED_DXT1_RGBA,COMPRESSED_DXT3_RGBA,COMPRESSED_DXT5_RGBA,COMPRESSED_ETC1_RGB,COMPRESSED_ETC2_RGB,COMPRESSED_ETC2_EAC_RGBA,COMPRESSED_PVRT_RGB,COMPRESSED_PVRT_RGBA,COMPRESSED_ASTC_4x4_RGBA,COMPRESSED_ASTC_8x8_RGBA" },
- { "$ShaderLocationIndex", 1167, _cffi_prim_int(sizeof(ShaderLocationIndex), ((ShaderLocationIndex)-1) <= 0),
- "LOC_VERTEX_POSITION,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_METALNESS,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" },
- { "$ShaderUniformDataType", 1168, _cffi_prim_int(sizeof(ShaderUniformDataType), ((ShaderUniformDataType)-1) <= 0),
- "UNIFORM_FLOAT,UNIFORM_VEC2,UNIFORM_VEC3,UNIFORM_VEC4,UNIFORM_INT,UNIFORM_IVEC2,UNIFORM_IVEC3,UNIFORM_IVEC4,UNIFORM_SAMPLER2D" },
- { "$TextureFilterMode", 1169, _cffi_prim_int(sizeof(TextureFilterMode), ((TextureFilterMode)-1) <= 0),
- "FILTER_POINT,FILTER_BILINEAR,FILTER_TRILINEAR,FILTER_ANISOTROPIC_4X,FILTER_ANISOTROPIC_8X,FILTER_ANISOTROPIC_16X" },
- { "$TextureWrapMode", 1170, _cffi_prim_int(sizeof(TextureWrapMode), ((TextureWrapMode)-1) <= 0),
- "WRAP_REPEAT,WRAP_CLAMP,WRAP_MIRROR_REPEAT,WRAP_MIRROR_CLAMP" },
- { "$TraceLogType", 1171, _cffi_prim_int(sizeof(TraceLogType), ((TraceLogType)-1) <= 0),
- "LOG_ALL,LOG_TRACE,LOG_DEBUG,LOG_INFO,LOG_WARNING,LOG_ERROR,LOG_FATAL,LOG_NONE" },
-};
-
-static const struct _cffi_typename_s _cffi_typenames[] = {
- { "AndroidButton", 1142 },
- { "AudioStream", 384 },
- { "BlendMode", 1143 },
- { "BoneInfo", 1145 },
- { "BoundingBox", 387 },
- { "Camera", 158 },
- { "Camera2D", 155 },
- { "Camera3D", 158 },
- { "CameraMode", 1146 },
- { "CameraType", 1147 },
- { "CharInfo", 1149 },
- { "Color", 24 },
- { "ConfigFlag", 1150 },
- { "CubemapLayoutType", 1151 },
- { "Font", 66 },
- { "FontType", 1152 },
- { "GamepadAxis", 1153 },
- { "GamepadButton", 1154 },
- { "GamepadNumber", 1155 },
- { "GestureType", 1156 },
- { "Image", 16 },
- { "KeyboardKey", 1157 },
- { "Material", 704 },
- { "MaterialMap", 1159 },
- { "MaterialMapType", 1160 },
- { "Matrix", 707 },
- { "Mesh", 6 },
- { "Model", 214 },
- { "ModelAnimation", 404 },
- { "MouseButton", 1162 },
- { "Music", 371 },
- { "NPatchInfo", 848 },
- { "NPatchType", 1163 },
- { "PixelFormat", 1164 },
- { "Quaternion", 31 },
- { "Ray", 213 },
- { "RayHitInfo", 1165 },
- { "Rectangle", 77 },
- { "RenderTexture", 800 },
- { "RenderTexture2D", 800 },
- { "Shader", 258 },
- { "ShaderLocationIndex", 1167 },
- { "ShaderUniformDataType", 1168 },
- { "Sound", 433 },
- { "Texture", 80 },
- { "Texture2D", 80 },
- { "TextureCubemap", 80 },
- { "TextureFilterMode", 1169 },
- { "TextureWrapMode", 1170 },
- { "TraceLogType", 1171 },
- { "Transform", 1174 },
- { "Vector2", 209 },
- { "Vector3", 28 },
- { "Vector4", 31 },
- { "VrDeviceInfo", 1020 },
- { "Wave", 245 },
- { "rAudioBuffer", 1186 },
-};
-
-static const struct _cffi_type_context_s _cffi_type_context = {
- _cffi_types,
- _cffi_globals,
- _cffi_fields,
- _cffi_struct_unions,
- _cffi_enums,
- _cffi_typenames,
- 696, /* num_globals */
- 31, /* num_struct_unions */
- 21, /* num_enums */
- 57, /* num_typenames */
- NULL, /* no includes */
- 1193, /* num_types */
- 0, /* flags */
-};
-
-#ifdef __GNUC__
-# pragma GCC visibility push(default) /* for -fvisibility= */
-#endif
-
-#ifdef PYPY_VERSION
-PyMODINIT_FUNC
-_cffi_pypyinit__raylib_cffi(const void *p[])
-{
- p[0] = (const void *)0x2601;
- p[1] = &_cffi_type_context;
-#if PY_MAJOR_VERSION >= 3
- return NULL;
-#endif
-}
-# ifdef _MSC_VER
- PyMODINIT_FUNC
-# if PY_MAJOR_VERSION >= 3
- PyInit__raylib_cffi(void) { return NULL; }
-# else
- init_raylib_cffi(void) { }
-# endif
-# endif
-#elif PY_MAJOR_VERSION >= 3
-PyMODINIT_FUNC
-PyInit__raylib_cffi(void)
-{
- return _cffi_init("_raylib_cffi", 0x2601, &_cffi_type_context);
-}
-#else
-PyMODINIT_FUNC
-init_raylib_cffi(void)
-{
- _cffi_init("_raylib_cffi", 0x2601, &_cffi_type_context);
-}
-#endif
-
-#ifdef __GNUC__
-# pragma GCC visibility pop
-#endif
diff --git a/raylib/static/_raylib_cffi.cp36-win_amd64.pyd b/raylib/static/_raylib_cffi.cp36-win_amd64.pyd
deleted file mode 100644
index bd6e745..0000000
Binary files a/raylib/static/_raylib_cffi.cp36-win_amd64.pyd and /dev/null differ
diff --git a/raylib/static/_raylib_cffi.cp37-win_amd64.pyd b/raylib/static/_raylib_cffi.cp37-win_amd64.pyd
deleted file mode 100644
index c47e4bc..0000000
Binary files a/raylib/static/_raylib_cffi.cp37-win_amd64.pyd and /dev/null differ
diff --git a/raylib/static/_raylib_cffi.cp38-win32.pyd b/raylib/static/_raylib_cffi.cp38-win32.pyd
deleted file mode 100644
index b5f4ff8..0000000
Binary files a/raylib/static/_raylib_cffi.cp38-win32.pyd and /dev/null differ
diff --git a/raylib/static/_raylib_cffi.cp38-win_amd64.pyd b/raylib/static/_raylib_cffi.cp38-win_amd64.pyd
deleted file mode 100644
index f8922c3..0000000
Binary files a/raylib/static/_raylib_cffi.cp38-win_amd64.pyd and /dev/null differ
diff --git a/raylib/static/_raylib_cffi.cpython-36m-darwin.so b/raylib/static/_raylib_cffi.cpython-36m-darwin.so
deleted file mode 100755
index a81c222..0000000
Binary files a/raylib/static/_raylib_cffi.cpython-36m-darwin.so and /dev/null differ
diff --git a/raylib/static/_raylib_cffi.cpython-36m-x86_64-linux-gnu.so b/raylib/static/_raylib_cffi.cpython-36m-x86_64-linux-gnu.so
deleted file mode 100755
index 1fbe481..0000000
Binary files a/raylib/static/_raylib_cffi.cpython-36m-x86_64-linux-gnu.so and /dev/null differ
diff --git a/raylib/static/_raylib_cffi.cpython-37m-darwin.so b/raylib/static/_raylib_cffi.cpython-37m-darwin.so
deleted file mode 100755
index dc22f47..0000000
Binary files a/raylib/static/_raylib_cffi.cpython-37m-darwin.so and /dev/null differ
diff --git a/raylib/static/_raylib_cffi.cpython-37m-x86_64-linux-gnu.so b/raylib/static/_raylib_cffi.cpython-37m-x86_64-linux-gnu.so
deleted file mode 100755
index e2ef2ba..0000000
Binary files a/raylib/static/_raylib_cffi.cpython-37m-x86_64-linux-gnu.so and /dev/null differ
diff --git a/raylib/static/_raylib_cffi.cpython-38-darwin.so b/raylib/static/_raylib_cffi.cpython-38-darwin.so
deleted file mode 100755
index a91b9e6..0000000
Binary files a/raylib/static/_raylib_cffi.cpython-38-darwin.so and /dev/null differ
diff --git a/raylib/static/_raylib_cffi.cpython-38-x86_64-linux-gnu.so b/raylib/static/_raylib_cffi.cpython-38-x86_64-linux-gnu.so
deleted file mode 100755
index 8c0b6ca..0000000
Binary files a/raylib/static/_raylib_cffi.cpython-38-x86_64-linux-gnu.so and /dev/null differ
diff --git a/raylib/static/build_linux.py b/raylib/static/build_linux.py
deleted file mode 100644
index 0a6db28..0000000
--- a/raylib/static/build_linux.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Linux build assumes raylib, GL, etc are all already installed as system libraries. We dont distribute them.
-# Raylib must be installed the compiled with: cmake -DWITH_PIC=ON -DSHARED=ON -DSTATIC=ON ..
-
-from cffi import FFI
-import os
-import platform
-ffibuilder = FFI()
-
-
-ffibuilder.cdef(open("../raylib_modified.h").read().replace('RLAPI ', ''))
-
-
-ffibuilder.set_source("_raylib_cffi",
- """
- #include "../raylib.h"
- """,
- extra_link_args=['/usr/local/lib/libraylib.a','-lm', '-lpthread', '-lGLU', '-lGL', '-lrt', '-lm', '-ldl', '-lX11', '-lpthread'],
- libraries=['GL','m','pthread', 'dl', 'rt', 'X11']
- )
-
-
-if __name__ == "__main__":
- ffibuilder.compile(verbose=True)
-
diff --git a/raylib/static/build_linux_multi.sh b/raylib/static/build_linux_multi.sh
deleted file mode 100755
index bf591e9..0000000
--- a/raylib/static/build_linux_multi.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env bash
-rm *linux-gnu.so
-pyenv global 3.8.1
-pip3 install cffi
-python build_linux.py
-pyenv global 3.7.6
-pip3 install cffi
-python build_linux.py
-pyenv global 3.6.10
-pip3 install cffi
-python build_linux.py
diff --git a/raylib/static/build_mac.py b/raylib/static/build_mac.py
deleted file mode 100644
index 29b6f6e..0000000
--- a/raylib/static/build_mac.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from cffi import FFI
-import os
-import platform
-import sys
-ffibuilder = FFI()
-
-
-ffibuilder.cdef(open("../raylib_modified.h").read().replace('RLAPI ', ''))
-
-
-ffibuilder.set_source("_raylib_cffi",
- """
- #include "../raylib.h" // the C header of the library, supplied by us here
- """
- )
-
-# Hack to produce static linked lib using static librarylib.a supplied by us
-version = sys.implementation.cache_tag
-if version == 'cpython-36' or version == 'cpython-37':
- version += 'm'
-command = "clang -bundle -undefined dynamic_lookup ./_raylib_cffi.o -L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/sqlite/lib ../../libraylib_mac.a -F/System/Library/Frameworks -framework OpenGL -framework Cocoa -framework IOKit -framework CoreFoundation -framework CoreVideo -o ./_raylib_cffi."+version+"-darwin.so"
-
-if __name__ == "__main__":
- ffibuilder.compile(verbose=True)
- if platform.system()=="Darwin":
- print(command)
- os.system(command)
diff --git a/raylib/static/build_mac_multi.sh b/raylib/static/build_mac_multi.sh
deleted file mode 100755
index d087474..0000000
--- a/raylib/static/build_mac_multi.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env bash
-rm *darwin.so
-pyenv global 3.8.1
-pip3 install cffi
-python build_mac.py
-pyenv global 3.7.5
-pip3 install cffi
-python build_mac.py
-pyenv global 3.6.9
-pip3 install cffi
-python build_mac.py
diff --git a/raylib/static/build_win32.py b/raylib/static/build_win32.py
deleted file mode 100644
index 343cf6a..0000000
--- a/raylib/static/build_win32.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Windows build assumes raylib, OpenGL32, etc are all already installed as system libraries. We dont distribute them.
-
-from cffi import FFI
-
-ffibuilder = FFI()
-ffibuilder.cdef(open("../raylib_modified.h").read().replace('RLAPI ', '').replace('bool','int'))
-ffibuilder.set_source("_raylib_cffi",
- """
- #include "../raylib.h"
- """,
- extra_link_args=['/NODEFAULTLIB:MSVCRTD'],
- libraries=['raylib_static', 'gdi32', 'shell32', 'user32','OpenGL32', 'winmm'],
-)
-
-
-if __name__ == "__main__":
- ffibuilder.compile(verbose=True)
diff --git a/raylib/version.py b/raylib/version.py
new file mode 120000
index 0000000..a508b60
--- /dev/null
+++ b/raylib/version.py
@@ -0,0 +1 @@
+../version.py
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 8db935f..c91f3bb 100644
--- a/setup.py
+++ b/setup.py
@@ -1,32 +1,51 @@
import pathlib
from setuptools import setup
+from setuptools.dist import Distribution
+import os
# The directory containing this file
HERE = pathlib.Path(__file__).parent
# The text of the README file
README = (HERE / "README.md").read_text()
+VERSION = (HERE / "version.py").read_text().split()[-1].strip("\"'")
-# This call to setup() does all the work
+RAYLIB_PLATFORM = os.getenv("RAYLIB_PLATFORM", "Desktop")
+if RAYLIB_PLATFORM == "SDL":
+ NAME = "_sdl"
+elif RAYLIB_PLATFORM == "DRM":
+ NAME = "_drm"
+else:
+ NAME = ""
+
+class BinaryDistribution(Distribution):
+ """Distribution which always forces a binary package with platform name"""
+ def has_ext_modules(foo):
+ return True
+
+# should be name="raylib"+NAME but then Github doesn't track dependants
setup(
name="raylib",
- version="2.6.0",
+ version=VERSION,
description="Python CFFI bindings for Raylib",
long_description=README,
long_description_content_type="text/markdown",
url="https://github.com/electronstudio/raylib-python-cffi",
author="Electron Studio",
author_email="github@electronstudio.co.uk",
- license="LGPLv3+",
+ license="EPL-2.0",
classifiers=[
- "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)",
+ "License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)",
"Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.8",
- "Programming Language :: Python :: 3.6",
- "Programming Language :: Python :: 3.7",
+ "Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.10",
],
- packages=["raylib", "raylib.dynamic", "raylib.static"],
+ packages=["raylib", "pyray"],
include_package_data=True,
- install_requires=["cffi>=1.14.0","inflection"],
- #cffi_modules=["raylib/build_mac.py:ffibuilder"], # this would build libs whenever the module is installed, but we are distributing static libs instead
+ setup_requires=["cffi>=1.17.1"],
+ install_requires=["cffi>=1.17.1"],
+ distclass=BinaryDistribution,
+ cffi_modules=["raylib/build.py:ffibuilder"]
)
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..8facf8b
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,30 @@
+{
+ pkgs ? import { },
+}: pkgs.mkShell {
+ buildInputs = with pkgs; [
+ python3
+ cmake
+ clang-tools
+ pkg-config
+ wayland-scanner
+ wayland
+ libGL
+ libgbm
+ libdrm
+ xorg.libXi
+ xorg.libXcursor
+ xorg.libXrandr
+ xorg.libXinerama
+ xorg.libX11
+ ];
+
+ shellHook = ''
+ export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.xorg.libX11 pkgs.libGL ]}:$LD_LIBRARY_PATH"
+
+ if [ ! -d ".venv" ]; then
+ python3 -m venv .venv
+ fi
+
+ source .venv/bin/activate
+ '';
+}
diff --git a/test_pyray.py b/test_pyray.py
deleted file mode 100644
index 8085c72..0000000
--- a/test_pyray.py
+++ /dev/null
@@ -1,44 +0,0 @@
-"""
-This shows how to use the Pyray wrapper around the static binding.
-"""
-
-from raylib.pyray import PyRay
-from raylib.colors import *
-
-pyray = PyRay()
-
-pyray.init_window(800, 450, "Raylib texture test")
-pyray.set_target_fps(60)
-
-camera = pyray.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0)
-image = pyray.load_image("examples/models/resources/heightmap.png")
-texture = pyray.load_texture_from_image(image)
-mesh = pyray.gen_mesh_heightmap(image, (16, 8, 16))
-model = pyray.load_model_from_mesh(mesh)
-model.materials.maps[pyray.MAP_DIFFUSE].texture = texture
-
-pyray.unload_image(image)
-pyray.set_camera_mode(camera, pyray.CAMERA_ORBITAL)
-
-pos = pyray.get_mouse_position()
-ray = pyray.get_mouse_ray(pos, camera)
-rayhit = pyray.get_collision_ray_ground(ray, 0)
-print(str(rayhit.position.x))
-
-while not pyray.window_should_close():
- pyray.update_camera(pyray.pointer(camera))
- pyray.begin_drawing()
- pyray.clear_background(RAYWHITE)
- pyray.begin_mode_3d(camera)
- pyray.draw_model(model, (-8.0, 0.0, -8.0), 1.0, RED)
- pyray.draw_grid(20, 1.0)
- pyray.end_mode_3d()
- pyray.draw_text("This mesh should be textured", 190, 200, 20, VIOLET)
- pyray.end_drawing()
-
- pos = pyray.get_mouse_position()
- ray = pyray.get_mouse_ray(pos, camera)
- rayhit = pyray.get_collision_ray_ground(ray, 0)
- print(str(rayhit.position.x))
-
-pyray.close_window()
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
new file mode 100755
index 0000000..653a442
--- /dev/null
+++ b/tests/run_tests.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+rm raylib pyray examples
+ln -s ../raylib
+ln -s ../pyray
+ln -s ../examples
+for FILE in *.py
+do
+ if python3 $FILE; then
+ echo $FILE returned true
+ else
+ echo $FILE returned some error
+ rm raylib pyray examples
+ exit
+ fi
+done
+rm raylib pyray examples
\ No newline at end of file
diff --git a/tests/run_tests_dynamic.sh b/tests/run_tests_dynamic.sh
new file mode 100755
index 0000000..1942448
--- /dev/null
+++ b/tests/run_tests_dynamic.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+rm raylib pyray examples
+ln -s ../dynamic/raylib
+ln -s ../dynamic/pyray
+ln -s ../examples
+for FILE in test_*.py
+do
+ if python3 $FILE; then
+ echo $FILE returned true
+ else
+ echo $FILE returned some error
+ rm raylib pyray examples
+ exit
+ fi
+done
+rm raylib pyray examples
\ No newline at end of file
diff --git a/tests/test_color.py b/tests/test_color.py
new file mode 100644
index 0000000..fcdbc1e
--- /dev/null
+++ b/tests/test_color.py
@@ -0,0 +1,22 @@
+import pyray
+
+pyray.init_window(800, 400, 'demo')
+
+
+white = pyray.get_color(0xFFFFFFFF)
+red = pyray.get_color(0xFF0000FF)
+green = pyray.get_color(0x00FF00FF)
+blue = pyray.get_color(0x0000FFFF)
+
+red = pyray.Color(255, 0, 0)
+print(red.r)
+red.a=255
+
+while not pyray.window_should_close():
+ pyray.begin_drawing()
+ pyray.clear_background(white)
+ pyray.draw_rectangle(0, 0, 100, 100, red)
+ pyray.draw_rectangle(100, 100, 100, 100, green)
+ pyray.draw_rectangle(200, 200, 100, 100, blue)
+ pyray.end_drawing()
+pyray.close_window()
diff --git a/tests/test_float_pointers.py b/tests/test_float_pointers.py
new file mode 100644
index 0000000..d3d0607
--- /dev/null
+++ b/tests/test_float_pointers.py
@@ -0,0 +1,11 @@
+import pyray as pr
+import pytest
+
+pr.init_window(1280, 720, "any")
+
+shader = pr.load_shader("", "shader.fs")
+time = pr.ffi.new("float *", 0.0)
+timeLoc = pr.get_shader_location(shader, "uTime")
+pr.set_shader_value(shader, timeLoc, time, pr.SHADER_UNIFORM_FLOAT)
+with pytest.raises(TypeError):
+ pr.set_shader_value(shader, timeLoc, 0.0, pr.SHADER_UNIFORM_FLOAT)
\ No newline at end of file
diff --git a/tests/test_gamepad.py b/tests/test_gamepad.py
new file mode 100644
index 0000000..762d466
--- /dev/null
+++ b/tests/test_gamepad.py
@@ -0,0 +1,17 @@
+import pyray as pr
+pr.set_config_flags(pr.FLAG_MSAA_4X_HINT)
+pr.init_window(800, 600, 'Test gamepad')
+pr.set_target_fps(60)
+while not pr.window_should_close():
+ pr.begin_drawing()
+ pr.clear_background(pr.BLACK)
+ if pr.is_gamepad_available(0):
+ pr.draw_text(f'GP0: {pr.get_gamepad_name(0)}', 5, 5, 20, pr.RAYWHITE)
+ pr.draw_text(f'Axis: {pr.get_gamepad_axis_count(0)}', 5, 30, 20, pr.RAYWHITE)
+ pr.draw_text(f'Button: {pr.get_gamepad_button_pressed()}', 5, 55, 20, pr.RAYWHITE)
+ _hy_anon_var_1 = pr.draw_text(
+ f'Axis 0: {pr.get_gamepad_axis_movement(0, 0)}', 5, 85, 20, pr.RAYWHITE)
+ else:
+ _hy_anon_var_1 = None
+ pr.end_drawing()
+pr.close_window()
\ No newline at end of file
diff --git a/tests/test_hello_world.py b/tests/test_hello_world.py
new file mode 100644
index 0000000..44e86b6
--- /dev/null
+++ b/tests/test_hello_world.py
@@ -0,0 +1,10 @@
+from pyray import *
+init_window(800, 450, "Hello")
+while not window_should_close():
+ begin_drawing()
+ clear_background(WHITE)
+ font = load_font_ex("/usr/share/fonts/TTF/FiraSans-Ultra.ttf", 30, None, 0)
+ draw_text_ex(font, "hellow font", (300, 300), 30, 0, BLACK)
+ draw_text("Hello world", 190, 200, 20, VIOLET)
+ end_drawing()
+close_window()
diff --git a/tests/test_pyray.py b/tests/test_pyray.py
new file mode 100644
index 0000000..e9f54bc
--- /dev/null
+++ b/tests/test_pyray.py
@@ -0,0 +1,46 @@
+"""
+This shows how to use the Pyray wrapper around the static binding.
+"""
+
+import pyray as pr
+
+pr.init_window(800, 450, "Raylib texture test")
+pr.set_target_fps(60)
+
+test_typedef_init = pr.Texture2D() # Texture2D is typedef for Texture
+
+image = pr.gen_image_color(800, 400, (0,0,0,255) )
+texture = pr.load_texture_from_image(image)
+pr.update_texture(texture, image.data)
+
+camera = pr.Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0)
+image = pr.load_image("examples/models/resources/heightmap.png")
+texture = pr.load_texture_from_image(image)
+mesh = pr.gen_mesh_heightmap(image, (16, 8, 16))
+model = pr.load_model_from_mesh(mesh)
+model.materials.maps[pr.MaterialMapIndex.MATERIAL_MAP_ALBEDO].texture = texture
+
+pr.unload_image(image)
+
+pos = pr.get_mouse_position()
+ray = pr.get_screen_to_world_ray(pos, camera)
+#rayhit = pr.get_ray_collision_ground(ray, 0)
+#print(str(rayhit.position.x))
+
+while not pr.window_should_close():
+ pr.update_camera(camera, pr.CAMERA_ORBITAL)
+ pr.begin_drawing()
+ pr.clear_background(pr.RAYWHITE)
+ pr.begin_mode_3d(camera)
+ pr.draw_model(model, (-8.0, 0.0, -8.0), 1.0, pr.RED)
+ pr.draw_grid(20, 1.0)
+ pr.end_mode_3d()
+ pr.draw_text("This mesh should be textured", 190, 200, 20, pr.VIOLET)
+ pr.end_drawing()
+
+ pos = pr.get_mouse_position()
+ ray = pr.get_screen_to_world_ray(pos, camera)
+ #rayhit = pr.get_ray_collision_ground(ray, 0)
+ #print(str(rayhit.position.x))
+
+pr.close_window()
diff --git a/tests/test_pyray_no_prefix.py b/tests/test_pyray_no_prefix.py
new file mode 100644
index 0000000..bc27240
--- /dev/null
+++ b/tests/test_pyray_no_prefix.py
@@ -0,0 +1,44 @@
+"""
+This shows how to use the Pyray wrapper around the static binding.
+"""
+
+from pyray import *
+
+init_window(800, 450, "Raylib texture test")
+set_target_fps(60)
+
+image = gen_image_color(800, 400, (0,0,0,255) )
+texture = load_texture_from_image(image)
+update_texture(texture, image.data)
+
+camera = Camera3D([18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0)
+image = load_image("examples/models/resources/heightmap.png")
+texture = load_texture_from_image(image)
+mesh = gen_mesh_heightmap(image, (16, 8, 16))
+model = load_model_from_mesh(mesh)
+model.materials.maps[MATERIAL_MAP_ALBEDO].texture = texture
+
+unload_image(image)
+
+pos = get_mouse_position()
+ray = get_screen_to_world_ray(pos, camera)
+#rayhit = get_ray_collision_ground(ray, 0)
+#print(str(rayhit.position.x))
+
+while not window_should_close():
+ update_camera(camera, CAMERA_ORBITAL)
+ begin_drawing()
+ clear_background(RAYWHITE)
+ begin_mode_3d(camera)
+ draw_model(model, (-8.0, 0.0, -8.0), 1.0, RED)
+ draw_grid(20, 1.0)
+ end_mode_3d()
+ draw_text("This mesh should be tesxtured", 190, 200, 20, VIOLET)
+ end_drawing()
+
+ pos = get_mouse_position()
+ ray = get_screen_to_world_ray(pos, camera)
+ #rayhit = get_ray_collision_ground(ray, 0)
+ #print(str(rayhit.position.x))
+
+close_window()
diff --git a/test_dynamic.py b/tests/test_static_with_only_api_from_dynamic.py
similarity index 74%
rename from test_dynamic.py
rename to tests/test_static_with_only_api_from_dynamic.py
index 90c452c..b8b3c31 100644
--- a/test_dynamic.py
+++ b/tests/test_static_with_only_api_from_dynamic.py
@@ -2,8 +2,8 @@
This shows how to use the CFFI dynamic (ABI) binding. Note that is slower and more likely to run into silent errors and segfaults.
But it doesnt require any C compiler to build.
"""
-from raylib.dynamic import ffi, raylib as rl
-from raylib.colors import *
+
+from raylib import ffi, rl, colors
rl.InitWindow(800, 450, b"Raylib dynamic binding test")
rl.SetTargetFPS(60)
@@ -14,20 +14,19 @@ texture = rl.LoadTextureFromImage(image)
mesh = rl.GenMeshHeightmap(image, [16, 8, 16])
model = rl.LoadModelFromMesh(mesh)
print(model.materials) # SHOULD BE A pointer to a 'struct Material' but some is NULL pointer to 'Material' ?
-model.materials.maps[rl.MAP_DIFFUSE].texture = texture
+model.materials.maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
rl.UnloadImage(image)
-rl.SetCameraMode(camera[0], rl.CAMERA_ORBITAL)
while not rl.WindowShouldClose():
- rl.UpdateCamera(camera)
+ rl.UpdateCamera(camera, rl.CAMERA_ORBITAL)
rl.BeginDrawing()
- rl.ClearBackground(RAYWHITE)
+ rl.ClearBackground(colors.RAYWHITE)
rl.BeginMode3D(camera[0])
- rl.DrawModel(model, (-8.0, 0.0, -8.0), 1.0, RED)
+ rl.DrawModel(model, (-8.0, 0.0, -8.0), 1.0, colors.RED)
rl.DrawGrid(20, 1.0)
rl.EndMode3D()
- rl.DrawText(b"This mesh should be textured", 190, 200, 20, VIOLET)
+ rl.DrawText(b"This mesh should be textured", 190, 200, 20, colors.VIOLET)
rl.EndDrawing()
rl.CloseWindow()
diff --git a/tests/xtest_defines.py b/tests/xtest_defines.py
new file mode 100644
index 0000000..e6c36be
--- /dev/null
+++ b/tests/xtest_defines.py
@@ -0,0 +1,14 @@
+"""
+This shows how to use the Pyray wrapper around the static binding.
+"""
+
+import pyray as pr
+
+print(pr.WHITE)
+print(pr.MOUSE_BUTTON_LEFT)
+print(pr.MOUSE_LEFT_BUTTON )
+print(pr.MATERIAL_MAP_SPECULAR)
+
+import raylib as rl
+
+print(rl.MATERIAL_MAP_DIFFUSE)
\ No newline at end of file
diff --git a/tests/xtest_jpg_support.py b/tests/xtest_jpg_support.py
new file mode 100644
index 0000000..3538558
--- /dev/null
+++ b/tests/xtest_jpg_support.py
@@ -0,0 +1,31 @@
+from raylib import *
+
+screenWidth = 800
+screenHeight = 450
+
+InitWindow(screenWidth, screenHeight, b"raylib [textures] example - image loading")
+
+
+
+image = LoadImage(b"examples/textures/resources/raylib_logo.jpg")
+texture = LoadTextureFromImage(image)
+
+UnloadImage(image)
+
+while not WindowShouldClose():
+
+ BeginDrawing()
+
+ ClearBackground(RAYWHITE)
+
+ DrawTexture(texture, int(screenWidth/2 - texture.width/2), int(screenHeight/2 - texture.height/2), WHITE)
+
+ DrawText(b"this IS a texture loaded from an image!", 300, 370, 10, GRAY)
+
+ EndDrawing()
+
+
+
+
+UnloadTexture(texture)
+CloseWindow()
diff --git a/tests/xtest_music.py b/tests/xtest_music.py
new file mode 100644
index 0000000..2e9ddd0
--- /dev/null
+++ b/tests/xtest_music.py
@@ -0,0 +1,19 @@
+from pyray import *
+init_window(800, 450, "Hello")
+
+init_audio_device()
+
+music = load_music_stream("examples/audio/resources/country.mp3")
+music.looping = True
+play_music_stream(music);
+
+
+while not window_should_close():
+ update_music_stream(music);
+ begin_drawing()
+ clear_background(WHITE)
+ draw_text("music "+str(music.looping), 190, 200, 20, VIOLET)
+ end_drawing()
+unload_music_stream(music)
+close_audio_device()
+close_window()
diff --git a/tests/xtest_physac.py b/tests/xtest_physac.py
new file mode 100644
index 0000000..877b5e5
--- /dev/null
+++ b/tests/xtest_physac.py
@@ -0,0 +1,70 @@
+from raylib import *
+
+screenWidth = 800
+screenHeight = 450
+
+SetConfigFlags(FLAG_MSAA_4X_HINT)
+InitWindow(screenWidth, screenHeight, b"[physac] Basic demo")
+
+
+logoX = screenWidth - MeasureText(b"Physac", 30) - 10
+logoY = 15
+
+
+InitPhysics()
+
+
+floor = CreatePhysicsBodyRectangle([screenWidth/2, screenHeight ], 500, 100, 10)
+floor.enabled = False
+
+
+circle = CreatePhysicsBodyCircle([screenWidth/2, screenHeight/2], 45, 10)
+circle.enabled = False
+
+SetTargetFPS(60)
+
+while not WindowShouldClose():
+
+ UpdatePhysics();
+
+ if IsMouseButtonPressed(MOUSE_BUTTON_LEFT):
+ body = CreatePhysicsBodyPolygon(GetMousePosition(), GetRandomValue(20, 80), GetRandomValue(3, 8), 10)
+
+ elif IsMouseButtonPressed(MOUSE_BUTTON_RIGHT):
+ CreatePhysicsBodyCircle(GetMousePosition(), GetRandomValue(10, 45), 10)
+
+
+ bodiesCount = GetPhysicsBodiesCount()
+ for i in range(bodiesCount):
+ body = GetPhysicsBody(i)
+ if body and (body.position.y > screenHeight*2):
+ DestroyPhysicsBody(body)
+
+
+ BeginDrawing()
+ ClearBackground(BLACK)
+ DrawFPS(screenWidth - 90, screenHeight - 30)
+
+
+ bodiesCount = GetPhysicsBodiesCount()
+ for i in range(bodiesCount):
+ body = GetPhysicsBody(i)
+ if body:
+ vertexCount = GetPhysicsShapeVerticesCount(i)
+ for j in range(vertexCount):
+ vertexA = GetPhysicsShapeVertex(body, j)
+ jj = j + 1 if (j + 1) < vertexCount else 0
+ vertexB = GetPhysicsShapeVertex(body, jj)
+ DrawLineV(vertexA, vertexB, GREEN)
+
+ DrawText(b"Left mouse button to create a polygon", 10, 10, 10, WHITE)
+ DrawText(b"Right mouse button to create a circle", 10, 25, 10, WHITE)
+
+ DrawText(b"Physac", logoX, logoY, 30, WHITE)
+ DrawText(b"Powered by", logoX + 50, logoY - 7, 10, WHITE)
+
+ EndDrawing()
+
+ClosePhysics()
+
+CloseWindow()
\ No newline at end of file
diff --git a/tests/xtest_physac2.py b/tests/xtest_physac2.py
new file mode 100644
index 0000000..ff5749a
--- /dev/null
+++ b/tests/xtest_physac2.py
@@ -0,0 +1,76 @@
+from raylib import *
+
+VELOCITY = 0.5
+
+screenWidth = 800
+screenHeight = 450
+
+SetConfigFlags(FLAG_MSAA_4X_HINT)
+InitWindow(screenWidth, screenHeight, b"[physac] Basic demo")
+logoX = screenWidth - MeasureText(b"Physac", 30) - 10
+logoY = 15
+
+
+InitPhysics()
+
+floor = CreatePhysicsBodyRectangle([screenWidth/2, screenHeight ], screenWidth, 100, 10)
+platformLeft = CreatePhysicsBodyRectangle([screenWidth*0.25, screenHeight*0.6 ], screenWidth*0.25, 10, 10)
+platformRight = CreatePhysicsBodyRectangle([screenWidth*0.75, screenHeight*0.6 ], screenWidth*0.25, 10, 10)
+wallLeft = CreatePhysicsBodyRectangle([-5, screenHeight/2 ], 10, screenHeight, 10)
+wallRight = CreatePhysicsBodyRectangle([screenWidth + 5, screenHeight/2 ], 10, screenHeight, 10)
+
+
+floor.enabled = False
+platformLeft.enabled = False
+platformRight.enabled = False
+wallLeft.enabled = False
+wallRight.enabled = False
+
+
+body = CreatePhysicsBodyRectangle([screenWidth/2, screenHeight/2 ], 50, 50, 1)
+body.freezeOrient = True
+
+SetTargetFPS(60)
+
+while not WindowShouldClose():
+
+ UpdatePhysics();
+
+ if IsKeyDown(KEY_RIGHT):
+ body.velocity.x = VELOCITY
+ elif IsKeyDown(KEY_LEFT):
+ body.velocity.x = -VELOCITY
+
+
+ if IsKeyDown(KEY_UP) and body.isGrounded:
+ body.velocity.y = -VELOCITY*4
+
+ BeginDrawing()
+
+ ClearBackground(BLACK)
+
+ DrawFPS(screenWidth - 90, screenHeight - 30)
+
+
+ bodiesCount = GetPhysicsBodiesCount()
+ for i in range(bodiesCount):
+ body = GetPhysicsBody(i)
+ vertexCount = GetPhysicsShapeVerticesCount(i)
+ for j in range(vertexCount):
+ vertexA = GetPhysicsShapeVertex(body, j)
+
+ jj = j + 1 if j + 1 < vertexCount else 0
+ vertexB = GetPhysicsShapeVertex(body, jj)
+
+ DrawLineV(vertexA, vertexB, GREEN)
+
+ DrawText(b"Use 'ARROWS' to move player", 10, 10, 10, WHITE)
+
+ DrawText(b"Physac", logoX, logoY, 30, WHITE)
+ DrawText(b"Powered by", logoX + 50, logoY - 7, 10, WHITE)
+
+ EndDrawing()
+
+ClosePhysics()
+
+CloseWindow()
\ No newline at end of file
diff --git a/tests/xtest_raygui.py b/tests/xtest_raygui.py
new file mode 100644
index 0000000..1355e8f
--- /dev/null
+++ b/tests/xtest_raygui.py
@@ -0,0 +1,49 @@
+from raylib import *
+import pyray as pr
+
+screenWidth = 800
+screenHeight = 600
+
+SetConfigFlags(FLAG_WINDOW_UNDECORATED)
+InitWindow(screenWidth, screenHeight, b"raygui - portable window")
+
+
+mousePosition = pr.Vector2(0, 0)
+windowPosition = pr.Vector2(500, 200 )
+panOffset = mousePosition
+dragWindow = False
+
+SetWindowPosition(int(windowPosition.x), int(windowPosition.y))
+
+exitWindow = False
+
+SetTargetFPS(60)
+
+
+while not exitWindow and not WindowShouldClose():
+
+ mousePosition = GetMousePosition()
+
+ if IsMouseButtonPressed(MOUSE_BUTTON_LEFT):
+ if CheckCollisionPointRec(mousePosition, pr.Rectangle(0, 0, screenWidth, 20) ):
+ dragWindow = True
+ panOffset = mousePosition
+
+
+
+ if (dragWindow):
+ windowPosition.x += (mousePosition.x - panOffset.x)
+ windowPosition.y += (mousePosition.y - panOffset.y)
+ if IsMouseButtonReleased(MOUSE_BUTTON_LEFT):
+ dragWindow = False
+
+ SetWindowPosition(int(windowPosition.x), int(windowPosition.y))
+
+
+ BeginDrawing()
+ ClearBackground(RAYWHITE)
+ exitWindow = GuiWindowBox(pr.Rectangle(0, 0, screenWidth, screenHeight) , b"#198# PORTABLE WINDOW")
+ pr.draw_text(f"Mouse Position: {mousePosition.x} {mousePosition.y}", 10, 40, 10, DARKGRAY)
+ EndDrawing()
+
+CloseWindow()
\ No newline at end of file
diff --git a/tests/xtest_raygui2.py b/tests/xtest_raygui2.py
new file mode 100644
index 0000000..49c2f01
--- /dev/null
+++ b/tests/xtest_raygui2.py
@@ -0,0 +1,49 @@
+import pyray
+from pyray import *
+import pytest
+
+SCREEN_WIDTH = 640
+SCREEN_HEIGHT = 480
+
+
+def main():
+ init_window(SCREEN_WIDTH, SCREEN_HEIGHT, "raygui")
+ set_exit_key(KeyboardKey.KEY_ESCAPE)
+ set_target_fps(30)
+
+ _bool_pointer = pyray.ffi.new("bool *", True)
+ _bool = True
+ _float = 5.5
+ _float_pointer = pyray.ffi.new("float *", 5.2)
+ color = RED
+ color_pointer = Color()
+ _int=0
+ _int_pointer = pyray.ffi.new("int *", 0)
+ _string ="cant edit this string"
+ _string_pointer = pyray.ffi.new("char []", b"0123456789")
+
+ while not window_should_close():
+ begin_drawing()
+ clear_background(WHITE)
+
+ gui_check_box((40, 40, 30, 30), "checkbox", _bool_pointer)
+ with pytest.raises(TypeError):
+ gui_check_box(Rectangle(40, 40, 100, 100), "checkbox", _bool)
+
+ gui_color_bar_alpha((40, 80, 100, 20), "bar", _float_pointer)
+ with pytest.raises(TypeError):
+ gui_color_bar_alpha((40, 80, 100, 20), "bar", _float)
+
+ gui_color_picker((40,120, 100, 100), "color", color_pointer)
+ with pytest.raises(TypeError):
+ gui_color_picker((40,120, 100, 100), "color", color)
+
+ gui_text_box((40,230, 100, 30), _string_pointer, 10, True)
+ gui_text_box((200,230, 100, 30), _string, 10, True)
+
+ gui_tab_bar((40,300, 100, 30), ["foo", "boo"], 2, _int_pointer)
+ with pytest.raises(TypeError):
+ gui_tab_bar((40,300, 100, 30), ["foo", "boo"], 2, _int)
+
+ end_drawing()
+main()
\ No newline at end of file
diff --git a/tests/xtest_raygui_pyray.py b/tests/xtest_raygui_pyray.py
new file mode 100644
index 0000000..f49acee
--- /dev/null
+++ b/tests/xtest_raygui_pyray.py
@@ -0,0 +1,49 @@
+import pyray as pr
+
+screenWidth = 800
+screenHeight = 600
+
+pr.set_config_flags(pr.FLAG_WINDOW_UNDECORATED)
+
+pr.init_window(screenWidth, screenHeight, "raygui - portable window")
+
+
+mousePosition = pr.Vector2(0, 0)
+windowPosition = pr.Vector2(500, 200 )
+panOffset = mousePosition
+dragWindow = False
+
+pr.set_window_position(int(windowPosition.x), int(windowPosition.y))
+
+exitWindow = False
+
+pr.set_target_fps(60)
+
+if pr.GuiSliderProperty.SLIDER_WIDTH.value != pr.SLIDER_WIDTH:
+ raise Exception('enums not working')
+
+
+while not exitWindow and not pr.window_should_close():
+
+ mousePosition = pr.get_mouse_position()
+
+ if pr.is_mouse_button_pressed(pr.MouseButton.MOUSE_BUTTON_LEFT):
+ if pr.check_collision_point_rec(mousePosition, pr.Rectangle(0, 0, screenWidth, 20)):
+ dragWindow = True
+ panOffset = mousePosition
+
+ if dragWindow:
+ windowPosition.x += (mousePosition.x - panOffset.x)
+ windowPosition.y += (mousePosition.y - panOffset.y)
+ if pr.is_mouse_button_released(pr.MouseButton.MOUSE_BUTTON_LEFT):
+ dragWindow = False
+
+ pr.set_window_position(int(windowPosition.x), int(windowPosition.y))
+
+ pr.begin_drawing()
+ pr.clear_background(pr.RAYWHITE)
+ exitWindow = pr.gui_window_box(pr.Rectangle(0, 0, screenWidth, screenHeight), "#198# PORTABLE WINDOW")
+ pr.draw_text(f"Mouse Position: {mousePosition.x} {mousePosition.y}", 10, 40, 10, pr.DARKGRAY)
+ pr.end_drawing()
+
+pr.close_window()
\ No newline at end of file
diff --git a/tests/xtest_raymath.py b/tests/xtest_raymath.py
new file mode 100644
index 0000000..cf1e3d0
--- /dev/null
+++ b/tests/xtest_raymath.py
@@ -0,0 +1,12 @@
+"""
+This shows how to use the Pyray wrapper around the static binding.
+"""
+
+import pyray as pr
+
+v1 = pr.Vector2(10,10)
+v2 = pr.Vector2(20,20)
+v3 = pr.vector2_add(v1, v2)
+print(v3.x, v3.y)
+v4 = pr.vector2_normalize((20,10))
+print(v4.x, v4.y)
\ No newline at end of file
diff --git a/tests/xtest_rlgl.py b/tests/xtest_rlgl.py
new file mode 100644
index 0000000..d2bea55
--- /dev/null
+++ b/tests/xtest_rlgl.py
@@ -0,0 +1,7 @@
+from raylib import *
+
+InitWindow(800, 450, b"rlGL test")
+SetTargetFPS(60)
+
+
+print(rlGetVersion())
diff --git a/test_static.py b/tests/xtest_static.py
similarity index 84%
rename from test_static.py
rename to tests/xtest_static.py
index a2dcd95..a9c3390 100644
--- a/test_static.py
+++ b/tests/xtest_static.py
@@ -3,7 +3,7 @@ This shows how to use the CFFI static (API) binding. It should be fast and code
C code.
"""
-from raylib.static import *
+from raylib import *
InitWindow(800, 450, b"Raylib static texture test")
SetTargetFPS(60)
@@ -13,13 +13,12 @@ image = LoadImage(b"examples/models/resources/heightmap.png")
texture = LoadTextureFromImage(image)
mesh = GenMeshHeightmap(image, (16, 8, 16))
model = LoadModelFromMesh(mesh)
-model.materials.maps[MAP_DIFFUSE].texture = texture
+model.materials.maps[MATERIAL_MAP_ALBEDO].texture = texture
UnloadImage(image)
-SetCameraMode(camera[0], CAMERA_ORBITAL)
while not WindowShouldClose():
- UpdateCamera(camera)
+ UpdateCamera(camera, CAMERA_ORBITAL)
BeginDrawing()
ClearBackground(RAYWHITE)
BeginMode3D(camera[0])
diff --git a/tests/xtest_static_with_prefix.py b/tests/xtest_static_with_prefix.py
new file mode 100644
index 0000000..d407937
--- /dev/null
+++ b/tests/xtest_static_with_prefix.py
@@ -0,0 +1,31 @@
+"""
+This shows how to use the CFFI static (API) binding. It should be fast and code be as close as possible to original
+C code.
+"""
+
+import raylib as rl
+
+rl.InitWindow(800, 450, b"Raylib static binding test with prefix")
+rl.SetTargetFPS(60)
+
+camera = rl.ffi.new("struct Camera3D *", [[18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0])
+image = rl.LoadImage(b"examples/models/resources/heightmap.png")
+texture = rl.LoadTextureFromImage(image)
+mesh = rl.GenMeshHeightmap(image, [16, 8, 16])
+model = rl.LoadModelFromMesh(mesh)
+print(model.materials) # SHOULD BE A pointer to a 'struct Material' but some is NULL pointer to 'Material' ?
+model.materials.maps[rl.MATERIAL_MAP_ALBEDO].texture = texture
+
+rl.UnloadImage(image)
+
+while not rl.WindowShouldClose():
+ rl.UpdateCamera(camera, rl.CAMERA_ORBITAL)
+ rl.BeginDrawing()
+ rl.ClearBackground(rl.RAYWHITE)
+ rl.BeginMode3D(camera[0])
+ rl.DrawModel(model, (-8.0, 0.0, -8.0), 1.0, rl.RED)
+ rl.DrawGrid(20, 1.0)
+ rl.EndMode3D()
+ rl.DrawText(b"This mesh should be textured", 190, 200, 20, rl.VIOLET)
+ rl.EndDrawing()
+rl.CloseWindow()
diff --git a/version.py b/version.py
new file mode 100644
index 0000000..819d349
--- /dev/null
+++ b/version.py
@@ -0,0 +1 @@
+__version__ = "5.5.0.2"
\ No newline at end of file
diff --git a/web_examples.py b/web_examples.py
new file mode 100644
index 0000000..f99713f
--- /dev/null
+++ b/web_examples.py
@@ -0,0 +1,115 @@
+# Written by AI
+
+import os
+import shutil
+
+def convert(file_name):
+ with open(file_name, "r") as f:
+ # Read the lines of the file
+ lines = f.readlines()
+
+ # Create a temporary file name
+ temp_file_name = file_name + ".tmp"
+
+ # Open the temporary file in write mode
+ with open(temp_file_name, "w") as f:
+ # Write the first line to define the main() function
+ f.write("""# /// script
+# dependencies = [
+# "cffi",
+# "inflection",
+# "raylib"
+# ]
+# ///
+import asyncio
+import platform
+from raylib import *
+from pyray import *
+async def main():
+""")
+ # Indent each line of the original file and write it to the temporary file
+ for line in lines:
+ if "from raylib import *" in line or "from pyray import *" in line:
+ pass
+ else:
+ f.write(" " + line)
+
+ indent = line[:len(line) - len(line.lstrip())]
+ if "init_window" in line or "InitWindow" in line:
+ f.write(indent + " platform.window.window_resize()\n")
+ if "end_drawing" in line or "EndDrawing" in line:
+ f.write(indent + " await asyncio.sleep(0)\n")
+
+
+
+
+ # Write the last line to call the main() function
+ f.write("\nasyncio.run(main())\n")
+
+ # Delete the original file
+ os.remove(file_name)
+
+ # Rename the temporary file to the original file name
+ os.rename(temp_file_name, file_name)
+
+# Define the directory to start from
+start_dir = "examples"
+
+# Define the output directory
+output_dir = "webexamples"
+os.mkdir(output_dir)
+
+# Loop through all the files and subdirectories
+for root, dirs, files in os.walk(start_dir):
+ # Loop through the files that match the pattern '*.py'
+ for file in files:
+ if ((file.startswith("core") or file.startswith("phys") or file.startswith("shapes") or file.startswith("text"))
+ and file.endswith(".py")):
+ # Get the full path of the file
+ file_path = os.path.join(root, file)
+ # Get the file name without the extension
+ file_name = os.path.splitext(file)[0]
+ # Create a new directory with the same name as the file in the output directory
+ new_dir = os.path.join(output_dir, file_name)
+ os.mkdir(new_dir)
+ # Copy the file into the new directory and rename it 'main.py'
+ new_file = os.path.join(new_dir, "main.py")
+ shutil.copy(file_path, new_file)
+ convert(new_file)
+ os.system(f"cp -R examples/textures/resources {new_dir}")
+ os.system("python3.12 -m pygbag --git --PYBUILD 3.12 --no_opt --can_close 1 --ume_block 0 --template noctx.tmpl --build "+new_file)
+ os.system(f"rm -rf {new_dir}/resources")
+
+os.system(f"touch {output_dir}/.nojekyll")
+
+# Open the index.html file in write mode
+with open(output_dir+"/index.html", "w") as index_file:
+
+ # Write the HTML header
+ index_file.write("\n\nDirectory Index\n\n\n")
+
+ # Write the title of the page
+ index_file.write("
Directory Index
\n")
+
+ # Write the list of subdirectories
+ index_file.write("
\n")
+ sub_dirs = os.listdir(output_dir)
+
+ # Sort the list of subdirectories in alphabetical order
+ sub_dirs.sort()
+
+ # Loop through the sorted subdirectories
+ for sub_dir in sub_dirs:
+
+ # Check if the subdirectory is a directory
+ if os.path.isdir(os.path.join(output_dir, sub_dir)):
+
+ # Write the subdirectory name and the link to frank.html
+ index_file.write(f"