赞
踩
SDL 开发实战(一):SDL介绍及开发环境配置
SDL 开发实战(二):SDL 2.0 核心 API 解析
SDL_RenderClear
SDL官网
SDL Development Libraries
SDL是 “Simple DirectMedia Layer”的缩写,SDL是一个开源的跨平台的多媒体库,封装了复杂的音视频底层操作,简化了音视频处理的难度。
SDL使用C语言写成,提供了数种控制图像、声音、输出入的函数,可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。
SDL库分为 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。
这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”:
SDL 按照功能可以分成下列数个子系统(subsystem):
SDL的使用思路,基本分为三部分:初始化 —> 循环渲染 —> 销毁释放资源。
SDL 初始化相关方法 :
SDL 渲染数据相关方法:
SDL 销毁释放资源相关方法:
该初始化函数可以确定希望激活的子系统。函数原型如下:
int SDLCALL SDL_Init(Uint32 flags)
其中Uint32 flags参数为要启动的子系统的flag值,具体可以传入的内容如下:
int SDL_Init(Uint32 flags) {
return SDL_InitSubSystem(flags);
}
调用的代码只有这一句,但是我们能很清楚的了解到,SDL_Init(Uint32 flags)所做的操作就是启动SDL系统下指定的子系统。再结合我们上面的Hello World代码,我们可以知道,我们要初始化的是Video子系统。
SDL_Window结构体定义了一个SDL2中的窗口。而SDL_CreateWindow()方法就是用于创建一个窗口。函数的原型如下:
SDL_Window * SDLCALL SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags);
下面解释一下各个参数的含义:
返回创建完成的窗口的ID。如果创建失败则返回0。
结合我们Hello World代码,可以知道,我们要展示的窗口的标题为 “Hello World”,窗口的坐标为x = 100, y = 100, 窗口的宽度为640,高度为480,窗口的状态属性为SDL_WINDOW_SHOWN,即展示窗口。
SDL中使用SDL_CreateRenderer()基于窗口创建渲染器。SDL_CreateRenderer()函数的原型如下:
SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags);
下面解释一下各个参数的含义:
返回创建完成的渲染器的ID。如果创建失败则返回NULL。
结合我们的HelloWorld代码,可以知道,我们要渲染的目标窗口是第二节我们创建的窗口,索引值为默认的渲染设备,设置的渲染属性为 “使用硬件加速 + 和选时期的刷新率同步”。
SDL使用SDL_CreateTexture()基于渲染器创建纹理。SDL_CreateTexture()函数的原型如下:
SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int h);
下面解释一下各个参数的含义:
这个函数创建成功则返回纹理的ID,失败返回0。
SDL使用SDL_UpdateTexture()更新纹理的像素数据。SDL_UpdateTexture()函数的原型如下:
int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, const SDL_Rect * rect, const void *pixels, int pitch);
下面解释一下各个参数的含义:
这个函数更新纹理成功的话返回0,失败的话返回-1。
SDL使用SDL_RenderCopy()将纹理数据复制给渲染目标。SDL_RenderCopy()函数的原型如下:
int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * srcrect, const SDL_Rect * dstrect);
下面解释一下各个参数的含义:
这个函数执行成功的话返回0,失败的话返回-1。
SDL使用SDL_RenderPresent()显示画面。SDL_RenderPresent()函数的原型如下:
void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer);
其中参数 renderer 用于指定渲染器。
介绍完了SDL的核心API,将这些API串联调用的流程步骤如下:
使用图形颜色清除当前的渲染目标。
int SDL_RenderClear(SDL_Renderer * renderer);
#include "SDL.h" int main(int argc, char* argv[]) { SDL_Window* window; SDL_Renderer* renderer; /* Initialize SDL. */ if (SDL_Init(SDL_INIT_VIDEO) < 0) return 1; /* Create the window where we will draw. */ window = SDL_CreateWindow("SDL_RenderClear", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 512, 512, 0); /* We must call SDL_CreateRenderer in order for draw calls to affect this window. */ renderer = SDL_CreateRenderer(window, -1, 0); /* Select the color for drawing. It is set to red here. */ SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); /* Clear the entire screen to our selected color. */ SDL_RenderClear(renderer); /* Up until now everything was drawn behind the scenes. This will show the new, red contents of the window. */ SDL_RenderPresent(renderer); /* Give us time to see the window. */ SDL_Delay(5000); /* Always be sure to clean up */ SDL_Quit(); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。