Как грамотно построить класс-рендерер? [закрыт]

89
17 января 2021, 01:10
Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 1 год назад.

Улучшить вопрос

У меня есть проект, в котором имеются классы: View, Scene, Item и Renderer. Тобишь у меня есть некая сцена, которую я отображаю во вью вместе с доступными в заданном пространстве итемами. Для прорисовки используется opengles, вызовы которого скрыты за методами класса Renderer, который управляет opengl программами, шейдерами а также отрисовывает текстуры.

Изначально все было построено так: View выясняет у Scene какие Item-s видны и передает ему уже сконфигурированный объект класса Renderer в метод render. В этом методе Item просто дергает нужный метод из Renderer (вроде renderRing). После всего этого буферы свапаются и мы видим изображение. Однако это не оптимально из-за того, что в на gpu каждый раз передаются данные, которые уже были переданы до этого (к тому каждый раз происходят вычисления, вроде триангуляции, что тоже плохо). Чтобы избежать этого я создал класс Cache который использует VAO для обращения к уже переданным на GPU данным. Теперь методы Renderer возвращают Cache который мы можем сохранить и использовать для рендеринга в дальнейшем. Но это оказалось плохой идеей: дело в том, что если мы имеем несколько View то Cache все равно будет создан только один раз (так как сцена все равно одна), а из-за этого во втором View картинка не может быть прорисована (так как там другой Renderer с другой программой.

Как правильно организовать класс Renderer исходя из вышеизложенного? Следует также учесть, что классы View и Item изначально абстрактные и количество наследников нам изначально не может быть известно (соответсвенно я не могу для Renderer сдесь применить визитера). Я полагаю, что необходимо хранить Cache не в итемах, а именно в Renderer (что позволит использовать несколько View), но не могу понять как это правильно организовать.

READ ALSO
Как можно вернуть из JNI vector<vector<float>>?

Как можно вернуть из JNI vector<vector<float>>?

У меня есть вот такая C++ имплементация

87
Не работает jquery в Visual Studio 2017

Не работает jquery в Visual Studio 2017

Есть проект aspnet core 2

139
&lt;div&gt; или стандарт?

<div> или стандарт?

Недавно начал изучать HTML и уже 3 сайта написал (списывал проекты с ютуба и разбирал код)Везде видел <div> <div> вместо <header> <footer> и тд

150
Как сверстать блок с линиями отходящими от центральной картинки?

Как сверстать блок с линиями отходящими от центральной картинки?

Возможно, кто-то сталкивался с подобными блоками?

139