【发布时间】:2023-04-07 14:12:01
【问题描述】:
我一直在尝试构建一个简单的 SDL2 程序来显示图像然后退出。我有这个代码:
/* compile with `gcc -lSDL2 -o main main.c` */
#include <SDL2/SDL.h>
#include <SDL2/SDL_video.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_surface.h>
#include <SDL2/SDL_timer.h>
int main(void){
SDL_Init(SDL_INIT_VIDEO);
SDL_Window * w = SDL_CreateWindow("Hi", 0, 0, 640, 480, 0);
SDL_Renderer * r = SDL_CreateRenderer(w, -1, 0);
SDL_Surface * s = SDL_LoadBMP("../test.bmp");
SDL_Texture * t = SDL_CreateTextureFromSurface(r, s);
SDL_FreeSurface(s);
SDL_RenderClear(r);
SDL_RenderCopy(r, t, 0, 0);
SDL_RenderPresent(r);
SDL_Delay(2000);
SDL_DestroyTexture(t);
SDL_DestroyRenderer(r);
SDL_DestroyWindow(w);
SDL_Quit();
}
我知道我省略了每个函数是否成功的常规检查 - 它们都成功了,为了便于阅读,它们被删除了。我也知道我使用了 0 而不是空指针或正确的枚举值,这也不是问题的原因(因为当我正确构建程序时会出现同样的问题,这是一个快速测试用例,用于测试最简单的情况)
目的是出现一个窗口并显示图像(肯定在该目录中),等待几秒钟然后退出。然而,结果是窗口正确显示,但窗口被黑色填充。
一个额外的注释SDL_ShowSimpleMessageBox() 似乎可以正常工作。不过,我不知道这与框架的其余部分有何关系。
【问题讨论】:
-
显示您使用的实际代码。为什么用 0 代替 NULL?
-
此实际代码在编译和运行时演示了所描述的行为。这是在本网站上提问时通常要求的错误的小型自包含示例。实际程序的结构不是允许以这样一种易于理解的方式上传它。 0 在那里而不是 NULL,因为我运行它很快,并且没有费心返回导入 stdlib 以获取一个不重要的宏。