我开始制作康威生命游戏的 SDL 版本。我以前使用过 SDL,但从未直接访问像素。我编写了以下代码,它的执行速度很慢。我尝试过使用 UpdateRect 而不是 Flip,两者之间没有区别。我用 SWSURFACE 初始化了 SDL。我能做些什么来改善它吗?我想到了解决方法(将 bmp 用于更大的像素等)。绘图数组是 640x480 的 Cell 对象,它只包含一个可以通过 getter/setter 访问的成员 'alive'。我要做的就是让鼠标有效地绘制像素。我需要使用 OpenGL 来执行此操作吗?我想澄清一下,我意识到现代硬件并不意味着每像素访问。但鉴于这是我需要的,我正在寻找解决方案。
while (quit == false)
{
int pX = 0;
int pY = 0;
bool did_set = false;
if (SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_MOUSEBUTTONDOWN:
plot[event.button.y][event.button.x].setAlive(true);
pX = event.button.x;
pY = event.button.y;
did_set = true;
break;
case SDL_QUIT:
quit = true;
break;
}
}
if (did_set)
{
SDL_LockSurface(screen);
Uint32 p = SDL_MapRGB(screen->format, 255,255,255);
putpixel(screen, pX, pY, p);
SDL_UnlockSurface(screen);
}
SDL_Flip(screen);
}