сую указатель на рендер. В методе draw рисую линию или прямоугольник. Как сделать по уму? Не хранить рендер в каждом виджете, а хранить размер, цвет фона и т д А уже при рисовании передавать эти данные. Как вообще правильно делать?
я бы передавал контекст в метод draw
Вместо того, чтобы каждый элемент рисовать по отдельности, сделай батчер, который у тебя будет дровколы твои группировать, и за раз будешь по несколько элементов рисовать
Я об думал, я в строю данный механизм под капот фреймворка который юзаю для игры. Явно архитектурно руками создавать батчеры не нужно будет делать.
К примеру я рисую кнопки, делаю push_back в вектор, линию + цвет, прямоугольник или текстура. После чего прохожу по массиву и стараюсь объеденить похожие элементы в draw call. После очищаю вектор, и снова заполняю. Это имеется ввиду?
+-. Обычно группируют по слою и материалу
У меня группировка идёт по рисуемому примитиву. Пока я только записываю в буфер без объединения в draw call'ы. https://github.com/JordanCpp/Lib-LDL/blob/c256ff486fbe2bb5d30778a4d06acf82a5222d52/source/Shared/Graphics/Renders/OpenGL1/RenderBufferOpenGL1.cpp#L92
Там два варианта вроде. Либо через draw instanced и трансформации, либо через обновление вертексного буфера (по крайней мере из того что я видел). И получается ты либо юзаешь один свой вертексный буффер с одним примитивом и через инстансинг его множишь, либо делаешь так же один буффер, но примитивы накидываешь в него по мере поступления (трансформируешь на цпу). Ну и батч соответственно должен иметь один материал и один и тот же слой
Обсуждают сегодня