SDL_CreateRenderer返回nullptr

时间:2014-07-03 13:17:22

标签: c++ sdl sdl-2

我刚刚开始学习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:)

1 个答案:

答案 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