Date: January 22 2025 jsge@1.5.3 Merge draw calls / Соединение вызовов отрисовки Status: In Progress (texts) Done primitives (1.5.9) Done images (1.5.5) Done tilesets (1.5.6) Context: Каждая добавляемая в игру сущность рисуется отдельно, что плохо сказывается на производительности. Можно склеить вызовы с одинаковыми webgl программами и одинаковыми текстурами, по принципам - если нет текстуры и программа одинаковая, либо текстура одинаковая и программа одинаковая. Есть функция set GameStageData._renderObject, которая добавляет объект в конец массива #renderObjects Есть функция get GameStageData._renderObject, которая возвращает массив #renderObjects Функция RenderLoop.render() перебирает этот массив, выполняет следующие действия 1. Удаляет объекты помеченные флагом isRemoved 2. Выполняет _processActiveAnimations() на объектах помеченных hasAnimations 3. Собирает массив Promise #webGlEngine._bindRenderObject() - которые фактический рисуют каждый объект отдельно 4. Выполняет Promise.allSettled() Текущая реализация WebGlDrawPrograms имеет расчет координат position, на основе расчета матриц и передаваемых параметров, translate, scale, rotate, resolution. Если склеивать вызовы отрисовки, нужно будет переносить эти расчеты в javascript. Нужно будет два метода для рисования, bind и draw, один будет "биндить" одинаковые программы, второй "биндить" и "отпралять на отрисовку". Decision: 1. Сделать webgl программу для рисования изображений без расчета position. 2. Перенести расчет position в javascript 3. RenderLoop.render() на этапе 3. определять можно ли склеить вызов отрисовки со следующим объектом если нет. В зависимости от этого рисовать объект или только подготавливать данные для буффера. 4. Протестировать что получится. Impact: No impact.