High-performance creative engine (Win32/OpenGL/Python)
Project description
jwarol
Движок на C++, который дает Python прямой доступ к видеокарте. Win32 API + сырой OpenGL (и X11 на Linux).
Возможности
| Функция | Описание |
|---|---|
| Window | Создание окна с OpenGL-контекстом (Win32 / X11) |
| Shader | Компиляция GLSL-шейдеров из Python |
| Renderer | Рендеринг прямоугольников и текстур через GPU |
| Texture | Загрузка PNG/JPG/BMP, процедурные текстуры, наложение |
| Input | Клавиатурный ввод (GetAsyncKeyState) |
| Physics | Verlet-интеграция, гравитация, коллизии, типы тел |
| Clock | Замер дельта-тайма |
| Vec2/Rect | 2D-математика |
Установка
pip install jwarol
Быстрый старт
import jwarol as jl
jl.init_graphics()
win = jl.Window(800, 600, "Hello jwarol")
renderer = jl.Renderer(800, 600)
while win.is_open:
win.poll_events()
win.clear(0.1, 0.1, 0.2)
renderer.draw_rect(100, 100, 200, 150, 1.0, 0.3, 0.5)
renderer.draw_rect(350, 200, 100, 100, 0.2, 0.7, 1.0)
win.swap_buffers()
Текстуры
# Загрузка из файла (PNG/JPG/BMP на Windows, BMP на Linux)
tex = jl.Texture("sprite.png")
# Процедурная текстура из пикселей (RGBA)
import struct
w, h = 64, 64
pixels = bytearray()
for y in range(h):
for x in range(w):
pixels.extend([255, 0, 0, 255]) # красный пиксель
tex = jl.Texture(w, h, bytes(pixels), 4)
# Рисование с текстурой
renderer.draw_texture(tex, 100, 100, 200, 200)
# Текстура с прозрачностью
renderer.draw_texture(tex, 100, 100, 200, 200, alpha=0.5)
# Спрайт из tileset'а (draw_texture_ex)
renderer.draw_texture_ex(tileset, 0, 0, 32, 32, 0, 0, 32, 32)
# Умная загрузка всех текстур из папки
textures = jl.Texture.load_all("assets/textures/")
# Наложение текстур
combined = tex.overlay(other_tex, 10, 10, alpha=0.7)
Физика
world = jl.World()
world.gravity = 980.0
# Verlet-точки
p = world.add_point(400, 100) # падает вниз
# Физические тела (прямоугольники)
body = world.add_body(300, 0, 50, 50, jl.BodyType.DYNAMIC)
static = world.add_body(0, 650, 800, 50, jl.BodyType.STATIC)
# Исключение из физики
body.enabled = False # не участвует в симуляции
# Шаг физики
dt = clock.tick()
world.step(dt)
# Чтение позиции
x, y = body.pos.x, body.pos.y
Ввод и время
input = jl.Input()
clock = jl.Clock()
while win.is_open:
dt = clock.tick()
input.update()
if input.is_down(ord('W')): pass # клавиша зажата
if input.is_pressed(ord(' ')): pass # только что нажали
if input.is_released(ord('A')): pass # только что отпустили
Шейдеры
shader = jl.Shader("""
#version 330 core
layout(location = 0) in vec2 aPos;
void main() { gl_Position = vec4(aPos, 0.0, 1.0); }
""", """
#version 330 core
uniform vec4 uColor;
out vec4 FragColor;
void main() { FragColor = uColor; }
""")
shader.use()
Сборка из исходников
# Windows (MSVC)
python setup.py build
# Linux (GCC)
python setup.py build
Репозиторий
https://github.com/r9441887-collab/jwarol-code-new
Лицензия
MIT License — Руслан (r9441887@gmail.com)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
jwarol-0.6.1.tar.gz
(12.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jwarol-0.6.1.tar.gz.
File metadata
- Download URL: jwarol-0.6.1.tar.gz
- Upload date:
- Size: 12.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67edc456f8088f5e67978d1ae82571a6d48eb51fafe287fe8622e4915835cebe
|
|
| MD5 |
f7bd3d7630a185c3b7f221232ff9bc26
|
|
| BLAKE2b-256 |
e0520cab06ab69b854de65d8dd1c980b0d483df25e289165b1a1982e5604d423
|
File details
Details for the file jwarol-0.6.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: jwarol-0.6.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 163.0 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38f8a1da7390c58762bffe60641bf1b6210c3a87c91b75d7d677fa0f48cd5968
|
|
| MD5 |
9a84902c2e1a6ce12364e1c3dd8797a8
|
|
| BLAKE2b-256 |
71d0da4bbb7aa11a098e879362b0e48b093d5097fbc9e989d09b45d253df7392
|