Моя реалізація E / C є базовою, де Суб'єкти - це лише ідентифікатори, Компоненти - це дані, а Системи діють на Дані. Зараз у мене проблеми з матеріалами об'єктів та рендерінгом взагалі. Для простих objetcs у мене ModelComponent
, прив’язаний до a RenderSystem
, ModelComponent
є ідентифікатор вершинного буфера, який використовує система візуалізації. Простий MaterialComponent
, ймовірно, мав би кольорову чи дзеркальну міцність тощо, але я хотів, щоб він був досить гнучким, щоб дозволити проходити більше ніж один рендер і загальні "ефекти", які не такі прості, як проста змінна в MaterialComponent
.
Намагаючись вирішити ці проблеми, я придумав два рішення:
1 - Супергенеральний матеріальний компонент
Щось на зразок цього:
struct Material : public Component
{
ShaderData* shader;
std::vector<std::pair<std::string, boost::any>> uniforms;
[...]
};
і в системі візуалізації я б зациклився і передав уніформу в шейдер. Я вважаю, що це було б повільно, але досить швидко для моїх цілей.
2 - Ще один шар абстракції, MaterialData
Маючи клас для обгортання конкретних матеріалів, який може бути успадкований будь-яким спеціалізованим матеріалом, базовий клас матиме щось на кшталт, void set_shader_constants(ShaderData* d)
але реалізація залежить від кожного класу, і MaterialComponent
він матиме вказівник на об'єкт MaterialData.
Я не впевнений, якому підходу я б віддав перевагу, але жоден з них не торкається теми декількох пропусків або інших складних методів візуалізації.
Будь-яка ідея, як це досягти?