我使用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。为什么它会显示圆圈?
答案 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
后立即显示在屏幕上的硬件表面。你还希望缓冲区可以在哪里绘制?