我想围绕一些SDL2类编写一个C++包装类。SDL2包装类抱怨`无效的渲染器'
现在我有这方面的工作代码,它显示一个红色的屏幕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
一步直接进入到下一行,实际上并没有插手......我甚至不。