SDL相关函数分析

SDL分析

之前做过ffmpeg_SDL播放器时用到一些 记录一下

SDL_Init(uint flags)

初始化函数,使用之前调用,flags表示初始化去哪些子系统

flags子系统
SDL_INIT_TIMER计时器子系统
SDL_INIT_AUDIO音频子系统
SDL_INIT_VIDEO视频子系统; 自动初始化事件子系统
SDL_INIT_JOYSTICK操纵杆子系统; 自动初始化事件子系统
SDL_INIT_HAPTIC触觉(力反馈)子系统
SDL_INIT_GAMECONTROLLER控制子系统; 自动初始化操纵杆子系统
SDL_INIT_EVENTS事件子系统
SDL_INIT_EVERYTHING所有上述子系统
SDL_INIT_NOPARACHUTE兼容性; 这个标志被忽略了

int成功时返回0,失败时返回负数错误码,使用SDL_GetError()可获取信息

if (SDL_Init(SDL_INIT_VIDEO)) { //视频子系统
		printf("Could not initialize SDL - %s\n", SDL_GetError());
		return -1;
	}

SDL_Window&SDL_CreateWindow

SDL_Window* SDL_CreateWindow(const char* title,//窗口的标题,采用UTF-8编码
             int         x,//窗口的x坐标   SDL_WINDOWPOS_CENTERED:中间
             int         y,//窗口的y坐标    SDL_WINDOWPOS_UNDEFINED:未指定
             int         w,//窗口的宽度,以像素为单位
             int         h,//窗口的高度,以像素为单位
             Uint32      flags)//0,或一个或多个SDL_WindowFlags,
    eg:
	SDL_Window *screen;
	screen = SDL_CreateWindow("SDL Player", SDL_WINDOWPOS_UNDEFINED, 				SDL_WINDOWPOS_UNDEFINED, screen_w, screen_h, SDL_WINDOW_OPENGL | 				SDL_WINDOW_RESIZABLE);//UNDEFINED为未指示
	if (!screen) {
		printf("SDL:could not create window_exiting:%s\n", SDL_GetError());
		return -1;
	}

SDL_WindowFlags列表:

flags含义
SDL_WINDOW_FULLSCREEN全屏窗口
SDL_WINDOW_FULLSCREEN_DESKTOP当前桌面分辨率的全屏窗口
SDL_WINDOW_OPENGL窗口可用于OpenGL上下文
SDL_WINDOW_VULKAN可用于Vulkan实例的窗口
SDL_WINDOW_HIDDEN隐藏窗口
SDL_WINDOW_BORDERLESS
SDL_WINDOW_RESIZABLE窗口可以调整大小
SDL_WINDOW_MINIMIZED窗口最小化
SDL_WINDOW_MAXIMIZED窗口最大化
SDL_WINDOW_INPUT_GRABBED窗口可以捕获键盘输入焦点
SDL_WINDOW_ALLOW_HIGHDPI如果支持,则应在高DPI模式下创建窗口(> = SDL 2.0.1)

SDL_Renderer(渲染器系列函数)

SDL_CreateRenderer

SDL_Renderer用SDL_CreateRenderer函数创建;

SDL_Renderer* SDL_CreateRenderer(SDL_Window* window, int index, Uint32 flags)
  • SDL_Window* window:和渲染器上下文关联的窗体指针。
  • int index:即将初始化的渲染器驱动程序的索引,如果是-1表示flags标志的第一个可用驱动程序。
  • flags:0,或者一个或多个SDL_RendererFlags合并在一起。SDL_RendererFlags见下表
SDL_RendererFlags渲染器标志
SDL_RENDERER_SOFTWAREthe renderer is a software fallback
SDL_RENDERER_ACCELERATED渲染器使用硬件加速
SDL_RENDERER_PRESENTVSYNC显示与刷新率同步
SDL_RENDERER_TARGETTEXTURE渲染器支持渲染到纹理

SDL_RenderCopy

函数原型:

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

功能:将制定区域(srcrect)的纹理数据,拷贝到渲染目标尺寸为(dstrect)的渲染器上下文(renderer)中,为下一步的渲染做准备。

参数列表:

参数释义
renderer渲染器的上下文
texture纹理,纹理的显示效果如颜色、透明度(alpha值)等会收到其它接口设置最终产生不一样的效果,这些接口有:SDL_SetTextureColorMod、SDL_SetTextureAlphaMod、SDL_SetTextureBlendMode
srcrect需要拷贝的SDL_Texture尺寸(用SDL_Rect结构表达),NULL则表示整个纹理
dstrect渲染区域的尺寸(用SDL_Rect结构表达),NULL表示整个渲染整个渲染区域; 如果纹理尺寸不够,将会拉伸或压缩纹理。

SDL_RenderPresent

函数原型:

void SDL_RenderPresent(SDL_Renderer* renderer)

功能:将渲染器上下文中的数据,渲染到关联窗体上去。

参数:renderer:渲染器上下文。

SDL的渲染功能在后备缓冲区中运行。也就是说,调用诸如SDL_RenderDrawLine之类的渲染函数不会直接在屏幕上放置一条线,而是更新后备缓冲区。 因此,您可以构建整个场景并将组合后的缓冲区作为完整图片调用SDL_RenderPresent呈现给屏幕。

因此,在使用SDL的渲染API时,会对帧进行所有绘制,然后每帧调用此函数一次,以向用户显示最终绘图。

更新后备缓冲区。 因此,您可以构建整个场景并将组合后的缓冲区作为完整图片调用SDL_RenderPresent呈现给屏幕。

因此,在使用SDL的渲染API时,会对帧进行所有绘制,然后每帧调用此函数一次,以向用户显示最终绘图。

数据每次显示后,后备缓冲应视为无效。不要假设每帧之间遗留先前的内容。 强烈建议您在开始每个新帧的绘制之前调用SDL_RenderClear来初始化后备缓冲区,即使您打算覆盖每个像素也是如此。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值