#include #include #include //这里直接使用SDL_image库,可以加载如.jpg .png等各种格式的图片 //使用OutputDebugString #include "atlbase.h" #include "atlstr.h" // 定义窗口宽高 const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *g_pWindow = NULL; SDL_Renderer *g_pRenderer = NULL; SDL_Texture *g_pTexture = NULL; //========================================================= //函数名称:Init //说明:完成SDL初始化、创建窗口等 //========================================================= bool Init() { //(1)初始化所有SDL的各模块 if (SDL_Init(SDL_INIT_VIDEO) < 0) //这里可以初始化SDL的各种模块,包括定时器,视频,音频、摇杆等 //实际项目中一般只初始化要用到的模块即可;成功返回0 //具体有哪些模块可以通过在SDL_INIT_VIDEO上点击右键-转到定义来查看 { printf("Unable to Init SDL: %s", SDL_GetError()); //调用SDL_GetError()来查看失败原因 return false; } //(2)使用SDL创建窗口 g_pWindow = SDL_CreateWindow("Chapter 1: Hello World!", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (g_pWindow == NULL) { printf("Unable to Create Window: %s", SDL_GetError()); return false; } //(3)初始化渲染器(renderer),用于在窗口绘图 g_pRenderer = SDL_CreateRenderer(g_pWindow, -1, 0); if (g_pRenderer == NULL) { printf("Unable to Create Renderer: %s", SDL_GetError()); return false; } return true; } //========================================================= //函数名称:LoadImage //说明:加载图片 //========================================================= bool LoadImage(const char* filename) { const char *error; if (filename == NULL) { printf("LoadImage() error: filename is NULL!\n"); return false; } SDL_Surface *pTempSurface = IMG_Load(filename); //加载启动图像(splash image)到SDL_Surface对象 if (pTempSurface == NULL) { error = SDL_GetError(); printf("Unable to load image! SDL Error: %s\n", SDL_GetError()); return false; } g_pTexture = SDL_CreateTextureFromSurface(g_pRenderer, pTempSurface); //使用SDL_Surface对象创建纹理(texture) if (g_pTexture == NULL) { printf("Unable222 to create texture from surface! SDL Error: %s\n", SDL_GetError()); return false; } SDL_FreeSurface(pTempSurface); //回收surface对象占用的内存空间 return true; } //========================================================= //函数名称:Close //说明:销毁各对象 //========================================================= void Close() { //销毁窗口对象 SDL_DestroyWindow(g_pWindow); g_pWindow = NULL; //销毁渲染器对象 SDL_DestroyRenderer(g_pRenderer); g_pRenderer = NULL; //销毁纹理对象 SDL_DestroyTexture(g_pTexture); g_pTexture = NULL; //清除所有已初始化的子系统。在程序结束时调用。 SDL_Quit(); } //========================================================= //函数名称:main //说明:主函数 //========================================================= int main(int argc, char* argv[]) //注意这里必须在main的括号内加上int argc, char* argv[]否则报错"LNK2019无法解析的外部符号 _SDL_main" { //Step1:初始化SDL if (!Init()) { printf("Failed to Init!\n"); return -1; } //Step2:加载图片 if (!LoadImage("D:\\Work\\SDLHelloWorld\\Debug\\helloworld.jpg")) { printf("Failed to load media!\n"); return -2; } SDL_SetRenderDrawColor(g_pRenderer, 255, 255, 255, 0); //设置渲染器的颜色,第一个参数传入渲染器对象 //接下来依次是R、G、B值和Alpha值 //Step3:绘制图片三板斧 SDL_RenderClear(g_pRenderer); //使用某种绘图颜色来“清除”当前窗口 SDL_RenderCopy(g_pRenderer, g_pTexture, NULL, NULL); //将纹理复制到渲染器中;最后两个参数的使用详见下一篇教程 SDL_RenderPresent(g_pRenderer); //将渲染器中的内容在窗口中显示出来 OutputDebugString("Failed to load media!\n"); SDL_Delay(3000); //在程序结束之前延迟一段时间,以便观察窗口;实际项目中慎用! //Step4:释放内存资源并关闭SDL Close(); return 0; }