В настоящее время я пишу эмулятор Gameboy в Python. Я хочу использовать pysdl2 для вывода графики c.
У меня есть список значений RGB (3 значения на пиксель, поэтому этот список имеет размер 256x256x3). Это фон, а не то, что будет отображаться на реальном экране.
Прямые манипуляции с пикселями слишком медленные, поэтому я подумал об использовании sdl2.SDL_UpdateTexture
для обновления всей текстуры сразу. Но я не могу преобразовать свой список в необходимый тип c_void_p
. Есть простой способ сделать это? Или есть лучший способ достичь достаточного количества FPS? Я не думал, что будет так сложно обновлять изображение 60 раз в секунду.
Короткий пример:
import sdl2
pic = [0xff] * 256*256*3
window = sdl2.SDL_CreateWindow(b"Gameboy Emulator", 256, 256, 256, 256, sdl2.SDL_WINDOW_SHOWN)
renderer = sdl2.SDL_CreateRenderer(window, -1, 0)
texture = sdl2.SDL_CreateTexture(renderer, sdl2.SDL_PIXELFORMAT_RGB888, sdl2.SDL_TEXTUREACCESS_STATIC, 256, 256)
Я попробовал следующее:
pic_as_string = "".join(map(chr, pic))
pointer = cast(c_char_p(pic_as_string), c_void_p)
sdl2.SDL_UpdateTexture(texture, None, pointer, 3*256)
Я сейчас использую pypy3
, если это уместно.