推荐阅读:
上一篇文章中我们对SDL作了简单的介绍,重点介绍了如何编译SDL以及如何使用它。在文章的最后我们留下了一个疑问,即虽然我们创建了窗口,但窗口却并没有真正显示出来。
今天我们就来看一看,如何才能让创建的窗口真正的显示出来。
渲染的基本流程
为什么我们上一课中创建了窗口,但它却并没有显示出来呢?其原因是,我们创建的窗口只是逻辑上的窗口,要想让窗口显示出来,我们需要对窗口进行效果渲染,也就是要通过绘制像素的方法,将窗口中的像素全部点亮。
那么如何对窗口进行渲染呢?SDL为我们提供了方便是的API。不过在使用SDL对窗口进行渲染之前,我们要先了解渲染的基本原理。
其基本原理是,首先创建一个window窗口,它是我们要渲染的目标。然后,要有一个渲染上下文,该上下文中一方面存放着要渲染的目标,也就是windows窗口;另一方面是存放着一个缓冲区,该缓冲区用于存放渲染的内容。
渲染的内容可以是点、线、各种图形以及图片,视频的各种组合。这些组合后的内容首先被存放到缓冲区中,最终SDL将缓冲区中的内容渲染到窗口中。
所以渲染的基本流程如下:
- 创建窗口
- 创建渲染器
- 清空缓冲区
- 绘制要显示的内容
- 最终将缓冲区内容渲染到window窗口上。
常用API
创建渲染上下文
1
2
3SDL_Renderer* SDL_CreateRenderer(SDL_Window* window,
int index,
Uint32 flags)window: 指明在哪个窗口里进行渲染
index: 指定渲染驱动的索引号。一般指定为 -1.
flags:flags 说明 SDL_RENDERER_SOFTWARE the renderer is a software fallback SDL_RENDERER_ACCELERATED the renderer uses hardware acceleration SDL_RENDERER_PRESENTVSYNC present is synchronized with the refresh rate SDL_RENDERER_TARGETTEXTURE the renderer supports rendering to texture 消毁渲染上下文
释放渲染上下文相关的资源。
1
void SDL_DestroyRenderer(SDL_Renderer* renderer)
清空渲染目标
该函数的作用是用指定的颜色清空缓冲区。
1
int SDL_RenderClear(SDL_Renderer* renderer)
renderer: 上面创建的渲染器上下文。
展示要渲染的内容
将缓冲区中的内容输出到目标上,也就是 windows 窗口上。
1
void SDL_RenderPresent(SDL_Renderer* renderer)
renderer: 上面创建的渲染器上下文
完整例子
我在第一课的代码上,添加了上面几个函数之后,大家可以看到一个全红色的窗口可以显示在我们的面前了。
当然我们还可以在上面画一些图形,比如使用 SDL_RenderDrawLines() 函数在窗口中画一条直线。
1 | #include "SDL.h" |
小结
本文我向大家介绍了如何将创建的窗口展示出来,并重点介绍了窗口渲染的基本原理以及使用的 SDL API。
后面的文章我将向大家重点介绍如何在窗口绘制一些常用图形。
谢谢!