【问题标题】:SDL_CreateRenderer returning nullptrSDL_CreateRenderer 返回 nullptr
【发布时间】:2015-02-28 18:00:55
【问题描述】:

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

谢谢 :)

【问题讨论】:

  • 在创建窗口时检查if 语句中的条件,这是那里的赋值。
  • 哈哈,谢谢伙计,我一直在网上寻找这个,感觉很愚蠢:P

标签: c++ sdl sdl-2


【解决方案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;
}

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

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 2018-05-23
    • 2021-05-22
    • 1970-01-01
    • 2023-04-03
    • 2015-08-27
    • 2023-04-10
    • 1970-01-01
    • 2019-01-28
    相关资源
    最近更新 更多