一、什么是SDL?
SDL是 “Simple DirectMedia Layer”的缩写,SDL是一个开源的跨平台的多媒体库,它通过OpenGL和2D视频帧缓冲,提供了针对音频、视频、键盘、鼠标、控制杆及3D硬件的低级别的访问接口。它在MPEG播放软件、模拟器以及许多游戏中得到了广泛的应用。SDL 支持多种操作系统,如Linux, Windows, MacOS, Mac OS X, FreeBSD等等。SDL采用GNU的LGPL第二版许可发行,该许可允许你自由地链接其动态链接库,甚至可以在商业软件中自由地使用。
SDL官网:http://www.libsdl.org/index.php
二、 SDL 开发环境配置
学习阶段推荐使用Visual Studio进行学习,因为环境配置方面相对来说比较简单。后续需要向其他平台迁移的时候,再进一步深入学习和整理。
目前SDL有两个版本 1.2 和 2.0,建议学习阶段使用 SDL 2.0。
1. 下载SDL Development Libraries
下载地址为:http://www.libsdl.org/download-2.0.php
解压缩文件,将这个文件夹拷贝到任意地方。
2. 在Visual Studio 中新建一个控制台项目
将第1步解压的文件的include目录和lib目录拷贝到项目的目录下。
3. 添加include目录
右键打开项目的属性窗口,找到 C/C++,添加附加包含目录:
4. 添加 library 目录
将lib目录添加配置进来:
5. 添加"附加依赖项"
先找到属性-->链接器--> 输入---> 附加依赖项,添加附加依赖项:SDL2.lib;SDL2main.lib;
6. 编写HelloWorld代码,验证环境配置
// SDL.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include "pch.h" #include <iostream> extern "C" { #include "SDL.h" } int main(int argc, char* argv[])
{ if (SDL_Init(SDL_INIT_VIDEO)) { std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; return 1; } SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN); if (win == nullptr) { std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl; return 1; } SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (ren == nullptr) { SDL_DestroyWindow(win); std::cout << "SDL_CreateRender Error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } std::string imagePath = "1.bmp"; SDL_Surface *bmp = SDL_LoadBMP(imagePath.c_str()); if (bmp == nullptr) { SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp); SDL_FreeSurface(bmp); if (tex == nullptr) { SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } for (int i = 0; i < 3; ++i) { SDL_RenderClear(ren); SDL_RenderCopy(ren, tex, NULL, NULL); SDL_RenderPresent(ren); SDL_Delay(1000); } SDL_DestroyTexture(tex); SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); SDL_Quit(); // Return return 0; }
7. 查看代码运行结果
至此,我们的SDL的环境配置成功了,并且能够正常使用了。