update docs

This commit is contained in:
richard 2021-08-27 03:38:11 +01:00
parent 13ca8d2ae8
commit b3b7688963
118 changed files with 40165 additions and 211 deletions

143
BUILDING.md Normal file
View file

@ -0,0 +1,143 @@
## Have Pip build from source
Useful if the binaries don't work on your system.
Make sure Raylib is installed and then:
pip3 install --no-binary raylib --upgrade --force-reinstall raylib
## Build from source manually
Useful if the Pip build doesn't work, or you want to contribute to the project, or you want to skip building the
static lib and just *use the dynamic binding with your own dll*.
If you do build on a new platform please
submit your binaries as a PR.
### 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 update the dynamic libs, download the official release, e.g. https://github.com/raysan5/raylib/releases/download/3.7.0/raylib-3.7.0_win64_msvc16.zip and extract `raylib.dll`
into `raylib/dynamic`. Delete the files for other platforms, unless you want them in your distribution.
To build a binary wheel distribution:
rmdir /Q /S build
pip3 install cffi
pip3 install wheel
python setup.py bdist_wheel
and 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 etc manual build
These instructions have been tested on Ubuntu 20.10 and 16.04. Mac should be very similar.
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.
sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev
cd raylib-python-cffi/raylib-c
mkdir build
cd build
cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..
sudo make install
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 ..
sudo make install
Optional: Make a patched version of raylib header. (**Not necessary** if you've already got
raylib_modifed.h from repo and haven't changed anything.)
cd ../../raylib
cp raylib.h raylib_modified.h
patch -p0 <raylib_modified.h.patch
Build
pip3 install cffi
cd ..
rm -rf build raylib/static/_raylib_cffi.*
python3 raylib/static/build.py
To update the Linux dynamic libs (names will be different on other platfroms):
rm raylib/dynamic/*.so*
cp -P /usr/local/lib/libraylib.so* raylib/dynamic/
To build a binary wheel distribution:
pip3 install wheel
python3 setup.py bdist_wheel
and 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/static/build_multi.sh
(NOTE pypi wont accept Linux packages unless they are built `--plat-name manylinux2014_x86_64` so on linux
please run `./raylib/static/build_multi_linux.sh` )
(TODO move the dynamic libs into a separate package rather than include them with every one.)
### Raspberry Pi
The integrated GPU hardware in a Raspberry Pi ("VideoCore") is rather
idiosyncratic, resulting in a complex set of software options. Probably the
most interesting two options for Raylib applications are:
1. Use the Broadcom proprietary Open GL ES 2.0 drivers, installed by Raspbian
into `/opt/vc`. These are 32-bit only, and currently X11 doesn't use these
for its acceleration, so this is most suitable for driving the entire HDMI
output from one application with minimal overhead (no X11).
2. Use the more recent open-source `vc4-fkms-v3d` kernel driver. This can run
in either 32-bit or 64-bit, and X11 can use these, so using X11 is probably
the more common choice here.
With option 2, the regular linux install instructions above should probably
work as-is.
For option 1, then also follow the above instructions, but with these
modifications:
- With `cmake`, use `cmake -DWITH_PIC=on -DSTATIC=on -DSHARED=on -DPLATFORM='Raspberry Pi' ..`
(See [here](https://github.com/electronstudio/raylib-python-cffi/issues/31#issuecomment-862078330) for a Raspberry Pi wheel)

232
README.md
View file

@ -1,16 +1,13 @@
# Python Bindings for Raylib 3.7 # Python Bindings for Raylib 3.7
New CFFI API static bindings. Faster, fewer bugs and easier to maintain than ctypes. New CFFI API static bindings. Automatically generated to be as close as possible to
original Raylib. Faster, fewer bugs and easier to maintain than ctypes.
### Advert [Full documentation](http://electronstudio.github.io/raylib-python-cffi)
[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 # Install
## Option 1: Install from Pypi (easiest but may not be up to date or be available for your platform) We distribute a statically linked binary Raylib wheel:
We distribute a statically linked binary Raylib wheel, install from Pypi.
pip3 install raylib pip3 install raylib
@ -18,222 +15,33 @@ Some platforms that _should_ be available: Windows 10 x64, MacOS 10.15 x64, Lin
If yours isn't available then pip will attempt to build from source, so you will need to have Raylib development libs installed. If yours isn't available then pip will attempt to build from source, so you will need to have Raylib development libs installed.
See here for a Raspberry Pi wheel: https://github.com/electronstudio/raylib-python-cffi/issues/31#issuecomment-862078330 [If it doesn't work, build from source](BUILDING.md)
## Option 2: Have Pip build from source
Useful if the binaries don't work on your system.
Make sure Raylib is installed and then: # How to use
pip3 install --no-binary raylib --upgrade --force-reinstall raylib There are three different ways of using this binding. You only need to pick one method, but you
can combine two methods in one program if you want to.
## Option 3: Build from source manually If you are familiar with C coding and the Raylib C library and you want to use an exact copy of
the C API, choose raylib.static.
Useful if the Pip build doesn't work, or you want to contribute to the project, or you want to skip building the If you prefer a slightly more Pythonistic API and don't mind it might be slightly slower, choose
static lib and just *use the dynamic binding with your own dll*. raylib.pyray.
If you do build on a new platform please If you insist on dynamic bindings and don't care that they are slower and less safe, choose
submit your binaries as a PR. raylib.dynamic.
These instructions have been tested on Ubuntu 20.10 and 16.04. Mac should be very similar.
Clone this repo including submodules so you get correct version of Raylib.
git clone --recurse-submodules https://github.com/electronstudio/raylib-python-cffi # RLZero
### Windows Work in progress:
Open Visual C++ command shell. [A simplified API for Raylib for use in education and to enable beginners to create 3d games](https://github.com/electronstudio/rlzero)
Fix the symlink that doesnt work on Windows # Help wanted
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 update the dynamic libs, download the official release, e.g. https://github.com/raysan5/raylib/releases/download/3.7.0/raylib-3.7.0_win64_msvc16.zip and extract `raylib.dll`
into `raylib/dynamic`. Delete the files for other platforms, unless you want them in your distribution.
To build a binary wheel distribution:
rmdir /Q /S build
pip3 install cffi
pip3 install wheel
python setup.py bdist_wheel
and 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 etc
Build and install Raylib from the raylib-c directory.
sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev
cd raylib-python-cffi/raylib-c
mkdir build
cd build
cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..
sudo make install
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 ..
sudo make install
Optional: Make a patched version of raylib header. (Not necessary if you've already got raylib_modifed.h from repo and haven't changed anything.)
cd ../../raylib
cp raylib.h raylib_modified.h
patch -p0 <raylib_modified.h.patch
Build
pip3 install cffi
cd ..
rm -rf build raylib/static/_raylib_cffi.*
python3 raylib/static/build.py
To update the Linux dynamic libs (names will be different on other platfroms):
rm raylib/dynamic/*.so*
cp -P /usr/local/lib/libraylib.so* raylib/dynamic/
To build a binary wheel distribution:
pip3 install wheel
python3 setup.py bdist_wheel
and 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/static/build_multi.sh
(NOTE pypi wont accept Linux packages unless they are built `--plat-name manylinux2014_x86_64` so on linux
please run `./raylib/static/build_multi_linux.sh` )
(TODO move the dynamic libs into a separate package rather than include them with every one.)
### Raspberry Pi
The integrated GPU hardware in a Raspberry Pi ("VideoCore") is rather
idiosyncratic, resulting in a complex set of software options. Probably the
most interesting two options for Raylib applications are:
1. Use the Broadcom proprietary Open GL ES 2.0 drivers, installed by Raspbian
into `/opt/vc`. These are 32-bit only, and currently X11 doesn't use these
for its acceleration, so this is most suitable for driving the entire HDMI
output from one application with minimal overhead (no X11).
2. Use the more recent open-source `vc4-fkms-v3d` kernel driver. This can run
in either 32-bit or 64-bit, and X11 can use these, so using X11 is probably
the more common choice here.
With option 2, the regular linux install instructions above should probably
work as-is.
For option 1, then also follow the above instructions, but with these
modifications:
- With `cmake`, use `cmake -DWITH_PIC=on -DSTATIC=on -DSHARED=on -DPLATFORM='Raspberry Pi' ..`
# 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(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.
Currently the github version includes bundled DLLs in `raylib/dynamic` but the pypi version requires a system installed Raylib.
You can put your own versions in `raylib/dynamic` if you prefer.
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.
See test_dynamic.py for how to use.
(Note 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 personally 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.)
## richlib
[A simplified API for Raylib for use in education and to enable beginners to create 3d games](https://github.com/electronstudio/richlib)
# HELP WANTED
* converting more examples from C to python * converting more examples from C to python
* testing and building on more platforms * testing and building on more platforms
@ -264,3 +72,7 @@ You can create a standalone binary using the Nuitka compiler. For example, here
pip3 install nuitka pip3 install nuitka
cd examples/textures cd examples/textures
python3 -m nuitka --onefile --linux-onefile-icon resources/wabbit_alpha.png textures_bunnymark.py 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.

18
color_test.py Normal file
View file

@ -0,0 +1,18 @@
from raylib.pyray import PyRay
pyray = 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)
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()

1
docs-src/BUILDING.md Symbolic link
View file

@ -0,0 +1 @@
../BUILDING.md

20
docs-src/Makefile Normal file
View file

@ -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)

1
docs-src/README.md Symbolic link
View file

@ -0,0 +1 @@
../README.md

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 2b2f06685939cc687c4ca7d1ce801bbc
tags: 645f666f9bcd5a90fca523b33c5a78b7

1
docs-src/_config.yml Normal file
View file

@ -0,0 +1 @@
theme: jekyll-theme-cayman

63
docs-src/conf.py Normal file
View file

@ -0,0 +1,63 @@
# 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 = '2022, 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"]
autoapi_dirs = ['../raylib']
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'

21
docs-src/dynamic.rst Normal file
View file

@ -0,0 +1,21 @@
raylib.dynamic
==============
CFFI ABI dynamic bindings exist in order to avoid the need to compile a C extension module.
Currently the github version may include bundled DLLs in ``raylib/dynamic`` but the pypi version requires a system installed Raylib.
You can put your own DLLs in ``raylib/dynamic`` if you prefer.
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.
See https://github.com/electronstudio/raylib-python-cffi/blob/master/test_static.py for how to use.
.. warning::
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 personally 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.
API is the same as raylib.static.

View file

@ -0,0 +1,836 @@
raylib.pyray.PyRay
==================
.. currentmodule:: raylib.pyray
.. autoclass:: PyRay
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~PyRay.AudioStream
~PyRay.BlendMode
~PyRay.BoneInfo
~PyRay.BoundingBox
~PyRay.Camera
~PyRay.Camera2D
~PyRay.Camera3D
~PyRay.CameraMode
~PyRay.CameraProjection
~PyRay.CharInfo
~PyRay.Color
~PyRay.ConfigFlags
~PyRay.CubemapLayout
~PyRay.Font
~PyRay.FontType
~PyRay.GamepadAxis
~PyRay.GamepadButton
~PyRay.Gestures
~PyRay.Image
~PyRay.KeyboardKey
~PyRay.Material
~PyRay.MaterialMap
~PyRay.MaterialMapIndex
~PyRay.Matrix
~PyRay.Mesh
~PyRay.Model
~PyRay.ModelAnimation
~PyRay.MouseButton
~PyRay.MouseCursor
~PyRay.Music
~PyRay.NPatchInfo
~PyRay.NPatchLayout
~PyRay.PixelFormat
~PyRay.Quaternion
~PyRay.Ray
~PyRay.RayHitInfo
~PyRay.Rectangle
~PyRay.RenderTexture
~PyRay.RenderTexture2D
~PyRay.Shader
~PyRay.ShaderLocationIndex
~PyRay.ShaderUniformDataType
~PyRay.Sound
~PyRay.Texture
~PyRay.Texture2D
~PyRay.TextureCubemap
~PyRay.TextureFilter
~PyRay.TextureWrap
~PyRay.TraceLogLevel
~PyRay.Transform
~PyRay.Vector2
~PyRay.Vector3
~PyRay.Vector4
~PyRay.VrDeviceInfo
~PyRay.VrStereoConfig
~PyRay.Wave
~PyRay.__init__
~PyRay.begin_blend_mode
~PyRay.begin_drawing
~PyRay.begin_mode_2d
~PyRay.begin_mode_3d
~PyRay.begin_scissor_mode
~PyRay.begin_shader_mode
~PyRay.begin_texture_mode
~PyRay.begin_vr_stereo_mode
~PyRay.change_directory
~PyRay.check_collision_box_sphere
~PyRay.check_collision_boxes
~PyRay.check_collision_circle_rec
~PyRay.check_collision_circles
~PyRay.check_collision_lines
~PyRay.check_collision_point_circle
~PyRay.check_collision_point_rec
~PyRay.check_collision_point_triangle
~PyRay.check_collision_ray_box
~PyRay.check_collision_ray_sphere
~PyRay.check_collision_ray_sphere_ex
~PyRay.check_collision_recs
~PyRay.check_collision_spheres
~PyRay.clear_background
~PyRay.clear_directory_files
~PyRay.clear_dropped_files
~PyRay.clear_window_state
~PyRay.close_audio_device
~PyRay.close_audio_stream
~PyRay.close_window
~PyRay.codepoint_to_utf8
~PyRay.color_alpha
~PyRay.color_alpha_blend
~PyRay.color_from_hsv
~PyRay.color_from_normalized
~PyRay.color_normalize
~PyRay.color_to_hsv
~PyRay.color_to_int
~PyRay.compress_data
~PyRay.decompress_data
~PyRay.directory_exists
~PyRay.disable_cursor
~PyRay.draw_billboard
~PyRay.draw_billboard_rec
~PyRay.draw_bounding_box
~PyRay.draw_circle
~PyRay.draw_circle_3d
~PyRay.draw_circle_gradient
~PyRay.draw_circle_lines
~PyRay.draw_circle_sector
~PyRay.draw_circle_sector_lines
~PyRay.draw_circle_v
~PyRay.draw_cube
~PyRay.draw_cube_texture
~PyRay.draw_cube_v
~PyRay.draw_cube_wires
~PyRay.draw_cube_wires_v
~PyRay.draw_cylinder
~PyRay.draw_cylinder_wires
~PyRay.draw_ellipse
~PyRay.draw_ellipse_lines
~PyRay.draw_fps
~PyRay.draw_grid
~PyRay.draw_line
~PyRay.draw_line_3d
~PyRay.draw_line_bezier
~PyRay.draw_line_bezier_quad
~PyRay.draw_line_ex
~PyRay.draw_line_strip
~PyRay.draw_line_v
~PyRay.draw_mesh
~PyRay.draw_mesh_instanced
~PyRay.draw_model
~PyRay.draw_model_ex
~PyRay.draw_model_wires
~PyRay.draw_model_wires_ex
~PyRay.draw_pixel
~PyRay.draw_pixel_v
~PyRay.draw_plane
~PyRay.draw_point_3d
~PyRay.draw_poly
~PyRay.draw_poly_lines
~PyRay.draw_ray
~PyRay.draw_rectangle
~PyRay.draw_rectangle_gradient_ex
~PyRay.draw_rectangle_gradient_h
~PyRay.draw_rectangle_gradient_v
~PyRay.draw_rectangle_lines
~PyRay.draw_rectangle_lines_ex
~PyRay.draw_rectangle_pro
~PyRay.draw_rectangle_rec
~PyRay.draw_rectangle_rounded
~PyRay.draw_rectangle_rounded_lines
~PyRay.draw_rectangle_v
~PyRay.draw_ring
~PyRay.draw_ring_lines
~PyRay.draw_sphere
~PyRay.draw_sphere_ex
~PyRay.draw_sphere_wires
~PyRay.draw_text
~PyRay.draw_text_codepoint
~PyRay.draw_text_ex
~PyRay.draw_text_rec
~PyRay.draw_text_rec_ex
~PyRay.draw_texture
~PyRay.draw_texture_ex
~PyRay.draw_texture_n_patch
~PyRay.draw_texture_poly
~PyRay.draw_texture_pro
~PyRay.draw_texture_quad
~PyRay.draw_texture_rec
~PyRay.draw_texture_tiled
~PyRay.draw_texture_v
~PyRay.draw_triangle
~PyRay.draw_triangle_3d
~PyRay.draw_triangle_fan
~PyRay.draw_triangle_lines
~PyRay.draw_triangle_strip
~PyRay.draw_triangle_strip_3d
~PyRay.enable_cursor
~PyRay.end_blend_mode
~PyRay.end_drawing
~PyRay.end_mode_2d
~PyRay.end_mode_3d
~PyRay.end_scissor_mode
~PyRay.end_shader_mode
~PyRay.end_texture_mode
~PyRay.end_vr_stereo_mode
~PyRay.export_image
~PyRay.export_image_as_code
~PyRay.export_mesh
~PyRay.export_wave
~PyRay.export_wave_as_code
~PyRay.fade
~PyRay.file_exists
~PyRay.gen_image_cellular
~PyRay.gen_image_checked
~PyRay.gen_image_color
~PyRay.gen_image_font_atlas
~PyRay.gen_image_gradient_h
~PyRay.gen_image_gradient_radial
~PyRay.gen_image_gradient_v
~PyRay.gen_image_perlin_noise
~PyRay.gen_image_white_noise
~PyRay.gen_mesh_cube
~PyRay.gen_mesh_cubicmap
~PyRay.gen_mesh_cylinder
~PyRay.gen_mesh_heightmap
~PyRay.gen_mesh_hemi_sphere
~PyRay.gen_mesh_knot
~PyRay.gen_mesh_plane
~PyRay.gen_mesh_poly
~PyRay.gen_mesh_sphere
~PyRay.gen_mesh_torus
~PyRay.gen_texture_mipmaps
~PyRay.get_camera_matrix
~PyRay.get_camera_matrix_2d
~PyRay.get_char_pressed
~PyRay.get_clipboard_text
~PyRay.get_codepoints
~PyRay.get_codepoints_count
~PyRay.get_collision_ray_ground
~PyRay.get_collision_ray_mesh
~PyRay.get_collision_ray_model
~PyRay.get_collision_ray_triangle
~PyRay.get_collision_rec
~PyRay.get_color
~PyRay.get_current_monitor
~PyRay.get_directory_files
~PyRay.get_directory_path
~PyRay.get_dropped_files
~PyRay.get_file_extension
~PyRay.get_file_mod_time
~PyRay.get_file_name
~PyRay.get_file_name_without_ext
~PyRay.get_font_default
~PyRay.get_fps
~PyRay.get_frame_time
~PyRay.get_gamepad_axis_count
~PyRay.get_gamepad_axis_movement
~PyRay.get_gamepad_button_pressed
~PyRay.get_gamepad_name
~PyRay.get_gesture_detected
~PyRay.get_gesture_drag_angle
~PyRay.get_gesture_drag_vector
~PyRay.get_gesture_hold_duration
~PyRay.get_gesture_pinch_angle
~PyRay.get_gesture_pinch_vector
~PyRay.get_glyph_index
~PyRay.get_image_alpha_border
~PyRay.get_key_pressed
~PyRay.get_monitor_count
~PyRay.get_monitor_height
~PyRay.get_monitor_name
~PyRay.get_monitor_physical_height
~PyRay.get_monitor_physical_width
~PyRay.get_monitor_position
~PyRay.get_monitor_refresh_rate
~PyRay.get_monitor_width
~PyRay.get_mouse_position
~PyRay.get_mouse_ray
~PyRay.get_mouse_wheel_move
~PyRay.get_mouse_x
~PyRay.get_mouse_y
~PyRay.get_music_time_length
~PyRay.get_music_time_played
~PyRay.get_next_codepoint
~PyRay.get_pixel_color
~PyRay.get_pixel_data_size
~PyRay.get_prev_directory_path
~PyRay.get_random_value
~PyRay.get_screen_data
~PyRay.get_screen_height
~PyRay.get_screen_to_world_2d
~PyRay.get_screen_width
~PyRay.get_shader_location
~PyRay.get_shader_location_attrib
~PyRay.get_sounds_playing
~PyRay.get_texture_data
~PyRay.get_time
~PyRay.get_touch_points_count
~PyRay.get_touch_position
~PyRay.get_touch_x
~PyRay.get_touch_y
~PyRay.get_window_handle
~PyRay.get_window_position
~PyRay.get_window_scale_dpi
~PyRay.get_working_directory
~PyRay.get_world_to_screen
~PyRay.get_world_to_screen_2d
~PyRay.get_world_to_screen_ex
~PyRay.hide_cursor
~PyRay.image_alpha_clear
~PyRay.image_alpha_crop
~PyRay.image_alpha_mask
~PyRay.image_alpha_premultiply
~PyRay.image_clear_background
~PyRay.image_color_brightness
~PyRay.image_color_contrast
~PyRay.image_color_grayscale
~PyRay.image_color_invert
~PyRay.image_color_replace
~PyRay.image_color_tint
~PyRay.image_copy
~PyRay.image_crop
~PyRay.image_dither
~PyRay.image_draw
~PyRay.image_draw_circle
~PyRay.image_draw_circle_v
~PyRay.image_draw_line
~PyRay.image_draw_line_v
~PyRay.image_draw_pixel
~PyRay.image_draw_pixel_v
~PyRay.image_draw_rectangle
~PyRay.image_draw_rectangle_lines
~PyRay.image_draw_rectangle_rec
~PyRay.image_draw_rectangle_v
~PyRay.image_draw_text
~PyRay.image_draw_text_ex
~PyRay.image_flip_horizontal
~PyRay.image_flip_vertical
~PyRay.image_format
~PyRay.image_from_image
~PyRay.image_mipmaps
~PyRay.image_resize
~PyRay.image_resize_canvas
~PyRay.image_resize_nn
~PyRay.image_rotate_ccw
~PyRay.image_rotate_cw
~PyRay.image_text
~PyRay.image_text_ex
~PyRay.image_to_pot
~PyRay.init_audio_device
~PyRay.init_audio_stream
~PyRay.init_window
~PyRay.is_audio_device_ready
~PyRay.is_audio_stream_playing
~PyRay.is_audio_stream_processed
~PyRay.is_cursor_hidden
~PyRay.is_cursor_on_screen
~PyRay.is_file_dropped
~PyRay.is_file_extension
~PyRay.is_gamepad_available
~PyRay.is_gamepad_button_down
~PyRay.is_gamepad_button_pressed
~PyRay.is_gamepad_button_released
~PyRay.is_gamepad_button_up
~PyRay.is_gamepad_name
~PyRay.is_gesture_detected
~PyRay.is_key_down
~PyRay.is_key_pressed
~PyRay.is_key_released
~PyRay.is_key_up
~PyRay.is_model_animation_valid
~PyRay.is_mouse_button_down
~PyRay.is_mouse_button_pressed
~PyRay.is_mouse_button_released
~PyRay.is_mouse_button_up
~PyRay.is_music_playing
~PyRay.is_sound_playing
~PyRay.is_window_focused
~PyRay.is_window_fullscreen
~PyRay.is_window_hidden
~PyRay.is_window_maximized
~PyRay.is_window_minimized
~PyRay.is_window_ready
~PyRay.is_window_resized
~PyRay.is_window_state
~PyRay.load_file_data
~PyRay.load_file_text
~PyRay.load_font
~PyRay.load_font_data
~PyRay.load_font_ex
~PyRay.load_font_from_image
~PyRay.load_font_from_memory
~PyRay.load_image
~PyRay.load_image_anim
~PyRay.load_image_colors
~PyRay.load_image_from_memory
~PyRay.load_image_palette
~PyRay.load_image_raw
~PyRay.load_material_default
~PyRay.load_materials
~PyRay.load_model
~PyRay.load_model_animations
~PyRay.load_model_from_mesh
~PyRay.load_music_stream
~PyRay.load_music_stream_from_memory
~PyRay.load_render_texture
~PyRay.load_shader
~PyRay.load_shader_from_memory
~PyRay.load_sound
~PyRay.load_sound_from_wave
~PyRay.load_storage_value
~PyRay.load_texture
~PyRay.load_texture_cubemap
~PyRay.load_texture_from_image
~PyRay.load_vr_stereo_config
~PyRay.load_wave
~PyRay.load_wave_from_memory
~PyRay.load_wave_samples
~PyRay.maximize_window
~PyRay.measure_text
~PyRay.measure_text_ex
~PyRay.mem_alloc
~PyRay.mem_free
~PyRay.mem_realloc
~PyRay.mesh_binormals
~PyRay.mesh_bounding_box
~PyRay.mesh_tangents
~PyRay.minimize_window
~PyRay.open_url
~PyRay.pause_audio_stream
~PyRay.pause_music_stream
~PyRay.pause_sound
~PyRay.play_audio_stream
~PyRay.play_music_stream
~PyRay.play_sound
~PyRay.play_sound_multi
~PyRay.pointer
~PyRay.rAudioBuffer
~PyRay.restore_window
~PyRay.resume_audio_stream
~PyRay.resume_music_stream
~PyRay.resume_sound
~PyRay.save_file_data
~PyRay.save_file_text
~PyRay.save_storage_value
~PyRay.set_audio_stream_buffer_size_default
~PyRay.set_audio_stream_pitch
~PyRay.set_audio_stream_volume
~PyRay.set_camera_alt_control
~PyRay.set_camera_mode
~PyRay.set_camera_move_controls
~PyRay.set_camera_pan_control
~PyRay.set_camera_smooth_zoom_control
~PyRay.set_clipboard_text
~PyRay.set_config_flags
~PyRay.set_exit_key
~PyRay.set_gamepad_mappings
~PyRay.set_gestures_enabled
~PyRay.set_master_volume
~PyRay.set_material_texture
~PyRay.set_model_mesh_material
~PyRay.set_mouse_cursor
~PyRay.set_mouse_offset
~PyRay.set_mouse_position
~PyRay.set_mouse_scale
~PyRay.set_music_pitch
~PyRay.set_music_volume
~PyRay.set_pixel_color
~PyRay.set_shader_value
~PyRay.set_shader_value_matrix
~PyRay.set_shader_value_texture
~PyRay.set_shader_value_v
~PyRay.set_shapes_texture
~PyRay.set_sound_pitch
~PyRay.set_sound_volume
~PyRay.set_target_fps
~PyRay.set_texture_filter
~PyRay.set_texture_wrap
~PyRay.set_trace_log_level
~PyRay.set_window_icon
~PyRay.set_window_min_size
~PyRay.set_window_monitor
~PyRay.set_window_position
~PyRay.set_window_size
~PyRay.set_window_state
~PyRay.set_window_title
~PyRay.show_cursor
~PyRay.stop_audio_stream
~PyRay.stop_music_stream
~PyRay.stop_sound
~PyRay.stop_sound_multi
~PyRay.take_screenshot
~PyRay.text_append
~PyRay.text_copy
~PyRay.text_find_index
~PyRay.text_insert
~PyRay.text_is_equal
~PyRay.text_join
~PyRay.text_length
~PyRay.text_replace
~PyRay.text_split
~PyRay.text_subtext
~PyRay.text_to_integer
~PyRay.text_to_lower
~PyRay.text_to_pascal
~PyRay.text_to_upper
~PyRay.text_to_utf8
~PyRay.toggle_fullscreen
~PyRay.unload_file_data
~PyRay.unload_file_text
~PyRay.unload_font
~PyRay.unload_font_data
~PyRay.unload_image
~PyRay.unload_image_colors
~PyRay.unload_image_palette
~PyRay.unload_material
~PyRay.unload_mesh
~PyRay.unload_model
~PyRay.unload_model_animation
~PyRay.unload_model_animations
~PyRay.unload_model_keep_meshes
~PyRay.unload_music_stream
~PyRay.unload_render_texture
~PyRay.unload_shader
~PyRay.unload_sound
~PyRay.unload_texture
~PyRay.unload_vr_stereo_config
~PyRay.unload_wave
~PyRay.unload_wave_samples
~PyRay.update_audio_stream
~PyRay.update_camera
~PyRay.update_mesh_buffer
~PyRay.update_model_animation
~PyRay.update_music_stream
~PyRay.update_sound
~PyRay.update_texture
~PyRay.update_texture_rec
~PyRay.upload_mesh
~PyRay.wave_copy
~PyRay.wave_crop
~PyRay.wave_format
~PyRay.window_should_close
.. rubric:: Attributes
.. autosummary::
~PyRay.BLEND_ADDITIVE
~PyRay.BLEND_ADD_COLORS
~PyRay.BLEND_ALPHA
~PyRay.BLEND_CUSTOM
~PyRay.BLEND_MULTIPLIED
~PyRay.BLEND_SUBTRACT_COLORS
~PyRay.CAMERA_CUSTOM
~PyRay.CAMERA_FIRST_PERSON
~PyRay.CAMERA_FREE
~PyRay.CAMERA_ORBITAL
~PyRay.CAMERA_ORTHOGRAPHIC
~PyRay.CAMERA_PERSPECTIVE
~PyRay.CAMERA_THIRD_PERSON
~PyRay.CUBEMAP_LAYOUT_AUTO_DETECT
~PyRay.CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE
~PyRay.CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR
~PyRay.CUBEMAP_LAYOUT_LINE_HORIZONTAL
~PyRay.CUBEMAP_LAYOUT_LINE_VERTICAL
~PyRay.CUBEMAP_LAYOUT_PANORAMA
~PyRay.FLAG_FULLSCREEN_MODE
~PyRay.FLAG_INTERLACED_HINT
~PyRay.FLAG_MSAA_4X_HINT
~PyRay.FLAG_VSYNC_HINT
~PyRay.FLAG_WINDOW_ALWAYS_RUN
~PyRay.FLAG_WINDOW_HIDDEN
~PyRay.FLAG_WINDOW_HIGHDPI
~PyRay.FLAG_WINDOW_MAXIMIZED
~PyRay.FLAG_WINDOW_MINIMIZED
~PyRay.FLAG_WINDOW_RESIZABLE
~PyRay.FLAG_WINDOW_TOPMOST
~PyRay.FLAG_WINDOW_TRANSPARENT
~PyRay.FLAG_WINDOW_UNDECORATED
~PyRay.FLAG_WINDOW_UNFOCUSED
~PyRay.FONT_BITMAP
~PyRay.FONT_DEFAULT
~PyRay.FONT_SDF
~PyRay.GAMEPAD_AXIS_LEFT_TRIGGER
~PyRay.GAMEPAD_AXIS_LEFT_X
~PyRay.GAMEPAD_AXIS_LEFT_Y
~PyRay.GAMEPAD_AXIS_RIGHT_TRIGGER
~PyRay.GAMEPAD_AXIS_RIGHT_X
~PyRay.GAMEPAD_AXIS_RIGHT_Y
~PyRay.GAMEPAD_BUTTON_LEFT_FACE_DOWN
~PyRay.GAMEPAD_BUTTON_LEFT_FACE_LEFT
~PyRay.GAMEPAD_BUTTON_LEFT_FACE_RIGHT
~PyRay.GAMEPAD_BUTTON_LEFT_FACE_UP
~PyRay.GAMEPAD_BUTTON_LEFT_THUMB
~PyRay.GAMEPAD_BUTTON_LEFT_TRIGGER_1
~PyRay.GAMEPAD_BUTTON_LEFT_TRIGGER_2
~PyRay.GAMEPAD_BUTTON_MIDDLE
~PyRay.GAMEPAD_BUTTON_MIDDLE_LEFT
~PyRay.GAMEPAD_BUTTON_MIDDLE_RIGHT
~PyRay.GAMEPAD_BUTTON_RIGHT_FACE_DOWN
~PyRay.GAMEPAD_BUTTON_RIGHT_FACE_LEFT
~PyRay.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT
~PyRay.GAMEPAD_BUTTON_RIGHT_FACE_UP
~PyRay.GAMEPAD_BUTTON_RIGHT_THUMB
~PyRay.GAMEPAD_BUTTON_RIGHT_TRIGGER_1
~PyRay.GAMEPAD_BUTTON_RIGHT_TRIGGER_2
~PyRay.GAMEPAD_BUTTON_UNKNOWN
~PyRay.GESTURE_DOUBLETAP
~PyRay.GESTURE_DRAG
~PyRay.GESTURE_HOLD
~PyRay.GESTURE_NONE
~PyRay.GESTURE_PINCH_IN
~PyRay.GESTURE_PINCH_OUT
~PyRay.GESTURE_SWIPE_DOWN
~PyRay.GESTURE_SWIPE_LEFT
~PyRay.GESTURE_SWIPE_RIGHT
~PyRay.GESTURE_SWIPE_UP
~PyRay.GESTURE_TAP
~PyRay.KEY_A
~PyRay.KEY_APOSTROPHE
~PyRay.KEY_B
~PyRay.KEY_BACK
~PyRay.KEY_BACKSLASH
~PyRay.KEY_BACKSPACE
~PyRay.KEY_C
~PyRay.KEY_CAPS_LOCK
~PyRay.KEY_COMMA
~PyRay.KEY_D
~PyRay.KEY_DELETE
~PyRay.KEY_DOWN
~PyRay.KEY_E
~PyRay.KEY_EIGHT
~PyRay.KEY_END
~PyRay.KEY_ENTER
~PyRay.KEY_EQUAL
~PyRay.KEY_ESCAPE
~PyRay.KEY_F
~PyRay.KEY_F1
~PyRay.KEY_F10
~PyRay.KEY_F11
~PyRay.KEY_F12
~PyRay.KEY_F2
~PyRay.KEY_F3
~PyRay.KEY_F4
~PyRay.KEY_F5
~PyRay.KEY_F6
~PyRay.KEY_F7
~PyRay.KEY_F8
~PyRay.KEY_F9
~PyRay.KEY_FIVE
~PyRay.KEY_FOUR
~PyRay.KEY_G
~PyRay.KEY_GRAVE
~PyRay.KEY_H
~PyRay.KEY_HOME
~PyRay.KEY_I
~PyRay.KEY_INSERT
~PyRay.KEY_J
~PyRay.KEY_K
~PyRay.KEY_KB_MENU
~PyRay.KEY_KP_0
~PyRay.KEY_KP_1
~PyRay.KEY_KP_2
~PyRay.KEY_KP_3
~PyRay.KEY_KP_4
~PyRay.KEY_KP_5
~PyRay.KEY_KP_6
~PyRay.KEY_KP_7
~PyRay.KEY_KP_8
~PyRay.KEY_KP_9
~PyRay.KEY_KP_ADD
~PyRay.KEY_KP_DECIMAL
~PyRay.KEY_KP_DIVIDE
~PyRay.KEY_KP_ENTER
~PyRay.KEY_KP_EQUAL
~PyRay.KEY_KP_MULTIPLY
~PyRay.KEY_KP_SUBTRACT
~PyRay.KEY_L
~PyRay.KEY_LEFT
~PyRay.KEY_LEFT_ALT
~PyRay.KEY_LEFT_BRACKET
~PyRay.KEY_LEFT_CONTROL
~PyRay.KEY_LEFT_SHIFT
~PyRay.KEY_LEFT_SUPER
~PyRay.KEY_M
~PyRay.KEY_MENU
~PyRay.KEY_MINUS
~PyRay.KEY_N
~PyRay.KEY_NINE
~PyRay.KEY_NULL
~PyRay.KEY_NUM_LOCK
~PyRay.KEY_O
~PyRay.KEY_ONE
~PyRay.KEY_P
~PyRay.KEY_PAGE_DOWN
~PyRay.KEY_PAGE_UP
~PyRay.KEY_PAUSE
~PyRay.KEY_PERIOD
~PyRay.KEY_PRINT_SCREEN
~PyRay.KEY_Q
~PyRay.KEY_R
~PyRay.KEY_RIGHT
~PyRay.KEY_RIGHT_ALT
~PyRay.KEY_RIGHT_BRACKET
~PyRay.KEY_RIGHT_CONTROL
~PyRay.KEY_RIGHT_SHIFT
~PyRay.KEY_RIGHT_SUPER
~PyRay.KEY_S
~PyRay.KEY_SCROLL_LOCK
~PyRay.KEY_SEMICOLON
~PyRay.KEY_SEVEN
~PyRay.KEY_SIX
~PyRay.KEY_SLASH
~PyRay.KEY_SPACE
~PyRay.KEY_T
~PyRay.KEY_TAB
~PyRay.KEY_THREE
~PyRay.KEY_TWO
~PyRay.KEY_U
~PyRay.KEY_UP
~PyRay.KEY_V
~PyRay.KEY_VOLUME_DOWN
~PyRay.KEY_VOLUME_UP
~PyRay.KEY_W
~PyRay.KEY_X
~PyRay.KEY_Y
~PyRay.KEY_Z
~PyRay.KEY_ZERO
~PyRay.LOG_ALL
~PyRay.LOG_DEBUG
~PyRay.LOG_ERROR
~PyRay.LOG_FATAL
~PyRay.LOG_INFO
~PyRay.LOG_NONE
~PyRay.LOG_TRACE
~PyRay.LOG_WARNING
~PyRay.MATERIAL_MAP_ALBEDO
~PyRay.MATERIAL_MAP_BRDG
~PyRay.MATERIAL_MAP_CUBEMAP
~PyRay.MATERIAL_MAP_DIFFUSE
~PyRay.MATERIAL_MAP_EMISSION
~PyRay.MATERIAL_MAP_HEIGHT
~PyRay.MATERIAL_MAP_IRRADIANCE
~PyRay.MATERIAL_MAP_METALNESS
~PyRay.MATERIAL_MAP_NORMAL
~PyRay.MATERIAL_MAP_OCCLUSION
~PyRay.MATERIAL_MAP_PREFILTER
~PyRay.MATERIAL_MAP_ROUGHNESS
~PyRay.MATERIAL_MAP_SPECULAR
~PyRay.MOUSE_CURSOR_ARROW
~PyRay.MOUSE_CURSOR_CROSSHAIR
~PyRay.MOUSE_CURSOR_DEFAULT
~PyRay.MOUSE_CURSOR_IBEAM
~PyRay.MOUSE_CURSOR_NOT_ALLOWED
~PyRay.MOUSE_CURSOR_POINTING_HAND
~PyRay.MOUSE_CURSOR_RESIZE_ALL
~PyRay.MOUSE_CURSOR_RESIZE_EW
~PyRay.MOUSE_CURSOR_RESIZE_NESW
~PyRay.MOUSE_CURSOR_RESIZE_NS
~PyRay.MOUSE_CURSOR_RESIZE_NWSE
~PyRay.MOUSE_LEFT_BUTTON
~PyRay.MOUSE_MIDDLE_BUTTON
~PyRay.MOUSE_RIGHT_BUTTON
~PyRay.NPATCH_NINE_PATCH
~PyRay.NPATCH_THREE_PATCH_HORIZONTAL
~PyRay.NPATCH_THREE_PATCH_VERTICAL
~PyRay.PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_DXT1_RGB
~PyRay.PIXELFORMAT_COMPRESSED_DXT1_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_DXT3_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_DXT5_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_ETC1_RGB
~PyRay.PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_ETC2_RGB
~PyRay.PIXELFORMAT_COMPRESSED_PVRT_RGB
~PyRay.PIXELFORMAT_COMPRESSED_PVRT_RGBA
~PyRay.PIXELFORMAT_UNCOMPRESSED_GRAYSCALE
~PyRay.PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA
~PyRay.PIXELFORMAT_UNCOMPRESSED_R32
~PyRay.PIXELFORMAT_UNCOMPRESSED_R32G32B32
~PyRay.PIXELFORMAT_UNCOMPRESSED_R32G32B32A32
~PyRay.PIXELFORMAT_UNCOMPRESSED_R4G4B4A4
~PyRay.PIXELFORMAT_UNCOMPRESSED_R5G5B5A1
~PyRay.PIXELFORMAT_UNCOMPRESSED_R5G6B5
~PyRay.PIXELFORMAT_UNCOMPRESSED_R8G8B8
~PyRay.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8
~PyRay.SHADER_LOC_COLOR_AMBIENT
~PyRay.SHADER_LOC_COLOR_DIFFUSE
~PyRay.SHADER_LOC_COLOR_SPECULAR
~PyRay.SHADER_LOC_MAP_ALBEDO
~PyRay.SHADER_LOC_MAP_BRDF
~PyRay.SHADER_LOC_MAP_CUBEMAP
~PyRay.SHADER_LOC_MAP_DIFFUSE
~PyRay.SHADER_LOC_MAP_EMISSION
~PyRay.SHADER_LOC_MAP_HEIGHT
~PyRay.SHADER_LOC_MAP_IRRADIANCE
~PyRay.SHADER_LOC_MAP_METALNESS
~PyRay.SHADER_LOC_MAP_NORMAL
~PyRay.SHADER_LOC_MAP_OCCLUSION
~PyRay.SHADER_LOC_MAP_PREFILTER
~PyRay.SHADER_LOC_MAP_ROUGHNESS
~PyRay.SHADER_LOC_MAP_SPECULAR
~PyRay.SHADER_LOC_MATRIX_MODEL
~PyRay.SHADER_LOC_MATRIX_MVP
~PyRay.SHADER_LOC_MATRIX_NORMAL
~PyRay.SHADER_LOC_MATRIX_PROJECTION
~PyRay.SHADER_LOC_MATRIX_VIEW
~PyRay.SHADER_LOC_VECTOR_VIEW
~PyRay.SHADER_LOC_VERTEX_COLOR
~PyRay.SHADER_LOC_VERTEX_NORMAL
~PyRay.SHADER_LOC_VERTEX_POSITION
~PyRay.SHADER_LOC_VERTEX_TANGENT
~PyRay.SHADER_LOC_VERTEX_TEXCOORD01
~PyRay.SHADER_LOC_VERTEX_TEXCOORD02
~PyRay.SHADER_UNIFORM_FLOAT
~PyRay.SHADER_UNIFORM_INT
~PyRay.SHADER_UNIFORM_IVEC2
~PyRay.SHADER_UNIFORM_IVEC3
~PyRay.SHADER_UNIFORM_IVEC4
~PyRay.SHADER_UNIFORM_SAMPLER2D
~PyRay.SHADER_UNIFORM_VEC2
~PyRay.SHADER_UNIFORM_VEC3
~PyRay.SHADER_UNIFORM_VEC4
~PyRay.TEXTURE_FILTER_ANISOTROPIC_16X
~PyRay.TEXTURE_FILTER_ANISOTROPIC_4X
~PyRay.TEXTURE_FILTER_ANISOTROPIC_8X
~PyRay.TEXTURE_FILTER_BILINEAR
~PyRay.TEXTURE_FILTER_POINT
~PyRay.TEXTURE_FILTER_TRILINEAR
~PyRay.TEXTURE_WRAP_CLAMP
~PyRay.TEXTURE_WRAP_MIRROR_CLAMP
~PyRay.TEXTURE_WRAP_MIRROR_REPEAT
~PyRay.TEXTURE_WRAP_REPEAT
~PyRay.TextFormat
~PyRay.TraceLog

22
docs-src/index.rst Normal file
View file

@ -0,0 +1,22 @@
.. 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
* :ref:`search`

35
docs-src/make.bat Normal file
View file

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

57
docs-src/pyray.rst Normal file
View file

@ -0,0 +1,57 @@
raylib.pyray
============
.. comment::
Link to API reference:
toctree::
:maxdepth: 1
autoapi/raylib/pyray/index
This is a wrapper around the static bindings.
The API is *still the same as Raylib*, so you should still reply on `the official Raylib docs <https://www.raylib.com/cheatsheet/cheatsheet.html>`_, except:
* the function names are in **snake_case**.
* Some string and pointer conversions are handled automatically.
* There are some helper functions to create structures.
Example program:
.. code-block::
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(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()
See also https://github.com/electronstudio/raylib-python-cffi/blob/master/test_pyray.py
API reference
-------------
.. autoapimodule:: raylib.pyray
:members:
:undoc-members:

46
docs-src/raylib.rst Normal file
View file

@ -0,0 +1,46 @@
raylib.static
=============
The goal of raylib.static is make usage as similar to the original C as CFFI will allow. The `example programs <https://github.com/electronstudio/raylib-python-cffi/tree/master/examples>`_
are very, very similar to the C originals.
Example program:
.. code-block::
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()
See also https://github.com/electronstudio/raylib-python-cffi/blob/master/test_static.py
Also useful to read whenever you need to convert stuff between C and Python: https://cffi.readthedocs.io
Your **primary reference** should always be `the official Raylib docs <https://www.raylib.com/cheatsheet/cheatsheet.html>`_
However, here is a list of available functions:
Functions API reference
-----------------------
.. automodule:: raylib.static.rl
:members:
:undoc-members:

View file

@ -0,0 +1 @@
myst_parser

346
docs/BUILDING.html Normal file
View file

@ -0,0 +1,346 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Have Pip build from source &mdash; Raylib Python documentation</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/graphviz.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> Raylib Python
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="README.html">Python Bindings for Raylib 3.7</a></li>
<li class="toctree-l1"><a class="reference internal" href="README.html#install">Install</a></li>
<li class="toctree-l1"><a class="reference internal" href="README.html#how-to-use">How to use</a></li>
<li class="toctree-l1"><a class="reference internal" href="README.html#rlzero">RLZero</a></li>
<li class="toctree-l1"><a class="reference internal" href="README.html#help-wanted">Help wanted</a></li>
<li class="toctree-l1"><a class="reference internal" href="README.html#performance">Performance</a></li>
<li class="toctree-l1"><a class="reference internal" href="README.html#packaging-your-app">Packaging your app</a></li>
<li class="toctree-l1"><a class="reference internal" href="README.html#advert">Advert</a></li>
<li class="toctree-l1"><a class="reference internal" href="pyray.html">raylib.pyray</a></li>
<li class="toctree-l1"><a class="reference internal" href="raylib.html">raylib.static</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Raylib Python</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Have Pip build from source</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/BUILDING.md.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="have-pip-build-from-source">
<h1>Have Pip build from source<a class="headerlink" href="#have-pip-build-from-source" title="Permalink to this headline"></a></h1>
<p>Useful if the binaries dont work on your system.</p>
<p>Make sure Raylib is installed and then:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip3 install --no-binary raylib --upgrade --force-reinstall raylib
</pre></div>
</div>
</div>
<div class="section" id="build-from-source-manually">
<h1>Build from source manually<a class="headerlink" href="#build-from-source-manually" title="Permalink to this headline"></a></h1>
<p>Useful if the Pip build doesnt work, or you want to contribute to the project, or you want to skip building the
static lib and just <em>use the dynamic binding with your own dll</em>.</p>
<p>If you do build on a new platform please
submit your binaries as a PR.</p>
<div class="section" id="windows-manual-build">
<h2>Windows manual build<a class="headerlink" href="#windows-manual-build" title="Permalink to this headline"></a></h2>
<p>Clone this repo including submodules so you get correct version of Raylib.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git clone --recurse-submodules https://github.com/electronstudio/raylib-python-cffi
</pre></div>
</div>
<p>Open Visual C++ command shell.</p>
<p>Fix the symlink that doesnt work on Windows</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cd raylib-python-cffi
copy raylib-c\src\raylib.h raylib\raylib.h
</pre></div>
</div>
<p>Build and install Raylib from the raylib-c directory.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>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 ..\..
</pre></div>
</div>
<p>To update the dynamic libs, download the official release, e.g. https://github.com/raysan5/raylib/releases/download/3.7.0/raylib-3.7.0_win64_msvc16.zip and extract <code class="docutils literal notranslate"><span class="pre">raylib.dll</span></code>
into <code class="docutils literal notranslate"><span class="pre">raylib/dynamic</span></code>. Delete the files for other platforms, unless you want them in your distribution.</p>
<p>To build a binary wheel distribution:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>rmdir /Q /S build
pip3 install cffi
pip3 install wheel
python setup.py bdist_wheel
</pre></div>
</div>
<p>and install it:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip3 install dist\raylib-3.7.0-cp37-cp37m-win_amd64.whl
</pre></div>
</div>
<p>(Note: your wheels filename will probably be different than the one here.)</p>
</div>
<div class="section" id="linux-etc-manual-build">
<h2>Linux etc manual build<a class="headerlink" href="#linux-etc-manual-build" title="Permalink to this headline"></a></h2>
<p>These instructions have been tested on Ubuntu 20.10 and 16.04. Mac should be very similar.</p>
<p>Clone this repo including submodules so you get correct version of Raylib.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git clone --recurse-submodules https://github.com/electronstudio/raylib-python-cffi
</pre></div>
</div>
<p>Build and install Raylib from the raylib-c directory.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev
cd raylib-python-cffi/raylib-c
mkdir build
cd build
cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..
sudo make install
</pre></div>
</div>
<p>Optional: Build the Raylib shared libs, if you plan to use <code class="docutils literal notranslate"><span class="pre">raylib.dynamic</span></code> binding.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>rm -rf *
cmake -DWITH_PIC=on -DBUILD_SHARED_LIBS=on -DCMAKE_BUILD_TYPE=Release ..
sudo make install
</pre></div>
</div>
<p>Optional: Make a patched version of raylib header. (<strong>Not necessary</strong> if youve already got
raylib_modifed.h from repo and havent changed anything.)</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cd ../../raylib
cp raylib.h raylib_modified.h
patch -p0 &lt;raylib_modified.h.patch
</pre></div>
</div>
<p>Build</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip3 install cffi
cd ..
rm -rf build raylib/static/_raylib_cffi.*
python3 raylib/static/build.py
</pre></div>
</div>
<p>To update the Linux dynamic libs (names will be different on other platfroms):</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>rm raylib/dynamic/*.so*
cp -P /usr/local/lib/libraylib.so* raylib/dynamic/
</pre></div>
</div>
<p>To build a binary wheel distribution:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip3 install wheel
python3 setup.py bdist_wheel
</pre></div>
</div>
<p>and install it:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip3 install dist/raylib*.whl
</pre></div>
</div>
<p>To build a complete set of libs for Python 3.6, 3.7, 3.8 and 3.9:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>./raylib/static/build_multi.sh
</pre></div>
</div>
<p>(NOTE pypi wont accept Linux packages unless they are built <code class="docutils literal notranslate"><span class="pre">--plat-name</span> <span class="pre">manylinux2014_x86_64</span></code> so on linux
please run <code class="docutils literal notranslate"><span class="pre">./raylib/static/build_multi_linux.sh</span></code> )</p>
<p>(TODO move the dynamic libs into a separate package rather than include them with every one.)</p>
</div>
<div class="section" id="raspberry-pi">
<h2>Raspberry Pi<a class="headerlink" href="#raspberry-pi" title="Permalink to this headline"></a></h2>
<p>The integrated GPU hardware in a Raspberry Pi (“VideoCore”) is rather
idiosyncratic, resulting in a complex set of software options. Probably the
most interesting two options for Raylib applications are:</p>
<ol class="simple">
<li><p>Use the Broadcom proprietary Open GL ES 2.0 drivers, installed by Raspbian
into <code class="docutils literal notranslate"><span class="pre">/opt/vc</span></code>. These are 32-bit only, and currently X11 doesnt use these
for its acceleration, so this is most suitable for driving the entire HDMI
output from one application with minimal overhead (no X11).</p></li>
<li><p>Use the more recent open-source <code class="docutils literal notranslate"><span class="pre">vc4-fkms-v3d</span></code> kernel driver. This can run
in either 32-bit or 64-bit, and X11 can use these, so using X11 is probably
the more common choice here.</p></li>
</ol>
<p>With option 2, the regular linux install instructions above should probably
work as-is.</p>
<p>For option 1, then also follow the above instructions, but with these
modifications:</p>
<ul class="simple">
<li><p>With <code class="docutils literal notranslate"><span class="pre">cmake</span></code>, use <code class="docutils literal notranslate"><span class="pre">cmake</span> <span class="pre">-DWITH_PIC=on</span> <span class="pre">-DSTATIC=on</span> <span class="pre">-DSHARED=on</span> <span class="pre">-DPLATFORM='Raspberry</span> <span class="pre">Pi'</span> <span class="pre">..</span></code></p></li>
</ul>
<p>(See <a class="reference external" href="https://github.com/electronstudio/raylib-python-cffi/issues/31#issuecomment-862078330">here</a> for a Raspberry Pi wheel)</p>
</div>
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2022, Richard Smith.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

320
docs/README.html Normal file
View file

@ -0,0 +1,320 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Python Bindings for Raylib 3.7 &mdash; Raylib Python documentation</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/graphviz.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="raylib.pyray" href="pyray.html" />
<link rel="prev" title="Raylib Python" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> Raylib Python
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Python Bindings for Raylib 3.7</a></li>
<li class="toctree-l1"><a class="reference internal" href="#install">Install</a></li>
<li class="toctree-l1"><a class="reference internal" href="#how-to-use">How to use</a></li>
<li class="toctree-l1"><a class="reference internal" href="#rlzero">RLZero</a></li>
<li class="toctree-l1"><a class="reference internal" href="#help-wanted">Help wanted</a></li>
<li class="toctree-l1"><a class="reference internal" href="#performance">Performance</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#bunnymark">Bunnymark</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#packaging-your-app">Packaging your app</a></li>
<li class="toctree-l1"><a class="reference internal" href="#advert">Advert</a></li>
<li class="toctree-l1"><a class="reference internal" href="pyray.html">raylib.pyray</a></li>
<li class="toctree-l1"><a class="reference internal" href="raylib.html">raylib.static</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Raylib Python</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Python Bindings for Raylib 3.7</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/README.md.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="tex2jax_ignore mathjax_ignore section" id="python-bindings-for-raylib-3-7">
<h1>Python Bindings for Raylib 3.7<a class="headerlink" href="#python-bindings-for-raylib-3-7" title="Permalink to this headline"></a></h1>
<p>New CFFI API static bindings. Automatically generated to be as close as possible to
original Raylib. Faster, fewer bugs and easier to maintain than ctypes.</p>
<p><a class="reference external" href="http://electronstudio.github.io/raylib-python-cffi">Full documentation</a></p>
</div>
<div class="tex2jax_ignore mathjax_ignore section" id="install">
<h1>Install<a class="headerlink" href="#install" title="Permalink to this headline"></a></h1>
<p>We distribute a statically linked binary Raylib wheel:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip3 install raylib
</pre></div>
</div>
<p>Some platforms that <em>should</em> be available: Windows 10 x64, MacOS 10.15 x64, Linux Ubuntu1804 x64.</p>
<p>If yours isnt available then pip will attempt to build from source, so you will need to have Raylib development libs installed.</p>
<p><a class="reference internal" href="BUILDING.html"><span class="doc std std-doc">If it doesnt work, build from source</span></a></p>
</div>
<div class="tex2jax_ignore mathjax_ignore section" id="how-to-use">
<h1>How to use<a class="headerlink" href="#how-to-use" title="Permalink to this headline"></a></h1>
<p>There are three different ways of using this binding. You only need to pick one method, but you
can combine two methods in one program if you want to.</p>
<p>If you are familiar with C coding and the Raylib C library and you want to use an exact copy of
the C API, choose raylib.static.</p>
<p>If you prefer a slightly more Pythonistic API and dont mind it might be slightly slower, choose
raylib.pyray.</p>
<p>If you insist on dynamic bindings and dont care that they are slower and less safe, choose
raylib.dynamic.</p>
</div>
<div class="tex2jax_ignore mathjax_ignore section" id="rlzero">
<h1>RLZero<a class="headerlink" href="#rlzero" title="Permalink to this headline"></a></h1>
<p>Work in progress:</p>
<p><a class="reference external" href="https://github.com/electronstudio/rlzero">A simplified API for Raylib for use in education and to enable beginners to create 3d games</a></p>
</div>
<div class="tex2jax_ignore mathjax_ignore section" id="help-wanted">
<h1>Help wanted<a class="headerlink" href="#help-wanted" title="Permalink to this headline"></a></h1>
<ul class="simple">
<li><p>converting more examples from C to python</p></li>
<li><p>testing and building on more platforms</p></li>
</ul>
</div>
<div class="tex2jax_ignore mathjax_ignore section" id="performance">
<h1>Performance<a class="headerlink" href="#performance" title="Permalink to this headline"></a></h1>
<p>For fastest permformance use Pypy rather than standard python.</p>
<p>Every call to C is costly, so its 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.</p>
<div class="section" id="bunnymark">
<h2>Bunnymark<a class="headerlink" href="#bunnymark" title="Permalink to this headline"></a></h2>
<table class="colwidths-auto docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Library</p></th>
<th class="head"><p>Implementation</p></th>
<th class="head"><p>Bunnies (60 FPS)</p></th>
<th class="head"><p>Percentage</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Raylib 3.7</p></td>
<td><p>C</p></td>
<td><p>168100</p></td>
<td><p>100%</p></td>
</tr>
<tr class="row-odd"><td><p>Raylib Python CFFI 3.7</p></td>
<td><p>Pypy 3.7</p></td>
<td><p>33800</p></td>
<td><p>20%</p></td>
</tr>
<tr class="row-even"><td><p>Raylib Python CFFI 3.7</p></td>
<td><p>Python 3.9</p></td>
<td><p>7700</p></td>
<td><p>4.5%</p></td>
</tr>
<tr class="row-odd"><td><p>Raylib Python CFFI 3.7</p></td>
<td><p>Python 3.9 Nuitka</p></td>
<td><p>8600</p></td>
<td><p>5.1%</p></td>
</tr>
<tr class="row-even"><td><p>Raylib Python CFFI 3.7 Dynamic</p></td>
<td><p>Python 3.9</p></td>
<td><p>6300</p></td>
<td><p>3.7%</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="tex2jax_ignore mathjax_ignore section" id="packaging-your-app">
<h1>Packaging your app<a class="headerlink" href="#packaging-your-app" title="Permalink to this headline"></a></h1>
<p>You can create a standalone binary using the Nuitka compiler. For example, here is how to package Bunnymark:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip3 install nuitka
cd examples/textures
python3 -m nuitka --onefile --linux-onefile-icon resources/wabbit_alpha.png textures_bunnymark.py
</pre></div>
</div>
</div>
<div class="tex2jax_ignore mathjax_ignore section" id="advert">
<h1>Advert<a class="headerlink" href="#advert" title="Permalink to this headline"></a></h1>
<p><a class="reference external" href="https://store.steampowered.com/app/664240/RetroWar_8bit_Party_Battle/?git">RetroWar: 8-bit Party Battle</a> is out now. Defeat up to 15 of your friends in a tournament of 80s-inspired retro mini games.</p>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="pyray.html" class="btn btn-neutral float-right" title="raylib.pyray" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="index.html" class="btn btn-neutral float-left" title="Raylib Python" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2022, Richard Smith.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -0,0 +1,143 @@
## Have Pip build from source
Useful if the binaries don't work on your system.
Make sure Raylib is installed and then:
pip3 install --no-binary raylib --upgrade --force-reinstall raylib
## Build from source manually
Useful if the Pip build doesn't work, or you want to contribute to the project, or you want to skip building the
static lib and just *use the dynamic binding with your own dll*.
If you do build on a new platform please
submit your binaries as a PR.
### 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 update the dynamic libs, download the official release, e.g. https://github.com/raysan5/raylib/releases/download/3.7.0/raylib-3.7.0_win64_msvc16.zip and extract `raylib.dll`
into `raylib/dynamic`. Delete the files for other platforms, unless you want them in your distribution.
To build a binary wheel distribution:
rmdir /Q /S build
pip3 install cffi
pip3 install wheel
python setup.py bdist_wheel
and 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 etc manual build
These instructions have been tested on Ubuntu 20.10 and 16.04. Mac should be very similar.
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.
sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev
cd raylib-python-cffi/raylib-c
mkdir build
cd build
cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..
sudo make install
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 ..
sudo make install
Optional: Make a patched version of raylib header. (**Not necessary** if you've already got
raylib_modifed.h from repo and haven't changed anything.)
cd ../../raylib
cp raylib.h raylib_modified.h
patch -p0 <raylib_modified.h.patch
Build
pip3 install cffi
cd ..
rm -rf build raylib/static/_raylib_cffi.*
python3 raylib/static/build.py
To update the Linux dynamic libs (names will be different on other platfroms):
rm raylib/dynamic/*.so*
cp -P /usr/local/lib/libraylib.so* raylib/dynamic/
To build a binary wheel distribution:
pip3 install wheel
python3 setup.py bdist_wheel
and 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/static/build_multi.sh
(NOTE pypi wont accept Linux packages unless they are built `--plat-name manylinux2014_x86_64` so on linux
please run `./raylib/static/build_multi_linux.sh` )
(TODO move the dynamic libs into a separate package rather than include them with every one.)
### Raspberry Pi
The integrated GPU hardware in a Raspberry Pi ("VideoCore") is rather
idiosyncratic, resulting in a complex set of software options. Probably the
most interesting two options for Raylib applications are:
1. Use the Broadcom proprietary Open GL ES 2.0 drivers, installed by Raspbian
into `/opt/vc`. These are 32-bit only, and currently X11 doesn't use these
for its acceleration, so this is most suitable for driving the entire HDMI
output from one application with minimal overhead (no X11).
2. Use the more recent open-source `vc4-fkms-v3d` kernel driver. This can run
in either 32-bit or 64-bit, and X11 can use these, so using X11 is probably
the more common choice here.
With option 2, the regular linux install instructions above should probably
work as-is.
For option 1, then also follow the above instructions, but with these
modifications:
- With `cmake`, use `cmake -DWITH_PIC=on -DSTATIC=on -DSHARED=on -DPLATFORM='Raspberry Pi' ..`
(See [here](https://github.com/electronstudio/raylib-python-cffi/issues/31#issuecomment-862078330) for a Raspberry Pi wheel)

View file

@ -0,0 +1,78 @@
# Python Bindings for Raylib 3.7
New CFFI API static bindings. Automatically generated to be as close as possible to
original Raylib. Faster, fewer bugs and easier to maintain than ctypes.
[Full documentation](http://electronstudio.github.io/raylib-python-cffi)
# Install
We distribute a statically linked binary Raylib wheel:
pip3 install raylib
Some platforms that _should_ be available: Windows 10 x64, MacOS 10.15 x64, Linux Ubuntu1804 x64.
If yours isn't available then pip will attempt to build from source, so you will need to have Raylib development libs installed.
[If it doesn't work, build from source](BUILDING.md)
# How to use
There are three different ways of using this binding. You only need to pick one method, but you
can combine two methods in one program if you want to.
If you are familiar with C coding and the Raylib C library and you want to use an exact copy of
the C API, choose raylib.static.
If you prefer a slightly more Pythonistic API and don't mind it might be slightly slower, choose
raylib.pyray.
If you insist on dynamic bindings and don't care that they are slower and less safe, choose
raylib.dynamic.
# RLZero
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 and building on more platforms
# Performance
For fastest permformance use Pypy rather than standard python.
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.
## Bunnymark
| Library | Implementation | Bunnies (60 FPS) | Percentage |
| ------------- | ------------- | ------------- | ------------- |
| 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% |
# 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.

View file

@ -0,0 +1,21 @@
raylib.dynamic
==============
CFFI ABI dynamic bindings exist in order to avoid the need to compile a C extension module.
Currently the github version may include bundled DLLs in ``raylib/dynamic`` but the pypi version requires a system installed Raylib.
You can put your own DLLs in ``raylib/dynamic`` if you prefer.
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.
See https://github.com/electronstudio/raylib-python-cffi/blob/master/test_static.py for how to use.
.. warning::
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 personally 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.
API is the same as raylib.static.

View file

@ -0,0 +1,836 @@
raylib.pyray.PyRay
==================
.. currentmodule:: raylib.pyray
.. autoclass:: PyRay
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~PyRay.AudioStream
~PyRay.BlendMode
~PyRay.BoneInfo
~PyRay.BoundingBox
~PyRay.Camera
~PyRay.Camera2D
~PyRay.Camera3D
~PyRay.CameraMode
~PyRay.CameraProjection
~PyRay.CharInfo
~PyRay.Color
~PyRay.ConfigFlags
~PyRay.CubemapLayout
~PyRay.Font
~PyRay.FontType
~PyRay.GamepadAxis
~PyRay.GamepadButton
~PyRay.Gestures
~PyRay.Image
~PyRay.KeyboardKey
~PyRay.Material
~PyRay.MaterialMap
~PyRay.MaterialMapIndex
~PyRay.Matrix
~PyRay.Mesh
~PyRay.Model
~PyRay.ModelAnimation
~PyRay.MouseButton
~PyRay.MouseCursor
~PyRay.Music
~PyRay.NPatchInfo
~PyRay.NPatchLayout
~PyRay.PixelFormat
~PyRay.Quaternion
~PyRay.Ray
~PyRay.RayHitInfo
~PyRay.Rectangle
~PyRay.RenderTexture
~PyRay.RenderTexture2D
~PyRay.Shader
~PyRay.ShaderLocationIndex
~PyRay.ShaderUniformDataType
~PyRay.Sound
~PyRay.Texture
~PyRay.Texture2D
~PyRay.TextureCubemap
~PyRay.TextureFilter
~PyRay.TextureWrap
~PyRay.TraceLogLevel
~PyRay.Transform
~PyRay.Vector2
~PyRay.Vector3
~PyRay.Vector4
~PyRay.VrDeviceInfo
~PyRay.VrStereoConfig
~PyRay.Wave
~PyRay.__init__
~PyRay.begin_blend_mode
~PyRay.begin_drawing
~PyRay.begin_mode_2d
~PyRay.begin_mode_3d
~PyRay.begin_scissor_mode
~PyRay.begin_shader_mode
~PyRay.begin_texture_mode
~PyRay.begin_vr_stereo_mode
~PyRay.change_directory
~PyRay.check_collision_box_sphere
~PyRay.check_collision_boxes
~PyRay.check_collision_circle_rec
~PyRay.check_collision_circles
~PyRay.check_collision_lines
~PyRay.check_collision_point_circle
~PyRay.check_collision_point_rec
~PyRay.check_collision_point_triangle
~PyRay.check_collision_ray_box
~PyRay.check_collision_ray_sphere
~PyRay.check_collision_ray_sphere_ex
~PyRay.check_collision_recs
~PyRay.check_collision_spheres
~PyRay.clear_background
~PyRay.clear_directory_files
~PyRay.clear_dropped_files
~PyRay.clear_window_state
~PyRay.close_audio_device
~PyRay.close_audio_stream
~PyRay.close_window
~PyRay.codepoint_to_utf8
~PyRay.color_alpha
~PyRay.color_alpha_blend
~PyRay.color_from_hsv
~PyRay.color_from_normalized
~PyRay.color_normalize
~PyRay.color_to_hsv
~PyRay.color_to_int
~PyRay.compress_data
~PyRay.decompress_data
~PyRay.directory_exists
~PyRay.disable_cursor
~PyRay.draw_billboard
~PyRay.draw_billboard_rec
~PyRay.draw_bounding_box
~PyRay.draw_circle
~PyRay.draw_circle_3d
~PyRay.draw_circle_gradient
~PyRay.draw_circle_lines
~PyRay.draw_circle_sector
~PyRay.draw_circle_sector_lines
~PyRay.draw_circle_v
~PyRay.draw_cube
~PyRay.draw_cube_texture
~PyRay.draw_cube_v
~PyRay.draw_cube_wires
~PyRay.draw_cube_wires_v
~PyRay.draw_cylinder
~PyRay.draw_cylinder_wires
~PyRay.draw_ellipse
~PyRay.draw_ellipse_lines
~PyRay.draw_fps
~PyRay.draw_grid
~PyRay.draw_line
~PyRay.draw_line_3d
~PyRay.draw_line_bezier
~PyRay.draw_line_bezier_quad
~PyRay.draw_line_ex
~PyRay.draw_line_strip
~PyRay.draw_line_v
~PyRay.draw_mesh
~PyRay.draw_mesh_instanced
~PyRay.draw_model
~PyRay.draw_model_ex
~PyRay.draw_model_wires
~PyRay.draw_model_wires_ex
~PyRay.draw_pixel
~PyRay.draw_pixel_v
~PyRay.draw_plane
~PyRay.draw_point_3d
~PyRay.draw_poly
~PyRay.draw_poly_lines
~PyRay.draw_ray
~PyRay.draw_rectangle
~PyRay.draw_rectangle_gradient_ex
~PyRay.draw_rectangle_gradient_h
~PyRay.draw_rectangle_gradient_v
~PyRay.draw_rectangle_lines
~PyRay.draw_rectangle_lines_ex
~PyRay.draw_rectangle_pro
~PyRay.draw_rectangle_rec
~PyRay.draw_rectangle_rounded
~PyRay.draw_rectangle_rounded_lines
~PyRay.draw_rectangle_v
~PyRay.draw_ring
~PyRay.draw_ring_lines
~PyRay.draw_sphere
~PyRay.draw_sphere_ex
~PyRay.draw_sphere_wires
~PyRay.draw_text
~PyRay.draw_text_codepoint
~PyRay.draw_text_ex
~PyRay.draw_text_rec
~PyRay.draw_text_rec_ex
~PyRay.draw_texture
~PyRay.draw_texture_ex
~PyRay.draw_texture_n_patch
~PyRay.draw_texture_poly
~PyRay.draw_texture_pro
~PyRay.draw_texture_quad
~PyRay.draw_texture_rec
~PyRay.draw_texture_tiled
~PyRay.draw_texture_v
~PyRay.draw_triangle
~PyRay.draw_triangle_3d
~PyRay.draw_triangle_fan
~PyRay.draw_triangle_lines
~PyRay.draw_triangle_strip
~PyRay.draw_triangle_strip_3d
~PyRay.enable_cursor
~PyRay.end_blend_mode
~PyRay.end_drawing
~PyRay.end_mode_2d
~PyRay.end_mode_3d
~PyRay.end_scissor_mode
~PyRay.end_shader_mode
~PyRay.end_texture_mode
~PyRay.end_vr_stereo_mode
~PyRay.export_image
~PyRay.export_image_as_code
~PyRay.export_mesh
~PyRay.export_wave
~PyRay.export_wave_as_code
~PyRay.fade
~PyRay.file_exists
~PyRay.gen_image_cellular
~PyRay.gen_image_checked
~PyRay.gen_image_color
~PyRay.gen_image_font_atlas
~PyRay.gen_image_gradient_h
~PyRay.gen_image_gradient_radial
~PyRay.gen_image_gradient_v
~PyRay.gen_image_perlin_noise
~PyRay.gen_image_white_noise
~PyRay.gen_mesh_cube
~PyRay.gen_mesh_cubicmap
~PyRay.gen_mesh_cylinder
~PyRay.gen_mesh_heightmap
~PyRay.gen_mesh_hemi_sphere
~PyRay.gen_mesh_knot
~PyRay.gen_mesh_plane
~PyRay.gen_mesh_poly
~PyRay.gen_mesh_sphere
~PyRay.gen_mesh_torus
~PyRay.gen_texture_mipmaps
~PyRay.get_camera_matrix
~PyRay.get_camera_matrix_2d
~PyRay.get_char_pressed
~PyRay.get_clipboard_text
~PyRay.get_codepoints
~PyRay.get_codepoints_count
~PyRay.get_collision_ray_ground
~PyRay.get_collision_ray_mesh
~PyRay.get_collision_ray_model
~PyRay.get_collision_ray_triangle
~PyRay.get_collision_rec
~PyRay.get_color
~PyRay.get_current_monitor
~PyRay.get_directory_files
~PyRay.get_directory_path
~PyRay.get_dropped_files
~PyRay.get_file_extension
~PyRay.get_file_mod_time
~PyRay.get_file_name
~PyRay.get_file_name_without_ext
~PyRay.get_font_default
~PyRay.get_fps
~PyRay.get_frame_time
~PyRay.get_gamepad_axis_count
~PyRay.get_gamepad_axis_movement
~PyRay.get_gamepad_button_pressed
~PyRay.get_gamepad_name
~PyRay.get_gesture_detected
~PyRay.get_gesture_drag_angle
~PyRay.get_gesture_drag_vector
~PyRay.get_gesture_hold_duration
~PyRay.get_gesture_pinch_angle
~PyRay.get_gesture_pinch_vector
~PyRay.get_glyph_index
~PyRay.get_image_alpha_border
~PyRay.get_key_pressed
~PyRay.get_monitor_count
~PyRay.get_monitor_height
~PyRay.get_monitor_name
~PyRay.get_monitor_physical_height
~PyRay.get_monitor_physical_width
~PyRay.get_monitor_position
~PyRay.get_monitor_refresh_rate
~PyRay.get_monitor_width
~PyRay.get_mouse_position
~PyRay.get_mouse_ray
~PyRay.get_mouse_wheel_move
~PyRay.get_mouse_x
~PyRay.get_mouse_y
~PyRay.get_music_time_length
~PyRay.get_music_time_played
~PyRay.get_next_codepoint
~PyRay.get_pixel_color
~PyRay.get_pixel_data_size
~PyRay.get_prev_directory_path
~PyRay.get_random_value
~PyRay.get_screen_data
~PyRay.get_screen_height
~PyRay.get_screen_to_world_2d
~PyRay.get_screen_width
~PyRay.get_shader_location
~PyRay.get_shader_location_attrib
~PyRay.get_sounds_playing
~PyRay.get_texture_data
~PyRay.get_time
~PyRay.get_touch_points_count
~PyRay.get_touch_position
~PyRay.get_touch_x
~PyRay.get_touch_y
~PyRay.get_window_handle
~PyRay.get_window_position
~PyRay.get_window_scale_dpi
~PyRay.get_working_directory
~PyRay.get_world_to_screen
~PyRay.get_world_to_screen_2d
~PyRay.get_world_to_screen_ex
~PyRay.hide_cursor
~PyRay.image_alpha_clear
~PyRay.image_alpha_crop
~PyRay.image_alpha_mask
~PyRay.image_alpha_premultiply
~PyRay.image_clear_background
~PyRay.image_color_brightness
~PyRay.image_color_contrast
~PyRay.image_color_grayscale
~PyRay.image_color_invert
~PyRay.image_color_replace
~PyRay.image_color_tint
~PyRay.image_copy
~PyRay.image_crop
~PyRay.image_dither
~PyRay.image_draw
~PyRay.image_draw_circle
~PyRay.image_draw_circle_v
~PyRay.image_draw_line
~PyRay.image_draw_line_v
~PyRay.image_draw_pixel
~PyRay.image_draw_pixel_v
~PyRay.image_draw_rectangle
~PyRay.image_draw_rectangle_lines
~PyRay.image_draw_rectangle_rec
~PyRay.image_draw_rectangle_v
~PyRay.image_draw_text
~PyRay.image_draw_text_ex
~PyRay.image_flip_horizontal
~PyRay.image_flip_vertical
~PyRay.image_format
~PyRay.image_from_image
~PyRay.image_mipmaps
~PyRay.image_resize
~PyRay.image_resize_canvas
~PyRay.image_resize_nn
~PyRay.image_rotate_ccw
~PyRay.image_rotate_cw
~PyRay.image_text
~PyRay.image_text_ex
~PyRay.image_to_pot
~PyRay.init_audio_device
~PyRay.init_audio_stream
~PyRay.init_window
~PyRay.is_audio_device_ready
~PyRay.is_audio_stream_playing
~PyRay.is_audio_stream_processed
~PyRay.is_cursor_hidden
~PyRay.is_cursor_on_screen
~PyRay.is_file_dropped
~PyRay.is_file_extension
~PyRay.is_gamepad_available
~PyRay.is_gamepad_button_down
~PyRay.is_gamepad_button_pressed
~PyRay.is_gamepad_button_released
~PyRay.is_gamepad_button_up
~PyRay.is_gamepad_name
~PyRay.is_gesture_detected
~PyRay.is_key_down
~PyRay.is_key_pressed
~PyRay.is_key_released
~PyRay.is_key_up
~PyRay.is_model_animation_valid
~PyRay.is_mouse_button_down
~PyRay.is_mouse_button_pressed
~PyRay.is_mouse_button_released
~PyRay.is_mouse_button_up
~PyRay.is_music_playing
~PyRay.is_sound_playing
~PyRay.is_window_focused
~PyRay.is_window_fullscreen
~PyRay.is_window_hidden
~PyRay.is_window_maximized
~PyRay.is_window_minimized
~PyRay.is_window_ready
~PyRay.is_window_resized
~PyRay.is_window_state
~PyRay.load_file_data
~PyRay.load_file_text
~PyRay.load_font
~PyRay.load_font_data
~PyRay.load_font_ex
~PyRay.load_font_from_image
~PyRay.load_font_from_memory
~PyRay.load_image
~PyRay.load_image_anim
~PyRay.load_image_colors
~PyRay.load_image_from_memory
~PyRay.load_image_palette
~PyRay.load_image_raw
~PyRay.load_material_default
~PyRay.load_materials
~PyRay.load_model
~PyRay.load_model_animations
~PyRay.load_model_from_mesh
~PyRay.load_music_stream
~PyRay.load_music_stream_from_memory
~PyRay.load_render_texture
~PyRay.load_shader
~PyRay.load_shader_from_memory
~PyRay.load_sound
~PyRay.load_sound_from_wave
~PyRay.load_storage_value
~PyRay.load_texture
~PyRay.load_texture_cubemap
~PyRay.load_texture_from_image
~PyRay.load_vr_stereo_config
~PyRay.load_wave
~PyRay.load_wave_from_memory
~PyRay.load_wave_samples
~PyRay.maximize_window
~PyRay.measure_text
~PyRay.measure_text_ex
~PyRay.mem_alloc
~PyRay.mem_free
~PyRay.mem_realloc
~PyRay.mesh_binormals
~PyRay.mesh_bounding_box
~PyRay.mesh_tangents
~PyRay.minimize_window
~PyRay.open_url
~PyRay.pause_audio_stream
~PyRay.pause_music_stream
~PyRay.pause_sound
~PyRay.play_audio_stream
~PyRay.play_music_stream
~PyRay.play_sound
~PyRay.play_sound_multi
~PyRay.pointer
~PyRay.rAudioBuffer
~PyRay.restore_window
~PyRay.resume_audio_stream
~PyRay.resume_music_stream
~PyRay.resume_sound
~PyRay.save_file_data
~PyRay.save_file_text
~PyRay.save_storage_value
~PyRay.set_audio_stream_buffer_size_default
~PyRay.set_audio_stream_pitch
~PyRay.set_audio_stream_volume
~PyRay.set_camera_alt_control
~PyRay.set_camera_mode
~PyRay.set_camera_move_controls
~PyRay.set_camera_pan_control
~PyRay.set_camera_smooth_zoom_control
~PyRay.set_clipboard_text
~PyRay.set_config_flags
~PyRay.set_exit_key
~PyRay.set_gamepad_mappings
~PyRay.set_gestures_enabled
~PyRay.set_master_volume
~PyRay.set_material_texture
~PyRay.set_model_mesh_material
~PyRay.set_mouse_cursor
~PyRay.set_mouse_offset
~PyRay.set_mouse_position
~PyRay.set_mouse_scale
~PyRay.set_music_pitch
~PyRay.set_music_volume
~PyRay.set_pixel_color
~PyRay.set_shader_value
~PyRay.set_shader_value_matrix
~PyRay.set_shader_value_texture
~PyRay.set_shader_value_v
~PyRay.set_shapes_texture
~PyRay.set_sound_pitch
~PyRay.set_sound_volume
~PyRay.set_target_fps
~PyRay.set_texture_filter
~PyRay.set_texture_wrap
~PyRay.set_trace_log_level
~PyRay.set_window_icon
~PyRay.set_window_min_size
~PyRay.set_window_monitor
~PyRay.set_window_position
~PyRay.set_window_size
~PyRay.set_window_state
~PyRay.set_window_title
~PyRay.show_cursor
~PyRay.stop_audio_stream
~PyRay.stop_music_stream
~PyRay.stop_sound
~PyRay.stop_sound_multi
~PyRay.take_screenshot
~PyRay.text_append
~PyRay.text_copy
~PyRay.text_find_index
~PyRay.text_insert
~PyRay.text_is_equal
~PyRay.text_join
~PyRay.text_length
~PyRay.text_replace
~PyRay.text_split
~PyRay.text_subtext
~PyRay.text_to_integer
~PyRay.text_to_lower
~PyRay.text_to_pascal
~PyRay.text_to_upper
~PyRay.text_to_utf8
~PyRay.toggle_fullscreen
~PyRay.unload_file_data
~PyRay.unload_file_text
~PyRay.unload_font
~PyRay.unload_font_data
~PyRay.unload_image
~PyRay.unload_image_colors
~PyRay.unload_image_palette
~PyRay.unload_material
~PyRay.unload_mesh
~PyRay.unload_model
~PyRay.unload_model_animation
~PyRay.unload_model_animations
~PyRay.unload_model_keep_meshes
~PyRay.unload_music_stream
~PyRay.unload_render_texture
~PyRay.unload_shader
~PyRay.unload_sound
~PyRay.unload_texture
~PyRay.unload_vr_stereo_config
~PyRay.unload_wave
~PyRay.unload_wave_samples
~PyRay.update_audio_stream
~PyRay.update_camera
~PyRay.update_mesh_buffer
~PyRay.update_model_animation
~PyRay.update_music_stream
~PyRay.update_sound
~PyRay.update_texture
~PyRay.update_texture_rec
~PyRay.upload_mesh
~PyRay.wave_copy
~PyRay.wave_crop
~PyRay.wave_format
~PyRay.window_should_close
.. rubric:: Attributes
.. autosummary::
~PyRay.BLEND_ADDITIVE
~PyRay.BLEND_ADD_COLORS
~PyRay.BLEND_ALPHA
~PyRay.BLEND_CUSTOM
~PyRay.BLEND_MULTIPLIED
~PyRay.BLEND_SUBTRACT_COLORS
~PyRay.CAMERA_CUSTOM
~PyRay.CAMERA_FIRST_PERSON
~PyRay.CAMERA_FREE
~PyRay.CAMERA_ORBITAL
~PyRay.CAMERA_ORTHOGRAPHIC
~PyRay.CAMERA_PERSPECTIVE
~PyRay.CAMERA_THIRD_PERSON
~PyRay.CUBEMAP_LAYOUT_AUTO_DETECT
~PyRay.CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE
~PyRay.CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR
~PyRay.CUBEMAP_LAYOUT_LINE_HORIZONTAL
~PyRay.CUBEMAP_LAYOUT_LINE_VERTICAL
~PyRay.CUBEMAP_LAYOUT_PANORAMA
~PyRay.FLAG_FULLSCREEN_MODE
~PyRay.FLAG_INTERLACED_HINT
~PyRay.FLAG_MSAA_4X_HINT
~PyRay.FLAG_VSYNC_HINT
~PyRay.FLAG_WINDOW_ALWAYS_RUN
~PyRay.FLAG_WINDOW_HIDDEN
~PyRay.FLAG_WINDOW_HIGHDPI
~PyRay.FLAG_WINDOW_MAXIMIZED
~PyRay.FLAG_WINDOW_MINIMIZED
~PyRay.FLAG_WINDOW_RESIZABLE
~PyRay.FLAG_WINDOW_TOPMOST
~PyRay.FLAG_WINDOW_TRANSPARENT
~PyRay.FLAG_WINDOW_UNDECORATED
~PyRay.FLAG_WINDOW_UNFOCUSED
~PyRay.FONT_BITMAP
~PyRay.FONT_DEFAULT
~PyRay.FONT_SDF
~PyRay.GAMEPAD_AXIS_LEFT_TRIGGER
~PyRay.GAMEPAD_AXIS_LEFT_X
~PyRay.GAMEPAD_AXIS_LEFT_Y
~PyRay.GAMEPAD_AXIS_RIGHT_TRIGGER
~PyRay.GAMEPAD_AXIS_RIGHT_X
~PyRay.GAMEPAD_AXIS_RIGHT_Y
~PyRay.GAMEPAD_BUTTON_LEFT_FACE_DOWN
~PyRay.GAMEPAD_BUTTON_LEFT_FACE_LEFT
~PyRay.GAMEPAD_BUTTON_LEFT_FACE_RIGHT
~PyRay.GAMEPAD_BUTTON_LEFT_FACE_UP
~PyRay.GAMEPAD_BUTTON_LEFT_THUMB
~PyRay.GAMEPAD_BUTTON_LEFT_TRIGGER_1
~PyRay.GAMEPAD_BUTTON_LEFT_TRIGGER_2
~PyRay.GAMEPAD_BUTTON_MIDDLE
~PyRay.GAMEPAD_BUTTON_MIDDLE_LEFT
~PyRay.GAMEPAD_BUTTON_MIDDLE_RIGHT
~PyRay.GAMEPAD_BUTTON_RIGHT_FACE_DOWN
~PyRay.GAMEPAD_BUTTON_RIGHT_FACE_LEFT
~PyRay.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT
~PyRay.GAMEPAD_BUTTON_RIGHT_FACE_UP
~PyRay.GAMEPAD_BUTTON_RIGHT_THUMB
~PyRay.GAMEPAD_BUTTON_RIGHT_TRIGGER_1
~PyRay.GAMEPAD_BUTTON_RIGHT_TRIGGER_2
~PyRay.GAMEPAD_BUTTON_UNKNOWN
~PyRay.GESTURE_DOUBLETAP
~PyRay.GESTURE_DRAG
~PyRay.GESTURE_HOLD
~PyRay.GESTURE_NONE
~PyRay.GESTURE_PINCH_IN
~PyRay.GESTURE_PINCH_OUT
~PyRay.GESTURE_SWIPE_DOWN
~PyRay.GESTURE_SWIPE_LEFT
~PyRay.GESTURE_SWIPE_RIGHT
~PyRay.GESTURE_SWIPE_UP
~PyRay.GESTURE_TAP
~PyRay.KEY_A
~PyRay.KEY_APOSTROPHE
~PyRay.KEY_B
~PyRay.KEY_BACK
~PyRay.KEY_BACKSLASH
~PyRay.KEY_BACKSPACE
~PyRay.KEY_C
~PyRay.KEY_CAPS_LOCK
~PyRay.KEY_COMMA
~PyRay.KEY_D
~PyRay.KEY_DELETE
~PyRay.KEY_DOWN
~PyRay.KEY_E
~PyRay.KEY_EIGHT
~PyRay.KEY_END
~PyRay.KEY_ENTER
~PyRay.KEY_EQUAL
~PyRay.KEY_ESCAPE
~PyRay.KEY_F
~PyRay.KEY_F1
~PyRay.KEY_F10
~PyRay.KEY_F11
~PyRay.KEY_F12
~PyRay.KEY_F2
~PyRay.KEY_F3
~PyRay.KEY_F4
~PyRay.KEY_F5
~PyRay.KEY_F6
~PyRay.KEY_F7
~PyRay.KEY_F8
~PyRay.KEY_F9
~PyRay.KEY_FIVE
~PyRay.KEY_FOUR
~PyRay.KEY_G
~PyRay.KEY_GRAVE
~PyRay.KEY_H
~PyRay.KEY_HOME
~PyRay.KEY_I
~PyRay.KEY_INSERT
~PyRay.KEY_J
~PyRay.KEY_K
~PyRay.KEY_KB_MENU
~PyRay.KEY_KP_0
~PyRay.KEY_KP_1
~PyRay.KEY_KP_2
~PyRay.KEY_KP_3
~PyRay.KEY_KP_4
~PyRay.KEY_KP_5
~PyRay.KEY_KP_6
~PyRay.KEY_KP_7
~PyRay.KEY_KP_8
~PyRay.KEY_KP_9
~PyRay.KEY_KP_ADD
~PyRay.KEY_KP_DECIMAL
~PyRay.KEY_KP_DIVIDE
~PyRay.KEY_KP_ENTER
~PyRay.KEY_KP_EQUAL
~PyRay.KEY_KP_MULTIPLY
~PyRay.KEY_KP_SUBTRACT
~PyRay.KEY_L
~PyRay.KEY_LEFT
~PyRay.KEY_LEFT_ALT
~PyRay.KEY_LEFT_BRACKET
~PyRay.KEY_LEFT_CONTROL
~PyRay.KEY_LEFT_SHIFT
~PyRay.KEY_LEFT_SUPER
~PyRay.KEY_M
~PyRay.KEY_MENU
~PyRay.KEY_MINUS
~PyRay.KEY_N
~PyRay.KEY_NINE
~PyRay.KEY_NULL
~PyRay.KEY_NUM_LOCK
~PyRay.KEY_O
~PyRay.KEY_ONE
~PyRay.KEY_P
~PyRay.KEY_PAGE_DOWN
~PyRay.KEY_PAGE_UP
~PyRay.KEY_PAUSE
~PyRay.KEY_PERIOD
~PyRay.KEY_PRINT_SCREEN
~PyRay.KEY_Q
~PyRay.KEY_R
~PyRay.KEY_RIGHT
~PyRay.KEY_RIGHT_ALT
~PyRay.KEY_RIGHT_BRACKET
~PyRay.KEY_RIGHT_CONTROL
~PyRay.KEY_RIGHT_SHIFT
~PyRay.KEY_RIGHT_SUPER
~PyRay.KEY_S
~PyRay.KEY_SCROLL_LOCK
~PyRay.KEY_SEMICOLON
~PyRay.KEY_SEVEN
~PyRay.KEY_SIX
~PyRay.KEY_SLASH
~PyRay.KEY_SPACE
~PyRay.KEY_T
~PyRay.KEY_TAB
~PyRay.KEY_THREE
~PyRay.KEY_TWO
~PyRay.KEY_U
~PyRay.KEY_UP
~PyRay.KEY_V
~PyRay.KEY_VOLUME_DOWN
~PyRay.KEY_VOLUME_UP
~PyRay.KEY_W
~PyRay.KEY_X
~PyRay.KEY_Y
~PyRay.KEY_Z
~PyRay.KEY_ZERO
~PyRay.LOG_ALL
~PyRay.LOG_DEBUG
~PyRay.LOG_ERROR
~PyRay.LOG_FATAL
~PyRay.LOG_INFO
~PyRay.LOG_NONE
~PyRay.LOG_TRACE
~PyRay.LOG_WARNING
~PyRay.MATERIAL_MAP_ALBEDO
~PyRay.MATERIAL_MAP_BRDG
~PyRay.MATERIAL_MAP_CUBEMAP
~PyRay.MATERIAL_MAP_DIFFUSE
~PyRay.MATERIAL_MAP_EMISSION
~PyRay.MATERIAL_MAP_HEIGHT
~PyRay.MATERIAL_MAP_IRRADIANCE
~PyRay.MATERIAL_MAP_METALNESS
~PyRay.MATERIAL_MAP_NORMAL
~PyRay.MATERIAL_MAP_OCCLUSION
~PyRay.MATERIAL_MAP_PREFILTER
~PyRay.MATERIAL_MAP_ROUGHNESS
~PyRay.MATERIAL_MAP_SPECULAR
~PyRay.MOUSE_CURSOR_ARROW
~PyRay.MOUSE_CURSOR_CROSSHAIR
~PyRay.MOUSE_CURSOR_DEFAULT
~PyRay.MOUSE_CURSOR_IBEAM
~PyRay.MOUSE_CURSOR_NOT_ALLOWED
~PyRay.MOUSE_CURSOR_POINTING_HAND
~PyRay.MOUSE_CURSOR_RESIZE_ALL
~PyRay.MOUSE_CURSOR_RESIZE_EW
~PyRay.MOUSE_CURSOR_RESIZE_NESW
~PyRay.MOUSE_CURSOR_RESIZE_NS
~PyRay.MOUSE_CURSOR_RESIZE_NWSE
~PyRay.MOUSE_LEFT_BUTTON
~PyRay.MOUSE_MIDDLE_BUTTON
~PyRay.MOUSE_RIGHT_BUTTON
~PyRay.NPATCH_NINE_PATCH
~PyRay.NPATCH_THREE_PATCH_HORIZONTAL
~PyRay.NPATCH_THREE_PATCH_VERTICAL
~PyRay.PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_DXT1_RGB
~PyRay.PIXELFORMAT_COMPRESSED_DXT1_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_DXT3_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_DXT5_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_ETC1_RGB
~PyRay.PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA
~PyRay.PIXELFORMAT_COMPRESSED_ETC2_RGB
~PyRay.PIXELFORMAT_COMPRESSED_PVRT_RGB
~PyRay.PIXELFORMAT_COMPRESSED_PVRT_RGBA
~PyRay.PIXELFORMAT_UNCOMPRESSED_GRAYSCALE
~PyRay.PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA
~PyRay.PIXELFORMAT_UNCOMPRESSED_R32
~PyRay.PIXELFORMAT_UNCOMPRESSED_R32G32B32
~PyRay.PIXELFORMAT_UNCOMPRESSED_R32G32B32A32
~PyRay.PIXELFORMAT_UNCOMPRESSED_R4G4B4A4
~PyRay.PIXELFORMAT_UNCOMPRESSED_R5G5B5A1
~PyRay.PIXELFORMAT_UNCOMPRESSED_R5G6B5
~PyRay.PIXELFORMAT_UNCOMPRESSED_R8G8B8
~PyRay.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8
~PyRay.SHADER_LOC_COLOR_AMBIENT
~PyRay.SHADER_LOC_COLOR_DIFFUSE
~PyRay.SHADER_LOC_COLOR_SPECULAR
~PyRay.SHADER_LOC_MAP_ALBEDO
~PyRay.SHADER_LOC_MAP_BRDF
~PyRay.SHADER_LOC_MAP_CUBEMAP
~PyRay.SHADER_LOC_MAP_DIFFUSE
~PyRay.SHADER_LOC_MAP_EMISSION
~PyRay.SHADER_LOC_MAP_HEIGHT
~PyRay.SHADER_LOC_MAP_IRRADIANCE
~PyRay.SHADER_LOC_MAP_METALNESS
~PyRay.SHADER_LOC_MAP_NORMAL
~PyRay.SHADER_LOC_MAP_OCCLUSION
~PyRay.SHADER_LOC_MAP_PREFILTER
~PyRay.SHADER_LOC_MAP_ROUGHNESS
~PyRay.SHADER_LOC_MAP_SPECULAR
~PyRay.SHADER_LOC_MATRIX_MODEL
~PyRay.SHADER_LOC_MATRIX_MVP
~PyRay.SHADER_LOC_MATRIX_NORMAL
~PyRay.SHADER_LOC_MATRIX_PROJECTION
~PyRay.SHADER_LOC_MATRIX_VIEW
~PyRay.SHADER_LOC_VECTOR_VIEW
~PyRay.SHADER_LOC_VERTEX_COLOR
~PyRay.SHADER_LOC_VERTEX_NORMAL
~PyRay.SHADER_LOC_VERTEX_POSITION
~PyRay.SHADER_LOC_VERTEX_TANGENT
~PyRay.SHADER_LOC_VERTEX_TEXCOORD01
~PyRay.SHADER_LOC_VERTEX_TEXCOORD02
~PyRay.SHADER_UNIFORM_FLOAT
~PyRay.SHADER_UNIFORM_INT
~PyRay.SHADER_UNIFORM_IVEC2
~PyRay.SHADER_UNIFORM_IVEC3
~PyRay.SHADER_UNIFORM_IVEC4
~PyRay.SHADER_UNIFORM_SAMPLER2D
~PyRay.SHADER_UNIFORM_VEC2
~PyRay.SHADER_UNIFORM_VEC3
~PyRay.SHADER_UNIFORM_VEC4
~PyRay.TEXTURE_FILTER_ANISOTROPIC_16X
~PyRay.TEXTURE_FILTER_ANISOTROPIC_4X
~PyRay.TEXTURE_FILTER_ANISOTROPIC_8X
~PyRay.TEXTURE_FILTER_BILINEAR
~PyRay.TEXTURE_FILTER_POINT
~PyRay.TEXTURE_FILTER_TRILINEAR
~PyRay.TEXTURE_WRAP_CLAMP
~PyRay.TEXTURE_WRAP_MIRROR_CLAMP
~PyRay.TEXTURE_WRAP_MIRROR_REPEAT
~PyRay.TEXTURE_WRAP_REPEAT
~PyRay.TextFormat
~PyRay.TraceLog

View file

@ -0,0 +1,22 @@
.. 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
* :ref:`search`

View file

@ -0,0 +1,57 @@
raylib.pyray
============
.. comment::
Link to API reference:
toctree::
:maxdepth: 1
autoapi/raylib/pyray/index
This is a wrapper around the static bindings.
The API is *still the same as Raylib*, so you should still reply on `the official Raylib docs <https://www.raylib.com/cheatsheet/cheatsheet.html>`_, except:
* the function names are in **snake_case**.
* Some string and pointer conversions are handled automatically.
* There are some helper functions to create structures.
Example program:
.. code-block::
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(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()
See also https://github.com/electronstudio/raylib-python-cffi/blob/master/test_pyray.py
API reference
-------------
.. autoapimodule:: raylib.pyray
:members:
:undoc-members:

View file

@ -0,0 +1,46 @@
raylib.static
=============
The goal of raylib.static is make usage as similar to the original C as CFFI will allow. The `example programs <https://github.com/electronstudio/raylib-python-cffi/tree/master/examples>`_
are very, very similar to the C originals.
Example program:
.. code-block::
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()
See also https://github.com/electronstudio/raylib-python-cffi/blob/master/test_static.py
Also useful to read whenever you need to convert stuff between C and Python: https://cffi.readthedocs.io
Your **primary reference** should always be `the official Raylib docs <https://www.raylib.com/cheatsheet/cheatsheet.html>`_
However, here is a list of available functions:
Functions API reference
-----------------------
.. automodule:: raylib.static.rl
:members:
:undoc-members:

904
docs/_static/basic.css vendored Normal file
View file

@ -0,0 +1,904 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- 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: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
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: 450px;
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.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
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;
}
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
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,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::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;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
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;
}
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
dl.footnote > dd:after,
dl.citation > dd: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 > dt:after {
content: ":";
}
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;
}
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.5em;
content: ":";
}
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;
}
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;
}
}

1
docs/_static/css/badge_only.css vendored Normal file
View file

@ -0,0 +1 @@
.fa:before{-webkit-font-smoothing:antialiased}.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-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}}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/_static/css/fonts/lato-bold.woff vendored Normal file

Binary file not shown.

BIN
docs/_static/css/fonts/lato-bold.woff2 vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/_static/css/fonts/lato-normal.woff vendored Normal file

Binary file not shown.

BIN
docs/_static/css/fonts/lato-normal.woff2 vendored Normal file

Binary file not shown.

4
docs/_static/css/theme.css vendored Normal file

File diff suppressed because one or more lines are too long

323
docs/_static/doctools.js vendored Normal file
View file

@ -0,0 +1,323 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* 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;
}
/**
* Small JavaScript module for the documentation.
*/
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
this.initOnKeyListeners();
}
},
/**
* i18n support
*/
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return 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 : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
},
/**
* make the url absolute
*/
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
$(document).keydown(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box, textarea, dropdown or button
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
&& activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
&& !event.shiftKey) {
switch (event.keyCode) {
case 37: // left
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
break;
case 39: // right
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
break;
}
}
});
}
};
// quick alias for translations
_ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});

