我刚刚开始学习SDL,而且我按照我发现的其中一个教程,写了一个简单的代码来渲染bmp pic到屏幕但它不起作用,问题是没有创建SDL_CreateRenderer(指针一直指向nullptr)
dint main (int argc, char* atgs[]) {
int a = 0;
if (SDL_Init(SDL_INIT_EVERYTHING) == -1) {
std::cout << SDL_GetError() << std::endl;
return 1;
}
a = 1;
SDL_Window *win = nullptr;
win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
if (win = nullptr) {
std::cout << SDL_GetError() << std::endl;
return 1;
}
SDL_Renderer *ren = nullptr;
ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (ren == nullptr) {
std::cout << SDL_GetError() << std::endl;
return 1;
}
SDL_Surface *bmp = nullptr;
std::cout << "hello";
bmp = SDL_LoadBMP("c:/hello.bmp");
if (bmp == nullptr) {
std::cout << SDL_GetError() << std::endl;
return 1;
}
SDL_Texture *tex = nullptr;
tex = SDL_CreateTextureFromSurface(ren, bmp);
SDL_FreeSurface(bmp);
SDL_RenderClear(ren);
SDL_RenderCopy(ren, tex, NULL, NULL);
SDL_RenderPresent(ren);
SDL_Delay(2000);
SDL_DestroyTexture(tex);
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
ren保持为null,任何想法,为什么?
我虽然是因为电脑,但我没有在网上发现任何问题,我使用的是win 8.1,intel hd4000显卡和2012年视觉工作室。
thx:)
答案 0 :(得分:1)
创建SDL_Window时,执行检查以查看它是否为空。这是一件好事,但是在你的if语句中,你没有使用等于比较运算符==
,而是使用了赋值运算符=
win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
if (win = nullptr) { // This should be if (win == nullptr) {
std::cout << SDL_GetError() << std::endl;
return 1;
}
这会为win变量分配null并导致SDL_CreateRenderer
返回null,因为这需要有效的SDL_Window