Hello SDL: 第一个图形窗口
好文章,来自【福优学苑@音视频+流媒体】
简介
这一篇教程包含最主要也最基础的一步——弹出一个窗口(Window)
因为会用到SDL库所以在代码一开始包含SDL.h,这里使用stdio.h而不是iostream,用C的标准IO(理由是more thread safe),对于这样比较简单的程序,使用你习惯的IO就好。
Createwindow(...)
包含头文件之后,我们定义了存储要生成的窗口的宽(width)和高(height)的常量。
SDL surface就是一个2D的图像,它的指针既可以指向文件中的图像,也可以指向屏幕上正在显示的图像。
(A SDL surface is just a 2D image. A 2D image can be loaded from a file or it can be the image inside of a window. )在这里它指向屏幕里的窗口中的图像(所以名字叫screenSurface)
定义完窗口和screen surface之后,对SDL进行初始化。
若没有对SDL进行初始化,则无法调用任何SDL函数。
因为在这篇教程里面我们只需要用SDL的视频子系统(video subsystem)创建一个窗口,我们只给这个初始化函数SDL_INIT_VIDEO作为参数。
如果SDL成功初始化,我们就能使用SDL_CreatWindow()函数来创建窗口。
第一个参数设置窗口的标题或窗口的这一部分:
接下来的两个参数定义了窗口生成处的x和y的坐标。
因为我们暂时不用关心它创建在哪里,所以就直接使用SDL_WINDOWPOS_UNDEFINED这个预定义的常量来初始化x和y坐标。
接下来的两个参数定义了窗口的宽度和高度。
最后那个参数是创建标签(creation flag)。
以SDL_WINDOW_SHOWN作为此参数时,表示窗口一创建即为可见的(非隐藏窗口?)
如果窗口创建成功,如果能获取到窗口的surface,我们就能在surface上作图。而SDL_GetWindowSurface()就是干这个的。
为了使这篇教程尽量简单,我们所要对这个窗口做的就只是使用SDL_FillRect()函数来填充整个窗口。
案例参考:sdl2demo.cpp
案例参考:sdl2demo1.cpp
#include <QCoreApplication> #include <qdebug.h> #include <SDL2/SDL.h> #include <SDL2/SDL_thread.h> #include <SDL2/SDL_test_images.h> #include<iostream> using namespace std; //Screen dimension constants const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug()<< "Hello,sdl" ; SDL_Window *window = NULL; SDL_Renderer *renderer = NULL; SDL_Init(SDL_INIT_VIDEO);// 初始化函数,可以确定希望激活的子系统 window = SDL_CreateWindow("My First Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);// 创建窗口 if (!window) { return -1; } //基于窗口创建渲染器 renderer = SDL_CreateRenderer(window, -1, 0); if (!renderer) { return -1; } SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); //设置渲染器颜色 r、g、b、a SDL_RenderClear(renderer);//用指定的颜色清空缓冲区 SDL_RenderPresent(renderer); //将缓冲区中的内容输出到目标窗口上。 SDL_Delay(3000); // 延时3秒 SDL_DestroyRenderer(renderer); //销毁渲染器 SDL_DestroyWindow(window); //销毁窗口 SDL_Quit(); //退出SDL return a.exec(); }
好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***