12
docs/_static/documentation_options.js vendored Normal file
View file

@ -0,0 +1,12 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false
};

BIN
docs/_static/file.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

BIN
docs/_static/fonts/Inconsolata-Bold.ttf vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
docs/_static/fonts/Inconsolata.ttf vendored Normal file

Binary file not shown.

BIN
docs/_static/fonts/Lato-Bold.ttf vendored Normal file

Binary file not shown.

BIN
docs/_static/fonts/Lato-Regular.ttf vendored Normal file

Binary file not shown.

BIN
docs/_static/fonts/Lato/lato-bold.eot vendored Normal file

Binary file not shown.

BIN
docs/_static/fonts/Lato/lato-bold.ttf vendored Normal file

Binary file not shown.

BIN
docs/_static/fonts/Lato/lato-bold.woff vendored Normal file

Binary file not shown.

BIN
docs/_static/fonts/Lato/lato-bold.woff2 vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/_static/fonts/Lato/lato-italic.eot vendored Normal file

Binary file not shown.

BIN
docs/_static/fonts/Lato/lato-italic.ttf vendored Normal file

Binary file not shown.

BIN
docs/_static/fonts/Lato/lato-italic.woff vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
docs/_static/fonts/Lato/lato-regular.eot vendored Normal file

Binary file not shown.

