奄蜊 发表于 2025-6-4 16:45:37

SDL3 入门(2):第一个窗口

在上一篇文章中我们已经利用 SDL 的日志接口实现了简单的字符串输出,实际上是解决了开发环境搭建问题,接下来我们将在已有代码的基础上继续开发,实现第一个窗口的创建和背景色绘制。
初始化

首先设置日志输出级别:
SDL_SetLogPriorities(SDL_LOG_PRIORITY_VERBOSE);因为还是开发阶段所以我们将输出日志级别设置为最低的 VERBOSE,这样所有的日志都会输出,有助于我们观察 SDL 的运行情况,出现错误时可以得到尽量详细的出错信息,有助于我们快速定位问题。
接下来初始化 SDL 库,参数 SDL_INIT_VIDEO 指定初始化的子系统为视频系统:
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
    SDL_Log("SDL_Init failed: %s", SDL_GetError());
    return -1;
}实际上这一步可以省略,因为在调用 SDL API 时其内部会自行检查和初始化所需使用的子系统。比如接下来要使用的 SDL_CreateWindow 函数,内部有这样的代码:
if (!_this) {
    /* Initialize the video system if needed */
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
      return NULL;
    }

    ...
}其中 _this 是视频子系统初始化完成后设置的全局变量,声明如下:
static SDL_VideoDevice *_this = NULL;虽然不是必须的,但是我们仍然建议调用 SDL_Init 对主要用到的子系统进行显式初始化,目的有两个:

[*]清晰完整的展示出执行过程,有助于理解代码;
[*]如果执行失败,可以在第一时间定位出错位置,提高排障效率。
创建窗口和渲染器

创建一个 800x600 大小的窗口,然后移动到屏幕居中的位置:
SDL_Window* window = SDL_CreateWindow("Hello, SDL3!", 800, 600, SDL_WINDOW_RESIZABLE);
if (!window) {
    SDL_Log("Could not create a window: %s", SDL_GetError());
    return -1;
}

SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);创建和窗口关联的渲染器:
SDL_Renderer* renderer = SDL_CreateRenderer(window, nullptr);
if (!renderer) {
    SDL_Log("Create renderer failed: %s", SDL_GetError());
    return -1;
}所有图形图像都是通过渲染器绘制到窗口,以背景色绘制为例,代码如下:
SDL_SetRenderDrawColor(renderer, 16, 0, 16, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
这里使用的背景色是 RGB(16, 0, 16),像我这样曾经用过 DirectDraw 渲染视频的老家伙们对这个颜色值应该很熟悉
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

垢峒 发表于 2025-10-27 01:07:19

过来提前占个楼

劳暄美 发表于 2025-12-31 15:52:44

喜欢鼓捣这些软件,现在用得少,谢谢分享!

廖彗云 发表于 2026-1-7 06:35:02

收藏一下   不知道什么时候能用到

赫连如冰 发表于 2026-1-14 02:56:46

这个有用。

许娴广 发表于 2026-1-14 22:13:53

感谢发布原创作品,程序园因你更精彩

骆贵 发表于 2026-1-17 01:19:14

很好很强大我过来先占个楼 待编辑

习和璧 发表于 2026-1-17 02:03:31

不错,里面软件多更新就更好了

乐敬 发表于 2026-1-17 20:29:29

感谢分享,学习下。

酒跚骼 发表于 2026-1-18 04:16:56

yyds。多谢分享

骆贵 发表于 2026-1-22 03:55:42

不错,里面软件多更新就更好了

郦惠 发表于 2026-1-22 11:58:52

新版吗?好像是停更了吧。

豺独 发表于 2026-1-22 11:59:51

感谢分享,下载保存了,貌似很强大

猷咎 发表于 2026-1-22 14:26:14

东西不错很实用谢谢分享

诀锺 发表于 2026-1-25 10:20:26

这个好,看起来很实用

吕颐然 发表于 2026-1-25 11:14:25

这个好,看起来很实用

吮槌圯 发表于 2026-1-26 06:58:15

过来提前占个楼

忙贬 发表于 5 天前

感谢,下载保存了

桂册 发表于 前天 16:31

收藏一下   不知道什么时候能用到

府扔影 发表于 前天 22:44

谢谢分享,辛苦了
页: [1] 2
查看完整版本: SDL3 入门(2):第一个窗口