我一直在用Python玩一些简单的图形组件,但为了提高性能,我想用C语言做一些工作。
我知道如何来回传递数组等数据,那很容易。但我想,如果我能创建一个带画布的窗口,传递一个指向视频内存的指针(当然不是物理视频内存),然后让Python负责将该内存放到屏幕上,而其余部分由C完成,这可能会更有益。可能是异步的,但我不知道这是否重要。
这种做法可行吗?或者我完全错了方向?
我的努力:
# graphics.py
import ctypes
import pygame
screen = pygame.display.set_mode((300,200))
f = ctypes.CDLL('/path/to/engine.so')
f.loop(screen._pixels_address)
并且
// engine.c
#include <stdint.h>
void loop(void *mem) {
while(1) {
uint8_t *p = (uint8_t*) mem;
// Was hoping this would make some pixels change
for(int i=0; i<20000; i++)
*p=127;
}
}
这并没有起作用,最终导致了崩溃。我并不感到意外,但这是我目前所得到的。
使用Python并非必须,但我想用C语言。我也知道,在大多数情况下,我的方法并不是最好的选择,但我喜欢使用C语言和老派的编程方式。