BIN
docs/_static/fonts/Lato/lato-regular.ttf vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/_static/fonts/RobotoSlab-Bold.ttf vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

2671
docs/_static/fonts/fontawesome-webfont.svg vendored Normal file

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

19
docs/_static/graphviz.css vendored Normal file
View file

@ -0,0 +1,19 @@
/*
* graphviz.css
* ~~~~~~~~~~~~
*
* Sphinx stylesheet -- graphviz extension.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
img.graphviz {
border: 0;
max-width: 100%;
}
object.graphviz {
max-width: 100%;
}

10872
docs/_static/jquery-3.5.1.js vendored Normal file

File diff suppressed because it is too large Load diff

2
docs/_static/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

1
docs/_static/js/badge_only.js vendored Normal file
View file

@ -0,0 +1 @@
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});

View file

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);

4
docs/_static/js/html5shiv.min.js vendored Normal file
View file

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);

4
docs/_static/js/modernizr.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
docs/_static/js/theme.js vendored Normal file
View file

@ -0,0 +1 @@
!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n('<span class="toctree-expand"></span>'),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="#"]'))}t.length>0&&($(".wy-menu-vertical .current").removeClass("current"),t.addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l1").parent().addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l2").addClass("current"),t.closest("li.toctree-l3").addClass("current"),t.closest("li.toctree-l4").addClass("current"),t.closest("li.toctree-l5").addClass("current"),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"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"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<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,t){var i=(new Date).getTime(),o=Math.max(0,16-(i-n)),r=window.setTimeout((function(){e(i+o)}),o);return n=i+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()}).call(window)},function(n,e){n.exports=jQuery},function(n,e,t){}]);

Some files were not shown because too many files have changed in this diff Show more