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. +![PyPI - Downloads](https://img.shields.io/pypi/dm/raylib) -### 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 + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

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
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/README.html b/docs/README.html new file mode 100644 index 0000000..334577a --- /dev/null +++ b/docs/README.html @@ -0,0 +1,449 @@ + + + + + + + + + Python Bindings for Raylib 5.5 — Raylib Python documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

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

+

PyPI - Downloads

+

Chatroom: Discord

+

HELP WANTED: writing examples

+

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

+
+
+
+

Quickstart

+

pip3 install raylib==5.5.0.2 --break-system-packages

+
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 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

+
+
+
+

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

+

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.. If that works then submit an issue +to let us know what you did.

+

If you need help you can try asking on our discord. There is also a large Raylib discord +for issues that are not Python-specific.

+

If it still doesn’t work, submit an issue.

+
+
+
+

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.

+
+
+

If you prefer a more Pythonistic API

+

Use the pyray module.

+
+
+
+

Running in a web browser

+

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"
+# ]
+# ///
+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:

+
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.

+

It does work for most of these examples

+
+
+

App showcase

+

Tempest-raylib

+

KarabinerKeyboard

+

PyTaiko

+

DOOM-Clone

+

Tanki

+

Alloy Bloxel Editor

+

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

+
+
+

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. +
  3. 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.

  4. +
  5. 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.

  6. +
  7. 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

  8. +
+
+

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
+
+
+
+ + + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/RPI.html b/docs/RPI.html new file mode 100644 index 0000000..b54e020 --- /dev/null +++ b/docs/RPI.html @@ -0,0 +1,203 @@ + + + + + + + + + Raspberry Pi — Raylib Python documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

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.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ 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 + +![PyPI - Downloads](https://img.shields.io/pypi/dm/raylib) + +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 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t a.language.name.localeCompare(b.language.name)); + + const languagesHTML = ` +
+
Languages
+ ${languages + .map( + (translation) => ` +
+ ${translation.language.code} +
+ `, + ) + .join("\n")} +
+ `; + return languagesHTML; + } + + function renderVersions(config) { + if (!config.versions.active.length) { + return ""; + } + const versionsHTML = ` +
+
Versions
+ ${config.versions.active + .map( + (version) => ` +
+ ${version.slug} +
+ `, + ) + .join("\n")} +
+ `; + return versionsHTML; + } + + function renderDownloads(config) { + if (!Object.keys(config.versions.current.downloads).length) { + return ""; + } + const downloadsNameDisplay = { + pdf: "PDF", + epub: "Epub", + htmlzip: "HTML", + }; + + const downloadsHTML = ` +
+
Downloads
+ ${Object.entries(config.versions.current.downloads) + .map( + ([name, url]) => ` +
+ ${downloadsNameDisplay[name]} +
+ `, + ) + .join("\n")} +
+ `; + return downloadsHTML; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const flyout = ` +
+ + Read the Docs + v: ${config.versions.current.slug} + + +
+
+ ${renderLanguages(config)} + ${renderVersions(config)} + ${renderDownloads(config)} +
+
On Read the Docs
+
+ Project Home +
+
+ Builds +
+
+ Downloads +
+
+
+
Search
+
+
+ +
+
+
+
+ + Hosted by Read the Docs + +
+
+ `; + + // Inject the generated flyout into the body HTML element. + document.body.insertAdjacentHTML("beforeend", flyout); + + // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout. + document + .querySelector("#flyout-search-form") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); + }) +} + +if (themeLanguageSelector || themeVersionSelector) { + function onSelectorSwitch(event) { + const option = event.target.selectedIndex; + const item = event.target.options[option]; + window.location.href = item.dataset.url; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const versionSwitch = document.querySelector( + "div.switch-menus > div.version-switch", + ); + if (themeVersionSelector) { + let versions = config.versions.active; + if (config.versions.current.hidden || config.versions.current.type === "external") { + versions.unshift(config.versions.current); + } + const versionSelect = ` + + `; + + versionSwitch.innerHTML = versionSelect; + versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + + const languageSwitch = document.querySelector( + "div.switch-menus > div.language-switch", + ); + + if (themeLanguageSelector) { + if (config.projects.translations.length) { + // Add the current language to the options on the selector + let languages = config.projects.translations.concat( + config.projects.current, + ); + languages = languages.sort((a, b) => + a.language.name.localeCompare(b.language.name), + ); + + const languageSelect = ` + + `; + + languageSwitch.innerHTML = languageSelect; + languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + else { + languageSwitch.remove(); + } + } + }); +} + +document.addEventListener("readthedocs-addons-data-ready", function (event) { + // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav. + document + .querySelector("[role='search'] input") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); +}); \ No newline at end of file diff --git a/docs/_static/language_data.js b/docs/_static/language_data.js new file mode 100644 index 0000000..c7fe6c6 --- /dev/null +++ b/docs/_static/language_data.js @@ -0,0 +1,192 @@ +/* + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/docs/_static/minus.png b/docs/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/docs/_static/minus.png differ diff --git a/docs/_static/plus.png b/docs/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/docs/_static/plus.png differ diff --git a/docs/_static/pygments.css b/docs/_static/pygments.css new file mode 100644 index 0000000..5f2b0a2 --- /dev/null +++ b/docs/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #F00 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #FFF0F0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #F00 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333 } /* Generic.Output */ +.highlight .gp { color: #C65D09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #04D } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070A0 } /* Literal.String */ +.highlight .na { color: #4070A0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0E84B5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60ADD5 } /* Name.Constant */ +.highlight .nd { color: #555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #D55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287E } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0E84B5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #BB60D5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #BBB } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070A0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070A0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070A0 } /* Literal.String.Char */ +.highlight .dl { color: #4070A0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070A0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070A0 } /* Literal.String.Double */ +.highlight .se { color: #4070A0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070A0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70A0D0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #C65D09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070A0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287E } /* Name.Function.Magic */ +.highlight .vc { color: #BB60D5 } /* Name.Variable.Class */ +.highlight .vg { color: #BB60D5 } /* Name.Variable.Global */ +.highlight .vi { color: #BB60D5 } /* Name.Variable.Instance */ +.highlight .vm { color: #BB60D5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/_static/searchtools.js b/docs/_static/searchtools.js new file mode 100644 index 0000000..91f4be5 --- /dev/null +++ b/docs/_static/searchtools.js @@ -0,0 +1,635 @@ +/* + * Sphinx JavaScript utilities for the full-text search. + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename, kind] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +// Global search result kind enum, used by themes to style search results. +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename, kind] = item; + + let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + SearchResultKind.title, + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + SearchResultKind.object, + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + // find documents, if any, containing the query word in their text/title term indices + // use Object.hasOwnProperty to avoid mismatching against prototype properties + const arr = [ + { files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term }, + { files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, new Map()); + const fileScores = scoreMap.get(file); + fileScores.set(word, record.score); + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w))); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + SearchResultKind.text, + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/_static/sphinx_highlight.js b/docs/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/docs/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.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: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!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.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/dynamic.html b/docs/dynamic.html new file mode 100644 index 0000000..7329fb5 --- /dev/null +++ b/docs/dynamic.html @@ -0,0 +1,163 @@ + + + + + + + + + Dynamic Bindings — Raylib Python documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

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.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ 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

+ +
+ 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 + +
+

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

+ + + +
+ + + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..f065a86 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,151 @@ + + + + + + + + + Raylib Python — Raylib Python documentation + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/objects.inv b/docs/objects.inv new file mode 100644 index 0000000..d862a78 Binary files /dev/null and b/docs/objects.inv differ diff --git a/docs/py-modindex.html b/docs/py-modindex.html new file mode 100644 index 0000000..7da9054 --- /dev/null +++ b/docs/py-modindex.html @@ -0,0 +1,150 @@ + + + + + + + + Python Module Index — Raylib Python documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ p | + r +
+ + + + + + + + + + + + +
 
+ p
+ pyray +
 
+ r
+ raylib +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/pyray.html b/docs/pyray.html new file mode 100644 index 0000000..c3ba7ba --- /dev/null +++ b/docs/pyray.html @@ -0,0 +1,14665 @@ + + + + + + + + + Python API — Raylib Python documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

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 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:

+
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:

+
from pyray import *
+
+init_window(800, 450, "Raylib texture test")
+...
+
+
+
+

See all examples here

+
+
+

API reference

+
+
+class pyray.AudioStream(buffer: Any | None = None, processor: Any | None = None, sampleRate: int | None = None, sampleSize: int | None = None, channels: int | None = None)
+

AudioStream, custom audio stream.

+
+
+buffer: Any = None
+
+ +
+
+channels: int = None
+
+ +
+
+processor: Any = None
+
+ +
+
+sampleRate: int = None
+
+ +
+
+sampleSize: int = None
+
+ +
+ +
+
+class pyray.AutomationEvent(frame: int | None = None, type: int | None = None, params: list | None = None)
+

Automation event.

+
+
+frame: int = None
+
+ +
+
+params: list = None
+
+ +
+
+type: int = None
+
+ +
+ +
+
+class pyray.AutomationEventList(capacity: int | None = None, count: int | None = None, events: Any | None = None)
+

Automation event list.

+
+
+capacity: int = None
+
+ +
+
+count: int = None
+
+ +
+
+events: Any = None
+
+ +
+ +
+
+pyray.BEIGE: Color
+
+ +
+
+pyray.BLACK: Color
+
+ +
+
+pyray.BLANK: Color
+
+ +
+
+pyray.BLUE: Color
+
+ +
+
+pyray.BROWN: Color
+
+ +
+
+class pyray.BlendMode
+

Color blending modes (pre-defined).

+
+
+BLEND_ADDITIVE = 1
+
+ +
+
+BLEND_ADD_COLORS = 3
+
+ +
+
+BLEND_ALPHA = 0
+
+ +
+
+BLEND_ALPHA_PREMULTIPLY = 5
+
+ +
+
+BLEND_CUSTOM = 6
+
+ +
+
+BLEND_CUSTOM_SEPARATE = 7
+
+ +
+
+BLEND_MULTIPLIED = 2
+
+ +
+
+BLEND_SUBTRACT_COLORS = 4
+
+ +
+ +
+
+class pyray.BoneInfo(name: list | None = None, parent: int | None = None)
+

Bone, skeletal animation bone.

+
+
+name: list = None
+
+ +
+
+parent: int = None
+
+ +
+ +
+
+class pyray.BoundingBox(min: Vector3 | list | tuple | None = None, max: Vector3 | list | tuple | None = None)
+

BoundingBox.

+
+
+max: Vector3 = None
+
+ +
+
+min: Vector3 = None
+
+ +
+ +
+
+class pyray.Camera2D(offset: Vector2 | list | tuple | None = None, target: Vector2 | list | tuple | None = None, rotation: float | None = None, zoom: float | None = None)
+

Camera2D, defines position/orientation in 2d space.

+
+
+offset: Vector2 = None
+
+ +
+
+rotation: float = None
+
+ +
+
+target: Vector2 = None
+
+ +
+
+zoom: float = None
+
+ +
+ +
+
+class pyray.Camera3D(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)
+

Camera, defines position/orientation in 3d space.

+
+
+fovy: float = None
+
+ +
+
+position: Vector3 = None
+
+ +
+
+projection: int = None
+
+ +
+
+target: Vector3 = None
+
+ +
+
+up: Vector3 = None
+
+ +
+ +
+
+class pyray.CameraMode
+

Camera system modes.

+
+
+CAMERA_CUSTOM = 0
+
+ +
+
+CAMERA_FIRST_PERSON = 3
+
+ +
+
+CAMERA_FREE = 1
+
+ +
+
+CAMERA_ORBITAL = 2
+
+ +
+
+CAMERA_THIRD_PERSON = 4
+
+ +
+ +
+
+class pyray.CameraProjection
+

Camera projection.

+
+
+CAMERA_ORTHOGRAPHIC = 1
+
+ +
+
+CAMERA_PERSPECTIVE = 0
+
+ +
+ +
+
+class pyray.Color(r: int | None = None, g: int | None = None, b: int | None = None, a: int | None = None)
+

Color, 4 components, R8G8B8A8 (32bit).

+
+
+a: int = None
+
+ +
+
+b: int = None
+
+ +
+
+g: int = None
+
+ +
+
+r: int = None
+
+ +
+ +
+
+class pyray.ConfigFlags
+

System/Window config flags.

+
+
+FLAG_BORDERLESS_WINDOWED_MODE = 32768
+
+ +
+
+FLAG_FULLSCREEN_MODE = 2
+
+ +
+
+FLAG_INTERLACED_HINT = 65536
+
+ +
+
+FLAG_MSAA_4X_HINT = 32
+
+ +
+
+FLAG_VSYNC_HINT = 64
+
+ +
+
+FLAG_WINDOW_ALWAYS_RUN = 256
+
+ +
+
+FLAG_WINDOW_HIDDEN = 128
+
+ +
+
+FLAG_WINDOW_HIGHDPI = 8192
+
+ +
+
+FLAG_WINDOW_MAXIMIZED = 1024
+
+ +
+
+FLAG_WINDOW_MINIMIZED = 512
+
+ +
+
+FLAG_WINDOW_MOUSE_PASSTHROUGH = 16384
+
+ +
+
+FLAG_WINDOW_RESIZABLE = 4
+
+ +
+
+FLAG_WINDOW_TOPMOST = 4096
+
+ +
+
+FLAG_WINDOW_TRANSPARENT = 16
+
+ +
+
+FLAG_WINDOW_UNDECORATED = 8
+
+ +
+
+FLAG_WINDOW_UNFOCUSED = 2048
+
+ +
+ +
+
+class pyray.CubemapLayout
+

Cubemap layouts.

+
+
+CUBEMAP_LAYOUT_AUTO_DETECT = 0
+
+ +
+
+CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE = 4
+
+ +
+
+CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR = 3
+
+ +
+
+CUBEMAP_LAYOUT_LINE_HORIZONTAL = 2
+
+ +
+
+CUBEMAP_LAYOUT_LINE_VERTICAL = 1
+
+ +
+ +
+
+pyray.DARKBLUE: Color
+
+ +
+
+pyray.DARKBROWN: Color
+
+ +
+
+pyray.DARKGRAY: Color
+
+ +
+
+pyray.DARKGREEN: Color
+
+ +
+
+pyray.DARKPURPLE: Color
+
+ +
+
+class pyray.FilePathList(capacity: int | None = None, count: int | None = None, paths: list[str] | None = None)
+

File path list.

+
+
+capacity: int = None
+
+ +
+
+count: int = None
+
+ +
+
+paths: list[str] = None
+
+ +
+ +
+
+class pyray.Font(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)
+

Font, font texture and GlyphInfo array data.

+
+
+baseSize: int = None
+
+ +
+
+glyphCount: int = None
+
+ +
+
+glyphPadding: int = None
+
+ +
+
+glyphs: Any = None
+
+ +
+
+recs: Any = None
+
+ +
+
+texture: Texture = None
+
+ +
+ +
+
+class pyray.FontType
+

Font type, defines generation method.

+
+
+FONT_BITMAP = 1
+
+ +
+
+FONT_DEFAULT = 0
+
+ +
+
+FONT_SDF = 2
+
+ +
+ +
+
+pyray.GOLD: Color
+
+ +
+
+pyray.GRAY: Color
+
+ +
+
+pyray.GREEN: Color
+
+ +
+
+class pyray.GamepadAxis
+

Gamepad axis.

+
+
+GAMEPAD_AXIS_LEFT_TRIGGER = 4
+
+ +
+
+GAMEPAD_AXIS_LEFT_X = 0
+
+ +
+
+GAMEPAD_AXIS_LEFT_Y = 1
+
+ +
+
+GAMEPAD_AXIS_RIGHT_TRIGGER = 5
+
+ +
+
+GAMEPAD_AXIS_RIGHT_X = 2
+
+ +
+
+GAMEPAD_AXIS_RIGHT_Y = 3
+
+ +
+ +
+
+class pyray.GamepadButton
+

Gamepad buttons.

+
+
+GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3
+
+ +
+
+GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4
+
+ +
+
+GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2
+
+ +
+
+GAMEPAD_BUTTON_LEFT_FACE_UP = 1
+
+ +
+
+GAMEPAD_BUTTON_LEFT_THUMB = 16
+
+ +
+
+GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9
+
+ +
+
+GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10
+
+ +
+
+GAMEPAD_BUTTON_MIDDLE = 14
+
+ +
+
+GAMEPAD_BUTTON_MIDDLE_LEFT = 13
+
+ +
+
+GAMEPAD_BUTTON_MIDDLE_RIGHT = 15
+
+ +
+
+GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7
+
+ +
+
+GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8
+
+ +
+
+GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6
+
+ +
+
+GAMEPAD_BUTTON_RIGHT_FACE_UP = 5
+
+ +
+
+GAMEPAD_BUTTON_RIGHT_THUMB = 17
+
+ +
+
+GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11
+
+ +
+
+GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12
+
+ +
+
+GAMEPAD_BUTTON_UNKNOWN = 0
+
+ +
+ +
+
+class pyray.Gesture
+

Gesture.

+
+
+GESTURE_DOUBLETAP = 2
+
+ +
+
+GESTURE_DRAG = 8
+
+ +
+
+GESTURE_HOLD = 4
+
+ +
+
+GESTURE_NONE = 0
+
+ +
+
+GESTURE_PINCH_IN = 256
+
+ +
+
+GESTURE_PINCH_OUT = 512
+
+ +
+
+GESTURE_SWIPE_DOWN = 128
+
+ +
+
+GESTURE_SWIPE_LEFT = 32
+
+ +
+
+GESTURE_SWIPE_RIGHT = 16
+
+ +
+
+GESTURE_SWIPE_UP = 64
+
+ +
+
+GESTURE_TAP = 1
+
+ +
+ +
+
+class pyray.GlyphInfo(value: int | None = None, offsetX: int | None = None, offsetY: int | None = None, advanceX: int | None = None, image: Image | list | tuple | None = None)
+

GlyphInfo, font characters glyphs info.

+
+
+advanceX: int = None
+
+ +
+
+image: Image = None
+
+ +
+
+offsetX: int = None
+
+ +
+
+offsetY: int = None
+
+ +
+
+value: int = None
+
+ +
+ +
+
+class pyray.GuiCheckBoxProperty
+

CheckBox.

+
+
+CHECK_PADDING = 16
+
+ +
+ +
+
+class pyray.GuiColorPickerProperty
+

ColorPicker.

+
+
+COLOR_SELECTOR_SIZE = 16
+
+ +
+
+HUEBAR_PADDING = 18
+
+ +
+
+HUEBAR_SELECTOR_HEIGHT = 19
+
+ +
+
+HUEBAR_SELECTOR_OVERFLOW = 20
+
+ +
+
+HUEBAR_WIDTH = 17
+
+ +
+ +
+
+class pyray.GuiComboBoxProperty
+

ComboBox.

+
+
+COMBO_BUTTON_SPACING = 17
+
+ +
+
+COMBO_BUTTON_WIDTH = 16
+
+ +
+ +
+
+class pyray.GuiControl
+

Gui controls.

+
+
+BUTTON = 2
+
+ +
+
+CHECKBOX = 6
+
+ +
+
+COLORPICKER = 13
+
+ +
+
+COMBOBOX = 7
+
+ +
+
+DEFAULT = 0
+
+ +
+
+DROPDOWNBOX = 8
+
+ +
+
+LABEL = 1
+
+ +
+
+LISTVIEW = 12
+
+ +
+
+PROGRESSBAR = 5
+
+ +
+
+SCROLLBAR = 14
+
+ +
+
+SLIDER = 4
+
+ +
+
+SPINNER = 11
+
+ +
+
+STATUSBAR = 15
+
+ +
+
+TEXTBOX = 9
+
+ +
+
+TOGGLE = 3
+
+ +
+
+VALUEBOX = 10
+
+ +
+ +
+
+class pyray.GuiControlProperty
+

Gui base properties for every control.

+
+
+BASE_COLOR_DISABLED = 10
+
+ +
+
+BASE_COLOR_FOCUSED = 4
+
+ +
+
+BASE_COLOR_NORMAL = 1
+
+ +
+
+BASE_COLOR_PRESSED = 7
+
+ +
+
+BORDER_COLOR_DISABLED = 9
+
+ +
+
+BORDER_COLOR_FOCUSED = 3
+
+ +
+
+BORDER_COLOR_NORMAL = 0
+
+ +
+
+BORDER_COLOR_PRESSED = 6
+
+ +
+
+BORDER_WIDTH = 12
+
+ +
+
+TEXT_ALIGNMENT = 14
+
+ +
+
+TEXT_COLOR_DISABLED = 11
+
+ +
+
+TEXT_COLOR_FOCUSED = 5
+
+ +
+
+TEXT_COLOR_NORMAL = 2
+
+ +
+
+TEXT_COLOR_PRESSED = 8
+
+ +
+
+TEXT_PADDING = 13
+
+ +
+ +
+
+class pyray.GuiDefaultProperty
+

DEFAULT extended properties.

+
+
+BACKGROUND_COLOR = 19
+
+ +
+
+LINE_COLOR = 18
+
+ +
+
+TEXT_ALIGNMENT_VERTICAL = 21
+
+ +
+
+TEXT_LINE_SPACING = 20
+
+ +
+
+TEXT_SIZE = 16
+
+ +
+
+TEXT_SPACING = 17
+
+ +
+
+TEXT_WRAP_MODE = 22
+
+ +
+ +
+
+class pyray.GuiDropdownBoxProperty
+

DropdownBox.

+
+
+ARROW_PADDING = 16
+
+ +
+
+DROPDOWN_ARROW_HIDDEN = 18
+
+ +
+
+DROPDOWN_ITEMS_SPACING = 17
+
+ +
+
+DROPDOWN_ROLL_UP = 19
+
+ +
+ +
+
+class pyray.GuiIconName
+

.

+
+
+ICON_1UP = 148
+
+ +
+
+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
+
+ +
+
+ICON_ALARM = 205
+
+ +
+
+ICON_ALPHA_CLEAR = 93
+
+ +
+
+ICON_ALPHA_MULTIPLY = 92
+
+ +
+
+ICON_ARROW_DOWN = 116
+
+ +
+
+ICON_ARROW_DOWN_FILL = 120
+
+ +
+
+ICON_ARROW_LEFT = 114
+
+ +
+
+ICON_ARROW_LEFT_FILL = 118
+
+ +
+
+ICON_ARROW_RIGHT = 115
+
+ +
+
+ICON_ARROW_RIGHT_FILL = 119
+
+ +
+
+ICON_ARROW_UP = 117
+
+ +
+
+ICON_ARROW_UP_FILL = 121
+
+ +
+
+ICON_AUDIO = 122
+
+ +
+
+ICON_BIN = 143
+
+ +
+
+ICON_BOX = 80
+
+ +
+
+ICON_BOX_BOTTOM = 85
+
+ +
+
+ICON_BOX_BOTTOM_LEFT = 86
+
+ +
+
+ICON_BOX_BOTTOM_RIGHT = 84
+
+ +
+
+ICON_BOX_CENTER = 89
+
+ +
+
+ICON_BOX_CIRCLE_MASK = 90
+
+ +
+
+ICON_BOX_CONCENTRIC = 110
+
+ +
+
+ICON_BOX_CORNERS_BIG = 99
+
+ +
+
+ICON_BOX_CORNERS_SMALL = 98
+
+ +
+
+ICON_BOX_DOTS_BIG = 109
+
+ +
+
+ICON_BOX_DOTS_SMALL = 108
+
+ +
+
+ICON_BOX_GRID = 96
+
+ +
+
+ICON_BOX_GRID_BIG = 111
+
+ +
+
+ICON_BOX_LEFT = 87
+
+ +
+
+ICON_BOX_MULTISIZE = 102
+
+ +
+
+ICON_BOX_RIGHT = 83
+
+ +
+
+ICON_BOX_TOP = 81
+
+ +
+
+ICON_BOX_TOP_LEFT = 88
+
+ +
+
+ICON_BOX_TOP_RIGHT = 82
+
+ +
+
+ICON_BREAKPOINT_OFF = 213
+
+ +
+
+ICON_BREAKPOINT_ON = 212
+
+ +
+
+ICON_BRUSH_CLASSIC = 24
+
+ +
+
+ICON_BRUSH_PAINTER = 25
+
+ +
+
+ICON_BURGER_MENU = 214
+
+ +
+
+ICON_CAMERA = 169
+
+ +
+
+ICON_CASE_SENSITIVE = 215
+
+ +
+
+ICON_CLOCK = 139
+
+ +
+
+ICON_COIN = 146
+
+ +
+
+ICON_COLOR_BUCKET = 29
+
+ +
+
+ICON_COLOR_PICKER = 27
+
+ +
+
+ICON_CORNER = 187
+
+ +
+
+ICON_CPU = 206
+
+ +
+
+ICON_CRACK = 155
+
+ +
+
+ICON_CRACK_POINTS = 156
+
+ +
+
+ICON_CROP = 36
+
+ +
+
+ICON_CROP_ALPHA = 37
+
+ +
+
+ICON_CROSS = 113
+
+ +
+
+ICON_CROSSLINE = 192
+
+ +
+
+ICON_CROSS_SMALL = 128
+
+ +
+
+ICON_CUBE = 162
+
+ +
+
+ICON_CUBE_FACE_BACK = 168
+
+ +
+
+ICON_CUBE_FACE_BOTTOM = 166
+
+ +
+
+ICON_CUBE_FACE_FRONT = 165
+
+ +
+
+ICON_CUBE_FACE_LEFT = 164
+
+ +
+
+ICON_CUBE_FACE_RIGHT = 167
+
+ +
+
+ICON_CUBE_FACE_TOP = 163
+
+ +
+
+ICON_CURSOR_CLASSIC = 21
+
+ +
+
+ICON_CURSOR_HAND = 19
+
+ +
+
+ICON_CURSOR_MOVE = 52
+
+ +
+
+ICON_CURSOR_MOVE_FILL = 68
+
+ +
+
+ICON_CURSOR_POINTER = 20
+
+ +
+
+ICON_CURSOR_SCALE = 53
+
+ +
+
+ICON_CURSOR_SCALE_FILL = 69
+
+ +
+
+ICON_CURSOR_SCALE_LEFT = 55
+
+ +
+
+ICON_CURSOR_SCALE_LEFT_FILL = 71
+
+ +
+
+ICON_CURSOR_SCALE_RIGHT = 54
+
+ +
+
+ICON_CURSOR_SCALE_RIGHT_FILL = 70
+
+ +
+
+ICON_DEMON = 152
+
+ +
+
+ICON_DITHERING = 94
+
+ +
+
+ICON_DOOR = 158
+
+ +
+
+ICON_EMPTYBOX = 63
+
+ +
+
+ICON_EMPTYBOX_SMALL = 79
+
+ +
+
+ICON_EXIT = 159
+
+ +
+
+ICON_EXPLOSION = 147
+
+ +
+
+ICON_EYE_OFF = 45
+
+ +
+
+ICON_EYE_ON = 44
+
+ +
+
+ICON_FILE = 218
+
+ +
+
+ICON_FILETYPE_ALPHA = 194
+
+ +
+
+ICON_FILETYPE_AUDIO = 11
+
+ +
+
+ICON_FILETYPE_BINARY = 200
+
+ +
+
+ICON_FILETYPE_HOME = 195
+
+ +
+
+ICON_FILETYPE_IMAGE = 12
+
+ +
+
+ICON_FILETYPE_INFO = 15
+
+ +
+
+ICON_FILETYPE_PLAY = 13
+
+ +
+
+ICON_FILETYPE_TEXT = 10
+
+ +
+
+ICON_FILETYPE_VIDEO = 14
+
+ +
+
+ICON_FILE_ADD = 8
+
+ +
+
+ICON_FILE_COPY = 16
+
+ +
+
+ICON_FILE_CUT = 17
+
+ +
+
+ICON_FILE_DELETE = 9
+
+ +
+
+ICON_FILE_EXPORT = 7
+
+ +
+
+ICON_FILE_NEW = 203
+
+ +
+
+ICON_FILE_OPEN = 5
+
+ +
+
+ICON_FILE_PASTE = 18
+
+ +
+
+ICON_FILE_SAVE = 6
+
+ +
+
+ICON_FILE_SAVE_CLASSIC = 2
+
+ +
+
+ICON_FILTER = 47
+
+ +
+
+ICON_FILTER_BILINEAR = 35
+
+ +
+
+ICON_FILTER_POINT = 34
+
+ +
+
+ICON_FILTER_TOP = 46
+
+ +
+
+ICON_FOLDER = 217
+
+ +
+
+ICON_FOLDER_ADD = 204
+
+ +
+
+ICON_FOLDER_FILE_OPEN = 1
+
+ +
+
+ICON_FOLDER_OPEN = 3
+
+ +
+
+ICON_FOLDER_SAVE = 4
+
+ +
+
+ICON_FOUR_BOXES = 100
+
+ +
+
+ICON_FX = 123
+
+ +
+
+ICON_GEAR = 141
+
+ +
+
+ICON_GEAR_BIG = 142
+
+ +
+
+ICON_GEAR_EX = 154
+
+ +
+
+ICON_GRID = 97
+
+ +
+
+ICON_GRID_FILL = 101
+
+ +
+
+ICON_HAND_POINTER = 144
+
+ +
+
+ICON_HEART = 186
+
+ +
+
+ICON_HELP = 193
+
+ +
+
+ICON_HELP_BOX = 221
+
+ +
+
+ICON_HEX = 201
+
+ +
+
+ICON_HIDPI = 199
+
+ +
+
+ICON_HOT = 228
+
+ +
+
+ICON_HOUSE = 185
+
+ +
+
+ICON_INFO = 191
+
+ +
+
+ICON_INFO_BOX = 222
+
+ +
+
+ICON_KEY = 151
+
+ +
+
+ICON_LASER = 145
+
+ +
+
+ICON_LAYERS = 197
+
+ +
+
+ICON_LAYERS2 = 225
+
+ +
+
+ICON_LAYERS_ISO = 224
+
+ +
+
+ICON_LAYERS_VISIBLE = 196
+
+ +
+
+ICON_LENS = 42
+
+ +
+
+ICON_LENS_BIG = 43
+
+ +
+
+ICON_LIFE_BARS = 190
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ICON_LOCK_CLOSE = 137
+
+ +
+
+ICON_LOCK_OPEN = 138
+
+ +
+
+ICON_MAGNET = 136
+
+ +
+
+ICON_MAILBOX = 180
+
+ +
+
+ICON_MAPS = 227
+
+ +
+
+ICON_MIPMAPS = 95
+
+ +
+
+ICON_MLAYERS = 226
+
+ +
+
+ICON_MODE_2D = 160
+
+ +
+
+ICON_MODE_3D = 161
+
+ +
+
+ICON_MONITOR = 181
+
+ +
+
+ICON_MUTATE = 59
+
+ +
+
+ICON_MUTATE_FILL = 75
+
+ +
+
+ICON_NONE = 0
+
+ +
+
+ICON_NOTEBOOK = 177
+
+ +
+
+ICON_OK_TICK = 112
+
+ +
+
+ICON_PENCIL = 22
+
+ +
+
+ICON_PENCIL_BIG = 23
+
+ +
+
+ICON_PHOTO_CAMERA = 183
+
+ +
+
+ICON_PHOTO_CAMERA_FLASH = 184
+
+ +
+
+ICON_PLAYER = 149
+
+ +
+
+ICON_PLAYER_JUMP = 150
+
+ +
+
+ICON_PLAYER_NEXT = 134
+
+ +
+
+ICON_PLAYER_PAUSE = 132
+
+ +
+
+ICON_PLAYER_PLAY = 131
+
+ +
+
+ICON_PLAYER_PLAY_BACK = 130
+
+ +
+
+ICON_PLAYER_PREVIOUS = 129
+
+ +
+
+ICON_PLAYER_RECORD = 135
+
+ +
+
+ICON_PLAYER_STOP = 133
+
+ +
+
+ICON_POT = 91
+
+ +
+
+ICON_PRINTER = 182
+
+ +
+
+ICON_PRIORITY = 223
+
+ +
+
+ICON_REDO = 57
+
+ +
+
+ICON_REDO_FILL = 73
+
+ +
+
+ICON_REG_EXP = 216
+
+ +
+
+ICON_REPEAT = 61
+
+ +
+
+ICON_REPEAT_FILL = 77
+
+ +
+
+ICON_REREDO = 58
+
+ +
+
+ICON_REREDO_FILL = 74
+
+ +
+
+ICON_RESIZE = 33
+
+ +
+
+ICON_RESTART = 211
+
+ +
+
+ICON_ROM = 207
+
+ +
+
+ICON_ROTATE = 60
+
+ +
+
+ICON_ROTATE_FILL = 76
+
+ +
+
+ICON_RUBBER = 28
+
+ +
+
+ICON_SAND_TIMER = 219
+
+ +
+
+ICON_SCALE = 32
+
+ +
+
+ICON_SHIELD = 202
+
+ +
+
+ICON_SHUFFLE = 62
+
+ +
+
+ICON_SHUFFLE_FILL = 78
+
+ +
+
+ICON_SPECIAL = 170
+
+ +
+
+ICON_SQUARE_TOGGLE = 38
+
+ +
+
+ICON_STAR = 157
+
+ +
+
+ICON_STEP_INTO = 209
+
+ +
+
+ICON_STEP_OUT = 210
+
+ +
+
+ICON_STEP_OVER = 208
+
+ +
+
+ICON_SUITCASE = 178
+
+ +
+
+ICON_SUITCASE_ZIP = 179
+
+ +
+
+ICON_SYMMETRY = 39
+
+ +
+
+ICON_SYMMETRY_HORIZONTAL = 40
+
+ +
+
+ICON_SYMMETRY_VERTICAL = 41
+
+ +
+
+ICON_TARGET = 64
+
+ +
+
+ICON_TARGET_BIG = 50
+
+ +
+
+ICON_TARGET_BIG_FILL = 66
+
+ +
+
+ICON_TARGET_MOVE = 51
+
+ +
+
+ICON_TARGET_MOVE_FILL = 67
+
+ +
+
+ICON_TARGET_POINT = 48
+
+ +
+
+ICON_TARGET_SMALL = 49
+
+ +
+
+ICON_TARGET_SMALL_FILL = 65
+
+ +
+
+ICON_TEXT_A = 31
+
+ +
+
+ICON_TEXT_NOTES = 176
+
+ +
+
+ICON_TEXT_POPUP = 153
+
+ +
+
+ICON_TEXT_T = 30
+
+ +
+
+ICON_TOOLS = 140
+
+ +
+
+ICON_UNDO = 56
+
+ +
+
+ICON_UNDO_FILL = 72
+
+ +
+
+ICON_VERTICAL_BARS = 188
+
+ +
+
+ICON_VERTICAL_BARS_FILL = 189
+
+ +
+
+ICON_WARNING = 220
+
+ +
+
+ICON_WATER_DROP = 26
+
+ +
+
+ICON_WAVE = 124
+
+ +
+
+ICON_WAVE_SINUS = 125
+
+ +
+
+ICON_WAVE_SQUARE = 126
+
+ +
+
+ICON_WAVE_TRIANGULAR = 127
+
+ +
+
+ICON_WINDOW = 198
+
+ +
+
+ICON_ZOOM_ALL = 106
+
+ +
+
+ICON_ZOOM_BIG = 105
+
+ +
+
+ICON_ZOOM_CENTER = 107
+
+ +
+
+ICON_ZOOM_MEDIUM = 104
+
+ +
+
+ICON_ZOOM_SMALL = 103
+
+ +
+ +
+
+class pyray.GuiListViewProperty
+

ListView.

+
+
+LIST_ITEMS_BORDER_WIDTH = 20
+
+ +
+
+LIST_ITEMS_HEIGHT = 16
+
+ +
+
+LIST_ITEMS_SPACING = 17
+
+ +
+
+SCROLLBAR_SIDE = 19
+
+ +
+
+SCROLLBAR_WIDTH = 18
+
+ +
+ +
+
+class pyray.GuiProgressBarProperty
+

ProgressBar.

+
+
+PROGRESS_PADDING = 16
+
+ +
+ +
+
+class pyray.GuiScrollBarProperty
+

ScrollBar.

+
+
+ARROWS_SIZE = 16
+
+ +
+
+ARROWS_VISIBLE = 17
+
+ +
+
+SCROLL_PADDING = 20
+
+ +
+
+SCROLL_SLIDER_PADDING = 18
+
+ +
+
+SCROLL_SLIDER_SIZE = 19
+
+ +
+
+SCROLL_SPEED = 21
+
+ +
+ +
+
+class pyray.GuiSliderProperty
+

Slider/SliderBar.

+
+
+SLIDER_PADDING = 17
+
+ +
+
+SLIDER_WIDTH = 16
+
+ +
+ +
+
+class pyray.GuiSpinnerProperty
+

Spinner.

+
+
+SPIN_BUTTON_SPACING = 17
+
+ +
+
+SPIN_BUTTON_WIDTH = 16
+
+ +
+ +
+
+class pyray.GuiState
+

Gui control state.

+
+
+STATE_DISABLED = 3
+
+ +
+
+STATE_FOCUSED = 1
+
+ +
+
+STATE_NORMAL = 0
+
+ +
+
+STATE_PRESSED = 2
+
+ +
+ +
+
+class pyray.GuiStyleProp(controlId: int | None = None, propertyId: int | None = None, propertyValue: int | None = None)
+

NOTE: Used when exporting style as code for convenience.

+
+
+controlId: int = None
+
+ +
+
+propertyId: int = None
+
+ +
+
+propertyValue: int = None
+
+ +
+ +
+
+class pyray.GuiTextAlignment
+

Gui control text alignment.

+
+
+TEXT_ALIGN_CENTER = 1
+
+ +
+
+TEXT_ALIGN_LEFT = 0
+
+ +
+
+TEXT_ALIGN_RIGHT = 2
+
+ +
+ +
+
+class pyray.GuiTextAlignmentVertical
+

Gui control text alignment vertical.

+
+
+TEXT_ALIGN_BOTTOM = 2
+
+ +
+
+TEXT_ALIGN_MIDDLE = 1
+
+ +
+
+TEXT_ALIGN_TOP = 0
+
+ +
+ +
+
+class pyray.GuiTextBoxProperty
+

TextBox/TextBoxMulti/ValueBox/Spinner.

+
+
+TEXT_READONLY = 16
+
+ +
+ +
+
+class pyray.GuiTextWrapMode
+

Gui control text wrap mode.

+
+
+TEXT_WRAP_CHAR = 1
+
+ +
+
+TEXT_WRAP_NONE = 0
+
+ +
+
+TEXT_WRAP_WORD = 2
+
+ +
+ +
+
+class pyray.GuiToggleProperty
+

Toggle/ToggleGroup.

+
+
+GROUP_PADDING = 16
+
+ +
+ +
+
+class pyray.Image(data: Any | None = None, width: int | None = None, height: int | None = None, mipmaps: int | None = None, format: int | None = None)
+

Image, pixel data stored in CPU memory (RAM).

+
+
+data: Any = None
+
+ +
+
+format: int = None
+
+ +
+
+height: int = None
+
+ +
+
+mipmaps: int = None
+
+ +
+
+width: int = None
+
+ +
+ +
+
+class pyray.KeyboardKey
+

Keyboard keys (US keyboard layout).

+
+
+KEY_A = 65
+
+ +
+
+KEY_APOSTROPHE = 39
+
+ +
+
+KEY_B = 66
+
+ +
+
+KEY_BACK = 4
+
+ +
+
+KEY_BACKSLASH = 92
+
+ +
+
+KEY_BACKSPACE = 259
+
+ +
+
+KEY_C = 67
+
+ +
+
+KEY_CAPS_LOCK = 280
+
+ +
+
+KEY_COMMA = 44
+
+ +
+
+KEY_D = 68
+
+ +
+
+KEY_DELETE = 261
+
+ +
+
+KEY_DOWN = 264
+
+ +
+
+KEY_E = 69
+
+ +
+
+KEY_EIGHT = 56
+
+ +
+
+KEY_END = 269
+
+ +
+
+KEY_ENTER = 257
+
+ +
+
+KEY_EQUAL = 61
+
+ +
+
+KEY_ESCAPE = 256
+
+ +
+
+KEY_F = 70
+
+ +
+
+KEY_F1 = 290
+
+ +
+
+KEY_F10 = 299
+
+ +
+
+KEY_F11 = 300
+
+ +
+
+KEY_F12 = 301
+
+ +
+
+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_FIVE = 53
+
+ +
+
+KEY_FOUR = 52
+
+ +
+
+KEY_G = 71
+
+ +
+
+KEY_GRAVE = 96
+
+ +
+
+KEY_H = 72
+
+ +
+
+KEY_HOME = 268
+
+ +
+
+KEY_I = 73
+
+ +
+
+KEY_INSERT = 260
+
+ +
+
+KEY_J = 74
+
+ +
+
+KEY_K = 75
+
+ +
+
+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_ADD = 334
+
+ +
+
+KEY_KP_DECIMAL = 330
+
+ +
+
+KEY_KP_DIVIDE = 331
+
+ +
+
+KEY_KP_ENTER = 335
+
+ +
+
+KEY_KP_EQUAL = 336
+
+ +
+
+KEY_KP_MULTIPLY = 332
+
+ +
+
+KEY_KP_SUBTRACT = 333
+
+ +
+
+KEY_L = 76
+
+ +
+
+KEY_LEFT = 263
+
+ +
+
+KEY_LEFT_ALT = 342
+
+ +
+
+KEY_LEFT_BRACKET = 91
+
+ +
+
+KEY_LEFT_CONTROL = 341
+
+ +
+
+KEY_LEFT_SHIFT = 340
+
+ +
+
+KEY_LEFT_SUPER = 343
+
+ +
+
+KEY_M = 77
+
+ +
+
+KEY_MENU = 5
+
+ +
+
+KEY_MINUS = 45
+
+ +
+
+KEY_N = 78
+
+ +
+
+KEY_NINE = 57
+
+ +
+
+KEY_NULL = 0
+
+ +
+
+KEY_NUM_LOCK = 282
+
+ +
+
+KEY_O = 79
+
+ +
+
+KEY_ONE = 49
+
+ +
+
+KEY_P = 80
+
+ +
+
+KEY_PAGE_DOWN = 267
+
+ +
+
+KEY_PAGE_UP = 266
+
+ +
+
+KEY_PAUSE = 284
+
+ +
+
+KEY_PERIOD = 46
+
+ +
+
+KEY_PRINT_SCREEN = 283
+
+ +
+
+KEY_Q = 81
+
+ +
+
+KEY_R = 82
+
+ +
+
+KEY_RIGHT = 262
+
+ +
+
+KEY_RIGHT_ALT = 346
+
+ +
+
+KEY_RIGHT_BRACKET = 93
+
+ +
+
+KEY_RIGHT_CONTROL = 345
+
+ +
+
+KEY_RIGHT_SHIFT = 344
+
+ +
+
+KEY_RIGHT_SUPER = 347
+
+ +
+
+KEY_S = 83
+
+ +
+
+KEY_SCROLL_LOCK = 281
+
+ +
+
+KEY_SEMICOLON = 59
+
+ +
+
+KEY_SEVEN = 55
+
+ +
+
+KEY_SIX = 54
+
+ +
+
+KEY_SLASH = 47
+
+ +
+
+KEY_SPACE = 32
+
+ +
+
+KEY_T = 84
+
+ +
+
+KEY_TAB = 258
+
+ +
+
+KEY_THREE = 51
+
+ +
+
+KEY_TWO = 50
+
+ +
+
+KEY_U = 85
+
+ +
+
+KEY_UP = 265
+
+ +
+
+KEY_V = 86
+
+ +
+
+KEY_VOLUME_DOWN = 25
+
+ +
+
+KEY_VOLUME_UP = 24
+
+ +
+
+KEY_W = 87
+
+ +
+
+KEY_X = 88
+
+ +
+
+KEY_Y = 89
+
+ +
+
+KEY_Z = 90
+
+ +
+
+KEY_ZERO = 48
+
+ +
+ +
+
+pyray.LIGHTGRAY: Color
+
+ +
+
+pyray.LIME: Color
+
+ +
+
+pyray.MAGENTA: Color
+
+ +
+
+pyray.MAROON: Color
+
+ +
+
+class pyray.Material(shader: Shader | list | tuple | None = None, maps: Any | None = None, params: list | None = None)
+

Material, includes shader and maps.

+
+
+maps: Any = None
+
+ +
+
+params: list = None
+
+ +
+
+shader: Shader = None
+
+ +
+ +
+
+class pyray.MaterialMap(texture: Texture | list | tuple | None = None, color: Color | list | tuple | None = None, value: float | None = None)
+

MaterialMap.

+
+
+color: Color = None
+
+ +
+
+texture: Texture = None
+
+ +
+
+value: float = None
+
+ +
+ +
+
+class pyray.MaterialMapIndex
+

Material map index.

+
+
+MATERIAL_MAP_ALBEDO = 0
+
+ +
+
+MATERIAL_MAP_BRDF = 10
+
+ +
+
+MATERIAL_MAP_CUBEMAP = 7
+
+ +
+
+MATERIAL_MAP_EMISSION = 5
+
+ +
+
+MATERIAL_MAP_HEIGHT = 6
+
+ +
+
+MATERIAL_MAP_IRRADIANCE = 8
+
+ +
+
+MATERIAL_MAP_METALNESS = 1
+
+ +
+
+MATERIAL_MAP_NORMAL = 2
+
+ +
+
+MATERIAL_MAP_OCCLUSION = 4
+
+ +
+
+MATERIAL_MAP_PREFILTER = 9
+
+ +
+
+MATERIAL_MAP_ROUGHNESS = 3
+
+ +
+ +
+
+class pyray.Matrix(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)
+

Matrix, 4x4 components, column major, OpenGL style, right-handed.

+
+
+m0: float = None
+
+ +
+
+m1: float = None
+
+ +
+
+m10: float = None
+
+ +
+
+m11: float = None
+
+ +
+
+m12: float = None
+
+ +
+
+m13: float = None
+
+ +
+
+m14: float = None
+
+ +
+
+m15: float = None
+
+ +
+
+m2: float = None
+
+ +
+
+m3: float = None
+
+ +
+
+m4: float = None
+
+ +
+
+m5: float = None
+
+ +
+
+m6: float = None
+
+ +
+
+m7: float = None
+
+ +
+
+m8: float = None
+
+ +
+
+m9: float = None
+
+ +
+ +
+
+class pyray.Matrix2x2(m00: float | None = None, m01: float | None = None, m10: float | None = None, m11: float | None = None)
+

Matrix2x2 type (used for polygon shape rotation matrix).

+
+
+m00: float = None
+
+ +
+
+m01: float = None
+
+ +
+
+m10: float = None
+
+ +
+
+m11: float = None
+
+ +
+ +
+
+class pyray.Mesh(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)
+

Mesh, vertex data and vao/vbo.

+
+
+animNormals: Any = None
+
+ +
+
+animVertices: Any = None
+
+ +
+
+boneCount: int = None
+
+ +
+
+boneIds: str = None
+
+ +
+
+boneMatrices: Any = None
+
+ +
+
+boneWeights: Any = None
+
+ +
+
+colors: str = None
+
+ +
+
+indices: Any = None
+
+ +
+
+normals: Any = None
+
+ +
+
+tangents: Any = None
+
+ +
+
+texcoords: Any = None
+
+ +
+
+texcoords2: Any = None
+
+ +
+
+triangleCount: int = None
+
+ +
+
+vaoId: int = None
+
+ +
+
+vboId: Any = None
+
+ +
+
+vertexCount: int = None
+
+ +
+
+vertices: Any = None
+
+ +
+ +
+
+class pyray.Model(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)
+

Model, meshes, materials and animation data.

+
+
+bindPose: Any = None
+
+ +
+
+boneCount: int = None
+
+ +
+
+bones: Any = None
+
+ +
+
+materialCount: int = None
+
+ +
+
+materials: Any = None
+
+ +
+
+meshCount: int = None
+
+ +
+
+meshMaterial: Any = None
+
+ +
+
+meshes: Any = None
+
+ +
+
+transform: Matrix = None
+
+ +
+ +
+
+class pyray.ModelAnimation(boneCount: int | None = None, frameCount: int | None = None, bones: Any | None = None, framePoses: Any | None = None, name: list | None = None)
+

ModelAnimation.

+
+
+boneCount: int = None
+
+ +
+
+bones: Any = None
+
+ +
+
+frameCount: int = None
+
+ +
+
+framePoses: Any = None
+
+ +
+
+name: list = None
+
+ +
+ +
+
+class pyray.MouseButton
+

Mouse buttons.

+
+
+MOUSE_BUTTON_BACK = 6
+
+ +
+
+MOUSE_BUTTON_EXTRA = 4
+
+ +
+
+MOUSE_BUTTON_FORWARD = 5
+
+ +
+
+MOUSE_BUTTON_LEFT = 0
+
+ +
+
+MOUSE_BUTTON_MIDDLE = 2
+
+ +
+
+MOUSE_BUTTON_RIGHT = 1
+
+ +
+
+MOUSE_BUTTON_SIDE = 3
+
+ +
+ +
+
+class pyray.MouseCursor
+

Mouse cursor.

+
+
+MOUSE_CURSOR_ARROW = 1
+
+ +
+
+MOUSE_CURSOR_CROSSHAIR = 3
+
+ +
+
+MOUSE_CURSOR_DEFAULT = 0
+
+ +
+
+MOUSE_CURSOR_IBEAM = 2
+
+ +
+
+MOUSE_CURSOR_NOT_ALLOWED = 10
+
+ +
+
+MOUSE_CURSOR_POINTING_HAND = 4
+
+ +
+
+MOUSE_CURSOR_RESIZE_ALL = 9
+
+ +
+
+MOUSE_CURSOR_RESIZE_EW = 5
+
+ +
+
+MOUSE_CURSOR_RESIZE_NESW = 8
+
+ +
+
+MOUSE_CURSOR_RESIZE_NS = 6
+
+ +
+
+MOUSE_CURSOR_RESIZE_NWSE = 7
+
+ +
+ +
+
+class pyray.Music(stream: AudioStream | list | tuple | None = None, frameCount: int | None = None, looping: bool | None = None, ctxType: int | None = None, ctxData: Any | None = None)
+

Music, audio stream, anything longer than ~10 seconds should be streamed.

+
+
+ctxData: Any = None
+
+ +
+
+ctxType: int = None
+
+ +
+
+frameCount: int = None
+
+ +
+
+looping: bool = None
+
+ +
+
+stream: AudioStream = None
+
+ +
+ +
+
+class pyray.NPatchInfo(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)
+

NPatchInfo, n-patch layout info.

+
+
+bottom: int = None
+
+ +
+
+layout: int = None
+
+ +
+
+left: int = None
+
+ +
+
+right: int = None
+
+ +
+
+source: Rectangle = None
+
+ +
+
+top: int = None
+
+ +
+ +
+
+class pyray.NPatchLayout
+

N-patch layout.

+
+
+NPATCH_NINE_PATCH = 0
+
+ +
+
+NPATCH_THREE_PATCH_HORIZONTAL = 2
+
+ +
+
+NPATCH_THREE_PATCH_VERTICAL = 1
+
+ +
+ +
+
+pyray.ORANGE: Color
+
+ +
+
+pyray.PINK: Color
+
+ +
+
+pyray.PURPLE: Color
+
+ +
+
+class pyray.PhysicsBodyData(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)
+

.

+
+
+angularVelocity: float = None
+
+ +
+
+dynamicFriction: float = None
+
+ +
+
+enabled: bool = None
+
+ +
+
+force: Vector2 = None
+
+ +
+
+freezeOrient: bool = None
+
+ +
+
+id: int = None
+
+ +
+
+inertia: float = None
+
+ +
+
+inverseInertia: float = None
+
+ +
+
+inverseMass: float = None
+
+ +
+
+isGrounded: bool = None
+
+ +
+
+mass: float = None
+
+ +
+
+orient: float = None
+
+ +
+
+position: Vector2 = None
+
+ +
+
+restitution: float = None
+
+ +
+
+shape: PhysicsShape = None
+
+ +
+
+staticFriction: float = None
+
+ +
+
+torque: float = None
+
+ +
+
+useGravity: bool = None
+
+ +
+
+velocity: Vector2 = None
+
+ +
+ +
+
+class pyray.PhysicsManifoldData(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)
+

.

+
+
+bodyA: Any = None
+
+ +
+
+bodyB: Any = None
+
+ +
+
+contacts: list = None
+
+ +
+
+contactsCount: int = None
+
+ +
+
+dynamicFriction: float = None
+
+ +
+
+id: int = None
+
+ +
+
+normal: Vector2 = None
+
+ +
+
+penetration: float = None
+
+ +
+
+restitution: float = None
+
+ +
+
+staticFriction: float = None
+
+ +
+ +
+
+class pyray.PhysicsShape(type: PhysicsShapeType | None = None, body: Any | None = None, vertexData: PhysicsVertexData | list | tuple | None = None, radius: float | None = None, transform: Matrix2x2 | list | tuple | None = None)
+

.

+
+
+body: Any = None
+
+ +
+
+radius: float = None
+
+ +
+
+transform: Matrix2x2 = None
+
+ +
+
+type: PhysicsShapeType = None
+
+ +
+
+vertexData: PhysicsVertexData = None
+
+ +
+ +
+
+class pyray.PhysicsVertexData(vertexCount: int | None = None, positions: list | None = None, normals: list | None = None)
+

.

+
+
+normals: list = None
+
+ +
+
+positions: list = None
+
+ +
+
+vertexCount: int = None
+
+ +
+ +
+
+class pyray.PixelFormat
+

Pixel formats.

+
+
+PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 23
+
+ +
+
+PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 24
+
+ +
+
+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_EAC_RGBA = 20
+
+ +
+
+PIXELFORMAT_COMPRESSED_ETC2_RGB = 19
+
+ +
+
+PIXELFORMAT_COMPRESSED_PVRT_RGB = 21
+
+ +
+
+PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R16 = 11
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R16G16B16 = 12
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 = 13
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R32 = 8
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4
+
+ +
+
+PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7
+
+ +
+ +
+
+pyray.RAYWHITE: Color
+
+ +
+
+pyray.RED: Color
+
+ +
+
+class pyray.Ray(position: Vector3 | list | tuple | None = None, direction: Vector3 | list | tuple | None = None)
+

Ray, ray for raycasting.

+
+
+direction: Vector3 = None
+
+ +
+
+position: Vector3 = None
+
+ +
+ +
+
+class pyray.RayCollision(hit: bool | None = None, distance: float | None = None, point: Vector3 | list | tuple | None = None, normal: Vector3 | list | tuple | None = None)
+

RayCollision, ray hit information.

+
+
+distance: float = None
+
+ +
+
+hit: bool = None
+
+ +
+
+normal: Vector3 = None
+
+ +
+
+point: Vector3 = None
+
+ +
+ +
+
+class pyray.Rectangle(x: float | None = None, y: float | None = None, width: float | None = None, height: float | None = None)
+

Rectangle, 4 components.

+
+
+height: float = None
+
+ +
+
+width: float = None
+
+ +
+
+x: float = None
+
+ +
+
+y: float = None
+
+ +
+ +
+
+class pyray.RenderTexture(id: int | None = None, texture: Texture | list | tuple | None = None, depth: Texture | list | tuple | None = None)
+

RenderTexture, fbo for texture rendering.

+
+
+depth: Texture = None
+
+ +
+
+id: int = None
+
+ +
+
+texture: Texture = None
+
+ +
+ +
+
+pyray.SKYBLUE: Color
+
+ +
+
+class pyray.Shader(id: int | None = None, locs: Any | None = None)
+

Shader.

+
+
+id: int = None
+
+ +
+
+locs: Any = None
+
+ +
+ +
+
+class pyray.ShaderAttributeDataType
+

Shader attribute data types.

+
+
+SHADER_ATTRIB_FLOAT = 0
+
+ +
+
+SHADER_ATTRIB_VEC2 = 1
+
+ +
+
+SHADER_ATTRIB_VEC3 = 2
+
+ +
+
+SHADER_ATTRIB_VEC4 = 3
+
+ +
+ +
+
+class pyray.ShaderLocationIndex
+

Shader location index.

+
+
+SHADER_LOC_BONE_MATRICES = 28
+
+ +
+
+SHADER_LOC_COLOR_AMBIENT = 14
+
+ +
+
+SHADER_LOC_COLOR_DIFFUSE = 12
+
+ +
+
+SHADER_LOC_COLOR_SPECULAR = 13
+
+ +
+
+SHADER_LOC_MAP_ALBEDO = 15
+
+ +
+
+SHADER_LOC_MAP_BRDF = 25
+
+ +
+
+SHADER_LOC_MAP_CUBEMAP = 22
+
+ +
+
+SHADER_LOC_MAP_EMISSION = 20
+
+ +
+
+SHADER_LOC_MAP_HEIGHT = 21
+
+ +
+
+SHADER_LOC_MAP_IRRADIANCE = 23
+
+ +
+
+SHADER_LOC_MAP_METALNESS = 16
+
+ +
+
+SHADER_LOC_MAP_NORMAL = 17
+
+ +
+
+SHADER_LOC_MAP_OCCLUSION = 19
+
+ +
+
+SHADER_LOC_MAP_PREFILTER = 24
+
+ +
+
+SHADER_LOC_MAP_ROUGHNESS = 18
+
+ +
+
+SHADER_LOC_MATRIX_MODEL = 9
+
+ +
+
+SHADER_LOC_MATRIX_MVP = 6
+
+ +
+
+SHADER_LOC_MATRIX_NORMAL = 10
+
+ +
+
+SHADER_LOC_MATRIX_PROJECTION = 8
+
+ +
+
+SHADER_LOC_MATRIX_VIEW = 7
+
+ +
+
+SHADER_LOC_VECTOR_VIEW = 11
+
+ +
+
+SHADER_LOC_VERTEX_BONEIDS = 26
+
+ +
+
+SHADER_LOC_VERTEX_BONEWEIGHTS = 27
+
+ +
+
+SHADER_LOC_VERTEX_COLOR = 5
+
+ +
+
+SHADER_LOC_VERTEX_NORMAL = 3
+
+ +
+
+SHADER_LOC_VERTEX_POSITION = 0
+
+ +
+
+SHADER_LOC_VERTEX_TANGENT = 4
+
+ +
+
+SHADER_LOC_VERTEX_TEXCOORD01 = 1
+
+ +
+
+SHADER_LOC_VERTEX_TEXCOORD02 = 2
+
+ +
+ +
+
+class pyray.ShaderUniformDataType
+

Shader uniform data type.

+
+
+SHADER_UNIFORM_FLOAT = 0
+
+ +
+
+SHADER_UNIFORM_INT = 4
+
+ +
+
+SHADER_UNIFORM_IVEC2 = 5
+
+ +
+
+SHADER_UNIFORM_IVEC3 = 6
+
+ +
+
+SHADER_UNIFORM_IVEC4 = 7
+
+ +
+
+SHADER_UNIFORM_SAMPLER2D = 8
+
+ +
+
+SHADER_UNIFORM_VEC2 = 1
+
+ +
+
+SHADER_UNIFORM_VEC3 = 2
+
+ +
+
+SHADER_UNIFORM_VEC4 = 3
+
+ +
+ +
+
+class pyray.Sound(stream: AudioStream | list | tuple | None = None, frameCount: int | None = None)
+

Sound.

+
+
+frameCount: int = None
+
+ +
+
+stream: AudioStream = None
+
+ +
+ +
+
+class pyray.Texture(id: int | None = None, width: int | None = None, height: int | None = None, mipmaps: int | None = None, format: int | None = None)
+

Texture, tex data stored in GPU memory (VRAM).

+
+
+format: int = None
+
+ +
+
+height: int = None
+
+ +
+
+id: int = None
+
+ +
+
+mipmaps: int = None
+
+ +
+
+width: int = None
+
+ +
+ +
+
+class pyray.Texture2D(id: int | None = None, width: int | None = None, height: int | None = None, mipmaps: int | None = None, format: int | None = None)
+

It should be redesigned to be provided by user.

+
+
+format: int = None
+
+ +
+
+height: int = None
+
+ +
+
+id: int = None
+
+ +
+
+mipmaps: int = None
+
+ +
+
+width: int = None
+
+ +
+ +
+
+class pyray.TextureFilter
+

Texture parameters: filter mode.

+
+
+TEXTURE_FILTER_ANISOTROPIC_16X = 5
+
+ +
+
+TEXTURE_FILTER_ANISOTROPIC_4X = 3
+
+ +
+
+TEXTURE_FILTER_ANISOTROPIC_8X = 4
+
+ +
+
+TEXTURE_FILTER_BILINEAR = 1
+
+ +
+
+TEXTURE_FILTER_POINT = 0
+
+ +
+
+TEXTURE_FILTER_TRILINEAR = 2
+
+ +
+ +
+
+class pyray.TextureWrap
+

Texture parameters: wrap mode.

+
+
+TEXTURE_WRAP_CLAMP = 1
+
+ +
+
+TEXTURE_WRAP_MIRROR_CLAMP = 3
+
+ +
+
+TEXTURE_WRAP_MIRROR_REPEAT = 2
+
+ +
+
+TEXTURE_WRAP_REPEAT = 0
+
+ +
+ +
+
+class pyray.TraceLogLevel
+

Trace log level.

+
+
+LOG_ALL = 0
+
+ +
+
+LOG_DEBUG = 2
+
+ +
+
+LOG_ERROR = 5
+
+ +
+
+LOG_FATAL = 6
+
+ +
+
+LOG_INFO = 3
+
+ +
+
+LOG_NONE = 7
+
+ +
+
+LOG_TRACE = 1
+
+ +
+
+LOG_WARNING = 4
+
+ +
+ +
+
+class pyray.Transform(translation: Vector3 | list | tuple | None = None, rotation: Vector4 | list | tuple | None = None, scale: Vector3 | list | tuple | None = None)
+

Transform, vertex transformation data.

+
+
+rotation: Vector4 = None
+
+ +
+
+scale: Vector3 = None
+
+ +
+
+translation: Vector3 = None
+
+ +
+ +
+
+pyray.VIOLET: Color
+
+ +
+
+class pyray.Vector2(x: float | None = None, y: float | None = None)
+

Vector2, 2 components.

+
+
+x: float = None
+
+ +
+
+y: float = None
+
+ +
+ +
+
+class pyray.Vector3(x: float | None = None, y: float | None = None, z: float | None = None)
+

Vector3, 3 components.

+
+
+x: float = None
+
+ +
+
+y: float = None
+
+ +
+
+z: float = None
+
+ +
+ +
+
+class pyray.Vector4(x: float | None = None, y: float | None = None, z: float | None = None, w: float | None = None)
+

Vector4, 4 components.

+
+
+w: float = None
+
+ +
+
+x: float = None
+
+ +
+
+y: float = None
+
+ +
+
+z: float = None
+
+ +
+ +
+
+class pyray.VrDeviceInfo(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)
+

VrDeviceInfo, Head-Mounted-Display device parameters.

+
+
+chromaAbCorrection: list = None
+
+ +
+
+eyeToScreenDistance: float = None
+
+ +
+
+hResolution: int = None
+
+ +
+
+hScreenSize: float = None
+
+ +
+
+interpupillaryDistance: float = None
+
+ +
+
+lensDistortionValues: list = None
+
+ +
+
+lensSeparationDistance: float = None
+
+ +
+
+vResolution: int = None
+
+ +
+
+vScreenSize: float = None
+
+ +
+ +
+
+class pyray.VrStereoConfig(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)
+

VrStereoConfig, VR stereo rendering configuration for simulator.

+
+
+leftLensCenter: list = None
+
+ +
+
+leftScreenCenter: list = None
+
+ +
+
+projection: list = None
+
+ +
+
+rightLensCenter: list = None
+
+ +
+
+rightScreenCenter: list = None
+
+ +
+
+scale: list = None
+
+ +
+
+scaleIn: list = None
+
+ +
+
+viewOffset: list = None
+
+ +
+ +
+
+pyray.WHITE: Color
+
+ +
+
+class pyray.Wave(frameCount: int | None = None, sampleRate: int | None = None, sampleSize: int | None = None, channels: int | None = None, data: Any | None = None)
+

Wave, audio wave data.

+
+
+channels: int = None
+
+ +
+
+data: Any = None
+
+ +
+
+frameCount: int = None
+
+ +
+
+sampleRate: int = None
+
+ +
+
+sampleSize: int = None
+
+ +
+ +
+
+pyray.YELLOW: Color
+
+ +
+
+pyray.attach_audio_mixed_processor(processor: Any) None
+

Attach audio stream processor to the entire audio pipeline, receives the samples as ‘float’.

+
+ +
+
+pyray.attach_audio_stream_processor(stream: AudioStream | list | tuple, processor: Any) None
+

Attach audio stream processor to stream, receives the samples as ‘float’.

+
+ +
+
+pyray.begin_blend_mode(mode: int) None
+

Begin blending mode (alpha, additive, multiplied, subtract, custom).

+
+ +
+
+pyray.begin_drawing() None
+

Setup canvas (framebuffer) to start drawing.

+
+ +
+
+pyray.begin_mode_2d(camera: Camera2D | list | tuple) None
+

Begin 2D mode with custom camera (2D).

+
+ +
+
+pyray.begin_mode_3d(camera: Camera3D | list | tuple) None
+

Begin 3D mode with custom camera (3D).

+
+ +
+
+pyray.begin_scissor_mode(x: int, y: int, width: int, height: int) None
+

Begin scissor mode (define screen area for following drawing).

+
+ +
+
+pyray.begin_shader_mode(shader: Shader | list | tuple) None
+

Begin custom shader drawing.

+
+ +
+
+pyray.begin_texture_mode(target: RenderTexture | list | tuple) None
+

Begin drawing to render texture.

+
+ +
+
+pyray.begin_vr_stereo_mode(config: VrStereoConfig | list | tuple) None
+

Begin stereo rendering (requires VR simulator).

+
+ +
+
+pyray.change_directory(dir: str) bool
+

Change working directory, return true on success.

+
+ +
+
+pyray.check_collision_box_sphere(box: BoundingBox | list | tuple, center: Vector3 | list | tuple, radius: float) bool
+

Check collision between box and sphere.

+
+ +
+
+pyray.check_collision_boxes(box1: BoundingBox | list | tuple, box2: BoundingBox | list | tuple) bool
+

Check collision between two bounding boxes.

+
+ +
+
+pyray.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].

+
+ +
+
+pyray.check_collision_circle_rec(center: Vector2 | list | tuple, radius: float, rec: Rectangle | list | tuple) bool
+

Check collision between circle and rectangle.

+
+ +
+
+pyray.check_collision_circles(center1: Vector2 | list | tuple, radius1: float, center2: Vector2 | list | tuple, radius2: float) bool
+

Check collision between two circles.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.check_collision_point_circle(point: Vector2 | list | tuple, center: Vector2 | list | tuple, radius: float) bool
+

Check if point is inside circle.

+
+ +
+
+pyray.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].

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.check_collision_point_rec(point: Vector2 | list | tuple, rec: Rectangle | list | tuple) bool
+

Check if point is inside rectangle.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.check_collision_recs(rec1: Rectangle | list | tuple, rec2: Rectangle | list | tuple) bool
+

Check collision between two rectangles.

+
+ +
+
+pyray.check_collision_spheres(center1: Vector3 | list | tuple, radius1: float, center2: Vector3 | list | tuple, radius2: float) bool
+

Check collision between two spheres.

+
+ +
+
+pyray.clamp(value: float, min_1: float, max_2: float) float
+

.

+
+ +
+
+pyray.clear_background(color: Color | list | tuple) None
+

Set background color (framebuffer clear color).

+
+ +
+
+pyray.clear_window_state(flags: int) None
+

Clear window configuration state flags.

+
+ +
+
+pyray.close_audio_device() None
+

Close the audio device and context.

+
+ +
+
+pyray.close_physics() None
+

Close physics system and unload used memory.

+
+ +
+
+pyray.close_window() None
+

Close window and unload OpenGL context.

+
+ +
+
+pyray.codepoint_to_utf8(codepoint: int, utf8Size: Any) str
+

Encode one codepoint into UTF-8 byte array (array length returned as parameter).

+
+ +
+
+pyray.color_alpha(color: Color | list | tuple, alpha: float) Color
+

Get color with alpha applied, alpha goes from 0.0f to 1.0f.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.color_brightness(color: Color | list | tuple, factor: float) Color
+

Get color with brightness correction, brightness factor goes from -1.0f to 1.0f.

+
+ +
+
+pyray.color_contrast(color: Color | list | tuple, contrast: float) Color
+

Get color with contrast correction, contrast values between -1.0f and 1.0f.

+
+ +
+
+pyray.color_from_hsv(hue: float, saturation: float, value: float) Color
+

Get a Color from HSV values, hue [0..360], saturation/value [0..1].

+
+ +
+
+pyray.color_from_normalized(normalized: Vector4 | list | tuple) Color
+

Get Color from normalized values [0..1].

+
+ +
+
+pyray.color_is_equal(col1: Color | list | tuple, col2: Color | list | tuple) bool
+

Check if two colors are equal.

+
+ +
+
+pyray.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].

+
+ +
+
+pyray.color_normalize(color: Color | list | tuple) Vector4
+

Get Color normalized as float [0..1].

+
+ +
+
+pyray.color_tint(color: Color | list | tuple, tint: Color | list | tuple) Color
+

Get color multiplied with another color.

+
+ +
+
+pyray.color_to_hsv(color: Color | list | tuple) Vector3
+

Get HSV values for a Color, hue [0..360], saturation/value [0..1].

+
+ +
+
+pyray.color_to_int(color: Color | list | tuple) int
+

Get hexadecimal value for a Color (0xRRGGBBAA).

+
+ +
+
+pyray.compress_data(data: str, dataSize: int, compDataSize: Any) str
+

Compress data (DEFLATE algorithm), memory must be MemFree().

+
+ +
+
+pyray.compute_crc32(data: str, dataSize: int) int
+

Compute CRC32 hash code.

+
+ +
+
+pyray.compute_md5(data: str, dataSize: int) Any
+

Compute MD5 hash code, returns static int[4] (16 bytes).

+
+ +
+
+pyray.compute_sha1(data: str, dataSize: int) Any
+

Compute SHA1 hash code, returns static int[5] (20 bytes).

+
+ +
+
+pyray.create_physics_body_circle(pos: Vector2 | list | tuple, radius: float, density: float) Any
+

Creates a new circle physics body with generic parameters.

+
+ +
+
+pyray.create_physics_body_polygon(pos: Vector2 | list | tuple, radius: float, sides: int, density: float) Any
+

Creates a new polygon physics body with generic parameters.

+
+ +
+
+pyray.create_physics_body_rectangle(pos: Vector2 | list | tuple, width: float, height: float, density: float) Any
+

Creates a new rectangle physics body with generic parameters.

+
+ +
+
+pyray.decode_data_base64(data: str, outputSize: Any) str
+

Decode Base64 string data, memory must be MemFree().

+
+ +
+
+pyray.decompress_data(compData: str, compDataSize: int, dataSize: Any) str
+

Decompress data (DEFLATE algorithm), memory must be MemFree().

+
+ +
+
+pyray.destroy_physics_body(body: Any | list | tuple) None
+

Destroy a physics body.

+
+ +
+
+pyray.detach_audio_mixed_processor(processor: Any) None
+

Detach audio stream processor from the entire audio pipeline.

+
+ +
+
+pyray.detach_audio_stream_processor(stream: AudioStream | list | tuple, processor: Any) None
+

Detach audio stream processor from stream.

+
+ +
+
+pyray.directory_exists(dirPath: str) bool
+

Check if a directory path exists.

+
+ +
+
+pyray.disable_cursor() None
+

Disables cursor (lock cursor).

+
+ +
+
+pyray.disable_event_waiting() None
+

Disable waiting for events on EndDrawing(), automatic events polling.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_bounding_box(box: BoundingBox | list | tuple, color: Color | list | tuple) None
+

Draw bounding box (wires).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_circle(centerX: int, centerY: int, radius: float, color: Color | list | tuple) None
+

Draw a color-filled circle.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_circle_gradient(centerX: int, centerY: int, radius: float, inner: Color | list | tuple, outer: Color | list | tuple) None
+

Draw a gradient-filled circle.

+
+ +
+
+pyray.draw_circle_lines(centerX: int, centerY: int, radius: float, color: Color | list | tuple) None
+

Draw circle outline.

+
+ +
+
+pyray.draw_circle_lines_v(center: Vector2 | list | tuple, radius: float, color: Color | list | tuple) None
+

Draw circle outline (Vector version).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_circle_v(center: Vector2 | list | tuple, radius: float, color: Color | list | tuple) None
+

Draw a color-filled circle (Vector version).

+
+ +
+
+pyray.draw_cube(position: Vector3 | list | tuple, width: float, height: float, length: float, color: Color | list | tuple) None
+

Draw cube.

+
+ +
+
+pyray.draw_cube_v(position: Vector3 | list | tuple, size: Vector3 | list | tuple, color: Color | list | tuple) None
+

Draw cube (Vector version).

+
+ +
+
+pyray.draw_cube_wires(position: Vector3 | list | tuple, width: float, height: float, length: float, color: Color | list | tuple) None
+

Draw cube wires.

+
+ +
+
+pyray.draw_cube_wires_v(position: Vector3 | list | tuple, size: Vector3 | list | tuple, color: Color | list | tuple) None
+

Draw cube wires (Vector version).

+
+ +
+
+pyray.draw_cylinder(position: Vector3 | list | tuple, radiusTop: float, radiusBottom: float, height: float, slices: int, color: Color | list | tuple) None
+

Draw a cylinder/cone.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_ellipse(centerX: int, centerY: int, radiusH: float, radiusV: float, color: Color | list | tuple) None
+

Draw ellipse.

+
+ +
+
+pyray.draw_ellipse_lines(centerX: int, centerY: int, radiusH: float, radiusV: float, color: Color | list | tuple) None
+

Draw ellipse outline.

+
+ +
+
+pyray.draw_fps(posX: int, posY: int) None
+

Draw current FPS.

+
+ +
+
+pyray.draw_grid(slices: int, spacing: float) None
+

Draw a grid (centered at (0, 0, 0)).

+
+ +
+
+pyray.draw_line(startPosX: int, startPosY: int, endPosX: int, endPosY: int, color: Color | list | tuple) None
+

Draw a line.

+
+ +
+
+pyray.draw_line_3d(startPos: Vector3 | list | tuple, endPos: Vector3 | list | tuple, color: Color | list | tuple) None
+

Draw a line in 3D world space.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_line_ex(startPos: Vector2 | list | tuple, endPos: Vector2 | list | tuple, thick: float, color: Color | list | tuple) None
+

Draw a line (using triangles/quads).

+
+ +
+
+pyray.draw_line_strip(points: Any | list | tuple, pointCount: int, color: Color | list | tuple) None
+

Draw lines sequence (using gl lines).

+
+ +
+
+pyray.draw_line_v(startPos: Vector2 | list | tuple, endPos: Vector2 | list | tuple, color: Color | list | tuple) None
+

Draw a line (using gl lines).

+
+ +
+
+pyray.draw_mesh(mesh: Mesh | list | tuple, material: Material | list | tuple, transform: Matrix | list | tuple) None
+

Draw a 3d mesh with material and transform.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_model(model: Model | list | tuple, position: Vector3 | list | tuple, scale: float, tint: Color | list | tuple) None
+

Draw a model (with texture if set).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_model_points(model: Model | list | tuple, position: Vector3 | list | tuple, scale: float, tint: Color | list | tuple) None
+

Draw a model as points.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_pixel(posX: int, posY: int, color: Color | list | tuple) None
+

Draw a pixel using geometry [Can be slow, use with care].

+
+ +
+
+pyray.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].

+
+ +
+
+pyray.draw_plane(centerPos: Vector3 | list | tuple, size: Vector2 | list | tuple, color: Color | list | tuple) None
+

Draw a plane XZ.

+
+ +
+
+pyray.draw_point_3d(position: Vector3 | list | tuple, color: Color | list | tuple) None
+

Draw a point in 3D space, actually a small line.

+
+ +
+
+pyray.draw_poly(center: Vector2 | list | tuple, sides: int, radius: float, rotation: float, color: Color | list | tuple) None
+

Draw a regular polygon (Vector version).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_ray(ray: Ray | list | tuple, color: Color | list | tuple) None
+

Draw a ray line.

+
+ +
+
+pyray.draw_rectangle(posX: int, posY: int, width: int, height: int, color: Color | list | tuple) None
+

Draw a color-filled rectangle.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_rectangle_lines(posX: int, posY: int, width: int, height: int, color: Color | list | tuple) None
+

Draw rectangle outline.

+
+ +
+
+pyray.draw_rectangle_lines_ex(rec: Rectangle | list | tuple, lineThick: float, color: Color | list | tuple) None
+

Draw rectangle outline with extended parameters.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_rectangle_rec(rec: Rectangle | list | tuple, color: Color | list | tuple) None
+

Draw a color-filled rectangle.

+
+ +
+
+pyray.draw_rectangle_rounded(rec: Rectangle | list | tuple, roundness: float, segments: int, color: Color | list | tuple) None
+

Draw rectangle with rounded edges.

+
+ +
+
+pyray.draw_rectangle_rounded_lines(rec: Rectangle | list | tuple, roundness: float, segments: int, color: Color | list | tuple) None
+

Draw rectangle lines with rounded edges.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_rectangle_v(position: Vector2 | list | tuple, size: Vector2 | list | tuple, color: Color | list | tuple) None
+

Draw a color-filled rectangle (Vector version).

+
+ +
+
+pyray.draw_ring(center: Vector2 | list | tuple, innerRadius: float, outerRadius: float, startAngle: float, endAngle: float, segments: int, color: Color | list | tuple) None
+

Draw ring.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_sphere(centerPos: Vector3 | list | tuple, radius: float, color: Color | list | tuple) None
+

Draw sphere.

+
+ +
+
+pyray.draw_sphere_ex(centerPos: Vector3 | list | tuple, radius: float, rings: int, slices: int, color: Color | list | tuple) None
+

Draw sphere with extended parameters.

+
+ +
+
+pyray.draw_sphere_wires(centerPos: Vector3 | list | tuple, radius: float, rings: int, slices: int, color: Color | list | tuple) None
+

Draw sphere wires.

+
+ +
+
+pyray.draw_spline_basis(points: Any | list | tuple, pointCount: int, thick: float, color: Color | list | tuple) None
+

Draw spline: B-Spline, minimum 4 points.

+
+ +
+
+pyray.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…].

+
+ +
+
+pyray.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…].

+
+ +
+
+pyray.draw_spline_catmull_rom(points: Any | list | tuple, pointCount: int, thick: float, color: Color | list | tuple) None
+

Draw spline: Catmull-Rom, minimum 4 points.

+
+ +
+
+pyray.draw_spline_linear(points: Any | list | tuple, pointCount: int, thick: float, color: Color | list | tuple) None
+

Draw spline: Linear, minimum 2 points.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_text(text: str, posX: int, posY: int, fontSize: int, color: Color | list | tuple) None
+

Draw text (using default font).

+
+ +
+
+pyray.draw_text_codepoint(font: Font | list | tuple, codepoint: int, position: Vector2 | list | tuple, fontSize: float, tint: Color | list | tuple) None
+

Draw one character (codepoint).

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.draw_texture(texture: Texture | list | tuple, posX: int, posY: int, tint: Color | list | tuple) None
+

Draw a Texture2D.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.draw_texture_v(texture: Texture | list | tuple, position: Vector2 | list | tuple, tint: Color | list | tuple) None
+

Draw a Texture2D with position defined as Vector2.

+
+ +
+
+pyray.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!).

+
+ +
+
+pyray.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!).

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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!).

+
+ +
+
+pyray.draw_triangle_strip(points: Any | list | tuple, pointCount: int, color: Color | list | tuple) None
+

Draw a triangle strip defined by points.

+
+ +
+
+pyray.draw_triangle_strip_3d(points: Any | list | tuple, pointCount: int, color: Color | list | tuple) None
+

Draw a triangle strip defined by points.

+
+ +
+
+pyray.enable_cursor() None
+

Enables cursor (unlock cursor).

+
+ +
+
+pyray.enable_event_waiting() None
+

Enable waiting for events on EndDrawing(), no automatic event polling.

+
+ +
+
+pyray.encode_data_base64(data: str, dataSize: int, outputSize: Any) str
+

Encode data to Base64 string, memory must be MemFree().

+
+ +
+
+pyray.end_blend_mode() None
+

End blending mode (reset to default: alpha blending).

+
+ +
+
+pyray.end_drawing() None
+

End canvas drawing and swap buffers (double buffering).

+
+ +
+
+pyray.end_mode_2d() None
+

Ends 2D mode with custom camera.

+
+ +
+
+pyray.end_mode_3d() None
+

Ends 3D mode and returns to default 2D orthographic mode.

+
+ +
+
+pyray.end_scissor_mode() None
+

End scissor mode.

+
+ +
+
+pyray.end_shader_mode() None
+

End custom shader drawing (use default shader).

+
+ +
+
+pyray.end_texture_mode() None
+

Ends drawing to render texture.

+
+ +
+
+pyray.end_vr_stereo_mode() None
+

End stereo rendering (requires VR simulator).

+
+ +
+
+pyray.export_automation_event_list(list_0: AutomationEventList | list | tuple, fileName: str) bool
+

Export automation events list as text file.

+
+ +
+
+pyray.export_data_as_code(data: str, dataSize: int, fileName: str) bool
+

Export data to code (.h), returns true on success.

+
+ +
+
+pyray.export_font_as_code(font: Font | list | tuple, fileName: str) bool
+

Export font as code file, returns true on success.

+
+ +
+
+pyray.export_image(image: Image | list | tuple, fileName: str) bool
+

Export image data to file, returns true on success.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.export_image_to_memory(image: Image | list | tuple, fileType: str, fileSize: Any) str
+

Export image to memory buffer.

+
+ +
+
+pyray.export_mesh(mesh: Mesh | list | tuple, fileName: str) bool
+

Export mesh data to file, returns true on success.

+
+ +
+
+pyray.export_mesh_as_code(mesh: Mesh | list | tuple, fileName: str) bool
+

Export mesh as code file (.h) defining multiple arrays of vertex attributes.

+
+ +
+
+pyray.export_wave(wave: Wave | list | tuple, fileName: str) bool
+

Export wave data to file, returns true on success.

+
+ +
+
+pyray.export_wave_as_code(wave: Wave | list | tuple, fileName: str) bool
+

Export wave sample data to code (.h), returns true on success.

+
+ +
+
+pyray.fade(color: Color | list | tuple, alpha: float) Color
+

Get color with alpha applied, alpha goes from 0.0f to 1.0f.

+
+ +
+
+pyray.ffi: _cffi_backend.FFI
+
+ +
+
+pyray.file_exists(fileName: str) bool
+

Check if file exists.

+
+ +
+
+class pyray.float16(v: list | None = None)
+

.

+
+
+v: list = None
+
+ +
+ +
+
+class pyray.float3(v: list | None = None)
+

NOTE: Helper types to be used instead of array return types for *ToFloat functions.

+
+
+v: list = None
+
+ +
+ +
+
+pyray.float_equals(x: float, y: float) int
+

.

+
+ +
+
+pyray.gen_image_cellular(width: int, height: int, tileSize: int) Image
+

Generate image: cellular algorithm, bigger tileSize means bigger cells.

+
+ +
+
+pyray.gen_image_checked(width: int, height: int, checksX: int, checksY: int, col1: Color | list | tuple, col2: Color | list | tuple) Image
+

Generate image: checked.

+
+ +
+
+pyray.gen_image_color(width: int, height: int, color: Color | list | tuple) Image
+

Generate image: plain color.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.gen_image_gradient_radial(width: int, height: int, density: float, inner: Color | list | tuple, outer: Color | list | tuple) Image
+

Generate image: radial gradient.

+
+ +
+
+pyray.gen_image_gradient_square(width: int, height: int, density: float, inner: Color | list | tuple, outer: Color | list | tuple) Image
+

Generate image: square gradient.

+
+ +
+
+pyray.gen_image_perlin_noise(width: int, height: int, offsetX: int, offsetY: int, scale: float) Image
+

Generate image: perlin noise.

+
+ +
+
+pyray.gen_image_text(width: int, height: int, text: str) Image
+

Generate image: grayscale image from text data.

+
+ +
+
+pyray.gen_image_white_noise(width: int, height: int, factor: float) Image
+

Generate image: white noise.

+
+ +
+
+pyray.gen_mesh_cone(radius: float, height: float, slices: int) Mesh
+

Generate cone/pyramid mesh.

+
+ +
+
+pyray.gen_mesh_cube(width: float, height: float, length: float) Mesh
+

Generate cuboid mesh.

+
+ +
+
+pyray.gen_mesh_cubicmap(cubicmap: Image | list | tuple, cubeSize: Vector3 | list | tuple) Mesh
+

Generate cubes-based map mesh from image data.

+
+ +
+
+pyray.gen_mesh_cylinder(radius: float, height: float, slices: int) Mesh
+

Generate cylinder mesh.

+
+ +
+
+pyray.gen_mesh_heightmap(heightmap: Image | list | tuple, size: Vector3 | list | tuple) Mesh
+

Generate heightmap mesh from image data.

+
+ +
+
+pyray.gen_mesh_hemi_sphere(radius: float, rings: int, slices: int) Mesh
+

Generate half-sphere mesh (no bottom cap).

+
+ +
+
+pyray.gen_mesh_knot(radius: float, size: float, radSeg: int, sides: int) Mesh
+

Generate trefoil knot mesh.

+
+ +
+
+pyray.gen_mesh_plane(width: float, length: float, resX: int, resZ: int) Mesh
+

Generate plane mesh (with subdivisions).

+
+ +
+
+pyray.gen_mesh_poly(sides: int, radius: float) Mesh
+

Generate polygonal mesh.

+
+ +
+
+pyray.gen_mesh_sphere(radius: float, rings: int, slices: int) Mesh
+

Generate sphere mesh (standard sphere).

+
+ +
+
+pyray.gen_mesh_tangents(mesh: Any | list | tuple) None
+

Compute mesh tangents.

+
+ +
+
+pyray.gen_mesh_torus(radius: float, size: float, radSeg: int, sides: int) Mesh
+

Generate torus mesh.

+
+ +
+
+pyray.gen_texture_mipmaps(texture: Any | list | tuple) None
+

Generate GPU mipmaps for a texture.

+
+ +
+
+pyray.get_application_directory() str
+

Get the directory of the running application (uses static string).

+
+ +
+
+pyray.get_camera_matrix(camera: Camera3D | list | tuple) Matrix
+

Get camera transform matrix (view matrix).

+
+ +
+
+pyray.get_camera_matrix_2d(camera: Camera2D | list | tuple) Matrix
+

Get camera 2d transform matrix.

+
+ +
+
+pyray.get_char_pressed() int
+

Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty.

+
+ +
+
+pyray.get_clipboard_image() Image
+

Get clipboard image content.

+
+ +
+
+pyray.get_clipboard_text() str
+

Get clipboard text content.

+
+ +
+
+pyray.get_codepoint(text: str, codepointSize: Any) int
+

Get next codepoint in a UTF-8 encoded string, 0x3f(‘?’) is returned on failure.

+
+ +
+
+pyray.get_codepoint_count(text: str) int
+

Get total number of codepoints in a UTF-8 encoded string.

+
+ +
+
+pyray.get_codepoint_next(text: str, codepointSize: Any) int
+

Get next codepoint in a UTF-8 encoded string, 0x3f(‘?’) is returned on failure.

+
+ +
+
+pyray.get_codepoint_previous(text: str, codepointSize: Any) int
+

Get previous codepoint in a UTF-8 encoded string, 0x3f(‘?’) is returned on failure.

+
+ +
+
+pyray.get_collision_rec(rec1: Rectangle | list | tuple, rec2: Rectangle | list | tuple) Rectangle
+

Get collision rectangle for two rectangles collision.

+
+ +
+
+pyray.get_color(hexValue: int) Color
+

Get Color structure from hexadecimal value.

+
+ +
+
+pyray.get_current_monitor() int
+

Get current monitor where window is placed.

+
+ +
+
+pyray.get_directory_path(filePath: str) str
+

Get full path for a given fileName with path (uses static string).

+
+ +
+
+pyray.get_file_extension(fileName: str) str
+

Get pointer to extension for a filename string (includes dot: ‘.png’).

+
+ +
+
+pyray.get_file_length(fileName: str) int
+

Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h).

+
+ +
+
+pyray.get_file_mod_time(fileName: str) int
+

Get file modification time (last write time).

+
+ +
+
+pyray.get_file_name(filePath: str) str
+

Get pointer to filename for a path string.

+
+ +
+
+pyray.get_file_name_without_ext(filePath: str) str
+

Get filename string without extension (uses static string).

+
+ +
+
+pyray.get_font_default() Font
+

Get the default Font.

+
+ +
+
+pyray.get_fps() int
+

Get current FPS.

+
+ +
+
+pyray.get_frame_time() float
+

Get time in seconds for last frame drawn (delta time).

+
+ +
+
+pyray.get_gamepad_axis_count(gamepad: int) int
+

Get gamepad axis count for a gamepad.

+
+ +
+
+pyray.get_gamepad_axis_movement(gamepad: int, axis: int) float
+

Get axis movement value for a gamepad axis.

+
+ +
+
+pyray.get_gamepad_button_pressed() int
+

Get the last gamepad button pressed.

+
+ +
+
+pyray.get_gamepad_name(gamepad: int) str
+

Get gamepad internal name id.

+
+ +
+
+pyray.get_gesture_detected() int
+

Get latest detected gesture.

+
+ +
+
+pyray.get_gesture_drag_angle() float
+

Get gesture drag angle.

+
+ +
+
+pyray.get_gesture_drag_vector() Vector2
+

Get gesture drag vector.

+
+ +
+
+pyray.get_gesture_hold_duration() float
+

Get gesture hold time in seconds.

+
+ +
+
+pyray.get_gesture_pinch_angle() float
+

Get gesture pinch angle.

+
+ +
+
+pyray.get_gesture_pinch_vector() Vector2
+

Get gesture pinch delta.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.get_image_alpha_border(image: Image | list | tuple, threshold: float) Rectangle
+

Get image alpha border rectangle.

+
+ +
+
+pyray.get_image_color(image: Image | list | tuple, x: int, y: int) Color
+

Get image pixel color at (x, y) position.

+
+ +
+
+pyray.get_key_pressed() int
+

Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty.

+
+ +
+
+pyray.get_master_volume() float
+

Get master volume (listener).

+
+ +
+
+pyray.get_mesh_bounding_box(mesh: Mesh | list | tuple) BoundingBox
+

Compute mesh bounding box limits.

+
+ +
+
+pyray.get_model_bounding_box(model: Model | list | tuple) BoundingBox
+

Compute model bounding box limits (considers all meshes).

+
+ +
+
+pyray.get_monitor_count() int
+

Get number of connected monitors.

+
+ +
+
+pyray.get_monitor_height(monitor: int) int
+

Get specified monitor height (current video mode used by monitor).

+
+ +
+
+pyray.get_monitor_name(monitor: int) str
+

Get the human-readable, UTF-8 encoded name of the specified monitor.

+
+ +
+
+pyray.get_monitor_physical_height(monitor: int) int
+

Get specified monitor physical height in millimetres.

+
+ +
+
+pyray.get_monitor_physical_width(monitor: int) int
+

Get specified monitor physical width in millimetres.

+
+ +
+
+pyray.get_monitor_position(monitor: int) Vector2
+

Get specified monitor position.

+
+ +
+
+pyray.get_monitor_refresh_rate(monitor: int) int
+

Get specified monitor refresh rate.

+
+ +
+
+pyray.get_monitor_width(monitor: int) int
+

Get specified monitor width (current video mode used by monitor).

+
+ +
+
+pyray.get_mouse_delta() Vector2
+

Get mouse delta between frames.

+
+ +
+
+pyray.get_mouse_position() Vector2
+

Get mouse position XY.

+
+ +
+
+pyray.get_mouse_wheel_move() float
+

Get mouse wheel movement for X or Y, whichever is larger.

+
+ +
+
+pyray.get_mouse_wheel_move_v() Vector2
+

Get mouse wheel movement for both X and Y.

+
+ +
+
+pyray.get_mouse_x() int
+

Get mouse position X.

+
+ +
+
+pyray.get_mouse_y() int
+

Get mouse position Y.

+
+ +
+
+pyray.get_music_time_length(music: Music | list | tuple) float
+

Get music time length (in seconds).

+
+ +
+
+pyray.get_music_time_played(music: Music | list | tuple) float
+

Get current music time played (in seconds).

+
+ +
+
+pyray.get_physics_bodies_count() int
+

Returns the current amount of created physics bodies.

+
+ +
+
+pyray.get_physics_body(index: int) Any
+

Returns a physics body of the bodies pool at a specific index.

+
+ +
+
+pyray.get_physics_shape_type(index: int) int
+

Returns the physics body shape type (PHYSICS_CIRCLE or PHYSICS_POLYGON).

+
+ +
+
+pyray.get_physics_shape_vertex(body: Any | list | tuple, vertex: int) Vector2
+

Returns transformed position of a body shape (body position + vertex transformed position).

+
+ +
+
+pyray.get_physics_shape_vertices_count(index: int) int
+

Returns the amount of vertices of a physics body shape.

+
+ +
+
+pyray.get_pixel_color(srcPtr: Any, format: int) Color
+

Get Color from a source pixel pointer of certain format.

+
+ +
+
+pyray.get_pixel_data_size(width: int, height: int, format: int) int
+

Get pixel data size in bytes for certain format.

+
+ +
+
+pyray.get_prev_directory_path(dirPath: str) str
+

Get previous directory path for a given path (uses static string).

+
+ +
+
+pyray.get_random_value(min_0: int, max_1: int) int
+

Get a random value between min and max (both included).

+
+ +
+
+pyray.get_ray_collision_box(ray: Ray | list | tuple, box: BoundingBox | list | tuple) RayCollision
+

Get collision info between ray and box.

+
+ +
+
+pyray.get_ray_collision_mesh(ray: Ray | list | tuple, mesh: Mesh | list | tuple, transform: Matrix | list | tuple) RayCollision
+

Get collision info between ray and mesh.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.get_ray_collision_sphere(ray: Ray | list | tuple, center: Vector3 | list | tuple, radius: float) RayCollision
+

Get collision info between ray and sphere.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.get_render_height() int
+

Get current render height (it considers HiDPI).

+
+ +
+
+pyray.get_render_width() int
+

Get current render width (it considers HiDPI).

+
+ +
+
+pyray.get_screen_height() int
+

Get current screen height.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.get_screen_to_world_ray(position: Vector2 | list | tuple, camera: Camera3D | list | tuple) Ray
+

Get a ray trace from screen position (i.e mouse).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.get_screen_width() int
+

Get current screen width.

+
+ +
+
+pyray.get_shader_location(shader: Shader | list | tuple, uniformName: str) int
+

Get shader uniform location.

+
+ +
+
+pyray.get_shader_location_attrib(shader: Shader | list | tuple, attribName: str) int
+

Get shader attribute location.

+
+ +
+
+pyray.get_shapes_texture() Texture
+

Get texture that is used for shapes drawing.

+
+ +
+
+pyray.get_shapes_texture_rectangle() Rectangle
+

Get texture source rectangle that is used for shapes drawing.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.get_spline_point_linear(startPos: Vector2 | list | tuple, endPos: Vector2 | list | tuple, t: float) Vector2
+

Get (evaluate) spline point: Linear.

+
+ +
+
+pyray.get_time() float
+

Get elapsed time in seconds since InitWindow().

+
+ +
+
+pyray.get_touch_point_count() int
+

Get number of touch points.

+
+ +
+
+pyray.get_touch_point_id(index: int) int
+

Get touch point identifier for given index.

+
+ +
+
+pyray.get_touch_position(index: int) Vector2
+

Get touch position XY for a touch point index (relative to screen size).

+
+ +
+
+pyray.get_touch_x() int
+

Get touch position X for touch point 0 (relative to screen size).

+
+ +
+
+pyray.get_touch_y() int
+

Get touch position Y for touch point 0 (relative to screen size).

+
+ +
+
+pyray.get_window_handle() Any
+

Get native window handle.

+
+ +
+
+pyray.get_window_position() Vector2
+

Get window position XY on monitor.

+
+ +
+
+pyray.get_window_scale_dpi() Vector2
+

Get window scale DPI factor.

+
+ +
+
+pyray.get_working_directory() str
+

Get current working directory (uses static string).

+
+ +
+
+pyray.get_world_to_screen(position: Vector3 | list | tuple, camera: Camera3D | list | tuple) Vector2
+

Get the screen space position for a 3d world space position.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.glfw_create_cursor(image: Any | list | tuple, xhot: int, yhot: int) Any
+

.

+
+ +
+
+pyray.glfw_create_standard_cursor(shape: int) Any
+

.

+
+ +
+
+pyray.glfw_create_window(width: int, height: int, title: str, monitor: Any | list | tuple, share: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_default_window_hints() None
+

.

+
+ +
+
+pyray.glfw_destroy_cursor(cursor: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_destroy_window(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_extension_supported(extension: str) int
+

.

+
+ +
+
+pyray.glfw_focus_window(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_get_clipboard_string(window: Any | list | tuple) str
+

.

+
+ +
+
+pyray.glfw_get_current_context() Any
+

.

+
+ +
+
+pyray.glfw_get_cursor_pos(window: Any | list | tuple, xpos: Any, ypos: Any) None
+

.

+
+ +
+
+pyray.glfw_get_error(description: list[str]) int
+

.

+
+ +
+
+pyray.glfw_get_framebuffer_size(window: Any | list | tuple, width: Any, height: Any) None
+

.

+
+ +
+
+pyray.glfw_get_gamepad_name(jid: int) str
+

.

+
+ +
+
+pyray.glfw_get_gamepad_state(jid: int, state: Any | list | tuple) int
+

.

+
+ +
+
+pyray.glfw_get_gamma_ramp(monitor: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_get_input_mode(window: Any | list | tuple, mode: int) int
+

.

+
+ +
+
+pyray.glfw_get_joystick_axes(jid: int, count: Any) Any
+

.

+
+ +
+
+pyray.glfw_get_joystick_buttons(jid: int, count: Any) str
+

.

+
+ +
+
+pyray.glfw_get_joystick_guid(jid: int) str
+

.

+
+ +
+
+pyray.glfw_get_joystick_hats(jid: int, count: Any) str
+

.

+
+ +
+
+pyray.glfw_get_joystick_name(jid: int) str
+

.

+
+ +
+
+pyray.glfw_get_joystick_user_pointer(jid: int) Any
+

.

+
+ +
+
+pyray.glfw_get_key(window: Any | list | tuple, key: int) int
+

.

+
+ +
+
+pyray.glfw_get_key_name(key: int, scancode: int) str
+

.

+
+ +
+
+pyray.glfw_get_key_scancode(key: int) int
+

.

+
+ +
+
+pyray.glfw_get_monitor_content_scale(monitor: Any | list | tuple, xscale: Any, yscale: Any) None
+

.

+
+ +
+
+pyray.glfw_get_monitor_name(monitor: Any | list | tuple) str
+

.

+
+ +
+
+pyray.glfw_get_monitor_physical_size(monitor: Any | list | tuple, widthMM: Any, heightMM: Any) None
+

.

+
+ +
+
+pyray.glfw_get_monitor_pos(monitor: Any | list | tuple, xpos: Any, ypos: Any) None
+

.

+
+ +
+
+pyray.glfw_get_monitor_user_pointer(monitor: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_get_monitor_workarea(monitor: Any | list | tuple, xpos: Any, ypos: Any, width: Any, height: Any) None
+

.

+
+ +
+
+pyray.glfw_get_monitors(count: Any) Any
+

.

+
+ +
+
+pyray.glfw_get_mouse_button(window: Any | list | tuple, button: int) int
+

.

+
+ +
+
+pyray.glfw_get_platform() int
+

.

+
+ +
+
+pyray.glfw_get_primary_monitor() Any
+

.

+
+ +
+
+pyray.glfw_get_proc_address(procname: str) Any
+

.

+
+ +
+
+pyray.glfw_get_required_instance_extensions(count: Any) list[str]
+

.

+
+ +
+
+pyray.glfw_get_time() float
+

.

+
+ +
+
+pyray.glfw_get_timer_frequency() int
+

.

+
+ +
+
+pyray.glfw_get_timer_value() int
+

.

+
+ +
+
+pyray.glfw_get_version(major: Any, minor: Any, rev: Any) None
+

.

+
+ +
+
+pyray.glfw_get_version_string() str
+

.

+
+ +
+
+pyray.glfw_get_video_mode(monitor: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_get_video_modes(monitor: Any | list | tuple, count: Any) Any
+

.

+
+ +
+
+pyray.glfw_get_window_attrib(window: Any | list | tuple, attrib: int) int
+

.

+
+ +
+
+pyray.glfw_get_window_content_scale(window: Any | list | tuple, xscale: Any, yscale: Any) None
+

.

+
+ +
+
+pyray.glfw_get_window_frame_size(window: Any | list | tuple, left: Any, top: Any, right: Any, bottom: Any) None
+

.

+
+ +
+
+pyray.glfw_get_window_monitor(window: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_get_window_opacity(window: Any | list | tuple) float
+

.

+
+ +
+
+pyray.glfw_get_window_pos(window: Any | list | tuple, xpos: Any, ypos: Any) None
+

.

+
+ +
+
+pyray.glfw_get_window_size(window: Any | list | tuple, width: Any, height: Any) None
+

.

+
+ +
+
+pyray.glfw_get_window_title(window: Any | list | tuple) str
+

.

+
+ +
+
+pyray.glfw_get_window_user_pointer(window: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_hide_window(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_iconify_window(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_init() int
+

.

+
+ +
+
+pyray.glfw_init_allocator(allocator: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_init_hint(hint: int, value: int) None
+

.

+
+ +
+
+pyray.glfw_joystick_is_gamepad(jid: int) int
+

.

+
+ +
+
+pyray.glfw_joystick_present(jid: int) int
+

.

+
+ +
+
+pyray.glfw_make_context_current(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_maximize_window(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_platform_supported(platform: int) int
+

.

+
+ +
+
+pyray.glfw_poll_events() None
+

.

+
+ +
+
+pyray.glfw_post_empty_event() None
+

.

+
+ +
+
+pyray.glfw_raw_mouse_motion_supported() int
+

.

+
+ +
+
+pyray.glfw_request_window_attention(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_restore_window(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_set_char_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_char_mods_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_clipboard_string(window: Any | list | tuple, string: str) None
+

.

+
+ +
+
+pyray.glfw_set_cursor(window: Any | list | tuple, cursor: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_set_cursor_enter_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_cursor_pos(window: Any | list | tuple, xpos: float, ypos: float) None
+

.

+
+ +
+
+pyray.glfw_set_cursor_pos_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_drop_callback(window: Any | list | tuple, callback: list[str] | list | tuple) list[str]
+

.

+
+ +
+
+pyray.glfw_set_error_callback(callback: str) str
+

.

+
+ +
+
+pyray.glfw_set_framebuffer_size_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_gamma(monitor: Any | list | tuple, gamma: float) None
+

.

+
+ +
+
+pyray.glfw_set_gamma_ramp(monitor: Any | list | tuple, ramp: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_set_input_mode(window: Any | list | tuple, mode: int, value: int) None
+

.

+
+ +
+
+pyray.glfw_set_joystick_callback(callback: Any) Any
+

.

+
+ +
+
+pyray.glfw_set_joystick_user_pointer(jid: int, pointer: Any) None
+

.

+
+ +
+
+pyray.glfw_set_key_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_monitor_callback(callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_monitor_user_pointer(monitor: Any | list | tuple, pointer: Any) None
+

.

+
+ +
+
+pyray.glfw_set_mouse_button_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_scroll_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_time(time: float) None
+

.

+
+ +
+
+pyray.glfw_set_window_aspect_ratio(window: Any | list | tuple, numer: int, denom: int) None
+

.

+
+ +
+
+pyray.glfw_set_window_attrib(window: Any | list | tuple, attrib: int, value: int) None
+

.

+
+ +
+
+pyray.glfw_set_window_close_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_window_content_scale_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_window_focus_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_window_icon(window: Any | list | tuple, count: int, images: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_set_window_iconify_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_window_maximize_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_window_monitor(window: Any | list | tuple, monitor: Any | list | tuple, xpos: int, ypos: int, width: int, height: int, refreshRate: int) None
+

.

+
+ +
+
+pyray.glfw_set_window_opacity(window: Any | list | tuple, opacity: float) None
+

.

+
+ +
+
+pyray.glfw_set_window_pos(window: Any | list | tuple, xpos: int, ypos: int) None
+

.

+
+ +
+
+pyray.glfw_set_window_pos_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_window_refresh_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_window_should_close(window: Any | list | tuple, value: int) None
+

.

+
+ +
+
+pyray.glfw_set_window_size(window: Any | list | tuple, width: int, height: int) None
+

.

+
+ +
+
+pyray.glfw_set_window_size_callback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+pyray.glfw_set_window_size_limits(window: Any | list | tuple, minwidth: int, minheight: int, maxwidth: int, maxheight: int) None
+

.

+
+ +
+
+pyray.glfw_set_window_title(window: Any | list | tuple, title: str) None
+

.

+
+ +
+
+pyray.glfw_set_window_user_pointer(window: Any | list | tuple, pointer: Any) None
+

.

+
+ +
+
+pyray.glfw_show_window(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_swap_buffers(window: Any | list | tuple) None
+

.

+
+ +
+
+pyray.glfw_swap_interval(interval: int) None
+

.

+
+ +
+
+pyray.glfw_terminate() None
+

.

+
+ +
+
+pyray.glfw_update_gamepad_mappings(string: str) int
+

.

+
+ +
+
+pyray.glfw_vulkan_supported() int
+

.

+
+ +
+
+pyray.glfw_wait_events() None
+

.

+
+ +
+
+pyray.glfw_wait_events_timeout(timeout: float) None
+

.

+
+ +
+
+pyray.glfw_window_hint(hint: int, value: int) None
+

.

+
+ +
+
+pyray.glfw_window_hint_string(hint: int, value: str) None
+

.

+
+ +
+
+pyray.glfw_window_should_close(window: Any | list | tuple) int
+

.

+
+ +
+
+pyray.gui_button(bounds: Rectangle | list | tuple, text: str) int
+

Button control, returns true when clicked.

+
+ +
+
+pyray.gui_check_box(bounds: Rectangle | list | tuple, text: str, checked: Any) int
+

Check Box control, returns true when active.

+
+ +
+
+pyray.gui_color_bar_alpha(bounds: Rectangle | list | tuple, text: str, alpha: Any) int
+

Color Bar Alpha control.

+
+ +
+
+pyray.gui_color_bar_hue(bounds: Rectangle | list | tuple, text: str, value: Any) int
+

Color Bar Hue control.

+
+ +
+
+pyray.gui_color_panel(bounds: Rectangle | list | tuple, text: str, color: Any | list | tuple) int
+

Color Panel control.

+
+ +
+
+pyray.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().

+
+ +
+
+pyray.gui_color_picker(bounds: Rectangle | list | tuple, text: str, color: Any | list | tuple) int
+

Color Picker control (multiple color controls).

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.gui_combo_box(bounds: Rectangle | list | tuple, text: str, active: Any) int
+

Combo Box control.

+
+ +
+
+pyray.gui_disable() None
+

Disable gui controls (global state).

+
+ +
+
+pyray.gui_disable_tooltip() None
+

Disable gui tooltips (global state).

+
+ +
+
+pyray.gui_draw_icon(iconId: int, posX: int, posY: int, pixelSize: int, color: Color | list | tuple) None
+

Draw icon using pixel size at specified position.

+
+ +
+
+pyray.gui_dropdown_box(bounds: Rectangle | list | tuple, text: str, active: Any, editMode: bool) int
+

Dropdown Box control.

+
+ +
+
+pyray.gui_dummy_rec(bounds: Rectangle | list | tuple, text: str) int
+

Dummy control for placeholders.

+
+ +
+
+pyray.gui_enable() None
+

Enable gui controls (global state).

+
+ +
+
+pyray.gui_enable_tooltip() None
+

Enable gui tooltips (global state).

+
+ +
+
+pyray.gui_get_font() Font
+

Get gui custom font (global state).

+
+ +
+
+pyray.gui_get_icons() Any
+

Get raygui icons data pointer.

+
+ +
+
+pyray.gui_get_state() int
+

Get gui state (global state).

+
+ +
+
+pyray.gui_get_style(control: int, property: int) int
+

Get one style property.

+
+ +
+
+pyray.gui_grid(bounds: Rectangle | list | tuple, text: str, spacing: float, subdivs: int, mouseCell: Any | list | tuple) int
+

Grid control.

+
+ +
+
+pyray.gui_group_box(bounds: Rectangle | list | tuple, text: str) int
+

Group Box control with text name.

+
+ +
+
+pyray.gui_icon_text(iconId: int, text: str) str
+

Get text with icon id prepended (if supported).

+
+ +
+
+pyray.gui_is_locked() bool
+

Check if gui is locked (global state).

+
+ +
+
+pyray.gui_label(bounds: Rectangle | list | tuple, text: str) int
+

Label control.

+
+ +
+
+pyray.gui_label_button(bounds: Rectangle | list | tuple, text: str) int
+

Label button control, returns true when clicked.

+
+ +
+
+pyray.gui_line(bounds: Rectangle | list | tuple, text: str) int
+

Line separator control, could contain text.

+
+ +
+
+pyray.gui_list_view(bounds: Rectangle | list | tuple, text: str, scrollIndex: Any, active: Any) int
+

List View control.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.gui_load_icons(fileName: str, loadIconsName: bool) list[str]
+

Load raygui icons file (.rgi) into internal icons data.

+
+ +
+
+pyray.gui_load_style(fileName: str) None
+

Load style file over global style variable (.rgs).

+
+ +
+
+pyray.gui_load_style_default() None
+

Load style default over global style.

+
+ +
+
+pyray.gui_lock() None
+

Lock gui controls (global state).

+
+ +
+
+pyray.gui_message_box(bounds: Rectangle | list | tuple, title: str, message: str, buttons: str) int
+

Message Box control, displays a message.

+
+ +
+
+pyray.gui_panel(bounds: Rectangle | list | tuple, text: str) int
+

Panel control, useful to group controls.

+
+ +
+
+pyray.gui_progress_bar(bounds: Rectangle | list | tuple, textLeft: str, textRight: str, value: Any, minValue: float, maxValue: float) int
+

Progress Bar control.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.gui_set_alpha(alpha: float) None
+

Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f.

+
+ +
+
+pyray.gui_set_font(font: Font | list | tuple) None
+

Set gui custom font (global state).

+
+ +
+
+pyray.gui_set_icon_scale(scale: int) None
+

Set default icon drawing size.

+
+ +
+
+pyray.gui_set_state(state: int) None
+

Set gui state (global state).

+
+ +
+
+pyray.gui_set_style(control: int, property: int, value: int) None
+

Set one style property.

+
+ +
+
+pyray.gui_set_tooltip(tooltip: str) None
+

Set tooltip string.

+
+ +
+
+pyray.gui_slider(bounds: Rectangle | list | tuple, textLeft: str, textRight: str, value: Any, minValue: float, maxValue: float) int
+

Slider control.

+
+ +
+
+pyray.gui_slider_bar(bounds: Rectangle | list | tuple, textLeft: str, textRight: str, value: Any, minValue: float, maxValue: float) int
+

Slider Bar control.

+
+ +
+
+pyray.gui_spinner(bounds: Rectangle | list | tuple, text: str, value: Any, minValue: int, maxValue: int, editMode: bool) int
+

Spinner control.

+
+ +
+
+pyray.gui_status_bar(bounds: Rectangle | list | tuple, text: str) int
+

Status Bar control, shows info text.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.gui_text_box(bounds: Rectangle | list | tuple, text: str, textSize: int, editMode: bool) int
+

Text Box control, updates input text.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.gui_toggle(bounds: Rectangle | list | tuple, text: str, active: Any) int
+

Toggle Button control.

+
+ +
+
+pyray.gui_toggle_group(bounds: Rectangle | list | tuple, text: str, active: Any) int
+

Toggle Group control.

+
+ +
+
+pyray.gui_toggle_slider(bounds: Rectangle | list | tuple, text: str, active: Any) int
+

Toggle Slider control.

+
+ +
+
+pyray.gui_unlock() None
+

Unlock gui controls (global state).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.gui_value_box_float(bounds: Rectangle | list | tuple, text: str, textValue: str, value: Any, editMode: bool) int
+

Value box control for float values.

+
+ +
+
+pyray.gui_window_box(bounds: Rectangle | list | tuple, title: str) int
+

Window Box control, shows a window that can be closed.

+
+ +
+
+pyray.hide_cursor() None
+

Hides cursor.

+
+ +
+
+pyray.image_alpha_clear(image: Any | list | tuple, color: Color | list | tuple, threshold: float) None
+

Clear alpha channel to desired color.

+
+ +
+
+pyray.image_alpha_crop(image: Any | list | tuple, threshold: float) None
+

Crop image depending on alpha value.

+
+ +
+
+pyray.image_alpha_mask(image: Any | list | tuple, alphaMask: Image | list | tuple) None
+

Apply alpha mask to image.

+
+ +
+
+pyray.image_alpha_premultiply(image: Any | list | tuple) None
+

Premultiply alpha channel.

+
+ +
+
+pyray.image_blur_gaussian(image: Any | list | tuple, blurSize: int) None
+

Apply Gaussian blur using a box blur approximation.

+
+ +
+
+pyray.image_clear_background(dst: Any | list | tuple, color: Color | list | tuple) None
+

Clear image background with given color.

+
+ +
+
+pyray.image_color_brightness(image: Any | list | tuple, brightness: int) None
+

Modify image color: brightness (-255 to 255).

+
+ +
+
+pyray.image_color_contrast(image: Any | list | tuple, contrast: float) None
+

Modify image color: contrast (-100 to 100).

+
+ +
+
+pyray.image_color_grayscale(image: Any | list | tuple) None
+

Modify image color: grayscale.

+
+ +
+
+pyray.image_color_invert(image: Any | list | tuple) None
+

Modify image color: invert.

+
+ +
+
+pyray.image_color_replace(image: Any | list | tuple, color: Color | list | tuple, replace: Color | list | tuple) None
+

Modify image color: replace color.

+
+ +
+
+pyray.image_color_tint(image: Any | list | tuple, color: Color | list | tuple) None
+

Modify image color: tint.

+
+ +
+
+pyray.image_copy(image: Image | list | tuple) Image
+

Create an image duplicate (useful for transformations).

+
+ +
+
+pyray.image_crop(image: Any | list | tuple, crop: Rectangle | list | tuple) None
+

Crop an image to a defined rectangle.

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.image_draw_pixel(dst: Any | list | tuple, posX: int, posY: int, color: Color | list | tuple) None
+

Draw pixel within an image.

+
+ +
+
+pyray.image_draw_pixel_v(dst: Any | list | tuple, position: Vector2 | list | tuple, color: Color | list | tuple) None
+

Draw pixel within an image (Vector version).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.image_draw_rectangle_rec(dst: Any | list | tuple, rec: Rectangle | list | tuple, color: Color | list | tuple) None
+

Draw rectangle within an image.

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.image_flip_horizontal(image: Any | list | tuple) None
+

Flip image horizontally.

+
+ +
+
+pyray.image_flip_vertical(image: Any | list | tuple) None
+

Flip image vertically.

+
+ +
+
+pyray.image_format(image: Any | list | tuple, newFormat: int) None
+

Convert image data to desired format.

+
+ +
+
+pyray.image_from_channel(image: Image | list | tuple, selectedChannel: int) Image
+

Create an image from a selected channel of another image (GRAYSCALE).

+
+ +
+
+pyray.image_from_image(image: Image | list | tuple, rec: Rectangle | list | tuple) Image
+

Create an image from another image piece.

+
+ +
+
+pyray.image_kernel_convolution(image: Any | list | tuple, kernel: Any, kernelSize: int) None
+

Apply custom square convolution kernel to image.

+
+ +
+
+pyray.image_mipmaps(image: Any | list | tuple) None
+

Compute all mipmap levels for a provided image.

+
+ +
+
+pyray.image_resize(image: Any | list | tuple, newWidth: int, newHeight: int) None
+

Resize image (Bicubic scaling algorithm).

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.image_resize_nn(image: Any | list | tuple, newWidth: int, newHeight: int) None
+

Resize image (Nearest-Neighbor scaling algorithm).

+
+ +
+
+pyray.image_rotate(image: Any | list | tuple, degrees: int) None
+

Rotate image by input angle in degrees (-359 to 359).

+
+ +
+
+pyray.image_rotate_ccw(image: Any | list | tuple) None
+

Rotate image counter-clockwise 90deg.

+
+ +
+
+pyray.image_rotate_cw(image: Any | list | tuple) None
+

Rotate image clockwise 90deg.

+
+ +
+
+pyray.image_text(text: str, fontSize: int, color: Color | list | tuple) Image
+

Create an image from text (default font).

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.image_to_pot(image: Any | list | tuple, fill: Color | list | tuple) None
+

Convert image to POT (power-of-two).

+
+ +
+
+pyray.init_audio_device() None
+

Initialize audio device and context.

+
+ +
+
+pyray.init_physics() None
+

Initializes physics system.

+
+ +
+
+pyray.init_window(width: int, height: int, title: str) None
+

Initialize window and OpenGL context.

+
+ +
+
+pyray.is_audio_device_ready() bool
+

Check if audio device has been initialized successfully.

+
+ +
+
+pyray.is_audio_stream_playing(stream: AudioStream | list | tuple) bool
+

Check if audio stream is playing.

+
+ +
+
+pyray.is_audio_stream_processed(stream: AudioStream | list | tuple) bool
+

Check if any audio stream buffers requires refill.

+
+ +
+
+pyray.is_audio_stream_valid(stream: AudioStream | list | tuple) bool
+

Checks if an audio stream is valid (buffers initialized).

+
+ +
+
+pyray.is_cursor_hidden() bool
+

Check if cursor is not visible.

+
+ +
+
+pyray.is_cursor_on_screen() bool
+

Check if cursor is on the screen.

+
+ +
+
+pyray.is_file_dropped() bool
+

Check if a file has been dropped into window.

+
+ +
+
+pyray.is_file_extension(fileName: str, ext: str) bool
+

Check file extension (including point: .png, .wav).

+
+ +
+
+pyray.is_file_name_valid(fileName: str) bool
+

Check if fileName is valid for the platform/OS.

+
+ +
+
+pyray.is_font_valid(font: Font | list | tuple) bool
+

Check if a font is valid (font data loaded, WARNING: GPU texture not checked).

+
+ +
+
+pyray.is_gamepad_available(gamepad: int) bool
+

Check if a gamepad is available.

+
+ +
+
+pyray.is_gamepad_button_down(gamepad: int, button: int) bool
+

Check if a gamepad button is being pressed.

+
+ +
+
+pyray.is_gamepad_button_pressed(gamepad: int, button: int) bool
+

Check if a gamepad button has been pressed once.

+
+ +
+
+pyray.is_gamepad_button_released(gamepad: int, button: int) bool
+

Check if a gamepad button has been released once.

+
+ +
+
+pyray.is_gamepad_button_up(gamepad: int, button: int) bool
+

Check if a gamepad button is NOT being pressed.

+
+ +
+
+pyray.is_gesture_detected(gesture: int) bool
+

Check if a gesture have been detected.

+
+ +
+
+pyray.is_image_valid(image: Image | list | tuple) bool
+

Check if an image is valid (data and parameters).

+
+ +
+
+pyray.is_key_down(key: int) bool
+

Check if a key is being pressed.

+
+ +
+
+pyray.is_key_pressed(key: int) bool
+

Check if a key has been pressed once.

+
+ +
+
+pyray.is_key_pressed_repeat(key: int) bool
+

Check if a key has been pressed again.

+
+ +
+
+pyray.is_key_released(key: int) bool
+

Check if a key has been released once.

+
+ +
+
+pyray.is_key_up(key: int) bool
+

Check if a key is NOT being pressed.

+
+ +
+
+pyray.is_material_valid(material: Material | list | tuple) bool
+

Check if a material is valid (shader assigned, map textures loaded in GPU).

+
+ +
+
+pyray.is_model_animation_valid(model: Model | list | tuple, anim: ModelAnimation | list | tuple) bool
+

Check model animation skeleton match.

+
+ +
+
+pyray.is_model_valid(model: Model | list | tuple) bool
+

Check if a model is valid (loaded in GPU, VAO/VBOs).

+
+ +
+
+pyray.is_mouse_button_down(button: int) bool
+

Check if a mouse button is being pressed.

+
+ +
+
+pyray.is_mouse_button_pressed(button: int) bool
+

Check if a mouse button has been pressed once.

+
+ +
+
+pyray.is_mouse_button_released(button: int) bool
+

Check if a mouse button has been released once.

+
+ +
+
+pyray.is_mouse_button_up(button: int) bool
+

Check if a mouse button is NOT being pressed.

+
+ +
+
+pyray.is_music_stream_playing(music: Music | list | tuple) bool
+

Check if music is playing.

+
+ +
+
+pyray.is_music_valid(music: Music | list | tuple) bool
+

Checks if a music stream is valid (context and buffers initialized).

+
+ +
+
+pyray.is_path_file(path: str) bool
+

Check if a given path is a file or a directory.

+
+ +
+
+pyray.is_render_texture_valid(target: RenderTexture | list | tuple) bool
+

Check if a render texture is valid (loaded in GPU).

+
+ +
+
+pyray.is_shader_valid(shader: Shader | list | tuple) bool
+

Check if a shader is valid (loaded on GPU).

+
+ +
+
+pyray.is_sound_playing(sound: Sound | list | tuple) bool
+

Check if a sound is currently playing.

+
+ +
+
+pyray.is_sound_valid(sound: Sound | list | tuple) bool
+

Checks if a sound is valid (data loaded and buffers initialized).

+
+ +
+
+pyray.is_texture_valid(texture: Texture | list | tuple) bool
+

Check if a texture is valid (loaded in GPU).

+
+ +
+
+pyray.is_wave_valid(wave: Wave | list | tuple) bool
+

Checks if wave data is valid (data loaded and parameters).

+
+ +
+
+pyray.is_window_focused() bool
+

Check if window is currently focused.

+
+ +
+
+pyray.is_window_fullscreen() bool
+

Check if window is currently fullscreen.

+
+ +
+
+pyray.is_window_hidden() bool
+

Check if window is currently hidden.

+
+ +
+
+pyray.is_window_maximized() bool
+

Check if window is currently maximized.

+
+ +
+
+pyray.is_window_minimized() bool
+

Check if window is currently minimized.

+
+ +
+
+pyray.is_window_ready() bool
+

Check if window has been initialized successfully.

+
+ +
+
+pyray.is_window_resized() bool
+

Check if window has been resized last frame.

+
+ +
+
+pyray.is_window_state(flag: int) bool
+

Check if one specific window flag is enabled.

+
+ +
+
+pyray.lerp(start: float, end: float, amount: float) float
+

.

+
+ +
+
+pyray.load_audio_stream(sampleRate: int, sampleSize: int, channels: int) AudioStream
+

Load audio stream (to stream raw audio pcm data).

+
+ +
+
+pyray.load_automation_event_list(fileName: str) AutomationEventList
+

Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS.

+
+ +
+
+pyray.load_codepoints(text: str, count: Any) Any
+

Load all codepoints from a UTF-8 text string, codepoints count returned by parameter.

+
+ +
+
+pyray.load_directory_files(dirPath: str) FilePathList
+

Load directory filepaths.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.load_dropped_files() FilePathList
+

Load dropped filepaths.

+
+ +
+
+pyray.load_file_data(fileName: str, dataSize: Any) str
+

Load file data as byte array (read).

+
+ +
+
+pyray.load_file_text(fileName: str) str
+

Load text data from file (read), returns a ‘' terminated string.

+
+ +
+
+pyray.load_font(fileName: str) Font
+

Load font from file into GPU memory (VRAM).

+
+ +
+
+pyray.load_font_data(fileData: str, dataSize: int, fontSize: int, codepoints: Any, codepointCount: int, type: int) Any
+

Load font data for further use.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.load_font_from_image(image: Image | list | tuple, key: Color | list | tuple, firstChar: int) Font
+

Load font from Image (XNA style).

+
+ +
+
+pyray.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’.

+
+ +
+
+pyray.load_image(fileName: str) Image
+

Load image from file into CPU memory (RAM).

+
+ +
+
+pyray.load_image_anim(fileName: str, frames: Any) Image
+

Load image sequence from file (frames appended to image.data).

+
+ +
+
+pyray.load_image_anim_from_memory(fileType: str, fileData: str, dataSize: int, frames: Any) Image
+

Load image sequence from memory buffer.

+
+ +
+
+pyray.load_image_colors(image: Image | list | tuple) Any
+

Load color data from image as a Color array (RGBA - 32bit).

+
+ +
+
+pyray.load_image_from_memory(fileType: str, fileData: str, dataSize: int) Image
+

Load image from memory buffer, fileType refers to extension: i.e. ‘.png’.

+
+ +
+
+pyray.load_image_from_screen() Image
+

Load image from screen buffer and (screenshot).

+
+ +
+
+pyray.load_image_from_texture(texture: Texture | list | tuple) Image
+

Load image from GPU texture data.

+
+ +
+
+pyray.load_image_palette(image: Image | list | tuple, maxPaletteSize: int, colorCount: Any) Any
+

Load colors palette from image as a Color array (RGBA - 32bit).

+
+ +
+
+pyray.load_image_raw(fileName: str, width: int, height: int, format: int, headerSize: int) Image
+

Load image from RAW file data.

+
+ +
+
+pyray.load_material_default() Material
+

Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps).

+
+ +
+
+pyray.load_materials(fileName: str, materialCount: Any) Any
+

Load materials from model file.

+
+ +
+
+pyray.load_model(fileName: str) Model
+

Load model from files (meshes and materials).

+
+ +
+
+pyray.load_model_animations(fileName: str, animCount: Any) Any
+

Load model animations from file.

+
+ +
+
+pyray.load_model_from_mesh(mesh: Mesh | list | tuple) Model
+

Load model from generated mesh (default material).

+
+ +
+
+pyray.load_music_stream(fileName: str) Music
+

Load music stream from file.

+
+ +
+
+pyray.load_music_stream_from_memory(fileType: str, data: str, dataSize: int) Music
+

Load music stream from data.

+
+ +
+
+pyray.load_random_sequence(count: int, min_1: int, max_2: int) Any
+

Load random values sequence, no values repeated.

+
+ +
+
+pyray.load_render_texture(width: int, height: int) RenderTexture
+

Load texture for rendering (framebuffer).

+
+ +
+
+pyray.load_shader(vsFileName: str, fsFileName: str) Shader
+

Load shader from files and bind default locations.

+
+ +
+
+pyray.load_shader_from_memory(vsCode: str, fsCode: str) Shader
+

Load shader from code strings and bind default locations.

+
+ +
+
+pyray.load_sound(fileName: str) Sound
+

Load sound from file.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.load_sound_from_wave(wave: Wave | list | tuple) Sound
+

Load sound from wave data.

+
+ +
+
+pyray.load_texture(fileName: str) Texture
+

Load texture from file into GPU memory (VRAM).

+
+ +
+
+pyray.load_texture_cubemap(image: Image | list | tuple, layout: int) Texture
+

Load cubemap from image, multiple image cubemap layouts supported.

+
+ +
+
+pyray.load_texture_from_image(image: Image | list | tuple) Texture
+

Load texture from image data.

+
+ +
+
+pyray.load_utf8(codepoints: Any, length: int) str
+

Load UTF-8 text encoded from codepoints array.

+
+ +
+
+pyray.load_vr_stereo_config(device: VrDeviceInfo | list | tuple) VrStereoConfig
+

Load VR stereo config for VR simulator device parameters.

+
+ +
+
+pyray.load_wave(fileName: str) Wave
+

Load wave data from file.

+
+ +
+
+pyray.load_wave_from_memory(fileType: str, fileData: str, dataSize: int) Wave
+

Load wave from memory buffer, fileType refers to extension: i.e. ‘.wav’.

+
+ +
+
+pyray.load_wave_samples(wave: Wave | list | tuple) Any
+

Load samples data from wave as a 32bit float data array.

+
+ +
+
+pyray.make_directory(dirPath: str) int
+

Create directories (including full path requested), returns 0 on success.

+
+ +
+
+pyray.matrix_add(left: Matrix | list | tuple, right: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+pyray.matrix_decompose(mat: Matrix | list | tuple, translation: Any | list | tuple, rotation: Any | list | tuple, scale: Any | list | tuple) None
+

.

+
+ +
+
+pyray.matrix_determinant(mat: Matrix | list | tuple) float
+

.

+
+ +
+
+pyray.matrix_frustum(left: float, right: float, bottom: float, top: float, nearPlane: float, farPlane: float) Matrix
+

.

+
+ +
+
+pyray.matrix_identity() Matrix
+

.

+
+ +
+
+pyray.matrix_invert(mat: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+pyray.matrix_look_at(eye: Vector3 | list | tuple, target: Vector3 | list | tuple, up: Vector3 | list | tuple) Matrix
+

.

+
+ +
+
+pyray.matrix_multiply(left: Matrix | list | tuple, right: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+pyray.matrix_ortho(left: float, right: float, bottom: float, top: float, nearPlane: float, farPlane: float) Matrix
+

.

+
+ +
+
+pyray.matrix_perspective(fovY: float, aspect: float, nearPlane: float, farPlane: float) Matrix
+

.

+
+ +
+
+pyray.matrix_rotate(axis: Vector3 | list | tuple, angle: float) Matrix
+

.

+
+ +
+
+pyray.matrix_rotate_x(angle: float) Matrix
+

.

+
+ +
+
+pyray.matrix_rotate_xyz(angle: Vector3 | list | tuple) Matrix
+

.

+
+ +
+
+pyray.matrix_rotate_y(angle: float) Matrix
+

.

+
+ +
+
+pyray.matrix_rotate_z(angle: float) Matrix
+

.

+
+ +
+
+pyray.matrix_rotate_zyx(angle: Vector3 | list | tuple) Matrix
+

.

+
+ +
+
+pyray.matrix_scale(x: float, y: float, z: float) Matrix
+

.

+
+ +
+
+pyray.matrix_subtract(left: Matrix | list | tuple, right: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+pyray.matrix_to_float_v(mat: Matrix | list | tuple) float16
+

.

+
+ +
+
+pyray.matrix_trace(mat: Matrix | list | tuple) float
+

.

+
+ +
+
+pyray.matrix_translate(x: float, y: float, z: float) Matrix
+

.

+
+ +
+
+pyray.matrix_transpose(mat: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+pyray.maximize_window() None
+

Set window state: maximized, if resizable.

+
+ +
+
+pyray.measure_text(text: str, fontSize: int) int
+

Measure string width for default font.

+
+ +
+
+pyray.measure_text_ex(font: Font | list | tuple, text: str, fontSize: float, spacing: float) Vector2
+

Measure string size for Font.

+
+ +
+
+pyray.mem_alloc(size: int) Any
+

Internal memory allocator.

+
+ +
+
+pyray.mem_free(ptr: Any) None
+

Internal memory free.

+
+ +
+
+pyray.mem_realloc(ptr: Any, size: int) Any
+

Internal memory reallocator.

+
+ +
+
+pyray.minimize_window() None
+

Set window state: minimized, if resizable.

+
+ +
+
+pyray.normalize(value: float, start: float, end: float) float
+

.

+
+ +
+
+pyray.open_url(url: str) None
+

Open URL with default system browser (if available).

+
+ +
+
+pyray.pause_audio_stream(stream: AudioStream | list | tuple) None
+

Pause audio stream.

+
+ +
+
+pyray.pause_music_stream(music: Music | list | tuple) None
+

Pause music playing.

+
+ +
+
+pyray.pause_sound(sound: Sound | list | tuple) None
+

Pause a sound.

+
+ +
+
+pyray.physics_add_force(body: Any | list | tuple, force: Vector2 | list | tuple) None
+

Adds a force to a physics body.

+
+ +
+
+pyray.physics_add_torque(body: Any | list | tuple, amount: float) None
+

Adds an angular force to a physics body.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.play_audio_stream(stream: AudioStream | list | tuple) None
+

Play audio stream.

+
+ +
+
+pyray.play_automation_event(event: AutomationEvent | list | tuple) None
+

Play a recorded automation event.

+
+ +
+
+pyray.play_music_stream(music: Music | list | tuple) None
+

Start music playing.

+
+ +
+
+pyray.play_sound(sound: Sound | list | tuple) None
+

Play a sound.

+
+ +
+
+pyray.poll_input_events() None
+

Register all input events.

+
+ +
+
+pyray.quaternion_add(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.quaternion_add_value(q: Vector4 | list | tuple, add: float) Vector4
+

.

+
+ +
+
+pyray.quaternion_cubic_hermite_spline(q1: Vector4 | list | tuple, outTangent1: Vector4 | list | tuple, q2: Vector4 | list | tuple, inTangent2: Vector4 | list | tuple, t: float) Vector4
+

.

+
+ +
+
+pyray.quaternion_divide(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.quaternion_equals(p: Vector4 | list | tuple, q: Vector4 | list | tuple) int
+

.

+
+ +
+
+pyray.quaternion_from_axis_angle(axis: Vector3 | list | tuple, angle: float) Vector4
+

.

+
+ +
+
+pyray.quaternion_from_euler(pitch: float, yaw: float, roll: float) Vector4
+

.

+
+ +
+
+pyray.quaternion_from_matrix(mat: Matrix | list | tuple) Vector4
+

.

+
+ +
+
+pyray.quaternion_from_vector3_to_vector3(from_0: Vector3 | list | tuple, to: Vector3 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.quaternion_identity() Vector4
+

.

+
+ +
+
+pyray.quaternion_invert(q: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.quaternion_length(q: Vector4 | list | tuple) float
+

.

+
+ +
+
+pyray.quaternion_lerp(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple, amount: float) Vector4
+

.

+
+ +
+
+pyray.quaternion_multiply(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.quaternion_nlerp(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple, amount: float) Vector4
+

.

+
+ +
+
+pyray.quaternion_normalize(q: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.quaternion_scale(q: Vector4 | list | tuple, mul: float) Vector4
+

.

+
+ +
+
+pyray.quaternion_slerp(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple, amount: float) Vector4
+

.

+
+ +
+
+pyray.quaternion_subtract(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.quaternion_subtract_value(q: Vector4 | list | tuple, sub: float) Vector4
+

.

+
+ +
+
+pyray.quaternion_to_axis_angle(q: Vector4 | list | tuple, outAxis: Any | list | tuple, outAngle: Any) None
+

.

+
+ +
+
+pyray.quaternion_to_euler(q: Vector4 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.quaternion_to_matrix(q: Vector4 | list | tuple) Matrix
+

.

+
+ +
+
+pyray.quaternion_transform(q: Vector4 | list | tuple, mat: Matrix | list | tuple) Vector4
+

.

+
+ +
+
+pyray.remap(value: float, inputStart: float, inputEnd: float, outputStart: float, outputEnd: float) float
+

.

+
+ +
+
+pyray.reset_physics() None
+

Reset physics system (global variables).

+
+ +
+
+pyray.restore_window() None
+

Set window state: not minimized/maximized.

+
+ +
+
+pyray.resume_audio_stream(stream: AudioStream | list | tuple) None
+

Resume audio stream.

+
+ +
+
+pyray.resume_music_stream(music: Music | list | tuple) None
+

Resume playing paused music.

+
+ +
+
+pyray.resume_sound(sound: Sound | list | tuple) None
+

Resume a paused sound.

+
+ +
+
+class pyray.rlBlendMode
+

Color blending modes (pre-defined).

+
+
+RL_BLEND_ADDITIVE = 1
+
+ +
+
+RL_BLEND_ADD_COLORS = 3
+
+ +
+
+RL_BLEND_ALPHA = 0
+
+ +
+
+RL_BLEND_ALPHA_PREMULTIPLY = 5
+
+ +
+
+RL_BLEND_CUSTOM = 6
+
+ +
+
+RL_BLEND_CUSTOM_SEPARATE = 7
+
+ +
+
+RL_BLEND_MULTIPLIED = 2
+
+ +
+
+RL_BLEND_SUBTRACT_COLORS = 4
+
+ +
+ +
+
+class pyray.rlCullMode
+

Face culling mode.

+
+
+RL_CULL_FACE_BACK = 1
+
+ +
+
+RL_CULL_FACE_FRONT = 0
+
+ +
+ +
+
+class pyray.rlDrawCall(mode: int | None = None, vertexCount: int | None = None, vertexAlignment: int | None = None, textureId: int | None = None)
+

of those state-change happens (this is done in core module).

+
+
+mode: int = None
+
+ +
+
+textureId: int = None
+
+ +
+
+vertexAlignment: int = None
+
+ +
+
+vertexCount: int = None
+
+ +
+ +
+
+class pyray.rlFramebufferAttachTextureType
+

Framebuffer texture attachment type.

+
+
+RL_ATTACHMENT_CUBEMAP_NEGATIVE_X = 1
+
+ +
+
+RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y = 3
+
+ +
+
+RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z = 5
+
+ +
+
+RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0
+
+ +
+
+RL_ATTACHMENT_CUBEMAP_POSITIVE_Y = 2
+
+ +
+
+RL_ATTACHMENT_CUBEMAP_POSITIVE_Z = 4
+
+ +
+
+RL_ATTACHMENT_RENDERBUFFER = 200
+
+ +
+
+RL_ATTACHMENT_TEXTURE2D = 100
+
+ +
+ +
+
+class pyray.rlFramebufferAttachType
+

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 pyray.rlGlVersion
+

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 pyray.rlPixelFormat
+

Texture pixel formats.

+
+
+RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 23
+
+ +
+
+RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 24
+
+ +
+
+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_EAC_RGBA = 20
+
+ +
+
+RL_PIXELFORMAT_COMPRESSED_ETC2_RGB = 19
+
+ +
+
+RL_PIXELFORMAT_COMPRESSED_PVRT_RGB = 21
+
+ +
+
+RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R16 = 11
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16 = 12
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 = 13
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R32 = 8
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4
+
+ +
+
+RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7
+
+ +
+ +
+
+class pyray.rlRenderBatch(bufferCount: int | None = None, currentBuffer: int | None = None, vertexBuffer: Any | None = None, draws: Any | None = None, drawCounter: int | None = None, currentDepth: float | None = None)
+

rlRenderBatch type.

+
+
+bufferCount: int = None
+
+ +
+
+currentBuffer: int = None
+
+ +
+
+currentDepth: float = None
+
+ +
+
+drawCounter: int = None
+
+ +
+
+draws: Any = None
+
+ +
+
+vertexBuffer: Any = None
+
+ +
+ +
+
+class pyray.rlShaderAttributeDataType
+

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 pyray.rlShaderLocationIndex
+

Shader location point type.

+
+
+RL_SHADER_LOC_COLOR_AMBIENT = 14
+
+ +
+
+RL_SHADER_LOC_COLOR_DIFFUSE = 12
+
+ +
+
+RL_SHADER_LOC_COLOR_SPECULAR = 13
+
+ +
+
+RL_SHADER_LOC_MAP_ALBEDO = 15
+
+ +
+
+RL_SHADER_LOC_MAP_BRDF = 25
+
+ +
+
+RL_SHADER_LOC_MAP_CUBEMAP = 22
+
+ +
+
+RL_SHADER_LOC_MAP_EMISSION = 20
+
+ +
+
+RL_SHADER_LOC_MAP_HEIGHT = 21
+
+ +
+
+RL_SHADER_LOC_MAP_IRRADIANCE = 23
+
+ +
+
+RL_SHADER_LOC_MAP_METALNESS = 16
+
+ +
+
+RL_SHADER_LOC_MAP_NORMAL = 17
+
+ +
+
+RL_SHADER_LOC_MAP_OCCLUSION = 19
+
+ +
+
+RL_SHADER_LOC_MAP_PREFILTER = 24
+
+ +
+
+RL_SHADER_LOC_MAP_ROUGHNESS = 18
+
+ +
+
+RL_SHADER_LOC_MATRIX_MODEL = 9
+
+ +
+
+RL_SHADER_LOC_MATRIX_MVP = 6
+
+ +
+
+RL_SHADER_LOC_MATRIX_NORMAL = 10
+
+ +
+
+RL_SHADER_LOC_MATRIX_PROJECTION = 8
+
+ +
+
+RL_SHADER_LOC_MATRIX_VIEW = 7
+
+ +
+
+RL_SHADER_LOC_VECTOR_VIEW = 11
+
+ +
+
+RL_SHADER_LOC_VERTEX_COLOR = 5
+
+ +
+
+RL_SHADER_LOC_VERTEX_NORMAL = 3
+
+ +
+
+RL_SHADER_LOC_VERTEX_POSITION = 0
+
+ +
+
+RL_SHADER_LOC_VERTEX_TANGENT = 4
+
+ +
+
+RL_SHADER_LOC_VERTEX_TEXCOORD01 = 1
+
+ +
+
+RL_SHADER_LOC_VERTEX_TEXCOORD02 = 2
+
+ +
+ +
+
+class pyray.rlShaderUniformDataType
+

Shader uniform data type.

+
+
+RL_SHADER_UNIFORM_FLOAT = 0
+
+ +
+
+RL_SHADER_UNIFORM_INT = 4
+
+ +
+
+RL_SHADER_UNIFORM_IVEC2 = 5
+
+ +
+
+RL_SHADER_UNIFORM_IVEC3 = 6
+
+ +
+
+RL_SHADER_UNIFORM_IVEC4 = 7
+
+ +
+
+RL_SHADER_UNIFORM_SAMPLER2D = 12
+
+ +
+
+RL_SHADER_UNIFORM_UINT = 8
+
+ +
+
+RL_SHADER_UNIFORM_UIVEC2 = 9
+
+ +
+
+RL_SHADER_UNIFORM_UIVEC3 = 10
+
+ +
+
+RL_SHADER_UNIFORM_UIVEC4 = 11
+
+ +
+
+RL_SHADER_UNIFORM_VEC2 = 1
+
+ +
+
+RL_SHADER_UNIFORM_VEC3 = 2
+
+ +
+
+RL_SHADER_UNIFORM_VEC4 = 3
+
+ +
+ +
+
+class pyray.rlTextureFilter
+

Texture parameters: filter mode.

+
+
+RL_TEXTURE_FILTER_ANISOTROPIC_16X = 5
+
+ +
+
+RL_TEXTURE_FILTER_ANISOTROPIC_4X = 3
+
+ +
+
+RL_TEXTURE_FILTER_ANISOTROPIC_8X = 4
+
+ +
+
+RL_TEXTURE_FILTER_BILINEAR = 1
+
+ +
+
+RL_TEXTURE_FILTER_POINT = 0
+
+ +
+
+RL_TEXTURE_FILTER_TRILINEAR = 2
+
+ +
+ +
+
+class pyray.rlTraceLogLevel
+

Trace log level.

+
+
+RL_LOG_ALL = 0
+
+ +
+
+RL_LOG_DEBUG = 2
+
+ +
+
+RL_LOG_ERROR = 5
+
+ +
+
+RL_LOG_FATAL = 6
+
+ +
+
+RL_LOG_INFO = 3
+
+ +
+
+RL_LOG_NONE = 7
+
+ +
+
+RL_LOG_TRACE = 1
+
+ +
+
+RL_LOG_WARNING = 4
+
+ +
+ +
+
+class pyray.rlVertexBuffer(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)
+

Dynamic vertex buffers (position + texcoords + colors + indices arrays).

+
+
+colors: str = None
+
+ +
+
+elementCount: int = None
+
+ +
+
+indices: Any = None
+
+ +
+
+normals: Any = None
+
+ +
+
+texcoords: Any = None
+
+ +
+
+vaoId: int = None
+
+ +
+
+vboId: list = None
+
+ +
+
+vertices: Any = None
+
+ +
+ +
+
+pyray.rl_active_draw_buffers(count: int) None
+

Activate multiple draw color buffers.

+
+ +
+
+pyray.rl_active_texture_slot(slot: int) None
+

Select and active a texture slot.

+
+ +
+
+pyray.rl_begin(mode: int) None
+

Initialize drawing mode (how to organize vertex).

+
+ +
+
+pyray.rl_bind_framebuffer(target: int, framebuffer: int) None
+

Bind framebuffer (FBO).

+
+ +
+
+pyray.rl_bind_image_texture(id: int, index: int, format: int, readonly: bool) None
+

Bind image texture.

+
+ +
+
+pyray.rl_bind_shader_buffer(id: int, index: int) None
+

Bind SSBO buffer.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.rl_check_errors() None
+

Check and log OpenGL error codes.

+
+ +
+
+pyray.rl_check_render_batch_limit(vCount: int) bool
+

Check internal buffer overflow for a given number of vertex.

+
+ +
+
+pyray.rl_clear_color(r: int, g: int, b: int, a: int) None
+

Clear color buffer with color.

+
+ +
+
+pyray.rl_clear_screen_buffers() None
+

Clear used screen buffers (color and depth).

+
+ +
+
+pyray.rl_color3f(x: float, y: float, z: float) None
+

Define one vertex (color) - 3 float.

+
+ +
+
+pyray.rl_color4f(x: float, y: float, z: float, w: float) None
+

Define one vertex (color) - 4 float.

+
+ +
+
+pyray.rl_color4ub(r: int, g: int, b: int, a: int) None
+

Define one vertex (color) - 4 byte.

+
+ +
+
+pyray.rl_color_mask(r: bool, g: bool, b: bool, a: bool) None
+

Color mask control.

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.rl_compute_shader_dispatch(groupX: int, groupY: int, groupZ: int) None
+

Dispatch compute shader (equivalent to draw for graphics pipeline).

+
+ +
+
+pyray.rl_copy_shader_buffer(destId: int, srcId: int, destOffset: int, srcOffset: int, count: int) None
+

Copy SSBO data between buffers.

+
+ +
+
+pyray.rl_cubemap_parameters(id: int, param: int, value: int) None
+

Set cubemap parameters (filter, wrap).

+
+ +
+
+pyray.rl_disable_backface_culling() None
+

Disable backface culling.

+
+ +
+
+pyray.rl_disable_color_blend() None
+

Disable color blending.

+
+ +
+
+pyray.rl_disable_depth_mask() None
+

Disable depth write.

+
+ +
+
+pyray.rl_disable_depth_test() None
+

Disable depth test.

+
+ +
+
+pyray.rl_disable_framebuffer() None
+

Disable render texture (fbo), return to default framebuffer.

+
+ +
+
+pyray.rl_disable_scissor_test() None
+

Disable scissor test.

+
+ +
+
+pyray.rl_disable_shader() None
+

Disable shader program.

+
+ +
+
+pyray.rl_disable_smooth_lines() None
+

Disable line aliasing.

+
+ +
+
+pyray.rl_disable_stereo_render() None
+

Disable stereo rendering.

+
+ +
+
+pyray.rl_disable_texture() None
+

Disable texture.

+
+ +
+
+pyray.rl_disable_texture_cubemap() None
+

Disable texture cubemap.

+
+ +
+
+pyray.rl_disable_vertex_array() None
+

Disable vertex array (VAO, if supported).

+
+ +
+
+pyray.rl_disable_vertex_attribute(index: int) None
+

Disable vertex attribute index.

+
+ +
+
+pyray.rl_disable_vertex_buffer() None
+

Disable vertex buffer (VBO).

+
+ +
+
+pyray.rl_disable_vertex_buffer_element() None
+

Disable vertex buffer element (VBO element).

+
+ +
+
+pyray.rl_disable_wire_mode() None
+

Disable wire (and point) mode.

+
+ +
+
+pyray.rl_draw_render_batch(batch: Any | list | tuple) None
+

Draw render batch data (Update->Draw->Reset).

+
+ +
+
+pyray.rl_draw_render_batch_active() None
+

Update and draw internal render batch.

+
+ +
+
+pyray.rl_draw_vertex_array(offset: int, count: int) None
+

Draw vertex array (currently active vao).

+
+ +
+
+pyray.rl_draw_vertex_array_elements(offset: int, count: int, buffer: Any) None
+

Draw vertex array elements.

+
+ +
+
+pyray.rl_draw_vertex_array_elements_instanced(offset: int, count: int, buffer: Any, instances: int) None
+

Draw vertex array elements with instancing.

+
+ +
+
+pyray.rl_draw_vertex_array_instanced(offset: int, count: int, instances: int) None
+

Draw vertex array (currently active vao) with instancing.

+
+ +
+
+pyray.rl_enable_backface_culling() None
+

Enable backface culling.

+
+ +
+
+pyray.rl_enable_color_blend() None
+

Enable color blending.

+
+ +
+
+pyray.rl_enable_depth_mask() None
+

Enable depth write.

+
+ +
+
+pyray.rl_enable_depth_test() None
+

Enable depth test.

+
+ +
+
+pyray.rl_enable_framebuffer(id: int) None
+

Enable render texture (fbo).

+
+ +
+
+pyray.rl_enable_point_mode() None
+

Enable point mode.

+
+ +
+
+pyray.rl_enable_scissor_test() None
+

Enable scissor test.

+
+ +
+
+pyray.rl_enable_shader(id: int) None
+

Enable shader program.

+
+ +
+
+pyray.rl_enable_smooth_lines() None
+

Enable line aliasing.

+
+ +
+
+pyray.rl_enable_stereo_render() None
+

Enable stereo rendering.

+
+ +
+
+pyray.rl_enable_texture(id: int) None
+

Enable texture.

+
+ +
+
+pyray.rl_enable_texture_cubemap(id: int) None
+

Enable texture cubemap.

+
+ +
+
+pyray.rl_enable_vertex_array(vaoId: int) bool
+

Enable vertex array (VAO, if supported).

+
+ +
+
+pyray.rl_enable_vertex_attribute(index: int) None
+

Enable vertex attribute index.

+
+ +
+
+pyray.rl_enable_vertex_buffer(id: int) None
+

Enable vertex buffer (VBO).

+
+ +
+
+pyray.rl_enable_vertex_buffer_element(id: int) None
+

Enable vertex buffer element (VBO element).

+
+ +
+
+pyray.rl_enable_wire_mode() None
+

Enable wire mode.

+
+ +
+
+pyray.rl_end() None
+

Finish vertex providing.

+
+ +
+
+pyray.rl_framebuffer_attach(fboId: int, texId: int, attachType: int, texType: int, mipLevel: int) None
+

Attach texture/renderbuffer to a framebuffer.

+
+ +
+
+pyray.rl_framebuffer_complete(id: int) bool
+

Verify framebuffer is complete.

+
+ +
+
+pyray.rl_frustum(left: float, right: float, bottom: float, top: float, znear: float, zfar: float) None
+

.

+
+ +
+
+pyray.rl_gen_texture_mipmaps(id: int, width: int, height: int, format: int, mipmaps: Any) None
+

Generate mipmap data for selected texture.

+
+ +
+
+pyray.rl_get_active_framebuffer() int
+

Get the currently active render texture (fbo), 0 for default framebuffer.

+
+ +
+
+pyray.rl_get_cull_distance_far() float
+

Get cull plane distance far.

+
+ +
+
+pyray.rl_get_cull_distance_near() float
+

Get cull plane distance near.

+
+ +
+
+pyray.rl_get_framebuffer_height() int
+

Get default framebuffer height.

+
+ +
+
+pyray.rl_get_framebuffer_width() int
+

Get default framebuffer width.

+
+ +
+
+pyray.rl_get_gl_texture_formats(format: int, glInternalFormat: Any, glFormat: Any, glType: Any) None
+

Get OpenGL internal formats.

+
+ +
+
+pyray.rl_get_line_width() float
+

Get the line drawing width.

+
+ +
+
+pyray.rl_get_location_attrib(shaderId: int, attribName: str) int
+

Get shader location attribute.

+
+ +
+
+pyray.rl_get_location_uniform(shaderId: int, uniformName: str) int
+

Get shader location uniform.

+
+ +
+
+pyray.rl_get_matrix_modelview() Matrix
+

Get internal modelview matrix.

+
+ +
+
+pyray.rl_get_matrix_projection() Matrix
+

Get internal projection matrix.

+
+ +
+
+pyray.rl_get_matrix_projection_stereo(eye: int) Matrix
+

Get internal projection matrix for stereo render (selected eye).

+
+ +
+
+pyray.rl_get_matrix_transform() Matrix
+

Get internal accumulated transform matrix.

+
+ +
+
+pyray.rl_get_matrix_view_offset_stereo(eye: int) Matrix
+

Get internal view offset matrix for stereo render (selected eye).

+
+ +
+
+pyray.rl_get_pixel_format_name(format: int) str
+

Get name string for pixel format.

+
+ +
+
+pyray.rl_get_shader_buffer_size(id: int) int
+

Get SSBO buffer size.

+
+ +
+
+pyray.rl_get_shader_id_default() int
+

Get default shader id.

+
+ +
+
+pyray.rl_get_shader_locs_default() Any
+

Get default shader locations.

+
+ +
+
+pyray.rl_get_texture_id_default() int
+

Get default texture id.

+
+ +
+
+pyray.rl_get_version() int
+

Get current OpenGL version.

+
+ +
+
+pyray.rl_is_stereo_render_enabled() bool
+

Check if stereo render is enabled.

+
+ +
+
+pyray.rl_load_compute_shader_program(shaderId: int) int
+

Load compute shader program.

+
+ +
+
+pyray.rl_load_draw_cube() None
+

Load and draw a cube.

+
+ +
+
+pyray.rl_load_draw_quad() None
+

Load and draw a quad.

+
+ +
+
+pyray.rl_load_extensions(loader: Any) None
+

Load OpenGL extensions (loader function required).

+
+ +
+
+pyray.rl_load_framebuffer() int
+

Load an empty framebuffer.

+
+ +
+
+pyray.rl_load_identity() None
+

Reset current matrix to identity matrix.

+
+ +
+
+pyray.rl_load_render_batch(numBuffers: int, bufferElements: int) rlRenderBatch
+

Load a render batch system.

+
+ +
+
+pyray.rl_load_shader_buffer(size: int, data: Any, usageHint: int) int
+

Load shader storage buffer object (SSBO).

+
+ +
+
+pyray.rl_load_shader_code(vsCode: str, fsCode: str) int
+

Load shader from code strings.

+
+ +
+
+pyray.rl_load_shader_program(vShaderId: int, fShaderId: int) int
+

Load custom shader program.

+
+ +
+
+pyray.rl_load_texture(data: Any, width: int, height: int, format: int, mipmapCount: int) int
+

Load texture data.

+
+ +
+
+pyray.rl_load_texture_cubemap(data: Any, size: int, format: int, mipmapCount: int) int
+

Load texture cubemap data.

+
+ +
+
+pyray.rl_load_texture_depth(width: int, height: int, useRenderBuffer: bool) int
+

Load depth texture/renderbuffer (to be attached to fbo).

+
+ +
+
+pyray.rl_load_vertex_array() int
+

Load vertex array (vao) if supported.

+
+ +
+
+pyray.rl_load_vertex_buffer(buffer: Any, size: int, dynamic: bool) int
+

Load a vertex buffer object.

+
+ +
+
+pyray.rl_load_vertex_buffer_element(buffer: Any, size: int, dynamic: bool) int
+

Load vertex buffer elements object.

+
+ +
+
+pyray.rl_matrix_mode(mode: int) None
+

Choose the current matrix to be transformed.

+
+ +
+
+pyray.rl_mult_matrixf(matf: Any) None
+

Multiply the current matrix by another matrix.

+
+ +
+
+pyray.rl_normal3f(x: float, y: float, z: float) None
+

Define one vertex (normal) - 3 float.

+
+ +
+
+pyray.rl_ortho(left: float, right: float, bottom: float, top: float, znear: float, zfar: float) None
+

.

+
+ +
+
+pyray.rl_pop_matrix() None
+

Pop latest inserted matrix from stack.

+
+ +
+
+pyray.rl_push_matrix() None
+

Push the current matrix to stack.

+
+ +
+
+pyray.rl_read_screen_pixels(width: int, height: int) str
+

Read screen pixel data (color buffer).

+
+ +
+
+pyray.rl_read_shader_buffer(id: int, dest: Any, count: int, offset: int) None
+

Read SSBO buffer data (GPU->CPU).

+
+ +
+
+pyray.rl_read_texture_pixels(id: int, width: int, height: int, format: int) Any
+

Read texture pixel data.

+
+ +
+
+pyray.rl_rotatef(angle: float, x: float, y: float, z: float) None
+

Multiply the current matrix by a rotation matrix.

+
+ +
+
+pyray.rl_scalef(x: float, y: float, z: float) None
+

Multiply the current matrix by a scaling matrix.

+
+ +
+
+pyray.rl_scissor(x: int, y: int, width: int, height: int) None
+

Scissor test.

+
+ +
+
+pyray.rl_set_blend_factors(glSrcFactor: int, glDstFactor: int, glEquation: int) None
+

Set blending mode factor and equation (using OpenGL factors).

+
+ +
+
+pyray.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).

+
+ +
+
+pyray.rl_set_blend_mode(mode: int) None
+

Set blending mode.

+
+ +
+
+pyray.rl_set_clip_planes(nearPlane: float, farPlane: float) None
+

Set clip planes distances.

+
+ +
+
+pyray.rl_set_cull_face(mode: int) None
+

Set face culling mode.

+
+ +
+
+pyray.rl_set_framebuffer_height(height: int) None
+

Set current framebuffer height.

+
+ +
+
+pyray.rl_set_framebuffer_width(width: int) None
+

Set current framebuffer width.

+
+ +
+
+pyray.rl_set_line_width(width: float) None
+

Set the line drawing width.

+
+ +
+
+pyray.rl_set_matrix_modelview(view: Matrix | list | tuple) None
+

Set a custom modelview matrix (replaces internal modelview matrix).

+
+ +
+
+pyray.rl_set_matrix_projection(proj: Matrix | list | tuple) None
+

Set a custom projection matrix (replaces internal projection matrix).

+
+ +
+
+pyray.rl_set_matrix_projection_stereo(right: Matrix | list | tuple, left: Matrix | list | tuple) None
+

Set eyes projection matrices for stereo rendering.

+
+ +
+
+pyray.rl_set_matrix_view_offset_stereo(right: Matrix | list | tuple, left: Matrix | list | tuple) None
+

Set eyes view offsets matrices for stereo rendering.

+
+ +
+
+pyray.rl_set_render_batch_active(batch: Any | list | tuple) None
+

Set the active render batch for rlgl (NULL for default internal).

+
+ +
+
+pyray.rl_set_shader(id: int, locs: Any) None
+

Set shader currently active (id and locations).

+
+ +
+
+pyray.rl_set_texture(id: int) None
+

Set current texture for render batch and check buffers limits.

+
+ +
+
+pyray.rl_set_uniform(locIndex: int, value: Any, uniformType: int, count: int) None
+

Set shader value uniform.

+
+ +
+
+pyray.rl_set_uniform_matrices(locIndex: int, mat: Any | list | tuple, count: int) None
+

Set shader value matrices.

+
+ +
+
+pyray.rl_set_uniform_matrix(locIndex: int, mat: Matrix | list | tuple) None
+

Set shader value matrix.

+
+ +
+
+pyray.rl_set_uniform_sampler(locIndex: int, textureId: int) None
+

Set shader value sampler.

+
+ +
+
+pyray.rl_set_vertex_attribute(index: int, compSize: int, type: int, normalized: bool, stride: int, offset: int) None
+

Set vertex attribute data configuration.

+
+ +
+
+pyray.rl_set_vertex_attribute_default(locIndex: int, value: Any, attribType: int, count: int) None
+

Set vertex attribute default value, when attribute to provided.

+
+ +
+
+pyray.rl_set_vertex_attribute_divisor(index: int, divisor: int) None
+

Set vertex attribute data divisor.

+
+ +
+
+pyray.rl_tex_coord2f(x: float, y: float) None
+

Define one vertex (texture coordinate) - 2 float.

+
+ +
+
+pyray.rl_texture_parameters(id: int, param: int, value: int) None
+

Set texture parameters (filter, wrap).

+
+ +
+
+pyray.rl_translatef(x: float, y: float, z: float) None
+

Multiply the current matrix by a translation matrix.

+
+ +
+
+pyray.rl_unload_framebuffer(id: int) None
+

Delete framebuffer from GPU.

+
+ +
+
+pyray.rl_unload_render_batch(batch: rlRenderBatch | list | tuple) None
+

Unload render batch system.

+
+ +
+
+pyray.rl_unload_shader_buffer(ssboId: int) None
+

Unload shader storage buffer object (SSBO).

+
+ +
+
+pyray.rl_unload_shader_program(id: int) None
+

Unload shader program.

+
+ +
+
+pyray.rl_unload_texture(id: int) None
+

Unload texture from GPU memory.

+
+ +
+
+pyray.rl_unload_vertex_array(vaoId: int) None
+

Unload vertex array (vao).

+
+ +
+
+pyray.rl_unload_vertex_buffer(vboId: int) None
+

Unload vertex buffer object.

+
+ +
+
+pyray.rl_update_shader_buffer(id: int, data: Any, dataSize: int, offset: int) None
+

Update SSBO buffer data.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.rl_update_vertex_buffer(bufferId: int, data: Any, dataSize: int, offset: int) None
+

Update vertex buffer object data on GPU buffer.

+
+ +
+
+pyray.rl_update_vertex_buffer_elements(id: int, data: Any, dataSize: int, offset: int) None
+

Update vertex buffer elements data on GPU buffer.

+
+ +
+
+pyray.rl_vertex2f(x: float, y: float) None
+

Define one vertex (position) - 2 float.

+
+ +
+
+pyray.rl_vertex2i(x: int, y: int) None
+

Define one vertex (position) - 2 int.

+
+ +
+
+pyray.rl_vertex3f(x: float, y: float, z: float) None
+

Define one vertex (position) - 3 float.

+
+ +
+
+pyray.rl_viewport(x: int, y: int, width: int, height: int) None
+

Set the viewport area.

+
+ +
+
+pyray.rlgl_close() None
+

De-initialize rlgl (buffers, shaders, textures).

+
+ +
+
+pyray.rlgl_init(width: int, height: int) None
+

Initialize rlgl (buffers, shaders, textures, states).

+
+ +
+
+pyray.save_file_data(fileName: str, data: Any, dataSize: int) bool
+

Save data to file from byte array (write), returns true on success.

+
+ +
+
+pyray.save_file_text(fileName: str, text: str) bool
+

Save text data to file (write), string must be ‘' terminated, returns true on success.

+
+ +
+
+pyray.seek_music_stream(music: Music | list | tuple, position: float) None
+

Seek music to a position (in seconds).

+
+ +
+
+pyray.set_audio_stream_buffer_size_default(size: int) None
+

Default size for new audio streams.

+
+ +
+
+pyray.set_audio_stream_callback(stream: AudioStream | list | tuple, callback: Any) None
+

Audio thread callback to request new data.

+
+ +
+
+pyray.set_audio_stream_pan(stream: AudioStream | list | tuple, pan: float) None
+

Set pan for audio stream (0.5 is centered).

+
+ +
+
+pyray.set_audio_stream_pitch(stream: AudioStream | list | tuple, pitch: float) None
+

Set pitch for audio stream (1.0 is base level).

+
+ +
+
+pyray.set_audio_stream_volume(stream: AudioStream | list | tuple, volume: float) None
+

Set volume for audio stream (1.0 is max level).

+
+ +
+
+pyray.set_automation_event_base_frame(frame: int) None
+

Set automation event internal base frame to start recording.

+
+ +
+
+pyray.set_automation_event_list(list_0: Any | list | tuple) None
+

Set automation event list to record to.

+
+ +
+
+pyray.set_clipboard_text(text: str) None
+

Set clipboard text content.

+
+ +
+
+pyray.set_config_flags(flags: int) None
+

Setup init configuration flags (view FLAGS).

+
+ +
+
+pyray.set_exit_key(key: int) None
+

Set a custom key to exit program (default is ESC).

+
+ +
+
+pyray.set_gamepad_mappings(mappings: str) int
+

Set internal gamepad mappings (SDL_GameControllerDB).

+
+ +
+
+pyray.set_gamepad_vibration(gamepad: int, leftMotor: float, rightMotor: float, duration: float) None
+

Set gamepad vibration for both motors (duration in seconds).

+
+ +
+
+pyray.set_gestures_enabled(flags: int) None
+

Enable a set of gestures using flags.

+
+ +
+
+pyray.set_load_file_data_callback(callback: str) None
+

Set custom file binary data loader.

+
+ +
+
+pyray.set_load_file_text_callback(callback: str) None
+

Set custom file text data loader.

+
+ +
+
+pyray.set_master_volume(volume: float) None
+

Set master volume (listener).

+
+ +
+
+pyray.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…).

+
+ +
+
+pyray.set_model_mesh_material(model: Any | list | tuple, meshId: int, materialId: int) None
+

Set material for a mesh.

+
+ +
+
+pyray.set_mouse_cursor(cursor: int) None
+

Set mouse cursor.

+
+ +
+
+pyray.set_mouse_offset(offsetX: int, offsetY: int) None
+

Set mouse offset.

+
+ +
+
+pyray.set_mouse_position(x: int, y: int) None
+

Set mouse position XY.

+
+ +
+
+pyray.set_mouse_scale(scaleX: float, scaleY: float) None
+

Set mouse scaling.

+
+ +
+
+pyray.set_music_pan(music: Music | list | tuple, pan: float) None
+

Set pan for a music (0.5 is center).

+
+ +
+
+pyray.set_music_pitch(music: Music | list | tuple, pitch: float) None
+

Set pitch for a music (1.0 is base level).

+
+ +
+
+pyray.set_music_volume(music: Music | list | tuple, volume: float) None
+

Set volume for music (1.0 is max level).

+
+ +
+
+pyray.set_physics_body_rotation(body: Any | list | tuple, radians: float) None
+

Sets physics body shape transform based on radians parameter.

+
+ +
+
+pyray.set_physics_gravity(x: float, y: float) None
+

Sets physics global gravity force.

+
+ +
+
+pyray.set_physics_time_step(delta: float) None
+

Sets physics fixed time step in milliseconds. 1.666666 by default.

+
+ +
+
+pyray.set_pixel_color(dstPtr: Any, color: Color | list | tuple, format: int) None
+

Set color formatted into destination pixel pointer.

+
+ +
+
+pyray.set_random_seed(seed: int) None
+

Set the seed for the random number generator.

+
+ +
+
+pyray.set_save_file_data_callback(callback: str) None
+

Set custom file binary data saver.

+
+ +
+
+pyray.set_save_file_text_callback(callback: str) None
+

Set custom file text data saver.

+
+ +
+
+pyray.set_shader_value(shader: Shader | list | tuple, locIndex: int, value: Any, uniformType: int) None
+

Set shader uniform value.

+
+ +
+
+pyray.set_shader_value_matrix(shader: Shader | list | tuple, locIndex: int, mat: Matrix | list | tuple) None
+

Set shader uniform value (matrix 4x4).

+
+ +
+
+pyray.set_shader_value_texture(shader: Shader | list | tuple, locIndex: int, texture: Texture | list | tuple) None
+

Set shader uniform value for texture (sampler2d).

+
+ +
+
+pyray.set_shader_value_v(shader: Shader | list | tuple, locIndex: int, value: Any, uniformType: int, count: int) None
+

Set shader uniform value vector.

+
+ +
+
+pyray.set_shapes_texture(texture: Texture | list | tuple, source: Rectangle | list | tuple) None
+

Set texture and rectangle to be used on shapes drawing.

+
+ +
+
+pyray.set_sound_pan(sound: Sound | list | tuple, pan: float) None
+

Set pan for a sound (0.5 is center).

+
+ +
+
+pyray.set_sound_pitch(sound: Sound | list | tuple, pitch: float) None
+

Set pitch for a sound (1.0 is base level).

+
+ +
+
+pyray.set_sound_volume(sound: Sound | list | tuple, volume: float) None
+

Set volume for a sound (1.0 is max level).

+
+ +
+
+pyray.set_target_fps(fps: int) None
+

Set target FPS (maximum).

+
+ +
+
+pyray.set_text_line_spacing(spacing: int) None
+

Set vertical line spacing when drawing with line-breaks.

+
+ +
+
+pyray.set_texture_filter(texture: Texture | list | tuple, filter: int) None
+

Set texture scaling filter mode.

+
+ +
+
+pyray.set_texture_wrap(texture: Texture | list | tuple, wrap: int) None
+

Set texture wrapping mode.

+
+ +
+
+pyray.set_trace_log_callback(callback: str) None
+

Set custom trace log.

+
+ +
+
+pyray.set_trace_log_level(logLevel: int) None
+

Set the current threshold (minimum) log level.

+
+ +
+
+pyray.set_window_focused() None
+

Set window focused.

+
+ +
+
+pyray.set_window_icon(image: Image | list | tuple) None
+

Set icon for window (single image, RGBA 32bit).

+
+ +
+
+pyray.set_window_icons(images: Any | list | tuple, count: int) None
+

Set icon for window (multiple images, RGBA 32bit).

+
+ +
+
+pyray.set_window_max_size(width: int, height: int) None
+

Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE).

+
+ +
+
+pyray.set_window_min_size(width: int, height: int) None
+

Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE).

+
+ +
+
+pyray.set_window_monitor(monitor: int) None
+

Set monitor for the current window.

+
+ +
+
+pyray.set_window_opacity(opacity: float) None
+

Set window opacity [0.0f..1.0f].

+
+ +
+
+pyray.set_window_position(x: int, y: int) None
+

Set window position on screen.

+
+ +
+
+pyray.set_window_size(width: int, height: int) None
+

Set window dimensions.

+
+ +
+
+pyray.set_window_state(flags: int) None
+

Set window configuration state using flags.

+
+ +
+
+pyray.set_window_title(title: str) None
+

Set title for window.

+
+ +
+
+pyray.show_cursor() None
+

Shows cursor.

+
+ +
+
+pyray.start_automation_event_recording() None
+

Start recording automation events (AutomationEventList must be set).

+
+ +
+
+pyray.stop_audio_stream(stream: AudioStream | list | tuple) None
+

Stop audio stream.

+
+ +
+
+pyray.stop_automation_event_recording() None
+

Stop recording automation events.

+
+ +
+
+pyray.stop_music_stream(music: Music | list | tuple) None
+

Stop music playing.

+
+ +
+
+pyray.stop_sound(sound: Sound | list | tuple) None
+

Stop playing a sound.

+
+ +
+
+pyray.swap_screen_buffer() None
+

Swap back buffer with front buffer (screen drawing).

+
+ +
+
+pyray.take_screenshot(fileName: str) None
+

Takes a screenshot of current screen (filename extension defines format).

+
+ +
+
+pyray.text_append(text: str, append: str, position: Any) None
+

Append text at specific position and move cursor!.

+
+ +
+
+pyray.text_copy(dst: str, src: str) int
+

Copy one string to another, returns bytes copied.

+
+ +
+
+pyray.text_find_index(text: str, find: str) int
+

Find first text occurrence within a string.

+
+ +
+
+pyray.text_format(*args) str
+

VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI

+
+ +
+
+pyray.text_insert(text: str, insert: str, position: int) str
+

Insert text in a position (WARNING: memory must be freed!).

+
+ +
+
+pyray.text_is_equal(text1: str, text2: str) bool
+

Check if two text string are equal.

+
+ +
+
+pyray.text_join(textList: list[str], count: int, delimiter: str) str
+

Join text strings with delimiter.

+
+ +
+
+pyray.text_length(text: str) int
+

Get text length, checks for ‘' ending.

+
+ +
+
+pyray.text_replace(text: str, replace: str, by: str) str
+

Replace text string (WARNING: memory must be freed!).

+
+ +
+
+pyray.text_split(text: str, delimiter: str, count: Any) list[str]
+

Split text into multiple strings.

+
+ +
+
+pyray.text_subtext(text: str, position: int, length: int) str
+

Get a piece of a text string.

+
+ +
+
+pyray.text_to_camel(text: str) str
+

Get Camel case notation version of provided string.

+
+ +
+
+pyray.text_to_float(text: str) float
+

Get float value from text (negative values not supported).

+
+ +
+
+pyray.text_to_integer(text: str) int
+

Get integer value from text (negative values not supported).

+
+ +
+
+pyray.text_to_lower(text: str) str
+

Get lower case version of provided string.

+
+ +
+
+pyray.text_to_pascal(text: str) str
+

Get Pascal case notation version of provided string.

+
+ +
+
+pyray.text_to_snake(text: str) str
+

Get Snake case notation version of provided string.

+
+ +
+
+pyray.text_to_upper(text: str) str
+

Get upper case version of provided string.

+
+ +
+
+pyray.toggle_borderless_windowed() None
+

Toggle window state: borderless windowed, resizes window to match monitor resolution.

+
+ +
+
+pyray.toggle_fullscreen() None
+

Toggle window state: fullscreen/windowed, resizes monitor to match window resolution.

+
+ +
+
+pyray.trace_log(*args) None
+

VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI

+
+ +
+
+pyray.unload_audio_stream(stream: AudioStream | list | tuple) None
+

Unload audio stream and free memory.

+
+ +
+
+pyray.unload_automation_event_list(list_0: AutomationEventList | list | tuple) None
+

Unload automation events list from file.

+
+ +
+
+pyray.unload_codepoints(codepoints: Any) None
+

Unload codepoints data from memory.

+
+ +
+
+pyray.unload_directory_files(files: FilePathList | list | tuple) None
+

Unload filepaths.

+
+ +
+
+pyray.unload_dropped_files(files: FilePathList | list | tuple) None
+

Unload dropped filepaths.

+
+ +
+
+pyray.unload_file_data(data: str) None
+

Unload file data allocated by LoadFileData().

+
+ +
+
+pyray.unload_file_text(text: str) None
+

Unload file text data allocated by LoadFileText().

+
+ +
+
+pyray.unload_font(font: Font | list | tuple) None
+

Unload font from GPU memory (VRAM).

+
+ +
+
+pyray.unload_font_data(glyphs: Any | list | tuple, glyphCount: int) None
+

Unload font chars info data (RAM).

+
+ +
+
+pyray.unload_image(image: Image | list | tuple) None
+

Unload image from CPU memory (RAM).

+
+ +
+
+pyray.unload_image_colors(colors: Any | list | tuple) None
+

Unload color data loaded with LoadImageColors().

+
+ +
+
+pyray.unload_image_palette(colors: Any | list | tuple) None
+

Unload colors palette loaded with LoadImagePalette().

+
+ +
+
+pyray.unload_material(material: Material | list | tuple) None
+

Unload material from GPU memory (VRAM).

+
+ +
+
+pyray.unload_mesh(mesh: Mesh | list | tuple) None
+

Unload mesh data from CPU and GPU.

+
+ +
+
+pyray.unload_model(model: Model | list | tuple) None
+

Unload model (including meshes) from memory (RAM and/or VRAM).

+
+ +
+
+pyray.unload_model_animation(anim: ModelAnimation | list | tuple) None
+

Unload animation data.

+
+ +
+
+pyray.unload_model_animations(animations: Any | list | tuple, animCount: int) None
+

Unload animation array data.

+
+ +
+
+pyray.unload_music_stream(music: Music | list | tuple) None
+

Unload music stream.

+
+ +
+
+pyray.unload_random_sequence(sequence: Any) None
+

Unload random values sequence.

+
+ +
+
+pyray.unload_render_texture(target: RenderTexture | list | tuple) None
+

Unload render texture from GPU memory (VRAM).

+
+ +
+
+pyray.unload_shader(shader: Shader | list | tuple) None
+

Unload shader from GPU memory (VRAM).

+
+ +
+
+pyray.unload_sound(sound: Sound | list | tuple) None
+

Unload sound.

+
+ +
+
+pyray.unload_sound_alias(alias: Sound | list | tuple) None
+

Unload a sound alias (does not deallocate sample data).

+
+ +
+
+pyray.unload_texture(texture: Texture | list | tuple) None
+

Unload texture from GPU memory (VRAM).

+
+ +
+
+pyray.unload_utf8(text: str) None
+

Unload UTF-8 text encoded from codepoints array.

+
+ +
+
+pyray.unload_vr_stereo_config(config: VrStereoConfig | list | tuple) None
+

Unload VR stereo config.

+
+ +
+
+pyray.unload_wave(wave: Wave | list | tuple) None
+

Unload wave data.

+
+ +
+
+pyray.unload_wave_samples(samples: Any) None
+

Unload samples data loaded with LoadWaveSamples().

+
+ +
+
+pyray.update_audio_stream(stream: AudioStream | list | tuple, data: Any, frameCount: int) None
+

Update audio stream buffers with data.

+
+ +
+
+pyray.update_camera(camera: Any | list | tuple, mode: int) None
+

Update camera position for selected mode.

+
+ +
+
+pyray.update_camera_pro(camera: Any | list | tuple, movement: Vector3 | list | tuple, rotation: Vector3 | list | tuple, zoom: float) None
+

Update camera movement/rotation.

+
+ +
+
+pyray.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.

+
+ +
+
+pyray.update_model_animation(model: Model | list | tuple, anim: ModelAnimation | list | tuple, frame: int) None
+

Update model animation pose (CPU).

+
+ +
+
+pyray.update_model_animation_bones(model: Model | list | tuple, anim: ModelAnimation | list | tuple, frame: int) None
+

Update model animation mesh bone matrices (GPU skinning).

+
+ +
+
+pyray.update_music_stream(music: Music | list | tuple) None
+

Updates buffers for music streaming.

+
+ +
+
+pyray.update_physics() None
+

Update physics system.

+
+ +
+
+pyray.update_sound(sound: Sound | list | tuple, data: Any, sampleCount: int) None
+

Update sound buffer with new data.

+
+ +
+
+pyray.update_texture(texture: Texture | list | tuple, pixels: Any) None
+

Update GPU texture with new data.

+
+ +
+
+pyray.update_texture_rec(texture: Texture | list | tuple, rec: Rectangle | list | tuple, pixels: Any) None
+

Update GPU texture rectangle with new data.

+
+ +
+
+pyray.upload_mesh(mesh: Any | list | tuple, dynamic: bool) None
+

Upload mesh vertex data in GPU and provide VAO/VBO ids.

+
+ +
+
+pyray.vector2_add(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_add_value(v: Vector2 | list | tuple, add: float) Vector2
+

.

+
+ +
+
+pyray.vector2_angle(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) float
+

.

+
+ +
+
+pyray.vector2_clamp(v: Vector2 | list | tuple, min_1: Vector2 | list | tuple, max_2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_clamp_value(v: Vector2 | list | tuple, min_1: float, max_2: float) Vector2
+

.

+
+ +
+
+pyray.vector2_distance(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) float
+

.

+
+ +
+
+pyray.vector2_distance_sqr(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) float
+

.

+
+ +
+
+pyray.vector2_divide(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_dot_product(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) float
+

.

+
+ +
+
+pyray.vector2_equals(p: Vector2 | list | tuple, q: Vector2 | list | tuple) int
+

.

+
+ +
+
+pyray.vector2_invert(v: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_length(v: Vector2 | list | tuple) float
+

.

+
+ +
+
+pyray.vector2_length_sqr(v: Vector2 | list | tuple) float
+

.

+
+ +
+
+pyray.vector2_lerp(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple, amount: float) Vector2
+

.

+
+ +
+
+pyray.vector2_line_angle(start: Vector2 | list | tuple, end: Vector2 | list | tuple) float
+

.

+
+ +
+
+pyray.vector2_max(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_min(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_move_towards(v: Vector2 | list | tuple, target: Vector2 | list | tuple, maxDistance: float) Vector2
+

.

+
+ +
+
+pyray.vector2_multiply(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_negate(v: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_normalize(v: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_one() Vector2
+

.

+
+ +
+
+pyray.vector2_reflect(v: Vector2 | list | tuple, normal: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_refract(v: Vector2 | list | tuple, n: Vector2 | list | tuple, r: float) Vector2
+

.

+
+ +
+
+pyray.vector2_rotate(v: Vector2 | list | tuple, angle: float) Vector2
+

.

+
+ +
+
+pyray.vector2_scale(v: Vector2 | list | tuple, scale: float) Vector2
+

.

+
+ +
+
+pyray.vector2_subtract(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_subtract_value(v: Vector2 | list | tuple, sub: float) Vector2
+

.

+
+ +
+
+pyray.vector2_transform(v: Vector2 | list | tuple, mat: Matrix | list | tuple) Vector2
+

.

+
+ +
+
+pyray.vector2_zero() Vector2
+

.

+
+ +
+
+pyray.vector3_add(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_add_value(v: Vector3 | list | tuple, add: float) Vector3
+

.

+
+ +
+
+pyray.vector3_angle(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) float
+

.

+
+ +
+
+pyray.vector3_barycenter(p: Vector3 | list | tuple, a: Vector3 | list | tuple, b: Vector3 | list | tuple, c: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_clamp(v: Vector3 | list | tuple, min_1: Vector3 | list | tuple, max_2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_clamp_value(v: Vector3 | list | tuple, min_1: float, max_2: float) Vector3
+

.

+
+ +
+
+pyray.vector3_cross_product(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_cubic_hermite(v1: Vector3 | list | tuple, tangent1: Vector3 | list | tuple, v2: Vector3 | list | tuple, tangent2: Vector3 | list | tuple, amount: float) Vector3
+

.

+
+ +
+
+pyray.vector3_distance(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) float
+

.

+
+ +
+
+pyray.vector3_distance_sqr(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) float
+

.

+
+ +
+
+pyray.vector3_divide(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_dot_product(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) float
+

.

+
+ +
+
+pyray.vector3_equals(p: Vector3 | list | tuple, q: Vector3 | list | tuple) int
+

.

+
+ +
+
+pyray.vector3_invert(v: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_length(v: Vector3 | list | tuple) float
+

.

+
+ +
+
+pyray.vector3_length_sqr(v: Vector3 | list | tuple) float
+

.

+
+ +
+
+pyray.vector3_lerp(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple, amount: float) Vector3
+

.

+
+ +
+
+pyray.vector3_max(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_min(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_move_towards(v: Vector3 | list | tuple, target: Vector3 | list | tuple, maxDistance: float) Vector3
+

.

+
+ +
+
+pyray.vector3_multiply(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_negate(v: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_normalize(v: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_one() Vector3
+

.

+
+ +
+
+pyray.vector3_ortho_normalize(v1: Any | list | tuple, v2: Any | list | tuple) None
+

.

+
+ +
+
+pyray.vector3_perpendicular(v: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_project(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_reflect(v: Vector3 | list | tuple, normal: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_refract(v: Vector3 | list | tuple, n: Vector3 | list | tuple, r: float) Vector3
+

.

+
+ +
+
+pyray.vector3_reject(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_rotate_by_axis_angle(v: Vector3 | list | tuple, axis: Vector3 | list | tuple, angle: float) Vector3
+

.

+
+ +
+
+pyray.vector3_rotate_by_quaternion(v: Vector3 | list | tuple, q: Vector4 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_scale(v: Vector3 | list | tuple, scalar: float) Vector3
+

.

+
+ +
+
+pyray.vector3_subtract(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_subtract_value(v: Vector3 | list | tuple, sub: float) Vector3
+

.

+
+ +
+
+pyray.vector3_to_float_v(v: Vector3 | list | tuple) float3
+

.

+
+ +
+
+pyray.vector3_transform(v: Vector3 | list | tuple, mat: Matrix | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_unproject(source: Vector3 | list | tuple, projection: Matrix | list | tuple, view: Matrix | list | tuple) Vector3
+

.

+
+ +
+
+pyray.vector3_zero() Vector3
+

.

+
+ +
+
+pyray.vector4_add(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.vector4_add_value(v: Vector4 | list | tuple, add: float) Vector4
+

.

+
+ +
+
+pyray.vector4_distance(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) float
+

.

+
+ +
+
+pyray.vector4_distance_sqr(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) float
+

.

+
+ +
+
+pyray.vector4_divide(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.vector4_dot_product(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) float
+

.

+
+ +
+
+pyray.vector4_equals(p: Vector4 | list | tuple, q: Vector4 | list | tuple) int
+

.

+
+ +
+
+pyray.vector4_invert(v: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.vector4_length(v: Vector4 | list | tuple) float
+

.

+
+ +
+
+pyray.vector4_length_sqr(v: Vector4 | list | tuple) float
+

.

+
+ +
+
+pyray.vector4_lerp(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple, amount: float) Vector4
+

.

+
+ +
+
+pyray.vector4_max(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.vector4_min(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.vector4_move_towards(v: Vector4 | list | tuple, target: Vector4 | list | tuple, maxDistance: float) Vector4
+

.

+
+ +
+
+pyray.vector4_multiply(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.vector4_negate(v: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.vector4_normalize(v: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.vector4_one() Vector4
+

.

+
+ +
+
+pyray.vector4_scale(v: Vector4 | list | tuple, scale: float) Vector4
+

.

+
+ +
+
+pyray.vector4_subtract(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+pyray.vector4_subtract_value(v: Vector4 | list | tuple, add: float) Vector4
+

.

+
+ +
+
+pyray.vector4_zero() Vector4
+

.

+
+ +
+
+pyray.wait_time(seconds: float) None
+

Wait for some time (halt program execution).

+
+ +
+
+pyray.wave_copy(wave: Wave | list | tuple) Wave
+

Copy a wave to a new wave.

+
+ +
+
+pyray.wave_crop(wave: Any | list | tuple, initFrame: int, finalFrame: int) None
+

Crop a wave to defined frames range.

+
+ +
+
+pyray.wave_format(wave: Any | list | tuple, sampleRate: int, sampleSize: int, channels: int) None
+

Convert wave data to desired format.

+
+ +
+
+pyray.window_should_close() bool
+

Check if application should close (KEY_ESCAPE pressed or windows close icon clicked).

+
+ +
+
+pyray.wrap(value: float, min_1: float, max_2: float) float
+

.

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/raylib.html b/docs/raylib.html new file mode 100644 index 0000000..6145b60 --- /dev/null +++ b/docs/raylib.html @@ -0,0 +1,14811 @@ + + + + + + + + + C API — Raylib Python documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

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:

+
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:

+
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

+ +
+

However, here is a list of available functions:

+
+

Functions API reference

+
+
+raylib.ARROWS_SIZE: int
+
+ +
+
+raylib.ARROWS_VISIBLE: int
+
+ +
+
+raylib.ARROW_PADDING: int
+
+ +
+
+raylib.AttachAudioMixedProcessor(processor: Any) None
+

Attach audio stream processor to the entire audio pipeline, receives the samples as ‘float’.

+
+ +
+
+raylib.AttachAudioStreamProcessor(stream: AudioStream | list | tuple, processor: Any) None
+

Attach audio stream processor to stream, receives the samples as ‘float’.

+
+ +
+
+class raylib.AudioStream
+
+
+buffer: Any
+
+ +
+
+channels: int
+
+ +
+
+processor: Any
+
+ +
+
+sampleRate: int
+
+ +
+
+sampleSize: int
+
+ +
+ +
+
+class raylib.AutomationEvent
+
+
+frame: int
+
+ +
+
+params: list
+
+ +
+
+type: int
+
+ +
+ +
+
+class raylib.AutomationEventList
+
+
+capacity: int
+
+ +
+
+count: int
+
+ +
+
+events: Any
+
+ +
+ +
+
+raylib.BACKGROUND_COLOR: int
+
+ +
+
+raylib.BASE_COLOR_DISABLED: int
+
+ +
+
+raylib.BASE_COLOR_FOCUSED: int
+
+ +
+
+raylib.BASE_COLOR_NORMAL: int
+
+ +
+
+raylib.BASE_COLOR_PRESSED: int
+
+ +
+
+raylib.BEIGE: Color
+
+ +
+
+raylib.BLACK: Color
+
+ +
+
+raylib.BLANK: Color
+
+ +
+
+raylib.BLEND_ADDITIVE: int
+
+ +
+
+raylib.BLEND_ADD_COLORS: int
+
+ +
+
+raylib.BLEND_ALPHA: int
+
+ +
+
+raylib.BLEND_ALPHA_PREMULTIPLY: int
+
+ +
+
+raylib.BLEND_CUSTOM: int
+
+ +
+
+raylib.BLEND_CUSTOM_SEPARATE: int
+
+ +
+
+raylib.BLEND_MULTIPLIED: int
+
+ +
+
+raylib.BLEND_SUBTRACT_COLORS: int
+
+ +
+
+raylib.BLUE: Color
+
+ +
+
+raylib.BORDER_COLOR_DISABLED: int
+
+ +
+
+raylib.BORDER_COLOR_FOCUSED: int
+
+ +
+
+raylib.BORDER_COLOR_NORMAL: int
+
+ +
+
+raylib.BORDER_COLOR_PRESSED: int
+
+ +
+
+raylib.BORDER_WIDTH: int
+
+ +
+
+raylib.BROWN: Color
+
+ +
+
+raylib.BUTTON: int
+
+ +
+
+raylib.BeginBlendMode(mode: int) None
+

Begin blending mode (alpha, additive, multiplied, subtract, custom).

+
+ +
+
+raylib.BeginDrawing() None
+

Setup canvas (framebuffer) to start drawing.

+
+ +
+
+raylib.BeginMode2D(camera: Camera2D | list | tuple) None
+

Begin 2D mode with custom camera (2D).

+
+ +
+
+raylib.BeginMode3D(camera: Camera3D | list | tuple) None
+

Begin 3D mode with custom camera (3D).

+
+ +
+
+raylib.BeginScissorMode(x: int, y: int, width: int, height: int) None
+

Begin scissor mode (define screen area for following drawing).

+
+ +
+
+raylib.BeginShaderMode(shader: Shader | list | tuple) None
+

Begin custom shader drawing.

+
+ +
+
+raylib.BeginTextureMode(target: RenderTexture | list | tuple) None
+

Begin drawing to render texture.

+
+ +
+
+raylib.BeginVrStereoMode(config: VrStereoConfig | list | tuple) None
+

Begin stereo rendering (requires VR simulator).

+
+ +
+
+raylib.BlendMode
+
+ +
+
+class raylib.BoneInfo
+
+
+name: bytes
+
+ +
+
+parent: int
+
+ +
+ +
+
+class raylib.BoundingBox
+
+
+max: Vector3
+
+ +
+
+min: Vector3
+
+ +
+ +
+
+raylib.CAMERA_CUSTOM: int
+
+ +
+
+raylib.CAMERA_FIRST_PERSON: int
+
+ +
+
+raylib.CAMERA_FREE: int
+
+ +
+
+raylib.CAMERA_ORBITAL: int
+
+ +
+
+raylib.CAMERA_ORTHOGRAPHIC: int
+
+ +
+
+raylib.CAMERA_PERSPECTIVE: int
+
+ +
+
+raylib.CAMERA_THIRD_PERSON: int
+
+ +
+
+raylib.CHECKBOX: int
+
+ +
+
+raylib.CHECK_PADDING: int
+
+ +
+
+raylib.COLORPICKER: int
+
+ +
+
+raylib.COLOR_SELECTOR_SIZE: int
+
+ +
+
+raylib.COMBOBOX: int
+
+ +
+
+raylib.COMBO_BUTTON_SPACING: int
+
+ +
+
+raylib.COMBO_BUTTON_WIDTH: int
+
+ +
+
+raylib.CUBEMAP_LAYOUT_AUTO_DETECT: int
+
+ +
+
+raylib.CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE: int
+
+ +
+
+raylib.CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR: int
+
+ +
+
+raylib.CUBEMAP_LAYOUT_LINE_HORIZONTAL: int
+
+ +
+
+raylib.CUBEMAP_LAYOUT_LINE_VERTICAL: int
+
+ +
+
+class raylib.Camera
+
+
+fovy: float
+
+ +
+
+position: Vector3
+
+ +
+
+projection: int
+
+ +
+
+target: Vector3
+
+ +
+
+up: Vector3
+
+ +
+ +
+
+class raylib.Camera2D
+
+
+offset: Vector2
+
+ +
+
+rotation: float
+
+ +
+
+target: Vector2
+
+ +
+
+zoom: float
+
+ +
+ +
+
+class raylib.Camera3D
+
+
+fovy: float
+
+ +
+
+position: Vector3
+
+ +
+
+projection: int
+
+ +
+
+target: Vector3
+
+ +
+
+up: Vector3
+
+ +
+ +
+
+raylib.CameraMode
+
+ +
+
+raylib.CameraProjection
+
+ +
+
+raylib.ChangeDirectory(dir: bytes) bool
+

Change working directory, return true on success.

+
+ +
+
+raylib.CheckCollisionBoxSphere(box: BoundingBox | list | tuple, center: Vector3 | list | tuple, radius: float) bool
+

Check collision between box and sphere.

+
+ +
+
+raylib.CheckCollisionBoxes(box1: BoundingBox | list | tuple, box2: BoundingBox | list | tuple) bool
+

Check collision between two bounding boxes.

+
+ +
+
+raylib.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].

+
+ +
+
+raylib.CheckCollisionCircleRec(center: Vector2 | list | tuple, radius: float, rec: Rectangle | list | tuple) bool
+

Check collision between circle and rectangle.

+
+ +
+
+raylib.CheckCollisionCircles(center1: Vector2 | list | tuple, radius1: float, center2: Vector2 | list | tuple, radius2: float) bool
+

Check collision between two circles.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.CheckCollisionPointCircle(point: Vector2 | list | tuple, center: Vector2 | list | tuple, radius: float) bool
+

Check if point is inside circle.

+
+ +
+
+raylib.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].

+
+ +
+
+raylib.CheckCollisionPointPoly(point: Vector2 | list | tuple, points: Any | list | tuple, pointCount: int) bool
+

Check if point is within a polygon described by array of vertices.

+
+ +
+
+raylib.CheckCollisionPointRec(point: Vector2 | list | tuple, rec: Rectangle | list | tuple) bool
+

Check if point is inside rectangle.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.CheckCollisionRecs(rec1: Rectangle | list | tuple, rec2: Rectangle | list | tuple) bool
+

Check collision between two rectangles.

+
+ +
+
+raylib.CheckCollisionSpheres(center1: Vector3 | list | tuple, radius1: float, center2: Vector3 | list | tuple, radius2: float) bool
+

Check collision between two spheres.

+
+ +
+
+raylib.Clamp(value: float, min_1: float, max_2: float) float
+

.

+
+ +
+
+raylib.ClearBackground(color: Color | list | tuple) None
+

Set background color (framebuffer clear color).

+
+ +
+
+raylib.ClearWindowState(flags: int) None
+

Clear window configuration state flags.

+
+ +
+
+raylib.CloseAudioDevice() None
+

Close the audio device and context.

+
+ +
+
+raylib.ClosePhysics() None
+

Close physics system and unload used memory.

+
+ +
+
+raylib.CloseWindow() None
+

Close window and unload OpenGL context.

+
+ +
+
+raylib.CodepointToUTF8(codepoint: int, utf8Size: Any) bytes
+

Encode one codepoint into UTF-8 byte array (array length returned as parameter).

+
+ +
+
+class raylib.Color
+
+
+a: bytes
+
+ +
+
+b: bytes
+
+ +
+
+g: bytes
+
+ +
+
+r: bytes
+
+ +
+ +
+
+raylib.ColorAlpha(color: Color | list | tuple, alpha: float) Color
+

Get color with alpha applied, alpha goes from 0.0f to 1.0f.

+
+ +
+
+raylib.ColorAlphaBlend(dst: Color | list | tuple, src: Color | list | tuple, tint: Color | list | tuple) Color
+

Get src alpha-blended into dst color with tint.

+
+ +
+
+raylib.ColorBrightness(color: Color | list | tuple, factor: float) Color
+

Get color with brightness correction, brightness factor goes from -1.0f to 1.0f.

+
+ +
+
+raylib.ColorContrast(color: Color | list | tuple, contrast: float) Color
+

Get color with contrast correction, contrast values between -1.0f and 1.0f.

+
+ +
+
+raylib.ColorFromHSV(hue: float, saturation: float, value: float) Color
+

Get a Color from HSV values, hue [0..360], saturation/value [0..1].

+
+ +
+
+raylib.ColorFromNormalized(normalized: Vector4 | list | tuple) Color
+

Get Color from normalized values [0..1].

+
+ +
+
+raylib.ColorIsEqual(col1: Color | list | tuple, col2: Color | list | tuple) bool
+

Check if two colors are equal.

+
+ +
+
+raylib.ColorLerp(color1: Color | list | tuple, color2: Color | list | tuple, factor: float) Color
+

Get color lerp interpolation between two colors, factor [0.0f..1.0f].

+
+ +
+
+raylib.ColorNormalize(color: Color | list | tuple) Vector4
+

Get Color normalized as float [0..1].

+
+ +
+
+raylib.ColorTint(color: Color | list | tuple, tint: Color | list | tuple) Color
+

Get color multiplied with another color.

+
+ +
+
+raylib.ColorToHSV(color: Color | list | tuple) Vector3
+

Get HSV values for a Color, hue [0..360], saturation/value [0..1].

+
+ +
+
+raylib.ColorToInt(color: Color | list | tuple) int
+

Get hexadecimal value for a Color (0xRRGGBBAA).

+
+ +
+
+raylib.CompressData(data: bytes, dataSize: int, compDataSize: Any) bytes
+

Compress data (DEFLATE algorithm), memory must be MemFree().

+
+ +
+
+raylib.ComputeCRC32(data: bytes, dataSize: int) int
+

Compute CRC32 hash code.

+
+ +
+
+raylib.ComputeMD5(data: bytes, dataSize: int) Any
+

Compute MD5 hash code, returns static int[4] (16 bytes).

+
+ +
+
+raylib.ComputeSHA1(data: bytes, dataSize: int) Any
+

Compute SHA1 hash code, returns static int[5] (20 bytes).

+
+ +
+
+raylib.ConfigFlags
+
+ +
+
+raylib.CreatePhysicsBodyCircle(pos: Vector2 | list | tuple, radius: float, density: float) Any
+

Creates a new circle physics body with generic parameters.

+
+ +
+
+raylib.CreatePhysicsBodyPolygon(pos: Vector2 | list | tuple, radius: float, sides: int, density: float) Any
+

Creates a new polygon physics body with generic parameters.

+
+ +
+
+raylib.CreatePhysicsBodyRectangle(pos: Vector2 | list | tuple, width: float, height: float, density: float) Any
+

Creates a new rectangle physics body with generic parameters.

+
+ +
+
+raylib.CubemapLayout
+
+ +
+
+raylib.DARKBLUE: Color
+
+ +
+
+raylib.DARKBROWN: Color
+
+ +
+
+raylib.DARKGRAY: Color
+
+ +
+
+raylib.DARKGREEN: Color
+
+ +
+
+raylib.DARKPURPLE: Color
+
+ +
+
+raylib.DEFAULT: int
+
+ +
+
+raylib.DROPDOWNBOX: int
+
+ +
+
+raylib.DROPDOWN_ARROW_HIDDEN: int
+
+ +
+
+raylib.DROPDOWN_ITEMS_SPACING: int
+
+ +
+
+raylib.DROPDOWN_ROLL_UP: int
+
+ +
+
+raylib.DecodeDataBase64(data: bytes, outputSize: Any) bytes
+

Decode Base64 string data, memory must be MemFree().

+
+ +
+
+raylib.DecompressData(compData: bytes, compDataSize: int, dataSize: Any) bytes
+

Decompress data (DEFLATE algorithm), memory must be MemFree().

+
+ +
+
+raylib.DestroyPhysicsBody(body: Any | list | tuple) None
+

Destroy a physics body.

+
+ +
+
+raylib.DetachAudioMixedProcessor(processor: Any) None
+

Detach audio stream processor from the entire audio pipeline.

+
+ +
+
+raylib.DetachAudioStreamProcessor(stream: AudioStream | list | tuple, processor: Any) None
+

Detach audio stream processor from stream.

+
+ +
+
+raylib.DirectoryExists(dirPath: bytes) bool
+

Check if a directory path exists.

+
+ +
+
+raylib.DisableCursor() None
+

Disables cursor (lock cursor).

+
+ +
+
+raylib.DisableEventWaiting() None
+

Disable waiting for events on EndDrawing(), automatic events polling.

+
+ +
+
+raylib.DrawBillboard(camera: Camera3D | list | tuple, texture: Texture | list | tuple, position: Vector3 | list | tuple, scale: float, tint: Color | list | tuple) None
+

Draw a billboard texture.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawBoundingBox(box: BoundingBox | list | tuple, color: Color | list | tuple) None
+

Draw bounding box (wires).

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawCircle(centerX: int, centerY: int, radius: float, color: Color | list | tuple) None
+

Draw a color-filled circle.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawCircleGradient(centerX: int, centerY: int, radius: float, inner: Color | list | tuple, outer: Color | list | tuple) None
+

Draw a gradient-filled circle.

+
+ +
+
+raylib.DrawCircleLines(centerX: int, centerY: int, radius: float, color: Color | list | tuple) None
+

Draw circle outline.

+
+ +
+
+raylib.DrawCircleLinesV(center: Vector2 | list | tuple, radius: float, color: Color | list | tuple) None
+

Draw circle outline (Vector version).

+
+ +
+
+raylib.DrawCircleSector(center: Vector2 | list | tuple, radius: float, startAngle: float, endAngle: float, segments: int, color: Color | list | tuple) None
+

Draw a piece of a circle.

+
+ +
+
+raylib.DrawCircleSectorLines(center: Vector2 | list | tuple, radius: float, startAngle: float, endAngle: float, segments: int, color: Color | list | tuple) None
+

Draw circle sector outline.

+
+ +
+
+raylib.DrawCircleV(center: Vector2 | list | tuple, radius: float, color: Color | list | tuple) None
+

Draw a color-filled circle (Vector version).

+
+ +
+
+raylib.DrawCube(position: Vector3 | list | tuple, width: float, height: float, length: float, color: Color | list | tuple) None
+

Draw cube.

+
+ +
+
+raylib.DrawCubeV(position: Vector3 | list | tuple, size: Vector3 | list | tuple, color: Color | list | tuple) None
+

Draw cube (Vector version).

+
+ +
+
+raylib.DrawCubeWires(position: Vector3 | list | tuple, width: float, height: float, length: float, color: Color | list | tuple) None
+

Draw cube wires.

+
+ +
+
+raylib.DrawCubeWiresV(position: Vector3 | list | tuple, size: Vector3 | list | tuple, color: Color | list | tuple) None
+

Draw cube wires (Vector version).

+
+ +
+
+raylib.DrawCylinder(position: Vector3 | list | tuple, radiusTop: float, radiusBottom: float, height: float, slices: int, color: Color | list | tuple) None
+

Draw a cylinder/cone.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawCylinderWires(position: Vector3 | list | tuple, radiusTop: float, radiusBottom: float, height: float, slices: int, color: Color | list | tuple) None
+

Draw a cylinder/cone wires.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawEllipse(centerX: int, centerY: int, radiusH: float, radiusV: float, color: Color | list | tuple) None
+

Draw ellipse.

+
+ +
+
+raylib.DrawEllipseLines(centerX: int, centerY: int, radiusH: float, radiusV: float, color: Color | list | tuple) None
+

Draw ellipse outline.

+
+ +
+
+raylib.DrawFPS(posX: int, posY: int) None
+

Draw current FPS.

+
+ +
+
+raylib.DrawGrid(slices: int, spacing: float) None
+

Draw a grid (centered at (0, 0, 0)).

+
+ +
+
+raylib.DrawLine(startPosX: int, startPosY: int, endPosX: int, endPosY: int, color: Color | list | tuple) None
+

Draw a line.

+
+ +
+
+raylib.DrawLine3D(startPos: Vector3 | list | tuple, endPos: Vector3 | list | tuple, color: Color | list | tuple) None
+

Draw a line in 3D world space.

+
+ +
+
+raylib.DrawLineBezier(startPos: Vector2 | list | tuple, endPos: Vector2 | list | tuple, thick: float, color: Color | list | tuple) None
+

Draw line segment cubic-bezier in-out interpolation.

+
+ +
+
+raylib.DrawLineEx(startPos: Vector2 | list | tuple, endPos: Vector2 | list | tuple, thick: float, color: Color | list | tuple) None
+

Draw a line (using triangles/quads).

+
+ +
+
+raylib.DrawLineStrip(points: Any | list | tuple, pointCount: int, color: Color | list | tuple) None
+

Draw lines sequence (using gl lines).

+
+ +
+
+raylib.DrawLineV(startPos: Vector2 | list | tuple, endPos: Vector2 | list | tuple, color: Color | list | tuple) None
+

Draw a line (using gl lines).

+
+ +
+
+raylib.DrawMesh(mesh: Mesh | list | tuple, material: Material | list | tuple, transform: Matrix | list | tuple) None
+

Draw a 3d mesh with material and transform.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawModel(model: Model | list | tuple, position: Vector3 | list | tuple, scale: float, tint: Color | list | tuple) None
+

Draw a model (with texture if set).

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawModelPoints(model: Model | list | tuple, position: Vector3 | list | tuple, scale: float, tint: Color | list | tuple) None
+

Draw a model as points.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawModelWires(model: Model | list | tuple, position: Vector3 | list | tuple, scale: float, tint: Color | list | tuple) None
+

Draw a model wires (with texture if set).

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawPixel(posX: int, posY: int, color: Color | list | tuple) None
+

Draw a pixel using geometry [Can be slow, use with care].

+
+ +
+
+raylib.DrawPixelV(position: Vector2 | list | tuple, color: Color | list | tuple) None
+

Draw a pixel using geometry (Vector version) [Can be slow, use with care].

+
+ +
+
+raylib.DrawPlane(centerPos: Vector3 | list | tuple, size: Vector2 | list | tuple, color: Color | list | tuple) None
+

Draw a plane XZ.

+
+ +
+
+raylib.DrawPoint3D(position: Vector3 | list | tuple, color: Color | list | tuple) None
+

Draw a point in 3D space, actually a small line.

+
+ +
+
+raylib.DrawPoly(center: Vector2 | list | tuple, sides: int, radius: float, rotation: float, color: Color | list | tuple) None
+

Draw a regular polygon (Vector version).

+
+ +
+
+raylib.DrawPolyLines(center: Vector2 | list | tuple, sides: int, radius: float, rotation: float, color: Color | list | tuple) None
+

Draw a polygon outline of n sides.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawRay(ray: Ray | list | tuple, color: Color | list | tuple) None
+

Draw a ray line.

+
+ +
+
+raylib.DrawRectangle(posX: int, posY: int, width: int, height: int, color: Color | list | tuple) None
+

Draw a color-filled rectangle.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawRectangleGradientH(posX: int, posY: int, width: int, height: int, left: Color | list | tuple, right: Color | list | tuple) None
+

Draw a horizontal-gradient-filled rectangle.

+
+ +
+
+raylib.DrawRectangleGradientV(posX: int, posY: int, width: int, height: int, top: Color | list | tuple, bottom: Color | list | tuple) None
+

Draw a vertical-gradient-filled rectangle.

+
+ +
+
+raylib.DrawRectangleLines(posX: int, posY: int, width: int, height: int, color: Color | list | tuple) None
+

Draw rectangle outline.

+
+ +
+
+raylib.DrawRectangleLinesEx(rec: Rectangle | list | tuple, lineThick: float, color: Color | list | tuple) None
+

Draw rectangle outline with extended parameters.

+
+ +
+
+raylib.DrawRectanglePro(rec: Rectangle | list | tuple, origin: Vector2 | list | tuple, rotation: float, color: Color | list | tuple) None
+

Draw a color-filled rectangle with pro parameters.

+
+ +
+
+raylib.DrawRectangleRec(rec: Rectangle | list | tuple, color: Color | list | tuple) None
+

Draw a color-filled rectangle.

+
+ +
+
+raylib.DrawRectangleRounded(rec: Rectangle | list | tuple, roundness: float, segments: int, color: Color | list | tuple) None
+

Draw rectangle with rounded edges.

+
+ +
+
+raylib.DrawRectangleRoundedLines(rec: Rectangle | list | tuple, roundness: float, segments: int, color: Color | list | tuple) None
+

Draw rectangle lines with rounded edges.

+
+ +
+
+raylib.DrawRectangleRoundedLinesEx(rec: Rectangle | list | tuple, roundness: float, segments: int, lineThick: float, color: Color | list | tuple) None
+

Draw rectangle with rounded edges outline.

+
+ +
+
+raylib.DrawRectangleV(position: Vector2 | list | tuple, size: Vector2 | list | tuple, color: Color | list | tuple) None
+

Draw a color-filled rectangle (Vector version).

+
+ +
+
+raylib.DrawRing(center: Vector2 | list | tuple, innerRadius: float, outerRadius: float, startAngle: float, endAngle: float, segments: int, color: Color | list | tuple) None
+

Draw ring.

+
+ +
+
+raylib.DrawRingLines(center: Vector2 | list | tuple, innerRadius: float, outerRadius: float, startAngle: float, endAngle: float, segments: int, color: Color | list | tuple) None
+

Draw ring outline.

+
+ +
+
+raylib.DrawSphere(centerPos: Vector3 | list | tuple, radius: float, color: Color | list | tuple) None
+

Draw sphere.

+
+ +
+
+raylib.DrawSphereEx(centerPos: Vector3 | list | tuple, radius: float, rings: int, slices: int, color: Color | list | tuple) None
+

Draw sphere with extended parameters.

+
+ +
+
+raylib.DrawSphereWires(centerPos: Vector3 | list | tuple, radius: float, rings: int, slices: int, color: Color | list | tuple) None
+

Draw sphere wires.

+
+ +
+
+raylib.DrawSplineBasis(points: Any | list | tuple, pointCount: int, thick: float, color: Color | list | tuple) None
+

Draw spline: B-Spline, minimum 4 points.

+
+ +
+
+raylib.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…].

+
+ +
+
+raylib.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…].

+
+ +
+
+raylib.DrawSplineCatmullRom(points: Any | list | tuple, pointCount: int, thick: float, color: Color | list | tuple) None
+

Draw spline: Catmull-Rom, minimum 4 points.

+
+ +
+
+raylib.DrawSplineLinear(points: Any | list | tuple, pointCount: int, thick: float, color: Color | list | tuple) None
+

Draw spline: Linear, minimum 2 points.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawSplineSegmentLinear(p1: Vector2 | list | tuple, p2: Vector2 | list | tuple, thick: float, color: Color | list | tuple) None
+

Draw spline segment: Linear, 2 points.

+
+ +
+
+raylib.DrawText(text: bytes, posX: int, posY: int, fontSize: int, color: Color | list | tuple) None
+

Draw text (using default font).

+
+ +
+
+raylib.DrawTextCodepoint(font: Font | list | tuple, codepoint: int, position: Vector2 | list | tuple, fontSize: float, tint: Color | list | tuple) None
+

Draw one character (codepoint).

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.DrawTexture(texture: Texture | list | tuple, posX: int, posY: int, tint: Color | list | tuple) None
+

Draw a Texture2D.

+
+ +
+
+raylib.DrawTextureEx(texture: Texture | list | tuple, position: Vector2 | list | tuple, rotation: float, scale: float, tint: Color | list | tuple) None
+

Draw a Texture2D with extended parameters.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.DrawTextureV(texture: Texture | list | tuple, position: Vector2 | list | tuple, tint: Color | list | tuple) None
+

Draw a Texture2D with position defined as Vector2.

+
+ +
+
+raylib.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!).

+
+ +
+
+raylib.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!).

+
+ +
+
+raylib.DrawTriangleFan(points: Any | list | tuple, pointCount: int, color: Color | list | tuple) None
+

Draw a triangle fan defined by points (first vertex is the center).

+
+ +
+
+raylib.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!).

+
+ +
+
+raylib.DrawTriangleStrip(points: Any | list | tuple, pointCount: int, color: Color | list | tuple) None
+

Draw a triangle strip defined by points.

+
+ +
+
+raylib.DrawTriangleStrip3D(points: Any | list | tuple, pointCount: int, color: Color | list | tuple) None
+

Draw a triangle strip defined by points.

+
+ +
+
+raylib.EnableCursor() None
+

Enables cursor (unlock cursor).

+
+ +
+
+raylib.EnableEventWaiting() None
+

Enable waiting for events on EndDrawing(), no automatic event polling.

+
+ +
+
+raylib.EncodeDataBase64(data: bytes, dataSize: int, outputSize: Any) bytes
+

Encode data to Base64 string, memory must be MemFree().

+
+ +
+
+raylib.EndBlendMode() None
+

End blending mode (reset to default: alpha blending).

+
+ +
+
+raylib.EndDrawing() None
+

End canvas drawing and swap buffers (double buffering).

+
+ +
+
+raylib.EndMode2D() None
+

Ends 2D mode with custom camera.

+
+ +
+
+raylib.EndMode3D() None
+

Ends 3D mode and returns to default 2D orthographic mode.

+
+ +
+
+raylib.EndScissorMode() None
+

End scissor mode.

+
+ +
+
+raylib.EndShaderMode() None
+

End custom shader drawing (use default shader).

+
+ +
+
+raylib.EndTextureMode() None
+

Ends drawing to render texture.

+
+ +
+
+raylib.EndVrStereoMode() None
+

End stereo rendering (requires VR simulator).

+
+ +
+
+raylib.ExportAutomationEventList(list_0: AutomationEventList | list | tuple, fileName: bytes) bool
+

Export automation events list as text file.

+
+ +
+
+raylib.ExportDataAsCode(data: bytes, dataSize: int, fileName: bytes) bool
+

Export data to code (.h), returns true on success.

+
+ +
+
+raylib.ExportFontAsCode(font: Font | list | tuple, fileName: bytes) bool
+

Export font as code file, returns true on success.

+
+ +
+
+raylib.ExportImage(image: Image | list | tuple, fileName: bytes) bool
+

Export image data to file, returns true on success.

+
+ +
+
+raylib.ExportImageAsCode(image: Image | list | tuple, fileName: bytes) bool
+

Export image as code file defining an array of bytes, returns true on success.

+
+ +
+
+raylib.ExportImageToMemory(image: Image | list | tuple, fileType: bytes, fileSize: Any) bytes
+

Export image to memory buffer.

+
+ +
+
+raylib.ExportMesh(mesh: Mesh | list | tuple, fileName: bytes) bool
+

Export mesh data to file, returns true on success.

+
+ +
+
+raylib.ExportMeshAsCode(mesh: Mesh | list | tuple, fileName: bytes) bool
+

Export mesh as code file (.h) defining multiple arrays of vertex attributes.

+
+ +
+
+raylib.ExportWave(wave: Wave | list | tuple, fileName: bytes) bool
+

Export wave data to file, returns true on success.

+
+ +
+
+raylib.ExportWaveAsCode(wave: Wave | list | tuple, fileName: bytes) bool
+

Export wave sample data to code (.h), returns true on success.

+
+ +
+
+raylib.FLAG_BORDERLESS_WINDOWED_MODE: int
+
+ +
+
+raylib.FLAG_FULLSCREEN_MODE: int
+
+ +
+
+raylib.FLAG_INTERLACED_HINT: int
+
+ +
+
+raylib.FLAG_MSAA_4X_HINT: int
+
+ +
+
+raylib.FLAG_VSYNC_HINT: int
+
+ +
+
+raylib.FLAG_WINDOW_ALWAYS_RUN: int
+
+ +
+
+raylib.FLAG_WINDOW_HIDDEN: int
+
+ +
+
+raylib.FLAG_WINDOW_HIGHDPI: int
+
+ +
+
+raylib.FLAG_WINDOW_MAXIMIZED: int
+
+ +
+
+raylib.FLAG_WINDOW_MINIMIZED: int
+
+ +
+
+raylib.FLAG_WINDOW_MOUSE_PASSTHROUGH: int
+
+ +
+
+raylib.FLAG_WINDOW_RESIZABLE: int
+
+ +
+
+raylib.FLAG_WINDOW_TOPMOST: int
+
+ +
+
+raylib.FLAG_WINDOW_TRANSPARENT: int
+
+ +
+
+raylib.FLAG_WINDOW_UNDECORATED: int
+
+ +
+
+raylib.FLAG_WINDOW_UNFOCUSED: int
+
+ +
+
+raylib.FONT_BITMAP: int
+
+ +
+
+raylib.FONT_DEFAULT: int
+
+ +
+
+raylib.FONT_SDF: int
+
+ +
+
+raylib.Fade(color: Color | list | tuple, alpha: float) Color
+

Get color with alpha applied, alpha goes from 0.0f to 1.0f.

+
+ +
+
+raylib.FileExists(fileName: bytes) bool
+

Check if file exists.

+
+ +
+
+class raylib.FilePathList
+
+
+capacity: int
+
+ +
+
+count: int
+
+ +
+
+paths: list[bytes]
+
+ +
+ +
+
+raylib.FloatEquals(x: float, y: float) int
+

.

+
+ +
+
+class raylib.Font
+
+
+baseSize: int
+
+ +
+
+glyphCount: int
+
+ +
+
+glyphPadding: int
+
+ +
+
+glyphs: Any
+
+ +
+
+recs: Any
+
+ +
+
+texture: Texture
+
+ +
+ +
+
+raylib.FontType
+
+ +
+
+raylib.GAMEPAD_AXIS_LEFT_TRIGGER: int
+
+ +
+
+raylib.GAMEPAD_AXIS_LEFT_X: int
+
+ +
+
+raylib.GAMEPAD_AXIS_LEFT_Y: int
+
+ +
+
+raylib.GAMEPAD_AXIS_RIGHT_TRIGGER: int
+
+ +
+
+raylib.GAMEPAD_AXIS_RIGHT_X: int
+
+ +
+
+raylib.GAMEPAD_AXIS_RIGHT_Y: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_LEFT_FACE_DOWN: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_LEFT_FACE_LEFT: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_LEFT_FACE_RIGHT: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_LEFT_FACE_UP: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_LEFT_THUMB: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_LEFT_TRIGGER_1: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_LEFT_TRIGGER_2: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_MIDDLE: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_MIDDLE_LEFT: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_MIDDLE_RIGHT: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_RIGHT_FACE_DOWN: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_RIGHT_FACE_LEFT: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_RIGHT_FACE_UP: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_RIGHT_THUMB: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_RIGHT_TRIGGER_1: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_RIGHT_TRIGGER_2: int
+
+ +
+
+raylib.GAMEPAD_BUTTON_UNKNOWN: int
+
+ +
+
+raylib.GESTURE_DOUBLETAP: int
+
+ +
+
+raylib.GESTURE_DRAG: int
+
+ +
+
+raylib.GESTURE_HOLD: int
+
+ +
+
+raylib.GESTURE_NONE: int
+
+ +
+
+raylib.GESTURE_PINCH_IN: int
+
+ +
+
+raylib.GESTURE_PINCH_OUT: int
+
+ +
+
+raylib.GESTURE_SWIPE_DOWN: int
+
+ +
+
+raylib.GESTURE_SWIPE_LEFT: int
+
+ +
+
+raylib.GESTURE_SWIPE_RIGHT: int
+
+ +
+
+raylib.GESTURE_SWIPE_UP: int
+
+ +
+
+raylib.GESTURE_TAP: int
+
+ +
+
+class raylib.GLFWallocator
+
+
+allocate: Any
+
+ +
+
+deallocate: Any
+
+ +
+
+reallocate: Any
+
+ +
+
+user: Any
+
+ +
+ +
+
+class raylib.GLFWcursor
+
+ +
+
+class raylib.GLFWgamepadstate
+
+
+axes: list
+
+ +
+
+buttons: bytes
+
+ +
+ +
+
+class raylib.GLFWgammaramp
+
+
+blue: Any
+
+ +
+
+green: Any
+
+ +
+
+red: Any
+
+ +
+
+size: int
+
+ +
+ +
+
+class raylib.GLFWimage
+
+
+height: int
+
+ +
+
+pixels: bytes
+
+ +
+
+width: int
+
+ +
+ +
+
+class raylib.GLFWmonitor
+
+ +
+
+class raylib.GLFWvidmode
+
+
+blueBits: int
+
+ +
+
+greenBits: int
+
+ +
+
+height: int
+
+ +
+
+redBits: int
+
+ +
+
+refreshRate: int
+
+ +
+
+width: int
+
+ +
+ +
+
+class raylib.GLFWwindow
+
+ +
+
+raylib.GOLD: Color
+
+ +
+
+raylib.GRAY: Color
+
+ +
+
+raylib.GREEN: Color
+
+ +
+
+raylib.GROUP_PADDING: int
+
+ +
+
+raylib.GamepadAxis
+
+ +
+
+raylib.GamepadButton
+
+ +
+
+raylib.GenImageCellular(width: int, height: int, tileSize: int) Image
+

Generate image: cellular algorithm, bigger tileSize means bigger cells.

+
+ +
+
+raylib.GenImageChecked(width: int, height: int, checksX: int, checksY: int, col1: Color | list | tuple, col2: Color | list | tuple) Image
+

Generate image: checked.

+
+ +
+
+raylib.GenImageColor(width: int, height: int, color: Color | list | tuple) Image
+

Generate image: plain color.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.GenImageGradientRadial(width: int, height: int, density: float, inner: Color | list | tuple, outer: Color | list | tuple) Image
+

Generate image: radial gradient.

+
+ +
+
+raylib.GenImageGradientSquare(width: int, height: int, density: float, inner: Color | list | tuple, outer: Color | list | tuple) Image
+

Generate image: square gradient.

+
+ +
+
+raylib.GenImagePerlinNoise(width: int, height: int, offsetX: int, offsetY: int, scale: float) Image
+

Generate image: perlin noise.

+
+ +
+
+raylib.GenImageText(width: int, height: int, text: bytes) Image
+

Generate image: grayscale image from text data.

+
+ +
+
+raylib.GenImageWhiteNoise(width: int, height: int, factor: float) Image
+

Generate image: white noise.

+
+ +
+
+raylib.GenMeshCone(radius: float, height: float, slices: int) Mesh
+

Generate cone/pyramid mesh.

+
+ +
+
+raylib.GenMeshCube(width: float, height: float, length: float) Mesh
+

Generate cuboid mesh.

+
+ +
+
+raylib.GenMeshCubicmap(cubicmap: Image | list | tuple, cubeSize: Vector3 | list | tuple) Mesh
+

Generate cubes-based map mesh from image data.

+
+ +
+
+raylib.GenMeshCylinder(radius: float, height: float, slices: int) Mesh
+

Generate cylinder mesh.

+
+ +
+
+raylib.GenMeshHeightmap(heightmap: Image | list | tuple, size: Vector3 | list | tuple) Mesh
+

Generate heightmap mesh from image data.

+
+ +
+
+raylib.GenMeshHemiSphere(radius: float, rings: int, slices: int) Mesh
+

Generate half-sphere mesh (no bottom cap).

+
+ +
+
+raylib.GenMeshKnot(radius: float, size: float, radSeg: int, sides: int) Mesh
+

Generate trefoil knot mesh.

+
+ +
+
+raylib.GenMeshPlane(width: float, length: float, resX: int, resZ: int) Mesh
+

Generate plane mesh (with subdivisions).

+
+ +
+
+raylib.GenMeshPoly(sides: int, radius: float) Mesh
+

Generate polygonal mesh.

+
+ +
+
+raylib.GenMeshSphere(radius: float, rings: int, slices: int) Mesh
+

Generate sphere mesh (standard sphere).

+
+ +
+
+raylib.GenMeshTangents(mesh: Any | list | tuple) None
+

Compute mesh tangents.

+
+ +
+
+raylib.GenMeshTorus(radius: float, size: float, radSeg: int, sides: int) Mesh
+

Generate torus mesh.

+
+ +
+
+raylib.GenTextureMipmaps(texture: Any | list | tuple) None
+

Generate GPU mipmaps for a texture.

+
+ +
+
+raylib.Gesture
+
+ +
+
+raylib.GetApplicationDirectory() bytes
+

Get the directory of the running application (uses static string).

+
+ +
+
+raylib.GetCameraMatrix(camera: Camera3D | list | tuple) Matrix
+

Get camera transform matrix (view matrix).

+
+ +
+
+raylib.GetCameraMatrix2D(camera: Camera2D | list | tuple) Matrix
+

Get camera 2d transform matrix.

+
+ +
+
+raylib.GetCharPressed() int
+

Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty.

+
+ +
+
+raylib.GetClipboardImage() Image
+

Get clipboard image content.

+
+ +
+
+raylib.GetClipboardText() bytes
+

Get clipboard text content.

+
+ +
+
+raylib.GetCodepoint(text: bytes, codepointSize: Any) int
+

Get next codepoint in a UTF-8 encoded string, 0x3f(‘?’) is returned on failure.

+
+ +
+
+raylib.GetCodepointCount(text: bytes) int
+

Get total number of codepoints in a UTF-8 encoded string.

+
+ +
+
+raylib.GetCodepointNext(text: bytes, codepointSize: Any) int
+

Get next codepoint in a UTF-8 encoded string, 0x3f(‘?’) is returned on failure.

+
+ +
+
+raylib.GetCodepointPrevious(text: bytes, codepointSize: Any) int
+

Get previous codepoint in a UTF-8 encoded string, 0x3f(‘?’) is returned on failure.

+
+ +
+
+raylib.GetCollisionRec(rec1: Rectangle | list | tuple, rec2: Rectangle | list | tuple) Rectangle
+

Get collision rectangle for two rectangles collision.

+
+ +
+
+raylib.GetColor(hexValue: int) Color
+

Get Color structure from hexadecimal value.

+
+ +
+
+raylib.GetCurrentMonitor() int
+

Get current monitor where window is placed.

+
+ +
+
+raylib.GetDirectoryPath(filePath: bytes) bytes
+

Get full path for a given fileName with path (uses static string).

+
+ +
+
+raylib.GetFPS() int
+

Get current FPS.

+
+ +
+
+raylib.GetFileExtension(fileName: bytes) bytes
+

Get pointer to extension for a filename string (includes dot: ‘.png’).

+
+ +
+
+raylib.GetFileLength(fileName: bytes) int
+

Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h).

+
+ +
+
+raylib.GetFileModTime(fileName: bytes) int
+

Get file modification time (last write time).

+
+ +
+
+raylib.GetFileName(filePath: bytes) bytes
+

Get pointer to filename for a path string.

+
+ +
+
+raylib.GetFileNameWithoutExt(filePath: bytes) bytes
+

Get filename string without extension (uses static string).

+
+ +
+
+raylib.GetFontDefault() Font
+

Get the default Font.

+
+ +
+
+raylib.GetFrameTime() float
+

Get time in seconds for last frame drawn (delta time).

+
+ +
+
+raylib.GetGamepadAxisCount(gamepad: int) int
+

Get gamepad axis count for a gamepad.

+
+ +
+
+raylib.GetGamepadAxisMovement(gamepad: int, axis: int) float
+

Get axis movement value for a gamepad axis.

+
+ +
+
+raylib.GetGamepadButtonPressed() int
+

Get the last gamepad button pressed.

+
+ +
+
+raylib.GetGamepadName(gamepad: int) bytes
+

Get gamepad internal name id.

+
+ +
+
+raylib.GetGestureDetected() int
+

Get latest detected gesture.

+
+ +
+
+raylib.GetGestureDragAngle() float
+

Get gesture drag angle.

+
+ +
+
+raylib.GetGestureDragVector() Vector2
+

Get gesture drag vector.

+
+ +
+
+raylib.GetGestureHoldDuration() float
+

Get gesture hold time in seconds.

+
+ +
+
+raylib.GetGesturePinchAngle() float
+

Get gesture pinch angle.

+
+ +
+
+raylib.GetGesturePinchVector() Vector2
+

Get gesture pinch delta.

+
+ +
+
+raylib.GetGlyphAtlasRec(font: Font | list | tuple, codepoint: int) Rectangle
+

Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to ‘?’ if not found.

+
+ +
+
+raylib.GetGlyphIndex(font: Font | list | tuple, codepoint: int) int
+

Get glyph index position in font for a codepoint (unicode character), fallback to ‘?’ if not found.

+
+ +
+
+raylib.GetGlyphInfo(font: Font | list | tuple, codepoint: int) GlyphInfo
+

Get glyph font info data for a codepoint (unicode character), fallback to ‘?’ if not found.

+
+ +
+
+raylib.GetImageAlphaBorder(image: Image | list | tuple, threshold: float) Rectangle
+

Get image alpha border rectangle.

+
+ +
+
+raylib.GetImageColor(image: Image | list | tuple, x: int, y: int) Color
+

Get image pixel color at (x, y) position.

+
+ +
+
+raylib.GetKeyPressed() int
+

Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty.

+
+ +
+
+raylib.GetMasterVolume() float
+

Get master volume (listener).

+
+ +
+
+raylib.GetMeshBoundingBox(mesh: Mesh | list | tuple) BoundingBox
+

Compute mesh bounding box limits.

+
+ +
+
+raylib.GetModelBoundingBox(model: Model | list | tuple) BoundingBox
+

Compute model bounding box limits (considers all meshes).

+
+ +
+
+raylib.GetMonitorCount() int
+

Get number of connected monitors.

+
+ +
+
+raylib.GetMonitorHeight(monitor: int) int
+

Get specified monitor height (current video mode used by monitor).

+
+ +
+
+raylib.GetMonitorName(monitor: int) bytes
+

Get the human-readable, UTF-8 encoded name of the specified monitor.

+
+ +
+
+raylib.GetMonitorPhysicalHeight(monitor: int) int
+

Get specified monitor physical height in millimetres.

+
+ +
+
+raylib.GetMonitorPhysicalWidth(monitor: int) int
+

Get specified monitor physical width in millimetres.

+
+ +
+
+raylib.GetMonitorPosition(monitor: int) Vector2
+

Get specified monitor position.

+
+ +
+
+raylib.GetMonitorRefreshRate(monitor: int) int
+

Get specified monitor refresh rate.

+
+ +
+
+raylib.GetMonitorWidth(monitor: int) int
+

Get specified monitor width (current video mode used by monitor).

+
+ +
+
+raylib.GetMouseDelta() Vector2
+

Get mouse delta between frames.

+
+ +
+
+raylib.GetMousePosition() Vector2
+

Get mouse position XY.

+
+ +
+
+raylib.GetMouseWheelMove() float
+

Get mouse wheel movement for X or Y, whichever is larger.

+
+ +
+
+raylib.GetMouseWheelMoveV() Vector2
+

Get mouse wheel movement for both X and Y.

+
+ +
+
+raylib.GetMouseX() int
+

Get mouse position X.

+
+ +
+
+raylib.GetMouseY() int
+

Get mouse position Y.

+
+ +
+
+raylib.GetMusicTimeLength(music: Music | list | tuple) float
+

Get music time length (in seconds).

+
+ +
+
+raylib.GetMusicTimePlayed(music: Music | list | tuple) float
+

Get current music time played (in seconds).

+
+ +
+
+raylib.GetPhysicsBodiesCount() int
+

Returns the current amount of created physics bodies.

+
+ +
+
+raylib.GetPhysicsBody(index: int) Any
+

Returns a physics body of the bodies pool at a specific index.

+
+ +
+
+raylib.GetPhysicsShapeType(index: int) int
+

Returns the physics body shape type (PHYSICS_CIRCLE or PHYSICS_POLYGON).

+
+ +
+
+raylib.GetPhysicsShapeVertex(body: Any | list | tuple, vertex: int) Vector2
+

Returns transformed position of a body shape (body position + vertex transformed position).

+
+ +
+
+raylib.GetPhysicsShapeVerticesCount(index: int) int
+

Returns the amount of vertices of a physics body shape.

+
+ +
+
+raylib.GetPixelColor(srcPtr: Any, format: int) Color
+

Get Color from a source pixel pointer of certain format.

+
+ +
+
+raylib.GetPixelDataSize(width: int, height: int, format: int) int
+

Get pixel data size in bytes for certain format.

+
+ +
+
+raylib.GetPrevDirectoryPath(dirPath: bytes) bytes
+

Get previous directory path for a given path (uses static string).

+
+ +
+
+raylib.GetRandomValue(min_0: int, max_1: int) int
+

Get a random value between min and max (both included).

+
+ +
+
+raylib.GetRayCollisionBox(ray: Ray | list | tuple, box: BoundingBox | list | tuple) RayCollision
+

Get collision info between ray and box.

+
+ +
+
+raylib.GetRayCollisionMesh(ray: Ray | list | tuple, mesh: Mesh | list | tuple, transform: Matrix | list | tuple) RayCollision
+

Get collision info between ray and mesh.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.GetRayCollisionSphere(ray: Ray | list | tuple, center: Vector3 | list | tuple, radius: float) RayCollision
+

Get collision info between ray and sphere.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.GetRenderHeight() int
+

Get current render height (it considers HiDPI).

+
+ +
+
+raylib.GetRenderWidth() int
+

Get current render width (it considers HiDPI).

+
+ +
+
+raylib.GetScreenHeight() int
+

Get current screen height.

+
+ +
+
+raylib.GetScreenToWorld2D(position: Vector2 | list | tuple, camera: Camera2D | list | tuple) Vector2
+

Get the world space position for a 2d camera screen space position.

+
+ +
+
+raylib.GetScreenToWorldRay(position: Vector2 | list | tuple, camera: Camera3D | list | tuple) Ray
+

Get a ray trace from screen position (i.e mouse).

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.GetScreenWidth() int
+

Get current screen width.

+
+ +
+
+raylib.GetShaderLocation(shader: Shader | list | tuple, uniformName: bytes) int
+

Get shader uniform location.

+
+ +
+
+raylib.GetShaderLocationAttrib(shader: Shader | list | tuple, attribName: bytes) int
+

Get shader attribute location.

+
+ +
+
+raylib.GetShapesTexture() Texture
+

Get texture that is used for shapes drawing.

+
+ +
+
+raylib.GetShapesTextureRectangle() Rectangle
+

Get texture source rectangle that is used for shapes drawing.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.GetSplinePointBezierQuad(p1: Vector2 | list | tuple, c2: Vector2 | list | tuple, p3: Vector2 | list | tuple, t: float) Vector2
+

Get (evaluate) spline point: Quadratic Bezier.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.GetSplinePointLinear(startPos: Vector2 | list | tuple, endPos: Vector2 | list | tuple, t: float) Vector2
+

Get (evaluate) spline point: Linear.

+
+ +
+
+raylib.GetTime() float
+

Get elapsed time in seconds since InitWindow().

+
+ +
+
+raylib.GetTouchPointCount() int
+

Get number of touch points.

+
+ +
+
+raylib.GetTouchPointId(index: int) int
+

Get touch point identifier for given index.

+
+ +
+
+raylib.GetTouchPosition(index: int) Vector2
+

Get touch position XY for a touch point index (relative to screen size).

+
+ +
+
+raylib.GetTouchX() int
+

Get touch position X for touch point 0 (relative to screen size).

+
+ +
+
+raylib.GetTouchY() int
+

Get touch position Y for touch point 0 (relative to screen size).

+
+ +
+
+raylib.GetWindowHandle() Any
+

Get native window handle.

+
+ +
+
+raylib.GetWindowPosition() Vector2
+

Get window position XY on monitor.

+
+ +
+
+raylib.GetWindowScaleDPI() Vector2
+

Get window scale DPI factor.

+
+ +
+
+raylib.GetWorkingDirectory() bytes
+

Get current working directory (uses static string).

+
+ +
+
+raylib.GetWorldToScreen(position: Vector3 | list | tuple, camera: Camera3D | list | tuple) Vector2
+

Get the screen space position for a 3d world space position.

+
+ +
+
+raylib.GetWorldToScreen2D(position: Vector2 | list | tuple, camera: Camera2D | list | tuple) Vector2
+

Get the screen space position for a 2d camera world space position.

+
+ +
+
+raylib.GetWorldToScreenEx(position: Vector3 | list | tuple, camera: Camera3D | list | tuple, width: int, height: int) Vector2
+

Get size position for a 3d world space position.

+
+ +
+
+class raylib.GlyphInfo
+
+
+advanceX: int
+
+ +
+
+image: Image
+
+ +
+
+offsetX: int
+
+ +
+
+offsetY: int
+
+ +
+
+value: int
+
+ +
+ +
+
+raylib.GuiButton(bounds: Rectangle | list | tuple, text: bytes) int
+

Button control, returns true when clicked.

+
+ +
+
+raylib.GuiCheckBox(bounds: Rectangle | list | tuple, text: bytes, checked: Any) int
+

Check Box control, returns true when active.

+
+ +
+
+raylib.GuiCheckBoxProperty
+
+ +
+
+raylib.GuiColorBarAlpha(bounds: Rectangle | list | tuple, text: bytes, alpha: Any) int
+

Color Bar Alpha control.

+
+ +
+
+raylib.GuiColorBarHue(bounds: Rectangle | list | tuple, text: bytes, value: Any) int
+

Color Bar Hue control.

+
+ +
+
+raylib.GuiColorPanel(bounds: Rectangle | list | tuple, text: bytes, color: Any | list | tuple) int
+

Color Panel control.

+
+ +
+
+raylib.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().

+
+ +
+
+raylib.GuiColorPicker(bounds: Rectangle | list | tuple, text: bytes, color: Any | list | tuple) int
+

Color Picker control (multiple color controls).

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.GuiColorPickerProperty
+
+ +
+
+raylib.GuiComboBox(bounds: Rectangle | list | tuple, text: bytes, active: Any) int
+

Combo Box control.

+
+ +
+
+raylib.GuiComboBoxProperty
+
+ +
+
+raylib.GuiControl
+
+ +
+
+raylib.GuiControlProperty
+
+ +
+
+raylib.GuiDefaultProperty
+
+ +
+
+raylib.GuiDisable() None
+

Disable gui controls (global state).

+
+ +
+
+raylib.GuiDisableTooltip() None
+

Disable gui tooltips (global state).

+
+ +
+
+raylib.GuiDrawIcon(iconId: int, posX: int, posY: int, pixelSize: int, color: Color | list | tuple) None
+

Draw icon using pixel size at specified position.

+
+ +
+
+raylib.GuiDropdownBox(bounds: Rectangle | list | tuple, text: bytes, active: Any, editMode: bool) int
+

Dropdown Box control.

+
+ +
+
+raylib.GuiDropdownBoxProperty
+
+ +
+
+raylib.GuiDummyRec(bounds: Rectangle | list | tuple, text: bytes) int
+

Dummy control for placeholders.

+
+ +
+
+raylib.GuiEnable() None
+

Enable gui controls (global state).

+
+ +
+
+raylib.GuiEnableTooltip() None
+

Enable gui tooltips (global state).

+
+ +
+
+raylib.GuiGetFont() Font
+

Get gui custom font (global state).

+
+ +
+
+raylib.GuiGetIcons() Any
+

Get raygui icons data pointer.

+
+ +
+
+raylib.GuiGetState() int
+

Get gui state (global state).

+
+ +
+
+raylib.GuiGetStyle(control: int, property: int) int
+

Get one style property.

+
+ +
+
+raylib.GuiGrid(bounds: Rectangle | list | tuple, text: bytes, spacing: float, subdivs: int, mouseCell: Any | list | tuple) int
+

Grid control.

+
+ +
+
+raylib.GuiGroupBox(bounds: Rectangle | list | tuple, text: bytes) int
+

Group Box control with text name.

+
+ +
+
+raylib.GuiIconName
+
+ +
+
+raylib.GuiIconText(iconId: int, text: bytes) bytes
+

Get text with icon id prepended (if supported).

+
+ +
+
+raylib.GuiIsLocked() bool
+

Check if gui is locked (global state).

+
+ +
+
+raylib.GuiLabel(bounds: Rectangle | list | tuple, text: bytes) int
+

Label control.

+
+ +
+
+raylib.GuiLabelButton(bounds: Rectangle | list | tuple, text: bytes) int
+

Label button control, returns true when clicked.

+
+ +
+
+raylib.GuiLine(bounds: Rectangle | list | tuple, text: bytes) int
+

Line separator control, could contain text.

+
+ +
+
+raylib.GuiListView(bounds: Rectangle | list | tuple, text: bytes, scrollIndex: Any, active: Any) int
+

List View control.

+
+ +
+
+raylib.GuiListViewEx(bounds: Rectangle | list | tuple, text: list[bytes], count: int, scrollIndex: Any, active: Any, focus: Any) int
+

List View with extended parameters.

+
+ +
+
+raylib.GuiListViewProperty
+
+ +
+
+raylib.GuiLoadIcons(fileName: bytes, loadIconsName: bool) list[bytes]
+

Load raygui icons file (.rgi) into internal icons data.

+
+ +
+
+raylib.GuiLoadStyle(fileName: bytes) None
+

Load style file over global style variable (.rgs).

+
+ +
+
+raylib.GuiLoadStyleDefault() None
+

Load style default over global style.

+
+ +
+
+raylib.GuiLock() None
+

Lock gui controls (global state).

+
+ +
+
+raylib.GuiMessageBox(bounds: Rectangle | list | tuple, title: bytes, message: bytes, buttons: bytes) int
+

Message Box control, displays a message.

+
+ +
+
+raylib.GuiPanel(bounds: Rectangle | list | tuple, text: bytes) int
+

Panel control, useful to group controls.

+
+ +
+
+raylib.GuiProgressBar(bounds: Rectangle | list | tuple, textLeft: bytes, textRight: bytes, value: Any, minValue: float, maxValue: float) int
+

Progress Bar control.

+
+ +
+
+raylib.GuiProgressBarProperty
+
+ +
+
+raylib.GuiScrollBarProperty
+
+ +
+
+raylib.GuiScrollPanel(bounds: Rectangle | list | tuple, text: bytes, content: Rectangle | list | tuple, scroll: Any | list | tuple, view: Any | list | tuple) int
+

Scroll Panel control.

+
+ +
+
+raylib.GuiSetAlpha(alpha: float) None
+

Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f.

+
+ +
+
+raylib.GuiSetFont(font: Font | list | tuple) None
+

Set gui custom font (global state).

+
+ +
+
+raylib.GuiSetIconScale(scale: int) None
+

Set default icon drawing size.

+
+ +
+
+raylib.GuiSetState(state: int) None
+

Set gui state (global state).

+
+ +
+
+raylib.GuiSetStyle(control: int, property: int, value: int) None
+

Set one style property.

+
+ +
+
+raylib.GuiSetTooltip(tooltip: bytes) None
+

Set tooltip string.

+
+ +
+
+raylib.GuiSlider(bounds: Rectangle | list | tuple, textLeft: bytes, textRight: bytes, value: Any, minValue: float, maxValue: float) int
+

Slider control.

+
+ +
+
+raylib.GuiSliderBar(bounds: Rectangle | list | tuple, textLeft: bytes, textRight: bytes, value: Any, minValue: float, maxValue: float) int
+

Slider Bar control.

+
+ +
+
+raylib.GuiSliderProperty
+
+ +
+
+raylib.GuiSpinner(bounds: Rectangle | list | tuple, text: bytes, value: Any, minValue: int, maxValue: int, editMode: bool) int
+

Spinner control.

+
+ +
+
+raylib.GuiSpinnerProperty
+
+ +
+
+raylib.GuiState
+
+ +
+
+raylib.GuiStatusBar(bounds: Rectangle | list | tuple, text: bytes) int
+

Status Bar control, shows info text.

+
+ +
+
+class raylib.GuiStyleProp
+
+
+controlId: int
+
+ +
+
+propertyId: int
+
+ +
+
+propertyValue: int
+
+ +
+ +
+
+raylib.GuiTabBar(bounds: Rectangle | list | tuple, text: list[bytes], count: int, active: Any) int
+

Tab Bar control, returns TAB to be closed or -1.

+
+ +
+
+raylib.GuiTextAlignment
+
+ +
+
+raylib.GuiTextAlignmentVertical
+
+ +
+
+raylib.GuiTextBox(bounds: Rectangle | list | tuple, text: bytes, textSize: int, editMode: bool) int
+

Text Box control, updates input text.

+
+ +
+
+raylib.GuiTextBoxProperty
+
+ +
+
+raylib.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.

+
+ +
+
+raylib.GuiTextWrapMode
+
+ +
+
+raylib.GuiToggle(bounds: Rectangle | list | tuple, text: bytes, active: Any) int
+

Toggle Button control.

+
+ +
+
+raylib.GuiToggleGroup(bounds: Rectangle | list | tuple, text: bytes, active: Any) int
+

Toggle Group control.

+
+ +
+
+raylib.GuiToggleProperty
+
+ +
+
+raylib.GuiToggleSlider(bounds: Rectangle | list | tuple, text: bytes, active: Any) int
+

Toggle Slider control.

+
+ +
+
+raylib.GuiUnlock() None
+

Unlock gui controls (global state).

+
+ +
+
+raylib.GuiValueBox(bounds: Rectangle | list | tuple, text: bytes, value: Any, minValue: int, maxValue: int, editMode: bool) int
+

Value Box control, updates input text with numbers.

+
+ +
+
+raylib.GuiValueBoxFloat(bounds: Rectangle | list | tuple, text: bytes, textValue: bytes, value: Any, editMode: bool) int
+

Value box control for float values.

+
+ +
+
+raylib.GuiWindowBox(bounds: Rectangle | list | tuple, title: bytes) int
+

Window Box control, shows a window that can be closed.

+
+ +
+
+raylib.HUEBAR_PADDING: int
+
+ +
+
+raylib.HUEBAR_SELECTOR_HEIGHT: int
+
+ +
+
+raylib.HUEBAR_SELECTOR_OVERFLOW: int
+
+ +
+
+raylib.HUEBAR_WIDTH: int
+
+ +
+
+raylib.HideCursor() None
+

Hides cursor.

+
+ +
+
+raylib.ICON_1UP: int
+
+ +
+
+raylib.ICON_229: int
+
+ +
+
+raylib.ICON_230: int
+
+ +
+
+raylib.ICON_231: int
+
+ +
+
+raylib.ICON_232: int
+
+ +
+
+raylib.ICON_233: int
+
+ +
+
+raylib.ICON_234: int
+
+ +
+
+raylib.ICON_235: int
+
+ +
+
+raylib.ICON_236: int
+
+ +
+
+raylib.ICON_237: int
+
+ +
+
+raylib.ICON_238: int
+
+ +
+
+raylib.ICON_239: int
+
+ +
+
+raylib.ICON_240: int
+
+ +
+
+raylib.ICON_241: int
+
+ +
+
+raylib.ICON_242: int
+
+ +
+
+raylib.ICON_243: int
+
+ +
+
+raylib.ICON_244: int
+
+ +
+
+raylib.ICON_245: int
+
+ +
+
+raylib.ICON_246: int
+
+ +
+
+raylib.ICON_247: int
+
+ +
+
+raylib.ICON_248: int
+
+ +
+
+raylib.ICON_249: int
+
+ +
+
+raylib.ICON_250: int
+
+ +
+
+raylib.ICON_251: int
+
+ +
+
+raylib.ICON_252: int
+
+ +
+
+raylib.ICON_253: int
+
+ +
+
+raylib.ICON_254: int
+
+ +
+
+raylib.ICON_255: int
+
+ +
+
+raylib.ICON_ALARM: int
+
+ +
+
+raylib.ICON_ALPHA_CLEAR: int
+
+ +
+
+raylib.ICON_ALPHA_MULTIPLY: int
+
+ +
+
+raylib.ICON_ARROW_DOWN: int
+
+ +
+
+raylib.ICON_ARROW_DOWN_FILL: int
+
+ +
+
+raylib.ICON_ARROW_LEFT: int
+
+ +
+
+raylib.ICON_ARROW_LEFT_FILL: int
+
+ +
+
+raylib.ICON_ARROW_RIGHT: int
+
+ +
+
+raylib.ICON_ARROW_RIGHT_FILL: int
+
+ +
+
+raylib.ICON_ARROW_UP: int
+
+ +
+
+raylib.ICON_ARROW_UP_FILL: int
+
+ +
+
+raylib.ICON_AUDIO: int
+
+ +
+
+raylib.ICON_BIN: int
+
+ +
+
+raylib.ICON_BOX: int
+
+ +
+
+raylib.ICON_BOX_BOTTOM: int
+
+ +
+
+raylib.ICON_BOX_BOTTOM_LEFT: int
+
+ +
+
+raylib.ICON_BOX_BOTTOM_RIGHT: int
+
+ +
+
+raylib.ICON_BOX_CENTER: int
+
+ +
+
+raylib.ICON_BOX_CIRCLE_MASK: int
+
+ +
+
+raylib.ICON_BOX_CONCENTRIC: int
+
+ +
+
+raylib.ICON_BOX_CORNERS_BIG: int
+
+ +
+
+raylib.ICON_BOX_CORNERS_SMALL: int
+
+ +
+
+raylib.ICON_BOX_DOTS_BIG: int
+
+ +
+
+raylib.ICON_BOX_DOTS_SMALL: int
+
+ +
+
+raylib.ICON_BOX_GRID: int
+
+ +
+
+raylib.ICON_BOX_GRID_BIG: int
+
+ +
+
+raylib.ICON_BOX_LEFT: int
+
+ +
+
+raylib.ICON_BOX_MULTISIZE: int
+
+ +
+
+raylib.ICON_BOX_RIGHT: int
+
+ +
+
+raylib.ICON_BOX_TOP: int
+
+ +
+
+raylib.ICON_BOX_TOP_LEFT: int
+
+ +
+
+raylib.ICON_BOX_TOP_RIGHT: int
+
+ +
+
+raylib.ICON_BREAKPOINT_OFF: int
+
+ +
+
+raylib.ICON_BREAKPOINT_ON: int
+
+ +
+
+raylib.ICON_BRUSH_CLASSIC: int
+
+ +
+
+raylib.ICON_BRUSH_PAINTER: int
+
+ +
+
+raylib.ICON_BURGER_MENU: int
+
+ +
+
+raylib.ICON_CAMERA: int
+
+ +
+
+raylib.ICON_CASE_SENSITIVE: int
+
+ +
+
+raylib.ICON_CLOCK: int
+
+ +
+
+raylib.ICON_COIN: int
+
+ +
+
+raylib.ICON_COLOR_BUCKET: int
+
+ +
+
+raylib.ICON_COLOR_PICKER: int
+
+ +
+
+raylib.ICON_CORNER: int
+
+ +
+
+raylib.ICON_CPU: int
+
+ +
+
+raylib.ICON_CRACK: int
+
+ +
+
+raylib.ICON_CRACK_POINTS: int
+
+ +
+
+raylib.ICON_CROP: int
+
+ +
+
+raylib.ICON_CROP_ALPHA: int
+
+ +
+
+raylib.ICON_CROSS: int
+
+ +
+
+raylib.ICON_CROSSLINE: int
+
+ +
+
+raylib.ICON_CROSS_SMALL: int
+
+ +
+
+raylib.ICON_CUBE: int
+
+ +
+
+raylib.ICON_CUBE_FACE_BACK: int
+
+ +
+
+raylib.ICON_CUBE_FACE_BOTTOM: int
+
+ +
+
+raylib.ICON_CUBE_FACE_FRONT: int
+
+ +
+
+raylib.ICON_CUBE_FACE_LEFT: int
+
+ +
+
+raylib.ICON_CUBE_FACE_RIGHT: int
+
+ +
+
+raylib.ICON_CUBE_FACE_TOP: int
+
+ +
+
+raylib.ICON_CURSOR_CLASSIC: int
+
+ +
+
+raylib.ICON_CURSOR_HAND: int
+
+ +
+
+raylib.ICON_CURSOR_MOVE: int
+
+ +
+
+raylib.ICON_CURSOR_MOVE_FILL: int
+
+ +
+
+raylib.ICON_CURSOR_POINTER: int
+
+ +
+
+raylib.ICON_CURSOR_SCALE: int
+
+ +
+
+raylib.ICON_CURSOR_SCALE_FILL: int
+
+ +
+
+raylib.ICON_CURSOR_SCALE_LEFT: int
+
+ +
+
+raylib.ICON_CURSOR_SCALE_LEFT_FILL: int
+
+ +
+
+raylib.ICON_CURSOR_SCALE_RIGHT: int
+
+ +
+
+raylib.ICON_CURSOR_SCALE_RIGHT_FILL: int
+
+ +
+
+raylib.ICON_DEMON: int
+
+ +
+
+raylib.ICON_DITHERING: int
+
+ +
+
+raylib.ICON_DOOR: int
+
+ +
+
+raylib.ICON_EMPTYBOX: int
+
+ +
+
+raylib.ICON_EMPTYBOX_SMALL: int
+
+ +
+
+raylib.ICON_EXIT: int
+
+ +
+
+raylib.ICON_EXPLOSION: int
+
+ +
+
+raylib.ICON_EYE_OFF: int
+
+ +
+
+raylib.ICON_EYE_ON: int
+
+ +
+
+raylib.ICON_FILE: int
+
+ +
+
+raylib.ICON_FILETYPE_ALPHA: int
+
+ +
+
+raylib.ICON_FILETYPE_AUDIO: int
+
+ +
+
+raylib.ICON_FILETYPE_BINARY: int
+
+ +
+
+raylib.ICON_FILETYPE_HOME: int
+
+ +
+
+raylib.ICON_FILETYPE_IMAGE: int
+
+ +
+
+raylib.ICON_FILETYPE_INFO: int
+
+ +
+
+raylib.ICON_FILETYPE_PLAY: int
+
+ +
+
+raylib.ICON_FILETYPE_TEXT: int
+
+ +
+
+raylib.ICON_FILETYPE_VIDEO: int
+
+ +
+
+raylib.ICON_FILE_ADD: int
+
+ +
+
+raylib.ICON_FILE_COPY: int
+
+ +
+
+raylib.ICON_FILE_CUT: int
+
+ +
+
+raylib.ICON_FILE_DELETE: int
+
+ +
+
+raylib.ICON_FILE_EXPORT: int
+
+ +
+
+raylib.ICON_FILE_NEW: int
+
+ +
+
+raylib.ICON_FILE_OPEN: int
+
+ +
+
+raylib.ICON_FILE_PASTE: int
+
+ +
+
+raylib.ICON_FILE_SAVE: int
+
+ +
+
+raylib.ICON_FILE_SAVE_CLASSIC: int
+
+ +
+
+raylib.ICON_FILTER: int
+
+ +
+
+raylib.ICON_FILTER_BILINEAR: int
+
+ +
+
+raylib.ICON_FILTER_POINT: int
+
+ +
+
+raylib.ICON_FILTER_TOP: int
+
+ +
+
+raylib.ICON_FOLDER: int
+
+ +
+
+raylib.ICON_FOLDER_ADD: int
+
+ +
+
+raylib.ICON_FOLDER_FILE_OPEN: int
+
+ +
+
+raylib.ICON_FOLDER_OPEN: int
+
+ +
+
+raylib.ICON_FOLDER_SAVE: int
+
+ +
+
+raylib.ICON_FOUR_BOXES: int
+
+ +
+
+raylib.ICON_FX: int
+
+ +
+
+raylib.ICON_GEAR: int
+
+ +
+
+raylib.ICON_GEAR_BIG: int
+
+ +
+
+raylib.ICON_GEAR_EX: int
+
+ +
+
+raylib.ICON_GRID: int
+
+ +
+
+raylib.ICON_GRID_FILL: int
+
+ +
+
+raylib.ICON_HAND_POINTER: int
+
+ +
+
+raylib.ICON_HEART: int
+
+ +
+
+raylib.ICON_HELP: int
+
+ +
+
+raylib.ICON_HELP_BOX: int
+
+ +
+
+raylib.ICON_HEX: int
+
+ +
+
+raylib.ICON_HIDPI: int
+
+ +
+
+raylib.ICON_HOT: int
+
+ +
+
+raylib.ICON_HOUSE: int
+
+ +
+
+raylib.ICON_INFO: int
+
+ +
+
+raylib.ICON_INFO_BOX: int
+
+ +
+
+raylib.ICON_KEY: int
+
+ +
+
+raylib.ICON_LASER: int
+
+ +
+
+raylib.ICON_LAYERS: int
+
+ +
+
+raylib.ICON_LAYERS2: int
+
+ +
+
+raylib.ICON_LAYERS_ISO: int
+
+ +
+
+raylib.ICON_LAYERS_VISIBLE: int
+
+ +
+
+raylib.ICON_LENS: int
+
+ +
+
+raylib.ICON_LENS_BIG: int
+
+ +
+
+raylib.ICON_LIFE_BARS: int
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+raylib.ICON_LOCK_CLOSE: int
+
+ +
+
+raylib.ICON_LOCK_OPEN: int
+
+ +
+
+raylib.ICON_MAGNET: int
+
+ +
+
+raylib.ICON_MAILBOX: int
+
+ +
+
+raylib.ICON_MAPS: int
+
+ +
+
+raylib.ICON_MIPMAPS: int
+
+ +
+
+raylib.ICON_MLAYERS: int
+
+ +
+
+raylib.ICON_MODE_2D: int
+
+ +
+
+raylib.ICON_MODE_3D: int
+
+ +
+
+raylib.ICON_MONITOR: int
+
+ +
+
+raylib.ICON_MUTATE: int
+
+ +
+
+raylib.ICON_MUTATE_FILL: int
+
+ +
+
+raylib.ICON_NONE: int
+
+ +
+
+raylib.ICON_NOTEBOOK: int
+
+ +
+
+raylib.ICON_OK_TICK: int
+
+ +
+
+raylib.ICON_PENCIL: int
+
+ +
+
+raylib.ICON_PENCIL_BIG: int
+
+ +
+
+raylib.ICON_PHOTO_CAMERA: int
+
+ +
+
+raylib.ICON_PHOTO_CAMERA_FLASH: int
+
+ +
+
+raylib.ICON_PLAYER: int
+
+ +
+
+raylib.ICON_PLAYER_JUMP: int
+
+ +
+
+raylib.ICON_PLAYER_NEXT: int
+
+ +
+
+raylib.ICON_PLAYER_PAUSE: int
+
+ +
+
+raylib.ICON_PLAYER_PLAY: int
+
+ +
+
+raylib.ICON_PLAYER_PLAY_BACK: int
+
+ +
+
+raylib.ICON_PLAYER_PREVIOUS: int
+
+ +
+
+raylib.ICON_PLAYER_RECORD: int
+
+ +
+
+raylib.ICON_PLAYER_STOP: int
+
+ +
+
+raylib.ICON_POT: int
+
+ +
+
+raylib.ICON_PRINTER: int
+
+ +
+
+raylib.ICON_PRIORITY: int
+
+ +
+
+raylib.ICON_REDO: int
+
+ +
+
+raylib.ICON_REDO_FILL: int
+
+ +
+
+raylib.ICON_REG_EXP: int
+
+ +
+
+raylib.ICON_REPEAT: int
+
+ +
+
+raylib.ICON_REPEAT_FILL: int
+
+ +
+
+raylib.ICON_REREDO: int
+
+ +
+
+raylib.ICON_REREDO_FILL: int
+
+ +
+
+raylib.ICON_RESIZE: int
+
+ +
+
+raylib.ICON_RESTART: int
+
+ +
+
+raylib.ICON_ROM: int
+
+ +
+
+raylib.ICON_ROTATE: int
+
+ +
+
+raylib.ICON_ROTATE_FILL: int
+
+ +
+
+raylib.ICON_RUBBER: int
+
+ +
+
+raylib.ICON_SAND_TIMER: int
+
+ +
+
+raylib.ICON_SCALE: int
+
+ +
+
+raylib.ICON_SHIELD: int
+
+ +
+
+raylib.ICON_SHUFFLE: int
+
+ +
+
+raylib.ICON_SHUFFLE_FILL: int
+
+ +
+
+raylib.ICON_SPECIAL: int
+
+ +
+
+raylib.ICON_SQUARE_TOGGLE: int
+
+ +
+
+raylib.ICON_STAR: int
+
+ +
+
+raylib.ICON_STEP_INTO: int
+
+ +
+
+raylib.ICON_STEP_OUT: int
+
+ +
+
+raylib.ICON_STEP_OVER: int
+
+ +
+
+raylib.ICON_SUITCASE: int
+
+ +
+
+raylib.ICON_SUITCASE_ZIP: int
+
+ +
+
+raylib.ICON_SYMMETRY: int
+
+ +
+
+raylib.ICON_SYMMETRY_HORIZONTAL: int
+
+ +
+
+raylib.ICON_SYMMETRY_VERTICAL: int
+
+ +
+
+raylib.ICON_TARGET: int
+
+ +
+
+raylib.ICON_TARGET_BIG: int
+
+ +
+
+raylib.ICON_TARGET_BIG_FILL: int
+
+ +
+
+raylib.ICON_TARGET_MOVE: int
+
+ +
+
+raylib.ICON_TARGET_MOVE_FILL: int
+
+ +
+
+raylib.ICON_TARGET_POINT: int
+
+ +
+
+raylib.ICON_TARGET_SMALL: int
+
+ +
+
+raylib.ICON_TARGET_SMALL_FILL: int
+
+ +
+
+raylib.ICON_TEXT_A: int
+
+ +
+
+raylib.ICON_TEXT_NOTES: int
+
+ +
+
+raylib.ICON_TEXT_POPUP: int
+
+ +
+
+raylib.ICON_TEXT_T: int
+
+ +
+
+raylib.ICON_TOOLS: int
+
+ +
+
+raylib.ICON_UNDO: int
+
+ +
+
+raylib.ICON_UNDO_FILL: int
+
+ +
+
+raylib.ICON_VERTICAL_BARS: int
+
+ +
+
+raylib.ICON_VERTICAL_BARS_FILL: int
+
+ +
+
+raylib.ICON_WARNING: int
+
+ +
+
+raylib.ICON_WATER_DROP: int
+
+ +
+
+raylib.ICON_WAVE: int
+
+ +
+
+raylib.ICON_WAVE_SINUS: int
+
+ +
+
+raylib.ICON_WAVE_SQUARE: int
+
+ +
+
+raylib.ICON_WAVE_TRIANGULAR: int
+
+ +
+
+raylib.ICON_WINDOW: int
+
+ +
+
+raylib.ICON_ZOOM_ALL: int
+
+ +
+
+raylib.ICON_ZOOM_BIG: int
+
+ +
+
+raylib.ICON_ZOOM_CENTER: int
+
+ +
+
+raylib.ICON_ZOOM_MEDIUM: int
+
+ +
+
+raylib.ICON_ZOOM_SMALL: int
+
+ +
+
+class raylib.Image
+
+
+data: Any
+
+ +
+
+format: int
+
+ +
+
+height: int
+
+ +
+
+mipmaps: int
+
+ +
+
+width: int
+
+ +
+ +
+
+raylib.ImageAlphaClear(image: Any | list | tuple, color: Color | list | tuple, threshold: float) None
+

Clear alpha channel to desired color.

+
+ +
+
+raylib.ImageAlphaCrop(image: Any | list | tuple, threshold: float) None
+

Crop image depending on alpha value.

+
+ +
+
+raylib.ImageAlphaMask(image: Any | list | tuple, alphaMask: Image | list | tuple) None
+

Apply alpha mask to image.

+
+ +
+
+raylib.ImageAlphaPremultiply(image: Any | list | tuple) None
+

Premultiply alpha channel.

+
+ +
+
+raylib.ImageBlurGaussian(image: Any | list | tuple, blurSize: int) None
+

Apply Gaussian blur using a box blur approximation.

+
+ +
+
+raylib.ImageClearBackground(dst: Any | list | tuple, color: Color | list | tuple) None
+

Clear image background with given color.

+
+ +
+
+raylib.ImageColorBrightness(image: Any | list | tuple, brightness: int) None
+

Modify image color: brightness (-255 to 255).

+
+ +
+
+raylib.ImageColorContrast(image: Any | list | tuple, contrast: float) None
+

Modify image color: contrast (-100 to 100).

+
+ +
+
+raylib.ImageColorGrayscale(image: Any | list | tuple) None
+

Modify image color: grayscale.

+
+ +
+
+raylib.ImageColorInvert(image: Any | list | tuple) None
+

Modify image color: invert.

+
+ +
+
+raylib.ImageColorReplace(image: Any | list | tuple, color: Color | list | tuple, replace: Color | list | tuple) None
+

Modify image color: replace color.

+
+ +
+
+raylib.ImageColorTint(image: Any | list | tuple, color: Color | list | tuple) None
+

Modify image color: tint.

+
+ +
+
+raylib.ImageCopy(image: Image | list | tuple) Image
+

Create an image duplicate (useful for transformations).

+
+ +
+
+raylib.ImageCrop(image: Any | list | tuple, crop: Rectangle | list | tuple) None
+

Crop an image to a defined rectangle.

+
+ +
+
+raylib.ImageDither(image: Any | list | tuple, rBpp: int, gBpp: int, bBpp: int, aBpp: int) None
+

Dither image data to 16bpp or lower (Floyd-Steinberg dithering).

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.ImageDrawCircle(dst: Any | list | tuple, centerX: int, centerY: int, radius: int, color: Color | list | tuple) None
+

Draw a filled circle within an image.

+
+ +
+
+raylib.ImageDrawCircleLines(dst: Any | list | tuple, centerX: int, centerY: int, radius: int, color: Color | list | tuple) None
+

Draw circle outline within an image.

+
+ +
+
+raylib.ImageDrawCircleLinesV(dst: Any | list | tuple, center: Vector2 | list | tuple, radius: int, color: Color | list | tuple) None
+

Draw circle outline within an image (Vector version).

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.ImageDrawLine(dst: Any | list | tuple, startPosX: int, startPosY: int, endPosX: int, endPosY: int, color: Color | list | tuple) None
+

Draw line within an image.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.ImageDrawPixel(dst: Any | list | tuple, posX: int, posY: int, color: Color | list | tuple) None
+

Draw pixel within an image.

+
+ +
+
+raylib.ImageDrawPixelV(dst: Any | list | tuple, position: Vector2 | list | tuple, color: Color | list | tuple) None
+

Draw pixel within an image (Vector version).

+
+ +
+
+raylib.ImageDrawRectangle(dst: Any | list | tuple, posX: int, posY: int, width: int, height: int, color: Color | list | tuple) None
+

Draw rectangle within an image.

+
+ +
+
+raylib.ImageDrawRectangleLines(dst: Any | list | tuple, rec: Rectangle | list | tuple, thick: int, color: Color | list | tuple) None
+

Draw rectangle lines within an image.

+
+ +
+
+raylib.ImageDrawRectangleRec(dst: Any | list | tuple, rec: Rectangle | list | tuple, color: Color | list | tuple) None
+

Draw rectangle within an image.

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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).

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.ImageFlipHorizontal(image: Any | list | tuple) None
+

Flip image horizontally.

+
+ +
+
+raylib.ImageFlipVertical(image: Any | list | tuple) None
+

Flip image vertically.

+
+ +
+
+raylib.ImageFormat(image: Any | list | tuple, newFormat: int) None
+

Convert image data to desired format.

+
+ +
+
+raylib.ImageFromChannel(image: Image | list | tuple, selectedChannel: int) Image
+

Create an image from a selected channel of another image (GRAYSCALE).

+
+ +
+
+raylib.ImageFromImage(image: Image | list | tuple, rec: Rectangle | list | tuple) Image
+

Create an image from another image piece.

+
+ +
+
+raylib.ImageKernelConvolution(image: Any | list | tuple, kernel: Any, kernelSize: int) None
+

Apply custom square convolution kernel to image.

+
+ +
+
+raylib.ImageMipmaps(image: Any | list | tuple) None
+

Compute all mipmap levels for a provided image.

+
+ +
+
+raylib.ImageResize(image: Any | list | tuple, newWidth: int, newHeight: int) None
+

Resize image (Bicubic scaling algorithm).

+
+ +
+
+raylib.ImageResizeCanvas(image: Any | list | tuple, newWidth: int, newHeight: int, offsetX: int, offsetY: int, fill: Color | list | tuple) None
+

Resize canvas and fill with color.

+
+ +
+
+raylib.ImageResizeNN(image: Any | list | tuple, newWidth: int, newHeight: int) None
+

Resize image (Nearest-Neighbor scaling algorithm).

+
+ +
+
+raylib.ImageRotate(image: Any | list | tuple, degrees: int) None
+

Rotate image by input angle in degrees (-359 to 359).

+
+ +
+
+raylib.ImageRotateCCW(image: Any | list | tuple) None
+

Rotate image counter-clockwise 90deg.

+
+ +
+
+raylib.ImageRotateCW(image: Any | list | tuple) None
+

Rotate image clockwise 90deg.

+
+ +
+
+raylib.ImageText(text: bytes, fontSize: int, color: Color | list | tuple) Image
+

Create an image from text (default font).

+
+ +
+
+raylib.ImageTextEx(font: Font | list | tuple, text: bytes, fontSize: float, spacing: float, tint: Color | list | tuple) Image
+

Create an image from text (custom sprite font).

+
+ +
+
+raylib.ImageToPOT(image: Any | list | tuple, fill: Color | list | tuple) None
+

Convert image to POT (power-of-two).

+
+ +
+
+raylib.InitAudioDevice() None
+

Initialize audio device and context.

+
+ +
+
+raylib.InitPhysics() None
+

Initializes physics system.

+
+ +
+
+raylib.InitWindow(width: int, height: int, title: bytes) None
+

Initialize window and OpenGL context.

+
+ +
+
+raylib.IsAudioDeviceReady() bool
+

Check if audio device has been initialized successfully.

+
+ +
+
+raylib.IsAudioStreamPlaying(stream: AudioStream | list | tuple) bool
+

Check if audio stream is playing.

+
+ +
+
+raylib.IsAudioStreamProcessed(stream: AudioStream | list | tuple) bool
+

Check if any audio stream buffers requires refill.

+
+ +
+
+raylib.IsAudioStreamValid(stream: AudioStream | list | tuple) bool
+

Checks if an audio stream is valid (buffers initialized).

+
+ +
+
+raylib.IsCursorHidden() bool
+

Check if cursor is not visible.

+
+ +
+
+raylib.IsCursorOnScreen() bool
+

Check if cursor is on the screen.

+
+ +
+
+raylib.IsFileDropped() bool
+

Check if a file has been dropped into window.

+
+ +
+
+raylib.IsFileExtension(fileName: bytes, ext: bytes) bool
+

Check file extension (including point: .png, .wav).

+
+ +
+
+raylib.IsFileNameValid(fileName: bytes) bool
+

Check if fileName is valid for the platform/OS.

+
+ +
+
+raylib.IsFontValid(font: Font | list | tuple) bool
+

Check if a font is valid (font data loaded, WARNING: GPU texture not checked).

+
+ +
+
+raylib.IsGamepadAvailable(gamepad: int) bool
+

Check if a gamepad is available.

+
+ +
+
+raylib.IsGamepadButtonDown(gamepad: int, button: int) bool
+

Check if a gamepad button is being pressed.

+
+ +
+
+raylib.IsGamepadButtonPressed(gamepad: int, button: int) bool
+

Check if a gamepad button has been pressed once.

+
+ +
+
+raylib.IsGamepadButtonReleased(gamepad: int, button: int) bool
+

Check if a gamepad button has been released once.

+
+ +
+
+raylib.IsGamepadButtonUp(gamepad: int, button: int) bool
+

Check if a gamepad button is NOT being pressed.

+
+ +
+
+raylib.IsGestureDetected(gesture: int) bool
+

Check if a gesture have been detected.

+
+ +
+
+raylib.IsImageValid(image: Image | list | tuple) bool
+

Check if an image is valid (data and parameters).

+
+ +
+
+raylib.IsKeyDown(key: int) bool
+

Check if a key is being pressed.

+
+ +
+
+raylib.IsKeyPressed(key: int) bool
+

Check if a key has been pressed once.

+
+ +
+
+raylib.IsKeyPressedRepeat(key: int) bool
+

Check if a key has been pressed again.

+
+ +
+
+raylib.IsKeyReleased(key: int) bool
+

Check if a key has been released once.

+
+ +
+
+raylib.IsKeyUp(key: int) bool
+

Check if a key is NOT being pressed.

+
+ +
+
+raylib.IsMaterialValid(material: Material | list | tuple) bool
+

Check if a material is valid (shader assigned, map textures loaded in GPU).

+
+ +
+
+raylib.IsModelAnimationValid(model: Model | list | tuple, anim: ModelAnimation | list | tuple) bool
+

Check model animation skeleton match.

+
+ +
+
+raylib.IsModelValid(model: Model | list | tuple) bool
+

Check if a model is valid (loaded in GPU, VAO/VBOs).

+
+ +
+
+raylib.IsMouseButtonDown(button: int) bool
+

Check if a mouse button is being pressed.

+
+ +
+
+raylib.IsMouseButtonPressed(button: int) bool
+

Check if a mouse button has been pressed once.

+
+ +
+
+raylib.IsMouseButtonReleased(button: int) bool
+

Check if a mouse button has been released once.

+
+ +
+
+raylib.IsMouseButtonUp(button: int) bool
+

Check if a mouse button is NOT being pressed.

+
+ +
+
+raylib.IsMusicStreamPlaying(music: Music | list | tuple) bool
+

Check if music is playing.

+
+ +
+
+raylib.IsMusicValid(music: Music | list | tuple) bool
+

Checks if a music stream is valid (context and buffers initialized).

+
+ +
+
+raylib.IsPathFile(path: bytes) bool
+

Check if a given path is a file or a directory.

+
+ +
+
+raylib.IsRenderTextureValid(target: RenderTexture | list | tuple) bool
+

Check if a render texture is valid (loaded in GPU).

+
+ +
+
+raylib.IsShaderValid(shader: Shader | list | tuple) bool
+

Check if a shader is valid (loaded on GPU).

+
+ +
+
+raylib.IsSoundPlaying(sound: Sound | list | tuple) bool
+

Check if a sound is currently playing.

+
+ +
+
+raylib.IsSoundValid(sound: Sound | list | tuple) bool
+

Checks if a sound is valid (data loaded and buffers initialized).

+
+ +
+
+raylib.IsTextureValid(texture: Texture | list | tuple) bool
+

Check if a texture is valid (loaded in GPU).

+
+ +
+
+raylib.IsWaveValid(wave: Wave | list | tuple) bool
+

Checks if wave data is valid (data loaded and parameters).

+
+ +
+
+raylib.IsWindowFocused() bool
+

Check if window is currently focused.

+
+ +
+
+raylib.IsWindowFullscreen() bool
+

Check if window is currently fullscreen.

+
+ +
+
+raylib.IsWindowHidden() bool
+

Check if window is currently hidden.

+
+ +
+
+raylib.IsWindowMaximized() bool
+

Check if window is currently maximized.

+
+ +
+
+raylib.IsWindowMinimized() bool
+

Check if window is currently minimized.

+
+ +
+
+raylib.IsWindowReady() bool
+

Check if window has been initialized successfully.

+
+ +
+
+raylib.IsWindowResized() bool
+

Check if window has been resized last frame.

+
+ +
+
+raylib.IsWindowState(flag: int) bool
+

Check if one specific window flag is enabled.

+
+ +
+
+raylib.KEY_A: int
+
+ +
+
+raylib.KEY_APOSTROPHE: int
+
+ +
+
+raylib.KEY_B: int
+
+ +
+
+raylib.KEY_BACK: int
+
+ +
+
+raylib.KEY_BACKSLASH: int
+
+ +
+
+raylib.KEY_BACKSPACE: int
+
+ +
+
+raylib.KEY_C: int
+
+ +
+
+raylib.KEY_CAPS_LOCK: int
+
+ +
+
+raylib.KEY_COMMA: int
+
+ +
+
+raylib.KEY_D: int
+
+ +
+
+raylib.KEY_DELETE: int
+
+ +
+
+raylib.KEY_DOWN: int
+
+ +
+
+raylib.KEY_E: int
+
+ +
+
+raylib.KEY_EIGHT: int
+
+ +
+
+raylib.KEY_END: int
+
+ +
+
+raylib.KEY_ENTER: int
+
+ +
+
+raylib.KEY_EQUAL: int
+
+ +
+
+raylib.KEY_ESCAPE: int
+
+ +
+
+raylib.KEY_F: int
+
+ +
+
+raylib.KEY_F1: int
+
+ +
+
+raylib.KEY_F10: int
+
+ +
+
+raylib.KEY_F11: int
+
+ +
+
+raylib.KEY_F12: int
+
+ +
+
+raylib.KEY_F2: int
+
+ +
+
+raylib.KEY_F3: int
+
+ +
+
+raylib.KEY_F4: int
+
+ +
+
+raylib.KEY_F5: int
+
+ +
+
+raylib.KEY_F6: int
+
+ +
+
+raylib.KEY_F7: int
+
+ +
+
+raylib.KEY_F8: int
+
+ +
+
+raylib.KEY_F9: int
+
+ +
+
+raylib.KEY_FIVE: int
+
+ +
+
+raylib.KEY_FOUR: int
+
+ +
+
+raylib.KEY_G: int
+
+ +
+
+raylib.KEY_GRAVE: int
+
+ +
+
+raylib.KEY_H: int
+
+ +
+
+raylib.KEY_HOME: int
+
+ +
+
+raylib.KEY_I: int
+
+ +
+
+raylib.KEY_INSERT: int
+
+ +
+
+raylib.KEY_J: int
+
+ +
+
+raylib.KEY_K: int
+
+ +
+
+raylib.KEY_KB_MENU: int
+
+ +
+
+raylib.KEY_KP_0: int
+
+ +
+
+raylib.KEY_KP_1: int
+
+ +
+
+raylib.KEY_KP_2: int
+
+ +
+
+raylib.KEY_KP_3: int
+
+ +
+
+raylib.KEY_KP_4: int
+
+ +
+
+raylib.KEY_KP_5: int
+
+ +
+
+raylib.KEY_KP_6: int
+
+ +
+
+raylib.KEY_KP_7: int
+
+ +
+
+raylib.KEY_KP_8: int
+
+ +
+
+raylib.KEY_KP_9: int
+
+ +
+
+raylib.KEY_KP_ADD: int
+
+ +
+
+raylib.KEY_KP_DECIMAL: int
+
+ +
+
+raylib.KEY_KP_DIVIDE: int
+
+ +
+
+raylib.KEY_KP_ENTER: int
+
+ +
+
+raylib.KEY_KP_EQUAL: int
+
+ +
+
+raylib.KEY_KP_MULTIPLY: int
+
+ +
+
+raylib.KEY_KP_SUBTRACT: int
+
+ +
+
+raylib.KEY_L: int
+
+ +
+
+raylib.KEY_LEFT: int
+
+ +
+
+raylib.KEY_LEFT_ALT: int
+
+ +
+
+raylib.KEY_LEFT_BRACKET: int
+
+ +
+
+raylib.KEY_LEFT_CONTROL: int
+
+ +
+
+raylib.KEY_LEFT_SHIFT: int
+
+ +
+
+raylib.KEY_LEFT_SUPER: int
+
+ +
+
+raylib.KEY_M: int
+
+ +
+
+raylib.KEY_MENU: int
+
+ +
+
+raylib.KEY_MINUS: int
+
+ +
+
+raylib.KEY_N: int
+
+ +
+
+raylib.KEY_NINE: int
+
+ +
+
+raylib.KEY_NULL: int
+
+ +
+
+raylib.KEY_NUM_LOCK: int
+
+ +
+
+raylib.KEY_O: int
+
+ +
+
+raylib.KEY_ONE: int
+
+ +
+
+raylib.KEY_P: int
+
+ +
+
+raylib.KEY_PAGE_DOWN: int
+
+ +
+
+raylib.KEY_PAGE_UP: int
+
+ +
+
+raylib.KEY_PAUSE: int
+
+ +
+
+raylib.KEY_PERIOD: int
+
+ +
+
+raylib.KEY_PRINT_SCREEN: int
+
+ +
+
+raylib.KEY_Q: int
+
+ +
+
+raylib.KEY_R: int
+
+ +
+
+raylib.KEY_RIGHT: int
+
+ +
+
+raylib.KEY_RIGHT_ALT: int
+
+ +
+
+raylib.KEY_RIGHT_BRACKET: int
+
+ +
+
+raylib.KEY_RIGHT_CONTROL: int
+
+ +
+
+raylib.KEY_RIGHT_SHIFT: int
+
+ +
+
+raylib.KEY_RIGHT_SUPER: int
+
+ +
+
+raylib.KEY_S: int
+
+ +
+
+raylib.KEY_SCROLL_LOCK: int
+
+ +
+
+raylib.KEY_SEMICOLON: int
+
+ +
+
+raylib.KEY_SEVEN: int
+
+ +
+
+raylib.KEY_SIX: int
+
+ +
+
+raylib.KEY_SLASH: int
+
+ +
+
+raylib.KEY_SPACE: int
+
+ +
+
+raylib.KEY_T: int
+
+ +
+
+raylib.KEY_TAB: int
+
+ +
+
+raylib.KEY_THREE: int
+
+ +
+
+raylib.KEY_TWO: int
+
+ +
+
+raylib.KEY_U: int
+
+ +
+
+raylib.KEY_UP: int
+
+ +
+
+raylib.KEY_V: int
+
+ +
+
+raylib.KEY_VOLUME_DOWN: int
+
+ +
+
+raylib.KEY_VOLUME_UP: int
+
+ +
+
+raylib.KEY_W: int
+
+ +
+
+raylib.KEY_X: int
+
+ +
+
+raylib.KEY_Y: int
+
+ +
+
+raylib.KEY_Z: int
+
+ +
+
+raylib.KEY_ZERO: int
+
+ +
+
+raylib.KeyboardKey
+
+ +
+
+raylib.LABEL: int
+
+ +
+
+raylib.LIGHTGRAY: Color
+
+ +
+
+raylib.LIME: Color
+
+ +
+
+raylib.LINE_COLOR: int
+
+ +
+
+raylib.LISTVIEW: int
+
+ +
+
+raylib.LIST_ITEMS_BORDER_WIDTH: int
+
+ +
+
+raylib.LIST_ITEMS_HEIGHT: int
+
+ +
+
+raylib.LIST_ITEMS_SPACING: int
+
+ +
+
+raylib.LOG_ALL: int
+
+ +
+
+raylib.LOG_DEBUG: int
+
+ +
+
+raylib.LOG_ERROR: int
+
+ +
+
+raylib.LOG_FATAL: int
+
+ +
+
+raylib.LOG_INFO: int
+
+ +
+
+raylib.LOG_NONE: int
+
+ +
+
+raylib.LOG_TRACE: int
+
+ +
+
+raylib.LOG_WARNING: int
+
+ +
+
+raylib.Lerp(start: float, end: float, amount: float) float
+

.

+
+ +
+
+raylib.LoadAudioStream(sampleRate: int, sampleSize: int, channels: int) AudioStream
+

Load audio stream (to stream raw audio pcm data).

+
+ +
+
+raylib.LoadAutomationEventList(fileName: bytes) AutomationEventList
+

Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS.

+
+ +
+
+raylib.LoadCodepoints(text: bytes, count: Any) Any
+

Load all codepoints from a UTF-8 text string, codepoints count returned by parameter.

+
+ +
+
+raylib.LoadDirectoryFiles(dirPath: bytes) FilePathList
+

Load directory filepaths.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.LoadDroppedFiles() FilePathList
+

Load dropped filepaths.

+
+ +
+
+raylib.LoadFileData(fileName: bytes, dataSize: Any) bytes
+

Load file data as byte array (read).

+
+ +
+
+raylib.LoadFileText(fileName: bytes) bytes
+

Load text data from file (read), returns a ‘' terminated string.

+
+ +
+
+raylib.LoadFont(fileName: bytes) Font
+

Load font from file into GPU memory (VRAM).

+
+ +
+
+raylib.LoadFontData(fileData: bytes, dataSize: int, fontSize: int, codepoints: Any, codepointCount: int, type: int) Any
+

Load font data for further use.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.LoadFontFromImage(image: Image | list | tuple, key: Color | list | tuple, firstChar: int) Font
+

Load font from Image (XNA style).

+
+ +
+
+raylib.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’.

+
+ +
+
+raylib.LoadImage(fileName: bytes) Image
+

Load image from file into CPU memory (RAM).

+
+ +
+
+raylib.LoadImageAnim(fileName: bytes, frames: Any) Image
+

Load image sequence from file (frames appended to image.data).

+
+ +
+
+raylib.LoadImageAnimFromMemory(fileType: bytes, fileData: bytes, dataSize: int, frames: Any) Image
+

Load image sequence from memory buffer.

+
+ +
+
+raylib.LoadImageColors(image: Image | list | tuple) Any
+

Load color data from image as a Color array (RGBA - 32bit).

+
+ +
+
+raylib.LoadImageFromMemory(fileType: bytes, fileData: bytes, dataSize: int) Image
+

Load image from memory buffer, fileType refers to extension: i.e. ‘.png’.

+
+ +
+
+raylib.LoadImageFromScreen() Image
+

Load image from screen buffer and (screenshot).

+
+ +
+
+raylib.LoadImageFromTexture(texture: Texture | list | tuple) Image
+

Load image from GPU texture data.

+
+ +
+
+raylib.LoadImagePalette(image: Image | list | tuple, maxPaletteSize: int, colorCount: Any) Any
+

Load colors palette from image as a Color array (RGBA - 32bit).

+
+ +
+
+raylib.LoadImageRaw(fileName: bytes, width: int, height: int, format: int, headerSize: int) Image
+

Load image from RAW file data.

+
+ +
+
+raylib.LoadMaterialDefault() Material
+

Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps).

+
+ +
+
+raylib.LoadMaterials(fileName: bytes, materialCount: Any) Any
+

Load materials from model file.

+
+ +
+
+raylib.LoadModel(fileName: bytes) Model
+

Load model from files (meshes and materials).

+
+ +
+
+raylib.LoadModelAnimations(fileName: bytes, animCount: Any) Any
+

Load model animations from file.

+
+ +
+
+raylib.LoadModelFromMesh(mesh: Mesh | list | tuple) Model
+

Load model from generated mesh (default material).

+
+ +
+
+raylib.LoadMusicStream(fileName: bytes) Music
+

Load music stream from file.

+
+ +
+
+raylib.LoadMusicStreamFromMemory(fileType: bytes, data: bytes, dataSize: int) Music
+

Load music stream from data.

+
+ +
+
+raylib.LoadRandomSequence(count: int, min_1: int, max_2: int) Any
+

Load random values sequence, no values repeated.

+
+ +
+
+raylib.LoadRenderTexture(width: int, height: int) RenderTexture
+

Load texture for rendering (framebuffer).

+
+ +
+
+raylib.LoadShader(vsFileName: bytes, fsFileName: bytes) Shader
+

Load shader from files and bind default locations.

+
+ +
+
+raylib.LoadShaderFromMemory(vsCode: bytes, fsCode: bytes) Shader
+

Load shader from code strings and bind default locations.

+
+ +
+
+raylib.LoadSound(fileName: bytes) Sound
+

Load sound from file.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.LoadSoundFromWave(wave: Wave | list | tuple) Sound
+

Load sound from wave data.

+
+ +
+
+raylib.LoadTexture(fileName: bytes) Texture
+

Load texture from file into GPU memory (VRAM).

+
+ +
+
+raylib.LoadTextureCubemap(image: Image | list | tuple, layout: int) Texture
+

Load cubemap from image, multiple image cubemap layouts supported.

+
+ +
+
+raylib.LoadTextureFromImage(image: Image | list | tuple) Texture
+

Load texture from image data.

+
+ +
+
+raylib.LoadUTF8(codepoints: Any, length: int) bytes
+

Load UTF-8 text encoded from codepoints array.

+
+ +
+
+raylib.LoadVrStereoConfig(device: VrDeviceInfo | list | tuple) VrStereoConfig
+

Load VR stereo config for VR simulator device parameters.

+
+ +
+
+raylib.LoadWave(fileName: bytes) Wave
+

Load wave data from file.

+
+ +
+
+raylib.LoadWaveFromMemory(fileType: bytes, fileData: bytes, dataSize: int) Wave
+

Load wave from memory buffer, fileType refers to extension: i.e. ‘.wav’.

+
+ +
+
+raylib.LoadWaveSamples(wave: Wave | list | tuple) Any
+

Load samples data from wave as a 32bit float data array.

+
+ +
+
+raylib.MAGENTA: Color
+
+ +
+
+raylib.MAROON: Color
+
+ +
+
+raylib.MATERIAL_MAP_ALBEDO: int
+
+ +
+
+raylib.MATERIAL_MAP_BRDF: int
+
+ +
+
+raylib.MATERIAL_MAP_CUBEMAP: int
+
+ +
+
+raylib.MATERIAL_MAP_EMISSION: int
+
+ +
+
+raylib.MATERIAL_MAP_HEIGHT: int
+
+ +
+
+raylib.MATERIAL_MAP_IRRADIANCE: int
+
+ +
+
+raylib.MATERIAL_MAP_METALNESS: int
+
+ +
+
+raylib.MATERIAL_MAP_NORMAL: int
+
+ +
+
+raylib.MATERIAL_MAP_OCCLUSION: int
+
+ +
+
+raylib.MATERIAL_MAP_PREFILTER: int
+
+ +
+
+raylib.MATERIAL_MAP_ROUGHNESS: int
+
+ +
+
+raylib.MOUSE_BUTTON_BACK: int
+
+ +
+
+raylib.MOUSE_BUTTON_EXTRA: int
+
+ +
+
+raylib.MOUSE_BUTTON_FORWARD: int
+
+ +
+
+raylib.MOUSE_BUTTON_LEFT: int
+
+ +
+
+raylib.MOUSE_BUTTON_MIDDLE: int
+
+ +
+
+raylib.MOUSE_BUTTON_RIGHT: int
+
+ +
+
+raylib.MOUSE_BUTTON_SIDE: int
+
+ +
+
+raylib.MOUSE_CURSOR_ARROW: int
+
+ +
+
+raylib.MOUSE_CURSOR_CROSSHAIR: int
+
+ +
+
+raylib.MOUSE_CURSOR_DEFAULT: int
+
+ +
+
+raylib.MOUSE_CURSOR_IBEAM: int
+
+ +
+
+raylib.MOUSE_CURSOR_NOT_ALLOWED: int
+
+ +
+
+raylib.MOUSE_CURSOR_POINTING_HAND: int
+
+ +
+
+raylib.MOUSE_CURSOR_RESIZE_ALL: int
+
+ +
+
+raylib.MOUSE_CURSOR_RESIZE_EW: int
+
+ +
+
+raylib.MOUSE_CURSOR_RESIZE_NESW: int
+
+ +
+
+raylib.MOUSE_CURSOR_RESIZE_NS: int
+
+ +
+
+raylib.MOUSE_CURSOR_RESIZE_NWSE: int
+
+ +
+
+raylib.MakeDirectory(dirPath: bytes) int
+

Create directories (including full path requested), returns 0 on success.

+
+ +
+
+class raylib.Material
+
+
+maps: Any
+
+ +
+
+params: list
+
+ +
+
+shader: Shader
+
+ +
+ +
+
+class raylib.MaterialMap
+
+
+color: Color
+
+ +
+
+texture: Texture
+
+ +
+
+value: float
+
+ +
+ +
+
+raylib.MaterialMapIndex
+
+ +
+
+class raylib.Matrix
+
+
+m0: float
+
+ +
+
+m1: float
+
+ +
+
+m10: float
+
+ +
+
+m11: float
+
+ +
+
+m12: float
+
+ +
+
+m13: float
+
+ +
+
+m14: float
+
+ +
+
+m15: float
+
+ +
+
+m2: float
+
+ +
+
+m3: float
+
+ +
+
+m4: float
+
+ +
+
+m5: float
+
+ +
+
+m6: float
+
+ +
+
+m7: float
+
+ +
+
+m8: float
+
+ +
+
+m9: float
+
+ +
+ +
+
+class raylib.Matrix2x2
+
+
+m00: float
+
+ +
+
+m01: float
+
+ +
+
+m10: float
+
+ +
+
+m11: float
+
+ +
+ +
+
+raylib.MatrixAdd(left: Matrix | list | tuple, right: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+raylib.MatrixDecompose(mat: Matrix | list | tuple, translation: Any | list | tuple, rotation: Any | list | tuple, scale: Any | list | tuple) None
+

.

+
+ +
+
+raylib.MatrixDeterminant(mat: Matrix | list | tuple) float
+

.

+
+ +
+
+raylib.MatrixFrustum(left: float, right: float, bottom: float, top: float, nearPlane: float, farPlane: float) Matrix
+

.

+
+ +
+
+raylib.MatrixIdentity() Matrix
+

.

+
+ +
+
+raylib.MatrixInvert(mat: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+raylib.MatrixLookAt(eye: Vector3 | list | tuple, target: Vector3 | list | tuple, up: Vector3 | list | tuple) Matrix
+

.

+
+ +
+
+raylib.MatrixMultiply(left: Matrix | list | tuple, right: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+raylib.MatrixOrtho(left: float, right: float, bottom: float, top: float, nearPlane: float, farPlane: float) Matrix
+

.

+
+ +
+
+raylib.MatrixPerspective(fovY: float, aspect: float, nearPlane: float, farPlane: float) Matrix
+

.

+
+ +
+
+raylib.MatrixRotate(axis: Vector3 | list | tuple, angle: float) Matrix
+

.

+
+ +
+
+raylib.MatrixRotateX(angle: float) Matrix
+

.

+
+ +
+
+raylib.MatrixRotateXYZ(angle: Vector3 | list | tuple) Matrix
+

.

+
+ +
+
+raylib.MatrixRotateY(angle: float) Matrix
+

.

+
+ +
+
+raylib.MatrixRotateZ(angle: float) Matrix
+

.

+
+ +
+
+raylib.MatrixRotateZYX(angle: Vector3 | list | tuple) Matrix
+

.

+
+ +
+
+raylib.MatrixScale(x: float, y: float, z: float) Matrix
+

.

+
+ +
+
+raylib.MatrixSubtract(left: Matrix | list | tuple, right: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+raylib.MatrixToFloatV(mat: Matrix | list | tuple) float16
+

.

+
+ +
+
+raylib.MatrixTrace(mat: Matrix | list | tuple) float
+

.

+
+ +
+
+raylib.MatrixTranslate(x: float, y: float, z: float) Matrix
+

.

+
+ +
+
+raylib.MatrixTranspose(mat: Matrix | list | tuple) Matrix
+

.

+
+ +
+
+raylib.MaximizeWindow() None
+

Set window state: maximized, if resizable.

+
+ +
+
+raylib.MeasureText(text: bytes, fontSize: int) int
+

Measure string width for default font.

+
+ +
+
+raylib.MeasureTextEx(font: Font | list | tuple, text: bytes, fontSize: float, spacing: float) Vector2
+

Measure string size for Font.

+
+ +
+
+raylib.MemAlloc(size: int) Any
+

Internal memory allocator.

+
+ +
+
+raylib.MemFree(ptr: Any) None
+

Internal memory free.

+
+ +
+
+raylib.MemRealloc(ptr: Any, size: int) Any
+

Internal memory reallocator.

+
+ +
+
+class raylib.Mesh
+
+
+animNormals: Any
+
+ +
+
+animVertices: Any
+
+ +
+
+boneCount: int
+
+ +
+
+boneIds: bytes
+
+ +
+
+boneMatrices: Any
+
+ +
+
+boneWeights: Any
+
+ +
+
+colors: bytes
+
+ +
+
+indices: Any
+
+ +
+
+normals: Any
+
+ +
+
+tangents: Any
+
+ +
+
+texcoords: Any
+
+ +
+
+texcoords2: Any
+
+ +
+
+triangleCount: int
+
+ +
+
+vaoId: int
+
+ +
+
+vboId: Any
+
+ +
+
+vertexCount: int
+
+ +
+
+vertices: Any
+
+ +
+ +
+
+raylib.MinimizeWindow() None
+

Set window state: minimized, if resizable.

+
+ +
+
+class raylib.Model
+
+
+bindPose: Any
+
+ +
+
+boneCount: int
+
+ +
+
+bones: Any
+
+ +
+
+materialCount: int
+
+ +
+
+materials: Any
+
+ +
+
+meshCount: int
+
+ +
+
+meshMaterial: Any
+
+ +
+
+meshes: Any
+
+ +
+
+transform: Matrix
+
+ +
+ +
+
+class raylib.ModelAnimation
+
+
+boneCount: int
+
+ +
+
+bones: Any
+
+ +
+
+frameCount: int
+
+ +
+
+framePoses: Any
+
+ +
+
+name: bytes
+
+ +
+ +
+
+raylib.MouseButton
+
+ +
+
+raylib.MouseCursor
+
+ +
+
+class raylib.Music
+
+
+ctxData: Any
+
+ +
+
+ctxType: int
+
+ +
+
+frameCount: int
+
+ +
+
+looping: bool
+
+ +
+
+stream: AudioStream
+
+ +
+ +
+
+raylib.NPATCH_NINE_PATCH: int
+
+ +
+
+raylib.NPATCH_THREE_PATCH_HORIZONTAL: int
+
+ +
+
+raylib.NPATCH_THREE_PATCH_VERTICAL: int
+
+ +
+
+class raylib.NPatchInfo
+
+
+bottom: int
+
+ +
+
+layout: int
+
+ +
+
+left: int
+
+ +
+
+right: int
+
+ +
+
+source: Rectangle
+
+ +
+
+top: int
+
+ +
+ +
+
+raylib.NPatchLayout
+
+ +
+
+raylib.Normalize(value: float, start: float, end: float) float
+

.

+
+ +
+
+raylib.ORANGE: Color
+
+ +
+
+raylib.OpenURL(url: bytes) None
+

Open URL with default system browser (if available).

+
+ +
+
+raylib.PHYSICS_CIRCLE: int
+
+ +
+
+raylib.PHYSICS_POLYGON: int
+
+ +
+
+raylib.PINK: Color
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_DXT1_RGB: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_DXT1_RGBA: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_DXT3_RGBA: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_DXT5_RGBA: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_ETC1_RGB: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_ETC2_RGB: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_PVRT_RGB: int
+
+ +
+
+raylib.PIXELFORMAT_COMPRESSED_PVRT_RGBA: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R16: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R16G16B16: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R32: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R32G32B32: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R5G6B5: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R8G8B8: int
+
+ +
+
+raylib.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: int
+
+ +
+
+raylib.PROGRESSBAR: int
+
+ +
+
+raylib.PROGRESS_PADDING: int
+
+ +
+
+raylib.PURPLE: Color
+
+ +
+
+raylib.PauseAudioStream(stream: AudioStream | list | tuple) None
+

Pause audio stream.

+
+ +
+
+raylib.PauseMusicStream(music: Music | list | tuple) None
+

Pause music playing.

+
+ +
+
+raylib.PauseSound(sound: Sound | list | tuple) None
+

Pause a sound.

+
+ +
+
+raylib.PhysicsAddForce(body: Any | list | tuple, force: Vector2 | list | tuple) None
+

Adds a force to a physics body.

+
+ +
+
+raylib.PhysicsAddTorque(body: Any | list | tuple, amount: float) None
+

Adds an angular force to a physics body.

+
+ +
+
+class raylib.PhysicsBodyData
+
+
+angularVelocity: float
+
+ +
+
+dynamicFriction: float
+
+ +
+
+enabled: bool
+
+ +
+
+force: Vector2
+
+ +
+
+freezeOrient: bool
+
+ +
+
+id: int
+
+ +
+
+inertia: float
+
+ +
+
+inverseInertia: float
+
+ +
+
+inverseMass: float
+
+ +
+
+isGrounded: bool
+
+ +
+
+mass: float
+
+ +
+
+orient: float
+
+ +
+
+position: Vector2
+
+ +
+
+restitution: float
+
+ +
+
+shape: PhysicsShape
+
+ +
+
+staticFriction: float
+
+ +
+
+torque: float
+
+ +
+
+useGravity: bool
+
+ +
+
+velocity: Vector2
+
+ +
+ +
+
+class raylib.PhysicsManifoldData
+
+
+bodyA: Any
+
+ +
+
+bodyB: Any
+
+ +
+
+contacts: list
+
+ +
+
+contactsCount: int
+
+ +
+
+dynamicFriction: float
+
+ +
+
+id: int
+
+ +
+
+normal: Vector2
+
+ +
+
+penetration: float
+
+ +
+
+restitution: float
+
+ +
+
+staticFriction: float
+
+ +
+ +
+
+class raylib.PhysicsShape
+
+
+body: Any
+
+ +
+
+radius: float
+
+ +
+
+transform: Matrix2x2
+
+ +
+
+type: PhysicsShapeType
+
+ +
+
+vertexData: PhysicsVertexData
+
+ +
+ +
+
+raylib.PhysicsShapeType
+
+ +
+
+raylib.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.

+
+ +
+
+class raylib.PhysicsVertexData
+
+
+normals: list
+
+ +
+
+positions: list
+
+ +
+
+vertexCount: int
+
+ +
+ +
+
+raylib.PixelFormat
+
+ +
+
+raylib.PlayAudioStream(stream: AudioStream | list | tuple) None
+

Play audio stream.

+
+ +
+
+raylib.PlayAutomationEvent(event: AutomationEvent | list | tuple) None
+

Play a recorded automation event.

+
+ +
+
+raylib.PlayMusicStream(music: Music | list | tuple) None
+

Start music playing.

+
+ +
+
+raylib.PlaySound(sound: Sound | list | tuple) None
+

Play a sound.

+
+ +
+
+raylib.PollInputEvents() None
+

Register all input events.

+
+ +
+
+class raylib.Quaternion
+
+
+w: float
+
+ +
+
+x: float
+
+ +
+
+y: float
+
+ +
+
+z: float
+
+ +
+ +
+
+raylib.QuaternionAdd(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.QuaternionAddValue(q: Vector4 | list | tuple, add: float) Vector4
+

.

+
+ +
+
+raylib.QuaternionCubicHermiteSpline(q1: Vector4 | list | tuple, outTangent1: Vector4 | list | tuple, q2: Vector4 | list | tuple, inTangent2: Vector4 | list | tuple, t: float) Vector4
+

.

+
+ +
+
+raylib.QuaternionDivide(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.QuaternionEquals(p: Vector4 | list | tuple, q: Vector4 | list | tuple) int
+

.

+
+ +
+
+raylib.QuaternionFromAxisAngle(axis: Vector3 | list | tuple, angle: float) Vector4
+

.

+
+ +
+
+raylib.QuaternionFromEuler(pitch: float, yaw: float, roll: float) Vector4
+

.

+
+ +
+
+raylib.QuaternionFromMatrix(mat: Matrix | list | tuple) Vector4
+

.

+
+ +
+
+raylib.QuaternionFromVector3ToVector3(from_0: Vector3 | list | tuple, to: Vector3 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.QuaternionIdentity() Vector4
+

.

+
+ +
+
+raylib.QuaternionInvert(q: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.QuaternionLength(q: Vector4 | list | tuple) float
+

.

+
+ +
+
+raylib.QuaternionLerp(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple, amount: float) Vector4
+

.

+
+ +
+
+raylib.QuaternionMultiply(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.QuaternionNlerp(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple, amount: float) Vector4
+

.

+
+ +
+
+raylib.QuaternionNormalize(q: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.QuaternionScale(q: Vector4 | list | tuple, mul: float) Vector4
+

.

+
+ +
+
+raylib.QuaternionSlerp(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple, amount: float) Vector4
+

.

+
+ +
+
+raylib.QuaternionSubtract(q1: Vector4 | list | tuple, q2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.QuaternionSubtractValue(q: Vector4 | list | tuple, sub: float) Vector4
+

.

+
+ +
+
+raylib.QuaternionToAxisAngle(q: Vector4 | list | tuple, outAxis: Any | list | tuple, outAngle: Any) None
+

.

+
+ +
+
+raylib.QuaternionToEuler(q: Vector4 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.QuaternionToMatrix(q: Vector4 | list | tuple) Matrix
+

.

+
+ +
+
+raylib.QuaternionTransform(q: Vector4 | list | tuple, mat: Matrix | list | tuple) Vector4
+

.

+
+ +
+
+raylib.RAYWHITE: Color
+
+ +
+
+raylib.RED: Color
+
+ +
+
+raylib.RL_ATTACHMENT_COLOR_CHANNEL0: int
+
+ +
+
+raylib.RL_ATTACHMENT_COLOR_CHANNEL1: int
+
+ +
+
+raylib.RL_ATTACHMENT_COLOR_CHANNEL2: int
+
+ +
+
+raylib.RL_ATTACHMENT_COLOR_CHANNEL3: int
+
+ +
+
+raylib.RL_ATTACHMENT_COLOR_CHANNEL4: int
+
+ +
+
+raylib.RL_ATTACHMENT_COLOR_CHANNEL5: int
+
+ +
+
+raylib.RL_ATTACHMENT_COLOR_CHANNEL6: int
+
+ +
+
+raylib.RL_ATTACHMENT_COLOR_CHANNEL7: int
+
+ +
+
+raylib.RL_ATTACHMENT_CUBEMAP_NEGATIVE_X: int
+
+ +
+
+raylib.RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y: int
+
+ +
+
+raylib.RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z: int
+
+ +
+
+raylib.RL_ATTACHMENT_CUBEMAP_POSITIVE_X: int
+
+ +
+
+raylib.RL_ATTACHMENT_CUBEMAP_POSITIVE_Y: int
+
+ +
+
+raylib.RL_ATTACHMENT_CUBEMAP_POSITIVE_Z: int
+
+ +
+
+raylib.RL_ATTACHMENT_DEPTH: int
+
+ +
+
+raylib.RL_ATTACHMENT_RENDERBUFFER: int
+
+ +
+
+raylib.RL_ATTACHMENT_STENCIL: int
+
+ +
+
+raylib.RL_ATTACHMENT_TEXTURE2D: int
+
+ +
+
+raylib.RL_BLEND_ADDITIVE: int
+
+ +
+
+raylib.RL_BLEND_ADD_COLORS: int
+
+ +
+
+raylib.RL_BLEND_ALPHA: int
+
+ +
+
+raylib.RL_BLEND_ALPHA_PREMULTIPLY: int
+
+ +
+
+raylib.RL_BLEND_CUSTOM: int
+
+ +
+
+raylib.RL_BLEND_CUSTOM_SEPARATE: int
+
+ +
+
+raylib.RL_BLEND_MULTIPLIED: int
+
+ +
+
+raylib.RL_BLEND_SUBTRACT_COLORS: int
+
+ +
+
+raylib.RL_CULL_FACE_BACK: int
+
+ +
+
+raylib.RL_CULL_FACE_FRONT: int
+
+ +
+
+raylib.RL_LOG_ALL: int
+
+ +
+
+raylib.RL_LOG_DEBUG: int
+
+ +
+
+raylib.RL_LOG_ERROR: int
+
+ +
+
+raylib.RL_LOG_FATAL: int
+
+ +
+
+raylib.RL_LOG_INFO: int
+
+ +
+
+raylib.RL_LOG_NONE: int
+
+ +
+
+raylib.RL_LOG_TRACE: int
+
+ +
+
+raylib.RL_LOG_WARNING: int
+
+ +
+
+raylib.RL_OPENGL_11: int
+
+ +
+
+raylib.RL_OPENGL_21: int
+
+ +
+
+raylib.RL_OPENGL_33: int
+
+ +
+
+raylib.RL_OPENGL_43: int
+
+ +
+
+raylib.RL_OPENGL_ES_20: int
+
+ +
+
+raylib.RL_OPENGL_ES_30: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_DXT1_RGB: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_ETC1_RGB: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_ETC2_RGB: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_PVRT_RGB: int
+
+ +
+
+raylib.RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R16: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R32: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8: int
+
+ +
+
+raylib.RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: int
+
+ +
+
+raylib.RL_SHADER_ATTRIB_FLOAT: int
+
+ +
+
+raylib.RL_SHADER_ATTRIB_VEC2: int
+
+ +
+
+raylib.RL_SHADER_ATTRIB_VEC3: int
+
+ +
+
+raylib.RL_SHADER_ATTRIB_VEC4: int
+
+ +
+
+raylib.RL_SHADER_LOC_COLOR_AMBIENT: int
+
+ +
+
+raylib.RL_SHADER_LOC_COLOR_DIFFUSE: int
+
+ +
+
+raylib.RL_SHADER_LOC_COLOR_SPECULAR: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_ALBEDO: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_BRDF: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_CUBEMAP: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_EMISSION: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_HEIGHT: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_IRRADIANCE: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_METALNESS: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_NORMAL: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_OCCLUSION: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_PREFILTER: int
+
+ +
+
+raylib.RL_SHADER_LOC_MAP_ROUGHNESS: int
+
+ +
+
+raylib.RL_SHADER_LOC_MATRIX_MODEL: int
+
+ +
+
+raylib.RL_SHADER_LOC_MATRIX_MVP: int
+
+ +
+
+raylib.RL_SHADER_LOC_MATRIX_NORMAL: int
+
+ +
+
+raylib.RL_SHADER_LOC_MATRIX_PROJECTION: int
+
+ +
+
+raylib.RL_SHADER_LOC_MATRIX_VIEW: int
+
+ +
+
+raylib.RL_SHADER_LOC_VECTOR_VIEW: int
+
+ +
+
+raylib.RL_SHADER_LOC_VERTEX_COLOR: int
+
+ +
+
+raylib.RL_SHADER_LOC_VERTEX_NORMAL: int
+
+ +
+
+raylib.RL_SHADER_LOC_VERTEX_POSITION: int
+
+ +
+
+raylib.RL_SHADER_LOC_VERTEX_TANGENT: int
+
+ +
+
+raylib.RL_SHADER_LOC_VERTEX_TEXCOORD01: int
+
+ +
+
+raylib.RL_SHADER_LOC_VERTEX_TEXCOORD02: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_FLOAT: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_INT: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_IVEC2: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_IVEC3: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_IVEC4: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_SAMPLER2D: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_UINT: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_UIVEC2: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_UIVEC3: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_UIVEC4: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_VEC2: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_VEC3: int
+
+ +
+
+raylib.RL_SHADER_UNIFORM_VEC4: int
+
+ +
+
+raylib.RL_TEXTURE_FILTER_ANISOTROPIC_16X: int
+
+ +
+
+raylib.RL_TEXTURE_FILTER_ANISOTROPIC_4X: int
+
+ +
+
+raylib.RL_TEXTURE_FILTER_ANISOTROPIC_8X: int
+
+ +
+
+raylib.RL_TEXTURE_FILTER_BILINEAR: int
+
+ +
+
+raylib.RL_TEXTURE_FILTER_POINT: int
+
+ +
+
+raylib.RL_TEXTURE_FILTER_TRILINEAR: int
+
+ +
+
+class raylib.Ray
+
+
+direction: Vector3
+
+ +
+
+position: Vector3
+
+ +
+ +
+
+class raylib.RayCollision
+
+
+distance: float
+
+ +
+
+hit: bool
+
+ +
+
+normal: Vector3
+
+ +
+
+point: Vector3
+
+ +
+ +
+
+class raylib.Rectangle
+
+
+height: float
+
+ +
+
+width: float
+
+ +
+
+x: float
+
+ +
+
+y: float
+
+ +
+ +
+
+raylib.Remap(value: float, inputStart: float, inputEnd: float, outputStart: float, outputEnd: float) float
+

.

+
+ +
+
+class raylib.RenderTexture
+
+
+depth: Texture
+
+ +
+
+id: int
+
+ +
+
+texture: Texture
+
+ +
+ +
+
+class raylib.RenderTexture2D
+
+
+depth: Texture
+
+ +
+
+id: int
+
+ +
+
+texture: Texture
+
+ +
+ +
+
+raylib.ResetPhysics() None
+

Reset physics system (global variables).

+
+ +
+
+raylib.RestoreWindow() None
+

Set window state: not minimized/maximized.

+
+ +
+
+raylib.ResumeAudioStream(stream: AudioStream | list | tuple) None
+

Resume audio stream.

+
+ +
+
+raylib.ResumeMusicStream(music: Music | list | tuple) None
+

Resume playing paused music.

+
+ +
+
+raylib.ResumeSound(sound: Sound | list | tuple) None
+

Resume a paused sound.

+
+ +
+
+raylib.SCROLLBAR: int
+
+ +
+
+raylib.SCROLLBAR_SIDE: int
+
+ +
+
+raylib.SCROLLBAR_WIDTH: int
+
+ +
+
+raylib.SCROLL_PADDING: int
+
+ +
+
+raylib.SCROLL_SLIDER_PADDING: int
+
+ +
+
+raylib.SCROLL_SLIDER_SIZE: int
+
+ +
+
+raylib.SCROLL_SPEED: int
+
+ +
+
+raylib.SHADER_ATTRIB_FLOAT: int
+
+ +
+
+raylib.SHADER_ATTRIB_VEC2: int
+
+ +
+
+raylib.SHADER_ATTRIB_VEC3: int
+
+ +
+
+raylib.SHADER_ATTRIB_VEC4: int
+
+ +
+
+raylib.SHADER_LOC_BONE_MATRICES: int
+
+ +
+
+raylib.SHADER_LOC_COLOR_AMBIENT: int
+
+ +
+
+raylib.SHADER_LOC_COLOR_DIFFUSE: int
+
+ +
+
+raylib.SHADER_LOC_COLOR_SPECULAR: int
+
+ +
+
+raylib.SHADER_LOC_MAP_ALBEDO: int
+
+ +
+
+raylib.SHADER_LOC_MAP_BRDF: int
+
+ +
+
+raylib.SHADER_LOC_MAP_CUBEMAP: int
+
+ +
+
+raylib.SHADER_LOC_MAP_EMISSION: int
+
+ +
+
+raylib.SHADER_LOC_MAP_HEIGHT: int
+
+ +
+
+raylib.SHADER_LOC_MAP_IRRADIANCE: int
+
+ +
+
+raylib.SHADER_LOC_MAP_METALNESS: int
+
+ +
+
+raylib.SHADER_LOC_MAP_NORMAL: int
+
+ +
+
+raylib.SHADER_LOC_MAP_OCCLUSION: int
+
+ +
+
+raylib.SHADER_LOC_MAP_PREFILTER: int
+
+ +
+
+raylib.SHADER_LOC_MAP_ROUGHNESS: int
+
+ +
+
+raylib.SHADER_LOC_MATRIX_MODEL: int
+
+ +
+
+raylib.SHADER_LOC_MATRIX_MVP: int
+
+ +
+
+raylib.SHADER_LOC_MATRIX_NORMAL: int
+
+ +
+
+raylib.SHADER_LOC_MATRIX_PROJECTION: int
+
+ +
+
+raylib.SHADER_LOC_MATRIX_VIEW: int
+
+ +
+
+raylib.SHADER_LOC_VECTOR_VIEW: int
+
+ +
+
+raylib.SHADER_LOC_VERTEX_BONEIDS: int
+
+ +
+
+raylib.SHADER_LOC_VERTEX_BONEWEIGHTS: int
+
+ +
+
+raylib.SHADER_LOC_VERTEX_COLOR: int
+
+ +
+
+raylib.SHADER_LOC_VERTEX_NORMAL: int
+
+ +
+
+raylib.SHADER_LOC_VERTEX_POSITION: int
+
+ +
+
+raylib.SHADER_LOC_VERTEX_TANGENT: int
+
+ +
+
+raylib.SHADER_LOC_VERTEX_TEXCOORD01: int
+
+ +
+
+raylib.SHADER_LOC_VERTEX_TEXCOORD02: int
+
+ +
+
+raylib.SHADER_UNIFORM_FLOAT: int
+
+ +
+
+raylib.SHADER_UNIFORM_INT: int
+
+ +
+
+raylib.SHADER_UNIFORM_IVEC2: int
+
+ +
+
+raylib.SHADER_UNIFORM_IVEC3: int
+
+ +
+
+raylib.SHADER_UNIFORM_IVEC4: int
+
+ +
+
+raylib.SHADER_UNIFORM_SAMPLER2D: int
+
+ +
+
+raylib.SHADER_UNIFORM_VEC2: int
+
+ +
+
+raylib.SHADER_UNIFORM_VEC3: int
+
+ +
+
+raylib.SHADER_UNIFORM_VEC4: int
+
+ +
+
+raylib.SKYBLUE: Color
+
+ +
+
+raylib.SLIDER: int
+
+ +
+
+raylib.SLIDER_PADDING: int
+
+ +
+
+raylib.SLIDER_WIDTH: int
+
+ +
+
+raylib.SPINNER: int
+
+ +
+
+raylib.SPIN_BUTTON_SPACING: int
+
+ +
+
+raylib.SPIN_BUTTON_WIDTH: int
+
+ +
+
+raylib.STATE_DISABLED: int
+
+ +
+
+raylib.STATE_FOCUSED: int
+
+ +
+
+raylib.STATE_NORMAL: int
+
+ +
+
+raylib.STATE_PRESSED: int
+
+ +
+
+raylib.STATUSBAR: int
+
+ +
+
+raylib.SaveFileData(fileName: bytes, data: Any, dataSize: int) bool
+

Save data to file from byte array (write), returns true on success.

+
+ +
+
+raylib.SaveFileText(fileName: bytes, text: bytes) bool
+

Save text data to file (write), string must be ‘' terminated, returns true on success.

+
+ +
+
+raylib.SeekMusicStream(music: Music | list | tuple, position: float) None
+

Seek music to a position (in seconds).

+
+ +
+
+raylib.SetAudioStreamBufferSizeDefault(size: int) None
+

Default size for new audio streams.

+
+ +
+
+raylib.SetAudioStreamCallback(stream: AudioStream | list | tuple, callback: Any) None
+

Audio thread callback to request new data.

+
+ +
+
+raylib.SetAudioStreamPan(stream: AudioStream | list | tuple, pan: float) None
+

Set pan for audio stream (0.5 is centered).

+
+ +
+
+raylib.SetAudioStreamPitch(stream: AudioStream | list | tuple, pitch: float) None
+

Set pitch for audio stream (1.0 is base level).

+
+ +
+
+raylib.SetAudioStreamVolume(stream: AudioStream | list | tuple, volume: float) None
+

Set volume for audio stream (1.0 is max level).

+
+ +
+
+raylib.SetAutomationEventBaseFrame(frame: int) None
+

Set automation event internal base frame to start recording.

+
+ +
+
+raylib.SetAutomationEventList(list_0: Any | list | tuple) None
+

Set automation event list to record to.

+
+ +
+
+raylib.SetClipboardText(text: bytes) None
+

Set clipboard text content.

+
+ +
+
+raylib.SetConfigFlags(flags: int) None
+

Setup init configuration flags (view FLAGS).

+
+ +
+
+raylib.SetExitKey(key: int) None
+

Set a custom key to exit program (default is ESC).

+
+ +
+
+raylib.SetGamepadMappings(mappings: bytes) int
+

Set internal gamepad mappings (SDL_GameControllerDB).

+
+ +
+
+raylib.SetGamepadVibration(gamepad: int, leftMotor: float, rightMotor: float, duration: float) None
+

Set gamepad vibration for both motors (duration in seconds).

+
+ +
+
+raylib.SetGesturesEnabled(flags: int) None
+

Enable a set of gestures using flags.

+
+ +
+
+raylib.SetLoadFileDataCallback(callback: bytes) None
+

Set custom file binary data loader.

+
+ +
+
+raylib.SetLoadFileTextCallback(callback: bytes) None
+

Set custom file text data loader.

+
+ +
+
+raylib.SetMasterVolume(volume: float) None
+

Set master volume (listener).

+
+ +
+
+raylib.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…).

+
+ +
+
+raylib.SetModelMeshMaterial(model: Any | list | tuple, meshId: int, materialId: int) None
+

Set material for a mesh.

+
+ +
+
+raylib.SetMouseCursor(cursor: int) None
+

Set mouse cursor.

+
+ +
+
+raylib.SetMouseOffset(offsetX: int, offsetY: int) None
+

Set mouse offset.

+
+ +
+
+raylib.SetMousePosition(x: int, y: int) None
+

Set mouse position XY.

+
+ +
+
+raylib.SetMouseScale(scaleX: float, scaleY: float) None
+

Set mouse scaling.

+
+ +
+
+raylib.SetMusicPan(music: Music | list | tuple, pan: float) None
+

Set pan for a music (0.5 is center).

+
+ +
+
+raylib.SetMusicPitch(music: Music | list | tuple, pitch: float) None
+

Set pitch for a music (1.0 is base level).

+
+ +
+
+raylib.SetMusicVolume(music: Music | list | tuple, volume: float) None
+

Set volume for music (1.0 is max level).

+
+ +
+
+raylib.SetPhysicsBodyRotation(body: Any | list | tuple, radians: float) None
+

Sets physics body shape transform based on radians parameter.

+
+ +
+
+raylib.SetPhysicsGravity(x: float, y: float) None
+

Sets physics global gravity force.

+
+ +
+
+raylib.SetPhysicsTimeStep(delta: float) None
+

Sets physics fixed time step in milliseconds. 1.666666 by default.

+
+ +
+
+raylib.SetPixelColor(dstPtr: Any, color: Color | list | tuple, format: int) None
+

Set color formatted into destination pixel pointer.

+
+ +
+
+raylib.SetRandomSeed(seed: int) None
+

Set the seed for the random number generator.

+
+ +
+
+raylib.SetSaveFileDataCallback(callback: bytes) None
+

Set custom file binary data saver.

+
+ +
+
+raylib.SetSaveFileTextCallback(callback: bytes) None
+

Set custom file text data saver.

+
+ +
+
+raylib.SetShaderValue(shader: Shader | list | tuple, locIndex: int, value: Any, uniformType: int) None
+

Set shader uniform value.

+
+ +
+
+raylib.SetShaderValueMatrix(shader: Shader | list | tuple, locIndex: int, mat: Matrix | list | tuple) None
+

Set shader uniform value (matrix 4x4).

+
+ +
+
+raylib.SetShaderValueTexture(shader: Shader | list | tuple, locIndex: int, texture: Texture | list | tuple) None
+

Set shader uniform value for texture (sampler2d).

+
+ +
+
+raylib.SetShaderValueV(shader: Shader | list | tuple, locIndex: int, value: Any, uniformType: int, count: int) None
+

Set shader uniform value vector.

+
+ +
+
+raylib.SetShapesTexture(texture: Texture | list | tuple, source: Rectangle | list | tuple) None
+

Set texture and rectangle to be used on shapes drawing.

+
+ +
+
+raylib.SetSoundPan(sound: Sound | list | tuple, pan: float) None
+

Set pan for a sound (0.5 is center).

+
+ +
+
+raylib.SetSoundPitch(sound: Sound | list | tuple, pitch: float) None
+

Set pitch for a sound (1.0 is base level).

+
+ +
+
+raylib.SetSoundVolume(sound: Sound | list | tuple, volume: float) None
+

Set volume for a sound (1.0 is max level).

+
+ +
+
+raylib.SetTargetFPS(fps: int) None
+

Set target FPS (maximum).

+
+ +
+
+raylib.SetTextLineSpacing(spacing: int) None
+

Set vertical line spacing when drawing with line-breaks.

+
+ +
+
+raylib.SetTextureFilter(texture: Texture | list | tuple, filter: int) None
+

Set texture scaling filter mode.

+
+ +
+
+raylib.SetTextureWrap(texture: Texture | list | tuple, wrap: int) None
+

Set texture wrapping mode.

+
+ +
+
+raylib.SetTraceLogCallback(callback: bytes) None
+

Set custom trace log.

+
+ +
+
+raylib.SetTraceLogLevel(logLevel: int) None
+

Set the current threshold (minimum) log level.

+
+ +
+
+raylib.SetWindowFocused() None
+

Set window focused.

+
+ +
+
+raylib.SetWindowIcon(image: Image | list | tuple) None
+

Set icon for window (single image, RGBA 32bit).

+
+ +
+
+raylib.SetWindowIcons(images: Any | list | tuple, count: int) None
+

Set icon for window (multiple images, RGBA 32bit).

+
+ +
+
+raylib.SetWindowMaxSize(width: int, height: int) None
+

Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE).

+
+ +
+
+raylib.SetWindowMinSize(width: int, height: int) None
+

Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE).

+
+ +
+
+raylib.SetWindowMonitor(monitor: int) None
+

Set monitor for the current window.

+
+ +
+
+raylib.SetWindowOpacity(opacity: float) None
+

Set window opacity [0.0f..1.0f].

+
+ +
+
+raylib.SetWindowPosition(x: int, y: int) None
+

Set window position on screen.

+
+ +
+
+raylib.SetWindowSize(width: int, height: int) None
+

Set window dimensions.

+
+ +
+
+raylib.SetWindowState(flags: int) None
+

Set window configuration state using flags.

+
+ +
+
+raylib.SetWindowTitle(title: bytes) None
+

Set title for window.

+
+ +
+
+class raylib.Shader
+
+
+id: int
+
+ +
+
+locs: Any
+
+ +
+ +
+
+raylib.ShaderAttributeDataType
+
+ +
+
+raylib.ShaderLocationIndex
+
+ +
+
+raylib.ShaderUniformDataType
+
+ +
+
+raylib.ShowCursor() None
+

Shows cursor.

+
+ +
+
+class raylib.Sound
+
+
+frameCount: int
+
+ +
+
+stream: AudioStream
+
+ +
+ +
+
+raylib.StartAutomationEventRecording() None
+

Start recording automation events (AutomationEventList must be set).

+
+ +
+
+raylib.StopAudioStream(stream: AudioStream | list | tuple) None
+

Stop audio stream.

+
+ +
+
+raylib.StopAutomationEventRecording() None
+

Stop recording automation events.

+
+ +
+
+raylib.StopMusicStream(music: Music | list | tuple) None
+

Stop music playing.

+
+ +
+
+raylib.StopSound(sound: Sound | list | tuple) None
+

Stop playing a sound.

+
+ +
+
+raylib.SwapScreenBuffer() None
+

Swap back buffer with front buffer (screen drawing).

+
+ +
+
+raylib.TEXTBOX: int
+
+ +
+
+raylib.TEXTURE_FILTER_ANISOTROPIC_16X: int
+
+ +
+
+raylib.TEXTURE_FILTER_ANISOTROPIC_4X: int
+
+ +
+
+raylib.TEXTURE_FILTER_ANISOTROPIC_8X: int
+
+ +
+
+raylib.TEXTURE_FILTER_BILINEAR: int
+
+ +
+
+raylib.TEXTURE_FILTER_POINT: int
+
+ +
+
+raylib.TEXTURE_FILTER_TRILINEAR: int
+
+ +
+
+raylib.TEXTURE_WRAP_CLAMP: int
+
+ +
+
+raylib.TEXTURE_WRAP_MIRROR_CLAMP: int
+
+ +
+
+raylib.TEXTURE_WRAP_MIRROR_REPEAT: int
+
+ +
+
+raylib.TEXTURE_WRAP_REPEAT: int
+
+ +
+
+raylib.TEXT_ALIGNMENT: int
+
+ +
+
+raylib.TEXT_ALIGNMENT_VERTICAL: int
+
+ +
+
+raylib.TEXT_ALIGN_BOTTOM: int
+
+ +
+
+raylib.TEXT_ALIGN_CENTER: int
+
+ +
+
+raylib.TEXT_ALIGN_LEFT: int
+
+ +
+
+raylib.TEXT_ALIGN_MIDDLE: int
+
+ +
+
+raylib.TEXT_ALIGN_RIGHT: int
+
+ +
+
+raylib.TEXT_ALIGN_TOP: int
+
+ +
+
+raylib.TEXT_COLOR_DISABLED: int
+
+ +
+
+raylib.TEXT_COLOR_FOCUSED: int
+
+ +
+
+raylib.TEXT_COLOR_NORMAL: int
+
+ +
+
+raylib.TEXT_COLOR_PRESSED: int
+
+ +
+
+raylib.TEXT_LINE_SPACING: int
+
+ +
+
+raylib.TEXT_PADDING: int
+
+ +
+
+raylib.TEXT_READONLY: int
+
+ +
+
+raylib.TEXT_SIZE: int
+
+ +
+
+raylib.TEXT_SPACING: int
+
+ +
+
+raylib.TEXT_WRAP_CHAR: int
+
+ +
+
+raylib.TEXT_WRAP_MODE: int
+
+ +
+
+raylib.TEXT_WRAP_NONE: int
+
+ +
+
+raylib.TEXT_WRAP_WORD: int
+
+ +
+
+raylib.TOGGLE: int
+
+ +
+
+raylib.TakeScreenshot(fileName: bytes) None
+

Takes a screenshot of current screen (filename extension defines format).

+
+ +
+
+raylib.TextAppend(text: bytes, append: bytes, position: Any) None
+

Append text at specific position and move cursor!.

+
+ +
+
+raylib.TextCopy(dst: bytes, src: bytes) int
+

Copy one string to another, returns bytes copied.

+
+ +
+
+raylib.TextFindIndex(text: bytes, find: bytes) int
+

Find first text occurrence within a string.

+
+ +
+
+raylib.TextFormat(*args) bytes
+

VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI

+
+ +
+
+raylib.TextInsert(text: bytes, insert: bytes, position: int) bytes
+

Insert text in a position (WARNING: memory must be freed!).

+
+ +
+
+raylib.TextIsEqual(text1: bytes, text2: bytes) bool
+

Check if two text string are equal.

+
+ +
+
+raylib.TextJoin(textList: list[bytes], count: int, delimiter: bytes) bytes
+

Join text strings with delimiter.

+
+ +
+
+raylib.TextLength(text: bytes) int
+

Get text length, checks for ‘' ending.

+
+ +
+
+raylib.TextReplace(text: bytes, replace: bytes, by: bytes) bytes
+

Replace text string (WARNING: memory must be freed!).

+
+ +
+
+raylib.TextSplit(text: bytes, delimiter: bytes, count: Any) list[bytes]
+

Split text into multiple strings.

+
+ +
+
+raylib.TextSubtext(text: bytes, position: int, length: int) bytes
+

Get a piece of a text string.

+
+ +
+
+raylib.TextToCamel(text: bytes) bytes
+

Get Camel case notation version of provided string.

+
+ +
+
+raylib.TextToFloat(text: bytes) float
+

Get float value from text (negative values not supported).

+
+ +
+
+raylib.TextToInteger(text: bytes) int
+

Get integer value from text (negative values not supported).

+
+ +
+
+raylib.TextToLower(text: bytes) bytes
+

Get lower case version of provided string.

+
+ +
+
+raylib.TextToPascal(text: bytes) bytes
+

Get Pascal case notation version of provided string.

+
+ +
+
+raylib.TextToSnake(text: bytes) bytes
+

Get Snake case notation version of provided string.

+
+ +
+
+raylib.TextToUpper(text: bytes) bytes
+

Get upper case version of provided string.

+
+ +
+
+class raylib.Texture
+
+
+format: int
+
+ +
+
+height: int
+
+ +
+
+id: int
+
+ +
+
+mipmaps: int
+
+ +
+
+width: int
+
+ +
+ +
+
+class raylib.Texture2D
+
+
+format: int
+
+ +
+
+height: int
+
+ +
+
+id: int
+
+ +
+
+mipmaps: int
+
+ +
+
+width: int
+
+ +
+ +
+
+class raylib.TextureCubemap
+
+
+format: int
+
+ +
+
+height: int
+
+ +
+
+id: int
+
+ +
+
+mipmaps: int
+
+ +
+
+width: int
+
+ +
+ +
+
+raylib.TextureFilter
+
+ +
+
+raylib.TextureWrap
+
+ +
+
+raylib.ToggleBorderlessWindowed() None
+

Toggle window state: borderless windowed, resizes window to match monitor resolution.

+
+ +
+
+raylib.ToggleFullscreen() None
+

Toggle window state: fullscreen/windowed, resizes monitor to match window resolution.

+
+ +
+
+raylib.TraceLog(*args) None
+

VARARG FUNCTION - MAY NOT BE SUPPORTED BY CFFI

+
+ +
+
+raylib.TraceLogLevel
+
+ +
+
+class raylib.Transform
+
+
+rotation: Vector4
+
+ +
+
+scale: Vector3
+
+ +
+
+translation: Vector3
+
+ +
+ +
+
+raylib.UnloadAudioStream(stream: AudioStream | list | tuple) None
+

Unload audio stream and free memory.

+
+ +
+
+raylib.UnloadAutomationEventList(list_0: AutomationEventList | list | tuple) None
+

Unload automation events list from file.

+
+ +
+
+raylib.UnloadCodepoints(codepoints: Any) None
+

Unload codepoints data from memory.

+
+ +
+
+raylib.UnloadDirectoryFiles(files: FilePathList | list | tuple) None
+

Unload filepaths.

+
+ +
+
+raylib.UnloadDroppedFiles(files: FilePathList | list | tuple) None
+

Unload dropped filepaths.

+
+ +
+
+raylib.UnloadFileData(data: bytes) None
+

Unload file data allocated by LoadFileData().

+
+ +
+
+raylib.UnloadFileText(text: bytes) None
+

Unload file text data allocated by LoadFileText().

+
+ +
+
+raylib.UnloadFont(font: Font | list | tuple) None
+

Unload font from GPU memory (VRAM).

+
+ +
+
+raylib.UnloadFontData(glyphs: Any | list | tuple, glyphCount: int) None
+

Unload font chars info data (RAM).

+
+ +
+
+raylib.UnloadImage(image: Image | list | tuple) None
+

Unload image from CPU memory (RAM).

+
+ +
+
+raylib.UnloadImageColors(colors: Any | list | tuple) None
+

Unload color data loaded with LoadImageColors().

+
+ +
+
+raylib.UnloadImagePalette(colors: Any | list | tuple) None
+

Unload colors palette loaded with LoadImagePalette().

+
+ +
+
+raylib.UnloadMaterial(material: Material | list | tuple) None
+

Unload material from GPU memory (VRAM).

+
+ +
+
+raylib.UnloadMesh(mesh: Mesh | list | tuple) None
+

Unload mesh data from CPU and GPU.

+
+ +
+
+raylib.UnloadModel(model: Model | list | tuple) None
+

Unload model (including meshes) from memory (RAM and/or VRAM).

+
+ +
+
+raylib.UnloadModelAnimation(anim: ModelAnimation | list | tuple) None
+

Unload animation data.

+
+ +
+
+raylib.UnloadModelAnimations(animations: Any | list | tuple, animCount: int) None
+

Unload animation array data.

+
+ +
+
+raylib.UnloadMusicStream(music: Music | list | tuple) None
+

Unload music stream.

+
+ +
+
+raylib.UnloadRandomSequence(sequence: Any) None
+

Unload random values sequence.

+
+ +
+
+raylib.UnloadRenderTexture(target: RenderTexture | list | tuple) None
+

Unload render texture from GPU memory (VRAM).

+
+ +
+
+raylib.UnloadShader(shader: Shader | list | tuple) None
+

Unload shader from GPU memory (VRAM).

+
+ +
+
+raylib.UnloadSound(sound: Sound | list | tuple) None
+

Unload sound.

+
+ +
+
+raylib.UnloadSoundAlias(alias: Sound | list | tuple) None
+

Unload a sound alias (does not deallocate sample data).

+
+ +
+
+raylib.UnloadTexture(texture: Texture | list | tuple) None
+

Unload texture from GPU memory (VRAM).

+
+ +
+
+raylib.UnloadUTF8(text: bytes) None
+

Unload UTF-8 text encoded from codepoints array.

+
+ +
+
+raylib.UnloadVrStereoConfig(config: VrStereoConfig | list | tuple) None
+

Unload VR stereo config.

+
+ +
+
+raylib.UnloadWave(wave: Wave | list | tuple) None
+

Unload wave data.

+
+ +
+
+raylib.UnloadWaveSamples(samples: Any) None
+

Unload samples data loaded with LoadWaveSamples().

+
+ +
+
+raylib.UpdateAudioStream(stream: AudioStream | list | tuple, data: Any, frameCount: int) None
+

Update audio stream buffers with data.

+
+ +
+
+raylib.UpdateCamera(camera: Any | list | tuple, mode: int) None
+

Update camera position for selected mode.

+
+ +
+
+raylib.UpdateCameraPro(camera: Any | list | tuple, movement: Vector3 | list | tuple, rotation: Vector3 | list | tuple, zoom: float) None
+

Update camera movement/rotation.

+
+ +
+
+raylib.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.

+
+ +
+
+raylib.UpdateModelAnimation(model: Model | list | tuple, anim: ModelAnimation | list | tuple, frame: int) None
+

Update model animation pose (CPU).

+
+ +
+
+raylib.UpdateModelAnimationBones(model: Model | list | tuple, anim: ModelAnimation | list | tuple, frame: int) None
+

Update model animation mesh bone matrices (GPU skinning).

+
+ +
+
+raylib.UpdateMusicStream(music: Music | list | tuple) None
+

Updates buffers for music streaming.

+
+ +
+
+raylib.UpdatePhysics() None
+

Update physics system.

+
+ +
+
+raylib.UpdateSound(sound: Sound | list | tuple, data: Any, sampleCount: int) None
+

Update sound buffer with new data.

+
+ +
+
+raylib.UpdateTexture(texture: Texture | list | tuple, pixels: Any) None
+

Update GPU texture with new data.

+
+ +
+
+raylib.UpdateTextureRec(texture: Texture | list | tuple, rec: Rectangle | list | tuple, pixels: Any) None
+

Update GPU texture rectangle with new data.

+
+ +
+
+raylib.UploadMesh(mesh: Any | list | tuple, dynamic: bool) None
+

Upload mesh vertex data in GPU and provide VAO/VBO ids.

+
+ +
+
+raylib.VALUEBOX: int
+
+ +
+
+raylib.VIOLET: Color
+
+ +
+
+class raylib.Vector2
+
+
+x: float
+
+ +
+
+y: float
+
+ +
+ +
+
+raylib.Vector2Add(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2AddValue(v: Vector2 | list | tuple, add: float) Vector2
+

.

+
+ +
+
+raylib.Vector2Angle(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector2Clamp(v: Vector2 | list | tuple, min_1: Vector2 | list | tuple, max_2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2ClampValue(v: Vector2 | list | tuple, min_1: float, max_2: float) Vector2
+

.

+
+ +
+
+raylib.Vector2Distance(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector2DistanceSqr(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector2Divide(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2DotProduct(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector2Equals(p: Vector2 | list | tuple, q: Vector2 | list | tuple) int
+

.

+
+ +
+
+raylib.Vector2Invert(v: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2Length(v: Vector2 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector2LengthSqr(v: Vector2 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector2Lerp(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple, amount: float) Vector2
+

.

+
+ +
+
+raylib.Vector2LineAngle(start: Vector2 | list | tuple, end: Vector2 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector2Max(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2Min(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2MoveTowards(v: Vector2 | list | tuple, target: Vector2 | list | tuple, maxDistance: float) Vector2
+

.

+
+ +
+
+raylib.Vector2Multiply(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2Negate(v: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2Normalize(v: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2One() Vector2
+

.

+
+ +
+
+raylib.Vector2Reflect(v: Vector2 | list | tuple, normal: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2Refract(v: Vector2 | list | tuple, n: Vector2 | list | tuple, r: float) Vector2
+

.

+
+ +
+
+raylib.Vector2Rotate(v: Vector2 | list | tuple, angle: float) Vector2
+

.

+
+ +
+
+raylib.Vector2Scale(v: Vector2 | list | tuple, scale: float) Vector2
+

.

+
+ +
+
+raylib.Vector2Subtract(v1: Vector2 | list | tuple, v2: Vector2 | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2SubtractValue(v: Vector2 | list | tuple, sub: float) Vector2
+

.

+
+ +
+
+raylib.Vector2Transform(v: Vector2 | list | tuple, mat: Matrix | list | tuple) Vector2
+

.

+
+ +
+
+raylib.Vector2Zero() Vector2
+

.

+
+ +
+
+class raylib.Vector3
+
+
+x: float
+
+ +
+
+y: float
+
+ +
+
+z: float
+
+ +
+ +
+
+raylib.Vector3Add(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3AddValue(v: Vector3 | list | tuple, add: float) Vector3
+

.

+
+ +
+
+raylib.Vector3Angle(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector3Barycenter(p: Vector3 | list | tuple, a: Vector3 | list | tuple, b: Vector3 | list | tuple, c: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Clamp(v: Vector3 | list | tuple, min_1: Vector3 | list | tuple, max_2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3ClampValue(v: Vector3 | list | tuple, min_1: float, max_2: float) Vector3
+

.

+
+ +
+
+raylib.Vector3CrossProduct(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3CubicHermite(v1: Vector3 | list | tuple, tangent1: Vector3 | list | tuple, v2: Vector3 | list | tuple, tangent2: Vector3 | list | tuple, amount: float) Vector3
+

.

+
+ +
+
+raylib.Vector3Distance(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector3DistanceSqr(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector3Divide(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3DotProduct(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector3Equals(p: Vector3 | list | tuple, q: Vector3 | list | tuple) int
+

.

+
+ +
+
+raylib.Vector3Invert(v: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Length(v: Vector3 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector3LengthSqr(v: Vector3 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector3Lerp(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple, amount: float) Vector3
+

.

+
+ +
+
+raylib.Vector3Max(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Min(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3MoveTowards(v: Vector3 | list | tuple, target: Vector3 | list | tuple, maxDistance: float) Vector3
+

.

+
+ +
+
+raylib.Vector3Multiply(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Negate(v: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Normalize(v: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3One() Vector3
+

.

+
+ +
+
+raylib.Vector3OrthoNormalize(v1: Any | list | tuple, v2: Any | list | tuple) None
+

.

+
+ +
+
+raylib.Vector3Perpendicular(v: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Project(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Reflect(v: Vector3 | list | tuple, normal: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Refract(v: Vector3 | list | tuple, n: Vector3 | list | tuple, r: float) Vector3
+

.

+
+ +
+
+raylib.Vector3Reject(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3RotateByAxisAngle(v: Vector3 | list | tuple, axis: Vector3 | list | tuple, angle: float) Vector3
+

.

+
+ +
+
+raylib.Vector3RotateByQuaternion(v: Vector3 | list | tuple, q: Vector4 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Scale(v: Vector3 | list | tuple, scalar: float) Vector3
+

.

+
+ +
+
+raylib.Vector3Subtract(v1: Vector3 | list | tuple, v2: Vector3 | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3SubtractValue(v: Vector3 | list | tuple, sub: float) Vector3
+

.

+
+ +
+
+raylib.Vector3ToFloatV(v: Vector3 | list | tuple) float3
+

.

+
+ +
+
+raylib.Vector3Transform(v: Vector3 | list | tuple, mat: Matrix | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Unproject(source: Vector3 | list | tuple, projection: Matrix | list | tuple, view: Matrix | list | tuple) Vector3
+

.

+
+ +
+
+raylib.Vector3Zero() Vector3
+

.

+
+ +
+
+class raylib.Vector4
+
+
+w: float
+
+ +
+
+x: float
+
+ +
+
+y: float
+
+ +
+
+z: float
+
+ +
+ +
+
+raylib.Vector4Add(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.Vector4AddValue(v: Vector4 | list | tuple, add: float) Vector4
+

.

+
+ +
+
+raylib.Vector4Distance(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector4DistanceSqr(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector4Divide(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.Vector4DotProduct(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector4Equals(p: Vector4 | list | tuple, q: Vector4 | list | tuple) int
+

.

+
+ +
+
+raylib.Vector4Invert(v: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.Vector4Length(v: Vector4 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector4LengthSqr(v: Vector4 | list | tuple) float
+

.

+
+ +
+
+raylib.Vector4Lerp(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple, amount: float) Vector4
+

.

+
+ +
+
+raylib.Vector4Max(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.Vector4Min(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.Vector4MoveTowards(v: Vector4 | list | tuple, target: Vector4 | list | tuple, maxDistance: float) Vector4
+

.

+
+ +
+
+raylib.Vector4Multiply(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.Vector4Negate(v: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.Vector4Normalize(v: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.Vector4One() Vector4
+

.

+
+ +
+
+raylib.Vector4Scale(v: Vector4 | list | tuple, scale: float) Vector4
+

.

+
+ +
+
+raylib.Vector4Subtract(v1: Vector4 | list | tuple, v2: Vector4 | list | tuple) Vector4
+

.

+
+ +
+
+raylib.Vector4SubtractValue(v: Vector4 | list | tuple, add: float) Vector4
+

.

+
+ +
+
+raylib.Vector4Zero() Vector4
+

.

+
+ +
+
+class raylib.VrDeviceInfo
+
+
+chromaAbCorrection: list
+
+ +
+
+eyeToScreenDistance: float
+
+ +
+
+hResolution: int
+
+ +
+
+hScreenSize: float
+
+ +
+
+interpupillaryDistance: float
+
+ +
+
+lensDistortionValues: list
+
+ +
+
+lensSeparationDistance: float
+
+ +
+
+vResolution: int
+
+ +
+
+vScreenSize: float
+
+ +
+ +
+
+class raylib.VrStereoConfig
+
+
+leftLensCenter: list
+
+ +
+
+leftScreenCenter: list
+
+ +
+
+projection: list
+
+ +
+
+rightLensCenter: list
+
+ +
+
+rightScreenCenter: list
+
+ +
+
+scale: list
+
+ +
+
+scaleIn: list
+
+ +
+
+viewOffset: list
+
+ +
+ +
+
+raylib.WHITE: Color
+
+ +
+
+raylib.WaitTime(seconds: float) None
+

Wait for some time (halt program execution).

+
+ +
+
+class raylib.Wave
+
+
+channels: int
+
+ +
+
+data: Any
+
+ +
+
+frameCount: int
+
+ +
+
+sampleRate: int
+
+ +
+
+sampleSize: int
+
+ +
+ +
+
+raylib.WaveCopy(wave: Wave | list | tuple) Wave
+

Copy a wave to a new wave.

+
+ +
+
+raylib.WaveCrop(wave: Any | list | tuple, initFrame: int, finalFrame: int) None
+

Crop a wave to defined frames range.

+
+ +
+
+raylib.WaveFormat(wave: Any | list | tuple, sampleRate: int, sampleSize: int, channels: int) None
+

Convert wave data to desired format.

+
+ +
+
+raylib.WindowShouldClose() bool
+

Check if application should close (KEY_ESCAPE pressed or windows close icon clicked).

+
+ +
+
+raylib.Wrap(value: float, min_1: float, max_2: float) float
+

.

+
+ +
+
+raylib.YELLOW: Color
+
+ +
+
+raylib.ffi: _cffi_backend.FFI
+
+ +
+
+class raylib.float16
+
+
+v: list
+
+ +
+ +
+
+class raylib.float3
+
+
+v: list
+
+ +
+ +
+
+raylib.glfwCreateCursor(image: Any | list | tuple, xhot: int, yhot: int) Any
+

.

+
+ +
+
+raylib.glfwCreateStandardCursor(shape: int) Any
+

.

+
+ +
+
+raylib.glfwCreateWindow(width: int, height: int, title: bytes, monitor: Any | list | tuple, share: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwDefaultWindowHints() None
+

.

+
+ +
+
+raylib.glfwDestroyCursor(cursor: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwDestroyWindow(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwExtensionSupported(extension: bytes) int
+

.

+
+ +
+
+raylib.glfwFocusWindow(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwGetClipboardString(window: Any | list | tuple) bytes
+

.

+
+ +
+
+raylib.glfwGetCurrentContext() Any
+

.

+
+ +
+
+raylib.glfwGetCursorPos(window: Any | list | tuple, xpos: Any, ypos: Any) None
+

.

+
+ +
+
+raylib.glfwGetError(description: list[bytes]) int
+

.

+
+ +
+
+raylib.glfwGetFramebufferSize(window: Any | list | tuple, width: Any, height: Any) None
+

.

+
+ +
+
+raylib.glfwGetGamepadName(jid: int) bytes
+

.

+
+ +
+
+raylib.glfwGetGamepadState(jid: int, state: Any | list | tuple) int
+

.

+
+ +
+
+raylib.glfwGetGammaRamp(monitor: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwGetInputMode(window: Any | list | tuple, mode: int) int
+

.

+
+ +
+
+raylib.glfwGetJoystickAxes(jid: int, count: Any) Any
+

.

+
+ +
+
+raylib.glfwGetJoystickButtons(jid: int, count: Any) bytes
+

.

+
+ +
+
+raylib.glfwGetJoystickGUID(jid: int) bytes
+

.

+
+ +
+
+raylib.glfwGetJoystickHats(jid: int, count: Any) bytes
+

.

+
+ +
+
+raylib.glfwGetJoystickName(jid: int) bytes
+

.

+
+ +
+
+raylib.glfwGetJoystickUserPointer(jid: int) Any
+

.

+
+ +
+
+raylib.glfwGetKey(window: Any | list | tuple, key: int) int
+

.

+
+ +
+
+raylib.glfwGetKeyName(key: int, scancode: int) bytes
+

.

+
+ +
+
+raylib.glfwGetKeyScancode(key: int) int
+

.

+
+ +
+
+raylib.glfwGetMonitorContentScale(monitor: Any | list | tuple, xscale: Any, yscale: Any) None
+

.

+
+ +
+
+raylib.glfwGetMonitorName(monitor: Any | list | tuple) bytes
+

.

+
+ +
+
+raylib.glfwGetMonitorPhysicalSize(monitor: Any | list | tuple, widthMM: Any, heightMM: Any) None
+

.

+
+ +
+
+raylib.glfwGetMonitorPos(monitor: Any | list | tuple, xpos: Any, ypos: Any) None
+

.

+
+ +
+
+raylib.glfwGetMonitorUserPointer(monitor: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwGetMonitorWorkarea(monitor: Any | list | tuple, xpos: Any, ypos: Any, width: Any, height: Any) None
+

.

+
+ +
+
+raylib.glfwGetMonitors(count: Any) Any
+

.

+
+ +
+
+raylib.glfwGetMouseButton(window: Any | list | tuple, button: int) int
+

.

+
+ +
+
+raylib.glfwGetPlatform() int
+

.

+
+ +
+
+raylib.glfwGetPrimaryMonitor() Any
+

.

+
+ +
+
+raylib.glfwGetProcAddress(procname: bytes) Any
+

.

+
+ +
+
+raylib.glfwGetRequiredInstanceExtensions(count: Any) list[bytes]
+

.

+
+ +
+
+raylib.glfwGetTime() float
+

.

+
+ +
+
+raylib.glfwGetTimerFrequency() int
+

.

+
+ +
+
+raylib.glfwGetTimerValue() int
+

.

+
+ +
+
+raylib.glfwGetVersion(major: Any, minor: Any, rev: Any) None
+

.

+
+ +
+
+raylib.glfwGetVersionString() bytes
+

.

+
+ +
+
+raylib.glfwGetVideoMode(monitor: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwGetVideoModes(monitor: Any | list | tuple, count: Any) Any
+

.

+
+ +
+
+raylib.glfwGetWindowAttrib(window: Any | list | tuple, attrib: int) int
+

.

+
+ +
+
+raylib.glfwGetWindowContentScale(window: Any | list | tuple, xscale: Any, yscale: Any) None
+

.

+
+ +
+
+raylib.glfwGetWindowFrameSize(window: Any | list | tuple, left: Any, top: Any, right: Any, bottom: Any) None
+

.

+
+ +
+
+raylib.glfwGetWindowMonitor(window: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwGetWindowOpacity(window: Any | list | tuple) float
+

.

+
+ +
+
+raylib.glfwGetWindowPos(window: Any | list | tuple, xpos: Any, ypos: Any) None
+

.

+
+ +
+
+raylib.glfwGetWindowSize(window: Any | list | tuple, width: Any, height: Any) None
+

.

+
+ +
+
+raylib.glfwGetWindowTitle(window: Any | list | tuple) bytes
+

.

+
+ +
+
+raylib.glfwGetWindowUserPointer(window: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwHideWindow(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwIconifyWindow(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwInit() int
+

.

+
+ +
+
+raylib.glfwInitAllocator(allocator: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwInitHint(hint: int, value: int) None
+

.

+
+ +
+
+raylib.glfwJoystickIsGamepad(jid: int) int
+

.

+
+ +
+
+raylib.glfwJoystickPresent(jid: int) int
+

.

+
+ +
+
+raylib.glfwMakeContextCurrent(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwMaximizeWindow(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwPlatformSupported(platform: int) int
+

.

+
+ +
+
+raylib.glfwPollEvents() None
+

.

+
+ +
+
+raylib.glfwPostEmptyEvent() None
+

.

+
+ +
+
+raylib.glfwRawMouseMotionSupported() int
+

.

+
+ +
+
+raylib.glfwRequestWindowAttention(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwRestoreWindow(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwSetCharCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetCharModsCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetClipboardString(window: Any | list | tuple, string: bytes) None
+

.

+
+ +
+
+raylib.glfwSetCursor(window: Any | list | tuple, cursor: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwSetCursorEnterCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetCursorPos(window: Any | list | tuple, xpos: float, ypos: float) None
+

.

+
+ +
+
+raylib.glfwSetCursorPosCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetDropCallback(window: Any | list | tuple, callback: list[bytes] | list | tuple) list[bytes]
+

.

+
+ +
+
+raylib.glfwSetErrorCallback(callback: bytes) bytes
+

.

+
+ +
+
+raylib.glfwSetFramebufferSizeCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetGamma(monitor: Any | list | tuple, gamma: float) None
+

.

+
+ +
+
+raylib.glfwSetGammaRamp(monitor: Any | list | tuple, ramp: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwSetInputMode(window: Any | list | tuple, mode: int, value: int) None
+

.

+
+ +
+
+raylib.glfwSetJoystickCallback(callback: Any) Any
+

.

+
+ +
+
+raylib.glfwSetJoystickUserPointer(jid: int, pointer: Any) None
+

.

+
+ +
+
+raylib.glfwSetKeyCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetMonitorCallback(callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetMonitorUserPointer(monitor: Any | list | tuple, pointer: Any) None
+

.

+
+ +
+
+raylib.glfwSetMouseButtonCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetScrollCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetTime(time: float) None
+

.

+
+ +
+
+raylib.glfwSetWindowAspectRatio(window: Any | list | tuple, numer: int, denom: int) None
+

.

+
+ +
+
+raylib.glfwSetWindowAttrib(window: Any | list | tuple, attrib: int, value: int) None
+

.

+
+ +
+
+raylib.glfwSetWindowCloseCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetWindowContentScaleCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetWindowFocusCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetWindowIcon(window: Any | list | tuple, count: int, images: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwSetWindowIconifyCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetWindowMaximizeCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetWindowMonitor(window: Any | list | tuple, monitor: Any | list | tuple, xpos: int, ypos: int, width: int, height: int, refreshRate: int) None
+

.

+
+ +
+
+raylib.glfwSetWindowOpacity(window: Any | list | tuple, opacity: float) None
+

.

+
+ +
+
+raylib.glfwSetWindowPos(window: Any | list | tuple, xpos: int, ypos: int) None
+

.

+
+ +
+
+raylib.glfwSetWindowPosCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetWindowRefreshCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetWindowShouldClose(window: Any | list | tuple, value: int) None
+

.

+
+ +
+
+raylib.glfwSetWindowSize(window: Any | list | tuple, width: int, height: int) None
+

.

+
+ +
+
+raylib.glfwSetWindowSizeCallback(window: Any | list | tuple, callback: Any | list | tuple) Any
+

.

+
+ +
+
+raylib.glfwSetWindowSizeLimits(window: Any | list | tuple, minwidth: int, minheight: int, maxwidth: int, maxheight: int) None
+

.

+
+ +
+
+raylib.glfwSetWindowTitle(window: Any | list | tuple, title: bytes) None
+

.

+
+ +
+
+raylib.glfwSetWindowUserPointer(window: Any | list | tuple, pointer: Any) None
+

.

+
+ +
+
+raylib.glfwShowWindow(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwSwapBuffers(window: Any | list | tuple) None
+

.

+
+ +
+
+raylib.glfwSwapInterval(interval: int) None
+

.

+
+ +
+
+raylib.glfwTerminate() None
+

.

+
+ +
+
+raylib.glfwUpdateGamepadMappings(string: bytes) int
+

.

+
+ +
+
+raylib.glfwVulkanSupported() int
+

.

+
+ +
+
+raylib.glfwWaitEvents() None
+

.

+
+ +
+
+raylib.glfwWaitEventsTimeout(timeout: float) None
+

.

+
+ +
+
+raylib.glfwWindowHint(hint: int, value: int) None
+

.

+
+ +
+
+raylib.glfwWindowHintString(hint: int, value: bytes) None
+

.

+
+ +
+
+raylib.glfwWindowShouldClose(window: Any | list | tuple) int
+

.

+
+ +
+
+class raylib.rAudioBuffer
+
+ +
+
+class raylib.rAudioProcessor
+
+ +
+
+raylib.rl: _cffi_backend.Lib
+
+ +
+
+raylib.rlActiveDrawBuffers(count: int) None
+

Activate multiple draw color buffers.

+
+ +
+
+raylib.rlActiveTextureSlot(slot: int) None
+

Select and active a texture slot.

+
+ +
+
+raylib.rlBegin(mode: int) None
+

Initialize drawing mode (how to organize vertex).

+
+ +
+
+raylib.rlBindFramebuffer(target: int, framebuffer: int) None
+

Bind framebuffer (FBO).

+
+ +
+
+raylib.rlBindImageTexture(id: int, index: int, format: int, readonly: bool) None
+

Bind image texture.

+
+ +
+
+raylib.rlBindShaderBuffer(id: int, index: int) None
+

Bind SSBO buffer.

+
+ +
+
+raylib.rlBlendMode
+
+ +
+
+raylib.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.

+
+ +
+
+raylib.rlCheckErrors() None
+

Check and log OpenGL error codes.

+
+ +
+
+raylib.rlCheckRenderBatchLimit(vCount: int) bool
+

Check internal buffer overflow for a given number of vertex.

+
+ +
+
+raylib.rlClearColor(r: bytes, g: bytes, b: bytes, a: bytes) None
+

Clear color buffer with color.

+
+ +
+
+raylib.rlClearScreenBuffers() None
+

Clear used screen buffers (color and depth).

+
+ +
+
+raylib.rlColor3f(x: float, y: float, z: float) None
+

Define one vertex (color) - 3 float.

+
+ +
+
+raylib.rlColor4f(x: float, y: float, z: float, w: float) None
+

Define one vertex (color) - 4 float.

+
+ +
+
+raylib.rlColor4ub(r: bytes, g: bytes, b: bytes, a: bytes) None
+

Define one vertex (color) - 4 byte.

+
+ +
+
+raylib.rlColorMask(r: bool, g: bool, b: bool, a: bool) None
+

Color mask control.

+
+ +
+
+raylib.rlCompileShader(shaderCode: bytes, type: int) int
+

Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER).

+
+ +
+
+raylib.rlComputeShaderDispatch(groupX: int, groupY: int, groupZ: int) None
+

Dispatch compute shader (equivalent to draw for graphics pipeline).

+
+ +
+
+raylib.rlCopyShaderBuffer(destId: int, srcId: int, destOffset: int, srcOffset: int, count: int) None
+

Copy SSBO data between buffers.

+
+ +
+
+raylib.rlCubemapParameters(id: int, param: int, value: int) None
+

Set cubemap parameters (filter, wrap).

+
+ +
+
+raylib.rlCullMode
+
+ +
+
+raylib.rlDisableBackfaceCulling() None
+

Disable backface culling.

+
+ +
+
+raylib.rlDisableColorBlend() None
+

Disable color blending.

+
+ +
+
+raylib.rlDisableDepthMask() None
+

Disable depth write.

+
+ +
+
+raylib.rlDisableDepthTest() None
+

Disable depth test.

+
+ +
+
+raylib.rlDisableFramebuffer() None
+

Disable render texture (fbo), return to default framebuffer.

+
+ +
+
+raylib.rlDisableScissorTest() None
+

Disable scissor test.

+
+ +
+
+raylib.rlDisableShader() None
+

Disable shader program.

+
+ +
+
+raylib.rlDisableSmoothLines() None
+

Disable line aliasing.

+
+ +
+
+raylib.rlDisableStereoRender() None
+

Disable stereo rendering.

+
+ +
+
+raylib.rlDisableTexture() None
+

Disable texture.

+
+ +
+
+raylib.rlDisableTextureCubemap() None
+

Disable texture cubemap.

+
+ +
+
+raylib.rlDisableVertexArray() None
+

Disable vertex array (VAO, if supported).

+
+ +
+
+raylib.rlDisableVertexAttribute(index: int) None
+

Disable vertex attribute index.

+
+ +
+
+raylib.rlDisableVertexBuffer() None
+

Disable vertex buffer (VBO).

+
+ +
+
+raylib.rlDisableVertexBufferElement() None
+

Disable vertex buffer element (VBO element).

+
+ +
+
+raylib.rlDisableWireMode() None
+

Disable wire (and point) mode.

+
+ +
+
+class raylib.rlDrawCall
+
+
+mode: int
+
+ +
+
+textureId: int
+
+ +
+
+vertexAlignment: int
+
+ +
+
+vertexCount: int
+
+ +
+ +
+
+raylib.rlDrawRenderBatch(batch: Any | list | tuple) None
+

Draw render batch data (Update->Draw->Reset).

+
+ +
+
+raylib.rlDrawRenderBatchActive() None
+

Update and draw internal render batch.

+
+ +
+
+raylib.rlDrawVertexArray(offset: int, count: int) None
+

Draw vertex array (currently active vao).

+
+ +
+
+raylib.rlDrawVertexArrayElements(offset: int, count: int, buffer: Any) None
+

Draw vertex array elements.

+
+ +
+
+raylib.rlDrawVertexArrayElementsInstanced(offset: int, count: int, buffer: Any, instances: int) None
+

Draw vertex array elements with instancing.

+
+ +
+
+raylib.rlDrawVertexArrayInstanced(offset: int, count: int, instances: int) None
+

Draw vertex array (currently active vao) with instancing.

+
+ +
+
+raylib.rlEnableBackfaceCulling() None
+

Enable backface culling.

+
+ +
+
+raylib.rlEnableColorBlend() None
+

Enable color blending.

+
+ +
+
+raylib.rlEnableDepthMask() None
+

Enable depth write.

+
+ +
+
+raylib.rlEnableDepthTest() None
+

Enable depth test.

+
+ +
+
+raylib.rlEnableFramebuffer(id: int) None
+

Enable render texture (fbo).

+
+ +
+
+raylib.rlEnablePointMode() None
+

Enable point mode.

+
+ +
+
+raylib.rlEnableScissorTest() None
+

Enable scissor test.

+
+ +
+
+raylib.rlEnableShader(id: int) None
+

Enable shader program.

+
+ +
+
+raylib.rlEnableSmoothLines() None
+

Enable line aliasing.

+
+ +
+
+raylib.rlEnableStereoRender() None
+

Enable stereo rendering.

+
+ +
+
+raylib.rlEnableTexture(id: int) None
+

Enable texture.

+
+ +
+
+raylib.rlEnableTextureCubemap(id: int) None
+

Enable texture cubemap.

+
+ +
+
+raylib.rlEnableVertexArray(vaoId: int) bool
+

Enable vertex array (VAO, if supported).

+
+ +
+
+raylib.rlEnableVertexAttribute(index: int) None
+

Enable vertex attribute index.

+
+ +
+
+raylib.rlEnableVertexBuffer(id: int) None
+

Enable vertex buffer (VBO).

+
+ +
+
+raylib.rlEnableVertexBufferElement(id: int) None
+

Enable vertex buffer element (VBO element).

+
+ +
+
+raylib.rlEnableWireMode() None
+

Enable wire mode.

+
+ +
+
+raylib.rlEnd() None
+

Finish vertex providing.

+
+ +
+
+raylib.rlFramebufferAttach(fboId: int, texId: int, attachType: int, texType: int, mipLevel: int) None
+

Attach texture/renderbuffer to a framebuffer.

+
+ +
+
+raylib.rlFramebufferAttachTextureType
+
+ +
+
+raylib.rlFramebufferAttachType
+
+ +
+
+raylib.rlFramebufferComplete(id: int) bool
+

Verify framebuffer is complete.

+
+ +
+
+raylib.rlFrustum(left: float, right: float, bottom: float, top: float, znear: float, zfar: float) None
+

.

+
+ +
+
+raylib.rlGenTextureMipmaps(id: int, width: int, height: int, format: int, mipmaps: Any) None
+

Generate mipmap data for selected texture.

+
+ +
+
+raylib.rlGetActiveFramebuffer() int
+

Get the currently active render texture (fbo), 0 for default framebuffer.

+
+ +
+
+raylib.rlGetCullDistanceFar() float
+

Get cull plane distance far.

+
+ +
+
+raylib.rlGetCullDistanceNear() float
+

Get cull plane distance near.

+
+ +
+
+raylib.rlGetFramebufferHeight() int
+

Get default framebuffer height.

+
+ +
+
+raylib.rlGetFramebufferWidth() int
+

Get default framebuffer width.

+
+ +
+
+raylib.rlGetGlTextureFormats(format: int, glInternalFormat: Any, glFormat: Any, glType: Any) None
+

Get OpenGL internal formats.

+
+ +
+
+raylib.rlGetLineWidth() float
+

Get the line drawing width.

+
+ +
+
+raylib.rlGetLocationAttrib(shaderId: int, attribName: bytes) int
+

Get shader location attribute.

+
+ +
+
+raylib.rlGetLocationUniform(shaderId: int, uniformName: bytes) int
+

Get shader location uniform.

+
+ +
+
+raylib.rlGetMatrixModelview() Matrix
+

Get internal modelview matrix.

+
+ +
+
+raylib.rlGetMatrixProjection() Matrix
+

Get internal projection matrix.

+
+ +
+
+raylib.rlGetMatrixProjectionStereo(eye: int) Matrix
+

Get internal projection matrix for stereo render (selected eye).

+
+ +
+
+raylib.rlGetMatrixTransform() Matrix
+

Get internal accumulated transform matrix.

+
+ +
+
+raylib.rlGetMatrixViewOffsetStereo(eye: int) Matrix
+

Get internal view offset matrix for stereo render (selected eye).

+
+ +
+
+raylib.rlGetPixelFormatName(format: int) bytes
+

Get name string for pixel format.

+
+ +
+
+raylib.rlGetShaderBufferSize(id: int) int
+

Get SSBO buffer size.

+
+ +
+
+raylib.rlGetShaderIdDefault() int
+

Get default shader id.

+
+ +
+
+raylib.rlGetShaderLocsDefault() Any
+

Get default shader locations.

+
+ +
+
+raylib.rlGetTextureIdDefault() int
+

Get default texture id.

+
+ +
+
+raylib.rlGetVersion() int
+

Get current OpenGL version.

+
+ +
+
+raylib.rlGlVersion
+
+ +
+
+raylib.rlIsStereoRenderEnabled() bool
+

Check if stereo render is enabled.

+
+ +
+
+raylib.rlLoadComputeShaderProgram(shaderId: int) int
+

Load compute shader program.

+
+ +
+
+raylib.rlLoadDrawCube() None
+

Load and draw a cube.

+
+ +
+
+raylib.rlLoadDrawQuad() None
+

Load and draw a quad.

+
+ +
+
+raylib.rlLoadExtensions(loader: Any) None
+

Load OpenGL extensions (loader function required).

+
+ +
+
+raylib.rlLoadFramebuffer() int
+

Load an empty framebuffer.

+
+ +
+
+raylib.rlLoadIdentity() None
+

Reset current matrix to identity matrix.

+
+ +
+
+raylib.rlLoadRenderBatch(numBuffers: int, bufferElements: int) rlRenderBatch
+

Load a render batch system.

+
+ +
+
+raylib.rlLoadShaderBuffer(size: int, data: Any, usageHint: int) int
+

Load shader storage buffer object (SSBO).

+
+ +
+
+raylib.rlLoadShaderCode(vsCode: bytes, fsCode: bytes) int
+

Load shader from code strings.

+
+ +
+
+raylib.rlLoadShaderProgram(vShaderId: int, fShaderId: int) int
+

Load custom shader program.

+
+ +
+
+raylib.rlLoadTexture(data: Any, width: int, height: int, format: int, mipmapCount: int) int
+

Load texture data.

+
+ +
+
+raylib.rlLoadTextureCubemap(data: Any, size: int, format: int, mipmapCount: int) int
+

Load texture cubemap data.

+
+ +
+
+raylib.rlLoadTextureDepth(width: int, height: int, useRenderBuffer: bool) int
+

Load depth texture/renderbuffer (to be attached to fbo).

+
+ +
+
+raylib.rlLoadVertexArray() int
+

Load vertex array (vao) if supported.

+
+ +
+
+raylib.rlLoadVertexBuffer(buffer: Any, size: int, dynamic: bool) int
+

Load a vertex buffer object.

+
+ +
+
+raylib.rlLoadVertexBufferElement(buffer: Any, size: int, dynamic: bool) int
+

Load vertex buffer elements object.

+
+ +
+
+raylib.rlMatrixMode(mode: int) None
+

Choose the current matrix to be transformed.

+
+ +
+
+raylib.rlMultMatrixf(matf: Any) None
+

Multiply the current matrix by another matrix.

+
+ +
+
+raylib.rlNormal3f(x: float, y: float, z: float) None
+

Define one vertex (normal) - 3 float.

+
+ +
+
+raylib.rlOrtho(left: float, right: float, bottom: float, top: float, znear: float, zfar: float) None
+

.

+
+ +
+
+raylib.rlPixelFormat
+
+ +
+
+raylib.rlPopMatrix() None
+

Pop latest inserted matrix from stack.

+
+ +
+
+raylib.rlPushMatrix() None
+

Push the current matrix to stack.

+
+ +
+
+raylib.rlReadScreenPixels(width: int, height: int) bytes
+

Read screen pixel data (color buffer).

+
+ +
+
+raylib.rlReadShaderBuffer(id: int, dest: Any, count: int, offset: int) None
+

Read SSBO buffer data (GPU->CPU).

+
+ +
+
+raylib.rlReadTexturePixels(id: int, width: int, height: int, format: int) Any
+

Read texture pixel data.

+
+ +
+
+class raylib.rlRenderBatch
+
+
+bufferCount: int
+
+ +
+
+currentBuffer: int
+
+ +
+
+currentDepth: float
+
+ +
+
+drawCounter: int
+
+ +
+
+draws: Any
+
+ +
+
+vertexBuffer: Any
+
+ +
+ +
+
+raylib.rlRotatef(angle: float, x: float, y: float, z: float) None
+

Multiply the current matrix by a rotation matrix.

+
+ +
+
+raylib.rlScalef(x: float, y: float, z: float) None
+

Multiply the current matrix by a scaling matrix.

+
+ +
+
+raylib.rlScissor(x: int, y: int, width: int, height: int) None
+

Scissor test.

+
+ +
+
+raylib.rlSetBlendFactors(glSrcFactor: int, glDstFactor: int, glEquation: int) None
+

Set blending mode factor and equation (using OpenGL factors).

+
+ +
+
+raylib.rlSetBlendFactorsSeparate(glSrcRGB: int, glDstRGB: int, glSrcAlpha: int, glDstAlpha: int, glEqRGB: int, glEqAlpha: int) None
+

Set blending mode factors and equations separately (using OpenGL factors).

+
+ +
+
+raylib.rlSetBlendMode(mode: int) None
+

Set blending mode.

+
+ +
+
+raylib.rlSetClipPlanes(nearPlane: float, farPlane: float) None
+

Set clip planes distances.

+
+ +
+
+raylib.rlSetCullFace(mode: int) None
+

Set face culling mode.

+
+ +
+
+raylib.rlSetFramebufferHeight(height: int) None
+

Set current framebuffer height.

+
+ +
+
+raylib.rlSetFramebufferWidth(width: int) None
+

Set current framebuffer width.

+
+ +
+
+raylib.rlSetLineWidth(width: float) None
+

Set the line drawing width.

+
+ +
+
+raylib.rlSetMatrixModelview(view: Matrix | list | tuple) None
+

Set a custom modelview matrix (replaces internal modelview matrix).

+
+ +
+
+raylib.rlSetMatrixProjection(proj: Matrix | list | tuple) None
+

Set a custom projection matrix (replaces internal projection matrix).

+
+ +
+
+raylib.rlSetMatrixProjectionStereo(right: Matrix | list | tuple, left: Matrix | list | tuple) None
+

Set eyes projection matrices for stereo rendering.

+
+ +
+
+raylib.rlSetMatrixViewOffsetStereo(right: Matrix | list | tuple, left: Matrix | list | tuple) None
+

Set eyes view offsets matrices for stereo rendering.

+
+ +
+
+raylib.rlSetRenderBatchActive(batch: Any | list | tuple) None
+

Set the active render batch for rlgl (NULL for default internal).

+
+ +
+
+raylib.rlSetShader(id: int, locs: Any) None
+

Set shader currently active (id and locations).

+
+ +
+
+raylib.rlSetTexture(id: int) None
+

Set current texture for render batch and check buffers limits.

+
+ +
+
+raylib.rlSetUniform(locIndex: int, value: Any, uniformType: int, count: int) None
+

Set shader value uniform.

+
+ +
+
+raylib.rlSetUniformMatrices(locIndex: int, mat: Any | list | tuple, count: int) None
+

Set shader value matrices.

+
+ +
+
+raylib.rlSetUniformMatrix(locIndex: int, mat: Matrix | list | tuple) None
+

Set shader value matrix.

+
+ +
+
+raylib.rlSetUniformSampler(locIndex: int, textureId: int) None
+

Set shader value sampler.

+
+ +
+
+raylib.rlSetVertexAttribute(index: int, compSize: int, type: int, normalized: bool, stride: int, offset: int) None
+

Set vertex attribute data configuration.

+
+ +
+
+raylib.rlSetVertexAttributeDefault(locIndex: int, value: Any, attribType: int, count: int) None
+

Set vertex attribute default value, when attribute to provided.

+
+ +
+
+raylib.rlSetVertexAttributeDivisor(index: int, divisor: int) None
+

Set vertex attribute data divisor.

+
+ +
+
+raylib.rlShaderAttributeDataType
+
+ +
+
+raylib.rlShaderLocationIndex
+
+ +
+
+raylib.rlShaderUniformDataType
+
+ +
+
+raylib.rlTexCoord2f(x: float, y: float) None
+

Define one vertex (texture coordinate) - 2 float.

+
+ +
+
+raylib.rlTextureFilter
+
+ +
+
+raylib.rlTextureParameters(id: int, param: int, value: int) None
+

Set texture parameters (filter, wrap).

+
+ +
+
+raylib.rlTraceLogLevel
+
+ +
+
+raylib.rlTranslatef(x: float, y: float, z: float) None
+

Multiply the current matrix by a translation matrix.

+
+ +
+
+raylib.rlUnloadFramebuffer(id: int) None
+

Delete framebuffer from GPU.

+
+ +
+
+raylib.rlUnloadRenderBatch(batch: rlRenderBatch | list | tuple) None
+

Unload render batch system.

+
+ +
+
+raylib.rlUnloadShaderBuffer(ssboId: int) None
+

Unload shader storage buffer object (SSBO).

+
+ +
+
+raylib.rlUnloadShaderProgram(id: int) None
+

Unload shader program.

+
+ +
+
+raylib.rlUnloadTexture(id: int) None
+

Unload texture from GPU memory.

+
+ +
+
+raylib.rlUnloadVertexArray(vaoId: int) None
+

Unload vertex array (vao).

+
+ +
+
+raylib.rlUnloadVertexBuffer(vboId: int) None
+

Unload vertex buffer object.

+
+ +
+
+raylib.rlUpdateShaderBuffer(id: int, data: Any, dataSize: int, offset: int) None
+

Update SSBO buffer data.

+
+ +
+
+raylib.rlUpdateTexture(id: int, offsetX: int, offsetY: int, width: int, height: int, format: int, data: Any) None
+

Update texture with new data on GPU.

+
+ +
+
+raylib.rlUpdateVertexBuffer(bufferId: int, data: Any, dataSize: int, offset: int) None
+

Update vertex buffer object data on GPU buffer.

+
+ +
+
+raylib.rlUpdateVertexBufferElements(id: int, data: Any, dataSize: int, offset: int) None
+

Update vertex buffer elements data on GPU buffer.

+
+ +
+
+raylib.rlVertex2f(x: float, y: float) None
+

Define one vertex (position) - 2 float.

+
+ +
+
+raylib.rlVertex2i(x: int, y: int) None
+

Define one vertex (position) - 2 int.

+
+ +
+
+raylib.rlVertex3f(x: float, y: float, z: float) None
+

Define one vertex (position) - 3 float.

+
+ +
+
+class raylib.rlVertexBuffer
+
+
+colors: bytes
+
+ +
+
+elementCount: int
+
+ +
+
+indices: Any
+
+ +
+
+normals: Any
+
+ +
+
+texcoords: Any
+
+ +
+
+vaoId: int
+
+ +
+
+vboId: list
+
+ +
+
+vertices: Any
+
+ +
+ +
+
+raylib.rlViewport(x: int, y: int, width: int, height: int) None
+

Set the viewport area.

+
+ +
+
+raylib.rlglClose() None
+

De-initialize rlgl (buffers, shaders, textures).

+
+ +
+
+raylib.rlglInit(width: int, height: int) None
+

Initialize rlgl (buffers, shaders, textures, states).

+
+ +
+
+class raylib.struct
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/search.html b/docs/search.html new file mode 100644 index 0000000..c2b2bf9 --- /dev/null +++ b/docs/search.html @@ -0,0 +1,138 @@ + + + + + + + + Search — Raylib Python documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+ +
+
+
+
+ + + + + + + + + \ 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"
  • {sub_dir}") + #- code
  • \n") + + # Close the list tag + index_file.write("
\n") + + # Write the HTML footer + index_file.write("\n\n") diff --git a/windows_is_shit.bat b/windows_is_shit.bat deleted file mode 100644 index 639ae0f..0000000 --- a/windows_is_shit.bat +++ /dev/null @@ -1,2 +0,0 @@ -"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64\cl.exe" /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Users\Richard\AppData\Local\Programs\Python\Python36\include -IC:\Users\Richard\AppData\Local\Programs\Python\Python36\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.24.28314\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" /Tc_raylib_cffi.c /Fo.\Release\_raylib_cffi.obj -"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64\link.exe" /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Users\Richard\AppData\Local\Programs\Python\Python36\libs /LIBPATH:C:\Users\Richard\AppData\Local\Programs\Python\Python36\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.24.28314\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64" raylib_static.lib gdi32.lib shell32.lib user32.lib OpenGL32.lib winmm.lib /EXPORT:PyInit__raylib_cffi .\Release\_raylib_cffi.obj /OUT:.\_raylib_cffi.cp36-win_amd64.pyd /IMPLIB:.\Release\_raylib_cffi.cp36-win_amd64.lib /NODEFAULTLIB:MSVCRTD