2016-03-12 5 views
-1

Я пытаюсь написать класс оболочки 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 идет непосредственно к следующей строке, фактически не ступая ... Я даже не.

ответ

0

Проблема связана с многосвязными библиотеками. Я скомпилировал свою библиотеку с библиотеками SDL2, а затем скомпилировал свой исполняемый файл с моей библиотекой и библиотеками SDL2.

 Смежные вопросы

  • Нет связанных вопросов^_^