SDL翻转两个表面

时间:2011-12-04 18:47:47

标签: c++ sdl

我使用SDL作为我的程序图形,我在翻转曲面时遇到问题。当我编译以下代码时:

int main(int argc , char* argv[])
{
SDL_Surface* scr1 = SDL_SetVideoMode(880 , 600 , 0 , SDL_HWSURFACE |SDL_DOUBLEBUF );
SDL_Surface* scr2 = SDL_SetVideoMode(880 , 600 , 0 , SDL_HWSURFACE |SDL_DOUBLEBUF );

aacircleRGBA(scr1 , 50 , 50 , 30 , 255 , 0 , 0 , 255);

SDL_Flip(scr2);

return 0;
}

它显示了屏幕上的圆圈。但是我只翻了scr2。为什么它会显示圆圈?

2 个答案:

答案 0 :(得分:2)

第二次调用SDL_SetVideoMode()后,原始屏幕缓冲区指针在常规情况下无效。你不应该重复使用它,因为它不再指向已分配的表面。

在这种情况下,使用相同的参数调用SDL_SetVideoMode()两次会得到scr2 == scr1,因为SDL不需要重新分配视频表面。因此,scr1所指的表面上的绘图与scr2所引用的绘图相同。

答案 1 :(得分:2)

  

成功。返回的表面由SDL_Quit释放,不得被释放   呼叫者。 此规则还包括对SDL_!SetVideoMode 的连续调用(即调整大小或更改分辨率),因为现有曲面将自动释放。无论SDL_!SetVideoMode可以满足哪些标志都在返回表面的flags成员中设置。

- SDL_SetVideoMode function(强调我的)

只有一个要渲染的硬件表面,即在调用SDL_SetVideoMode后立即显示在屏幕上的硬件表面。你还希望缓冲区可以在哪里绘制?