由于在参与开发 thinkvd video converter 遇到释放SDL内存的问题,应用中需要在预览、全屏、双屏及CLIP之间来回切换,再次看了SDL相关的源代码,把SDL实现的过程简单说一下。
SDL开发包中自带的样例:testsprite2.c中就是一个实现多屏显示的例子。
简化它来说大概这几步:
1。SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) //初始化
2. windows[i]=SDL_CreateWindow(wm_title, window_x, window_y, width, height, window_flags);
3. SDL_CreateRenderer(windows[i], -1, SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD) < 0)
4. SDL_SelectRenderer(windows[i]); //选择哪个窗口在绑定数据
5. texture[i] = SDL_CreateTexture(desired_format, SDL_TEXTUREACCESS_STREAMING, width, height);
6. COPY(texture[i]) //要显示的数据.
7. while(1){ SDL_DisplayYUVOverlay(overlay, &overlayrect); }
8. SDL_Quit.
也许有人有疑问,它怎么没有显示要用的SDL_Surface,