Как отделить SDL_Texture от SDL_Renderer?

#c #sdl #sdl-2 #decoupling

#c #sdl #сдл-2 #развязка

Вопрос:

У меня есть класс sprite, который использует SDL_Texture SDL_Surface вместо perfomance . Класс выглядит примерно так:

 class Sprite
{
    public:
        ...

    private:
        SDL_Texture *m_texture;
        SDL_Rect m_blitRect;

        int m_x;
        int m_y;
};
 

Теперь проблема в том, что при создании an SDL_Texture вам также нужен SDL_Renderer объект, а также an SDL_Surface для его создания. Обычно это выглядело бы примерно так:

 SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface);
 

Поверхность SDL может быть создана и удалена при создании текстуры, однако проблема в том, что я хочу иметь возможность иметь объект рендеринга, который не является глобальным. Мне нужен несвязанный фреймворк, и я не знаю, как добиться этого в данном случае. Моей первой мыслью было создать класс средства визуализации и использовать его в качестве аргумента конструктора, но этого не может быть, поскольку это усложнило бы ситуацию в будущем и не может быть вариантом. Есть ли какие-нибудь другие способы разделить эти два понятия?

Комментарии:

1. Есть Texture , который на самом деле не вызывает метод SDL_Createxxx, пока он действительно не понадобится?

2. Добавьте это в качестве ответа, чтобы я мог пометить его правильно. Хотя спасибо 🙂

Ответ №1:

Если вы хотите отделить свой Texture от параметра renderer and surface , я думаю, что лучше всего отложить вызов до тех SDL_CreateTextureFromSurface пор, пока вы действительно не получите эти аргументы.

Таким образом, ваш Texture конструктор текстур не будет использовать / нуждаться в этих аргументах.