При изучении C++ и OpenGL столкнулся с некоторыми трудностями.
Подскажите, пожалуйста, как с точки зрения архитектуры более правильно организовать взаимодействие классов при рисовании объектов на экране?
Допустим, я хочу отобразить несколько игровых объектов, для каждого из которых имеется отдельный класс: Player, Enemy и т.п. Имеются классы ResourceManager, Sprite, Renderer.
Пока рассматриваю два варианта:
1) В каждом классе, который может быть отрисован, добавить метод draw() и использовать как-то так:
playerSprite->draw();
enemySprite->draw();
2) Реализовать в классе Renderer методы для рисования объектов и использовать так:
renderer->drawSprite(playerSprite, coors, orientation);
В обоих случаях есть трудности с управлением ресурсами. Хотелось бы сделать загрузку спрайтов и управление всем отображением в классах игровых объектов. Но тогда придётся в каждый из них при создании передавать указатель на менеджер ресурсов, а при втором варианте ещё и на Renderer.
Player* player = new Player(resMgr, renderer);
Как мне кажется, это не очень правильное решение.
Есть вариант сделать классы ResourceManager и Renderer Singleton'ами и использовать их в любом нужном месте, тогда проблем не будет, но я читал много аргументов против такого метода.
Как организовать всё это правильно, чтобы можно было легко расширять и дорабатывать в дальнейшем?