SDL视频渲染流程小结

一、整体流程

二、接口说明

1)初始化接口

  • SDL_Init

       设置要初始化的SDL子模块名称。可选项如下:

#define SDL_INIT_TIMER
#define SDL_INIT_AUDIO
#define SDL_INIT_VIDEO
#define SDL_INIT_JOYSTICK
#define SDL_INIT_HAPTIC
#define SDL_INIT_GAMECONTROLLER
#define SDL_INIT_EVENTS
#define SDL_INIT_SENSOR
#define SDL_INIT_NOPARACHUTE
#define SDL_INIT_EVERYTHING
  • SDL_CreateWindow

       SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)

       创建窗口。

       title:创建的窗口名称

       x:创建窗口在显示器上的位置。X轴坐标

       y:创建窗口在显示器上的位置。Y轴坐标

       w:创建窗口的大小。宽。

       h:创建窗口的大小。高。

       flag:参见SDL_WindowFlags枚举定义。

  • SDL_CreateRenderer

       SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags)

       创建渲染器

       window:该渲染器关联的窗口指针。

       index:使用哪种渲染器。参见render_drivers结构体定义。不同的平台支持不同的render_drivers。

       flag:参见SDL_RendererFlags。该flag配置需要参考render_drivers支持的flag。

typedef enum
{
 SDL_RENDERER_SOFTWARE = 0x00000001,     /*The renderer is a software fallback */
 SDL_RENDERER_ACCELERATED = 0x00000002,  /*The renderer uses hardware acceleration */
 SDL_RENDERER_PRESENTVSYNC = 0x00000004, /*Present is synchronized with the refresh rate */
 SDL_RENDERER_TARGETTEXTURE = 0x00000008 /*The renderer supports rendering to texture */
} SDL_RendererFlags;
  • SDL_CreateTexture

       SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int h)

       创建纹理

       renderer:该纹理关联的渲染器指针。

       format:支持的视频格式。需要参考render_drivers支持的format。

       access:参见SDL_TextureAccess。播放视频流,选择SDL_TEXTUREACCESS_STREAMING。

       w:纹理数据宽

       y:纹理数据长

2)循环渲染数据

  • SDL_UpdateYUVTexture

       SDL_UpdateYUVTexture(SDL_Texture * texture, const SDL_Rect * rect, 
                                               const Uint8 *Yplane, int Ypitch, 
                                               const Uint8 *Uplane, int Upitch, 
                                               const Uint8 *Vplane, int Vpitch)

       设置纹理的像素数据

       texture:目标纹理。

       rect:更新像素的矩形区域。设置为NULL的时候更新整个区域。

       Yplane:Y像素数据。以此类推UV
       Ypitch:Y像素数据的字节数。以此类推UV

  • SDL_RenderCopy

       SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
                                     const SDL_Rect * srcrect, const SDL_Rect * dstrect)

       将纹理数据复制给渲染目标

       renderer:渲染目标。

       texture:输入纹理。

       srcrect:选择输入纹理的一块矩形区域作为输入。设置为NULL的时候整个纹理作为输入。

       dstrect:选择渲染目标的一块矩形区域作为输出。设置为NULL的时候整个渲染目标作为输出。

  • SDL_RenderPresent

       SDL_RenderPresent(SDL_Renderer * renderer)

       显示画面

       renderer:指定要显示的渲染器

三、附录

  • SDL2支持的render_drivers列表

render_drivers 平台 备注
D3D_RenderDriver windows  
D3D11_RenderDriver windows  
METAL_RenderDriver IOS  
GL_RenderDriver    
GLES2_RenderDriver Android  
GLES_RenderDriver Android  
DirectFB_RenderDriver 待续  
PSP_RenderDriver 待续  
SW_RenderDriver    
  • 参考

https://wiki.libsdl.org/

猜你喜欢

转载自blog.csdn.net/CrystalShaw/article/details/105855063
SDL