SDL2 Wrapper类抱怨“无效的渲染器”

时间:2016-03-12 23:04:25

标签: c++ wrapper sdl-2

我试图围绕某些SDL2类编写C ++包装器类。

现在我有了这个工作代码,它显示一个红色屏幕5秒钟(如你所见,我的包装类在命名空间sdl2cc中):

int main(void)
{
    if (SDL_Init(SDL_INIT_VIDEO) < 0) return 1;

    sdl2cc::Window window{"SDL_RenderClear"s, sdl2cc::Rect{sdl2cc::Point{SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED}, sdl2cc::Dimension{512, 512}}, {}};
    sdl2cc::Renderer renderer{window, {}};

    renderer.draw_color(sdl2cc::Color{sdl2cc::RGB{255,0,0}, sdl2cc::Alpha{255}});

    SDL_RenderClear(renderer.data());
    // renderer.clear();

    SDL_RenderPresent(renderer.data());
    // renderer.present();

    SDL_Delay(5000);
    SDL_Quit();
}

在SDL2 SDL_Renderer的包装类中,我有一个std::unique_ptr数据成员renderer_指向实际的SDL_Renderer

renderer.data()公开了这个指针(return this->renderer_.get();)。

我希望成员函数renderer.clear()renderer.present()能够正常运行。可悲的是也没有。这就是他们的样子:

void sdl2cc::Renderer::clear(void)
{
    if (SDL_RenderClear(this->data()) < 0)
    {
        std::cerr << "Couldn't clear rendering target with drawing color:" << ' ' << SDL_GetError() << '\n';
    }
}

void sdl2cc::Renderer::present(void)
{
    SDL_RenderPresent(this->data());
}

如果我只使用renderer.clear(),则会打印我的错误消息+ 无效的渲染器

如果我只使用renderer.present(),则会显示黑屏。

有什么问题?

为什么我自己的功能和SDL功能不相同?

问题似乎在于函数调用:

SDL_RenderClear(renderer.data()); // works

// somewhere else:
void sdl2cc::Renderer::clear(SDL_Renderer* r)
{
    if (SDL_RenderClear(r) < 0)
    {
        std::cerr << "Couldn't clear rendering target with drawing color:" << ' ' << SDL_GetError() << '\n';
    }
}

renderer.clear(renderer.data()); // doesn't work: Invalid Renderer

但我仍然不明白问题所在。对我而言似乎完成了同样的事情,但不知何故,一个人抛出一个错误,另一个人没有。

编辑: 另一个有趣的事情是,尝试使用renderer.clear()进入lldb直接进入下一行,而不是实际进入...我甚至不会。

1 个答案:

答案 0 :(得分:0)

问题与多重链接库有关。 我使用SDL2库编译了自己的库,然后使用我的库 SDL2库编译了我的可执行文件。

相关问题