This repository has been archived on 2025-06-21. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
raylib-python-cffi/test_dynamic.py
2019-05-21 17:51:54 +01:00

52 lines
No EOL
1.9 KiB
Python

"""
This is an attempt at a CFFI dynamic (ABI) binding. However, it fails to work in the same place the ctypes binding fails, accessing
materials of a model, because Python can't dynamically tell the difference between a pointer and an array. There's probably
some way to specify this (e.g. in raylib_modified.h) but it's difficult to be sure we fixed them all, and the errors
are often completely silent.
"""
import pathlib
MODULE = pathlib.Path(__file__).parent
print(MODULE)
from raylib.dynamic_binding import ffi, raylib as rl
from raylib.colors import *
rl.InitWindow(800,450,b"foo")
rl.SetTargetFPS(60)
camera = ffi.new("struct Camera3D *", [[ 18.0, 16.0, 18.0 ], [ 0.0, 0.0, 0.0 ], [ 0.0, 1.0, 0.0 ], 45.0, 0 ])
imageFile = str(MODULE / "examples/models/resources/heightmap.png").encode('utf-8')
image = rl.LoadImage(imageFile) # Load heightmap image (RAM)
print(image)
texture = rl.LoadTextureFromImage(image) # Convert image to texture (VRAM)
mesh = rl.GenMeshHeightmap(image, [ 16, 8, 16 ]) # Generate heightmap mesh (RAM and VRAM)
print(mesh)
model = rl.LoadModelFromMesh(mesh) # Load model from generated mesh
print(model.materials) # SHOULD BE A pointer to a 'struct Material' but instead is NULL pointer to 'Material'
#model.materials[0].maps[rl.MAP_DIFFUSE].texture = texture # Set map diffuse texture
mapPosition = ( -8.0, 0.0, -8.0 ) # Define model position
rl.UnloadImage(image) # Unload heightmap image from RAM, already uploaded to VRAM
rl.SetCameraMode(camera[0], rl.CAMERA_ORBITAL) # Set an orbital camera mode
while not rl.WindowShouldClose():
rl.UpdateCamera(camera)
rl.BeginDrawing()
rl.ClearBackground(RAYWHITE)
rl.BeginMode3D(camera[0])
rl.DrawModel(model, mapPosition, 1.0, RED)
rl.DrawGrid(20, 1.0)
rl.EndMode3D()
rl.DrawText(b"sdfsdf", 190, 200, 20, BLACK)
rl.EndDrawing()
rl.CloseWindow()