CreateRenderer返回null

CreateRenderer返回null

我才刚刚开始学习SDL,并且正在遵循所找到的教程之一,我编写了一个简单的代码将bmp图片呈现到屏幕上,但是它不起作用,问题在于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一直是空的,为什么?

我虽然是因为计算机问题,但我在网上没有发现任何问题,但我使用的是win 8.1,intel hd4000图形卡和Visual Studio 2012。

谢谢 :)

最佳答案

创建SDL_Window时,将执行检查以查看其是否为空。这是一件好事,但是在您的if语句中,您使用赋值运算符==而不是使用equals比较运算符=

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;
}


这会将null分配给win变量,并导致SDL_CreateRenderer返回null,因为这需要有效的SDL_Window

10-08 12:41