Code Monkey home page Code Monkey logo

raylibpyctbg's Introduction

Raylib Ctypes Binding Generator

A very basic raylib binding generator for Python

This tool generates Python bindings for the awesome C library Raylib. It makes use of json files generated by the Raylib's header parser.

You can use this tool to generate a Raylib Python binding for you to tweak and use in your projects. It is very simple to use.

Usage

Dowload and unzip it in a directory of you choosing, open the terminal, navigate to the selected directory, and then:

$ python raylibpyctbg -help

to get a list of options you can pass to customize the bind generation

Documentation

You can take a look on the last generated documentation file.

Customization

With raylibctbg you can customize many aspects of the binding.

Options related to code style and naming conventions are:

  • Naming convention: choose whether you want names the same as in C Raylib (C99) or following Python's PEP8 convention. You can choose which names you want to keep or change the casing: fields, parameters or functions.

  • Typing: choose what type information to be added to names: as type hints or annotations.

  • Member functions: choose whether you want some functions to be bound to structure types as methods, classmethods, staticmethods, properties or context managers.

  • Pretty-printing: you can specify what gets returned by __str__ and __repr__.

  • Attribute swizzling: choose whether to add attribute swizzling to Vectors, Color and Rectangle types.

  • Context manager: choose whether you want function pairs named Begin* and End* to form context managers.

You can also customize library loading file paths/names, inclusion of extension headers and output filepath.

Many of these options can be tweaked via input/rl500/global_config.json file, but for deeper customizations you can check out the input/rl500/raylib_api.bind.json file.

Vector{2|3|4} swizzling:

When added to the binding, it allows attributes to be joined and mixed in any order:

vec2 = Vector2(1, 2, 3)
vec3 = vec2.xyx
vec4 = vec3.yyzx
vec3.xz = 5.0, 3.0

It also works for Color:

col = Color(127, 63, 31, 255)
col2 = col.grab
col.rg = 255, 0

A little bit of OOP:

When added to the binding, it binds some functions to be called as methods:

# Load the sound; same as `sound = load_sound('my/sound/file')`
sound = Sound.load("my/sound/file")

# same as `if not is_sound_playing(sound)`
if not sound.is_playing():
	# Play it; same as `sound_play(sound)`
	sound.play()

# Unload from memory; same as `unload_sound(sound)`
sound.unload()

RayMath

When added to the binding, it includes all functions in the raymath header.

RLGL

When added to the binding, it includes all functions in the rlgl header.

Documentation

You can generate API reference for all symbols wrapped by the generator. For some examples, check out the markdown files in the output folder.

Using the python binding

Please, note that this binding does not include any raylib binary file. You can grab the binary from the C Raylib repo in the releases page. By default is expected the binary files to be located the binding libpath.

Try to run the binding python file directly to know the exact path where the binary is expected to be located or change the path with the generation options.

raylibpyctbg's People

Contributors

overdev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

reapyr-dev sarvex

raylibpyctbg's Issues

Data type errors

There are many types in the init.py file with underscores '_int' and '_bool' that cause errors like these:
NameError: name '_bool' is not defined. Did you mean: 'bool'?

Texture.width and Texture.height have wrong values

A minimal example using "scarfy.png" from the raylib examples which has the dimensions 768 x 128 :

texture = rl.load_texture("resources/scarfy.png")
print("Texture:", texture.id, texture.width, texture.height, texture.mipmaps, texture.format)

gives the output

Texture: 3298534883331 4294967424 139994459013127 140731655587712 140731655587952

The lower 32 bits of the width, height and mipmaps values are correct, it is the upper 32 bits that gives rise to these bizarre values (format and id may be correct as well, I am not sure).

On my system compiling raylib using the defaults results in the size of an int and a long being different. I noticed that the generated bindings have the line Int = c_long but changing the definition to be c_int gives the output:

Texture: 3298534883331 128 1 7 32766

Any idea how to address this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.