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

打印 上一主题 下一主题

主题 876|帖子 876|积分 2628

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

首先设置日志输出级别:
  1. SDL_SetLogPriorities(SDL_LOG_PRIORITY_VERBOSE);
复制代码
因为照旧开发阶段所以我们将输出日志级别设置为最低的 VERBOSE,这样所有的日志都会输出,有助于我们观察 SDL 的运行情况,出现错误时可以得到尽量详细的出错信息,有助于我们快速定位问题。
接下来初始化 SDL 库,参数 SDL_INIT_VIDEO 指定初始化的子体系为视频体系:
  1. if (SDL_Init(SDL_INIT_VIDEO) < 0) {
  2.     SDL_Log("SDL_Init failed: %s", SDL_GetError());
  3.     return -1;
  4. }
复制代码
现实上这一步可以省略,因为在调用 SDL API 时其内部会自行检查和初始化所需使用的子体系。比如接下来要使用的 SDL_CreateWindow 函数,内部有这样的代码:
  1. if (!_this) {
  2.     /* Initialize the video system if needed */
  3.     if (SDL_Init(SDL_INIT_VIDEO) < 0) {
  4.         return NULL;
  5.     }
  6.     ...
  7. }
复制代码
其中 _this 是视频子体系初始化完成后设置的全局变量,声明如下:
  1. static SDL_VideoDevice *_this = NULL;
复制代码
虽然不是必须的,但是我们仍然发起调用 SDL_Init 对主要用到的子体系举行显式初始化,目的有两个:

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

创建一个 800x600 大小的窗口,然后移动到屏幕居中的位置:
  1. SDL_Window* window = SDL_CreateWindow("Hello, SDL3!", 800, 600, SDL_WINDOW_RESIZABLE);
  2. if (!window) {
  3.     SDL_Log("Could not create a window: %s", SDL_GetError());
  4.     return -1;
  5. }
  6. SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
复制代码
创建和窗口关联的渲染器:
  1. SDL_Renderer* renderer = SDL_CreateRenderer(window, nullptr);
  2. if (!renderer) {
  3.     SDL_Log("Create renderer failed: %s", SDL_GetError());
  4.     return -1;
  5. }
复制代码
所有图形图像都是通过渲染器绘制到窗口,以背景色绘制为例,代码如下:
  1. SDL_SetRenderDrawColor(renderer, 16, 0, 16, 255);
  2. SDL_RenderClear(renderer);
  3. SDL_RenderPresent(renderer);
复制代码
这里使用的背景色是 RGB(16, 0, 16),像我这样曾经用过 DirectDraw 渲染视频的老家伙们对这个颜色值应该很熟悉
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表