Я пытаюсь написать класс оболочки C++ вокруг некоторых классов SDL2.SDL2 Класс Wrapper жалуется `Invalid Renderer`
Теперь у меня есть это рабочий код, который отображает красный экран в течение 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
у меня есть a std::unique_ptr
данные данные renderer_
с указанием фактического SDL_Renderer
. (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()
, он будет печатать мое сообщение об ошибке + Invalid рендерер.
Если я просто использую 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
Но я до сих пор не понимаю, где проблема. Для меня это, похоже, выполняет одно и то же, но почему-то один вызывает ошибку, а другой - нет.
EDIT: Еще одна интересная вещь, пытаясь вмешаться в renderer.clear()
с lldb
идет непосредственно к следующей строке, фактически не ступая ... Я даже не.