PySDL3 Desktop: OpenGL Setup PySDL3 для Desktop: Настройка OpenGL

A guide to integrating OpenGL with SDL3 applications in Python. Руководство по интеграции OpenGL в приложения SDL3 на языке Python.

1. Installation 1. Установка

Ensure you have Python installed. Install PySDL3 and PyOpenGL using pip:

Убедитесь, что у вас установлен Python. Установите PySDL3 и PyOpenGL через pip:

pip install PySDL3 PyOpenGL

2. Project Structure 2. Структура проекта

pysdl3-opengl-app/
└── main.py

3. Source Code (OpenGL Integration) 3. Исходный код (Интеграция OpenGL)

Copy this code into main.py. This setup initializes an OpenGL context within an SDL3 window using the callback architecture.

Скопируйте этот код в файл main.py. Этот пример инициализирует контекст OpenGL внутри окна SDL3, используя архитектуру обратных вызовов.

import ctypes
import os
import OpenGL.GL as gl

# Required for the SDL3 Callback-based App framework
os.environ["SDL_MAIN_USE_CALLBACKS"] = "1"
os.environ["SDL_RENDER_DRIVER"] = "opengl"

import sdl3

glContext = None
window = None

@sdl3.SDL_AppInit_func
def SDL_AppInit(appstate, argc, argv):
    global glContext
    global window

    if not sdl3.SDL_Init(sdl3.SDL_INIT_VIDEO):
        sdl3.SDL_Log("Couldn't initialize SDL: %s".encode() % sdl3.SDL_GetError())
        return sdl3.SDL_APP_FAILURE

    # Configure OpenGL attributes
    sdl3.SDL_GL_SetAttribute(sdl3.SDL_GL_MULTISAMPLEBUFFERS, 1)
    sdl3.SDL_GL_SetAttribute(sdl3.SDL_GL_MULTISAMPLESAMPLES, 2)

    windowTitle = "PySDL3, OpenGL".encode()
    window = sdl3.SDL_CreateWindow(windowTitle, 350, 350, sdl3.SDL_WINDOW_OPENGL)
    if not window:
        sdl3.SDL_Log("Couldn't create a window: %s".encode() % sdl3.SDL_GetError())
        return sdl3.SDL_APP_FAILURE

    # Create an OpenGL context
    glContext = sdl3.SDL_GL_CreateContext(window)
    if not glContext:
        sdl3.SDL_Log("Couldn't create a glContext: %s".encode() % sdl3.SDL_GetError())
        return sdl3.SDL_APP_FAILURE

    sdl3.SDL_GL_SetSwapInterval(1) # Turn on vertical sync

    return sdl3.SDL_APP_CONTINUE

@sdl3.SDL_AppEvent_func
def SDL_AppEvent(appstate, event):
    if sdl3.SDL_DEREFERENCE(event).type == sdl3.SDL_EVENT_QUIT:
        return sdl3.SDL_APP_SUCCESS
    return sdl3.SDL_APP_CONTINUE

@sdl3.SDL_AppIterate_func
def SDL_AppIterate(appstate):
    gl.glClearColor(0.2, 0.2, 0.2, 1)
    gl.glClear(gl.GL_COLOR_BUFFER_BIT)
    sdl3.SDL_GL_SwapWindow(window)
    return sdl3.SDL_APP_CONTINUE

@sdl3.SDL_AppQuit_func
def SDL_AppQuit(appstate, result):
    global glContext
    sdl3.SDL_GL_DestroyContext(glContext)
    sdl3.SDL_Quit()

4. Running the Application 4. Запуск приложения

Run the script via your terminal:

Запустите скрипт через терминал:

python main.py

or:

или:

py main.py

Support My Work Поддержать проект

If these tutorials helped you, consider buying me a coffee! Если эти туториалы вам помогли, вы можете поддержать автора.

Sberbank (Russia only) Сбербанк (только для РФ)

Sberbank SBP QR Code

Direct transfer via phone number (Russia only) Перевод по номеру телефона (только для РФ)

+7 (917) 212-29-59

USDT TRC20

USDT TRC20 QR Code

Support via Cryptocurrency Поддержка криптовалютой

TMtY1YifNf6FKvgeFmqKGQR4NStKr3csGp