Date: July 18 2024
Optimize and make render faster / Сделать оптимизацию и увеличить быстродействие отрисовки

Status: Done

Context:
    It seems that the performance in terms of memory consumption is a little slow in Firefox@129.0b6,
    wasm version is a little faster, but js is slower,
    the problem is using arrays for intermediate results 
    and storing objects for collision calculations.

    Похоже, что производительность в части потребления памяти немного хромает в Firefox@129.0b6,
    wasm версия работает чуть быстрее,но js - медленнее,
    проблема заключается в использовании массивов для промежуточных результатов 
    и хранения объектов для расчета столкновений.
    
Decision:
    Optimize the engine to use ArrayBuffer instead of an Array.
    1. Rewrite methods in WebGlEngine 
    2. Rewrite methods and data structures in GameStageData
        * array boundaries Array<Array>> -> Float32Array
        * ellipse boundaries Array<Array>> -> Float32Array
        * point boundaries Array<Array>> -> Float32Array
        * add boundaries bPointer, which will points to the last empty cell
        * add ePointer
        * add pPointer
    3. Max bufferArray sizes should be precalculated as (layer non empty cells * 12)
    4. Rewrite the collision detector to work with Float32Array

    Оптимизировать движок и писать данные в буфер, вместо массива.
    1. Переписать методы в WebGlEngine 
    2. Переписать методы и структуры данных в GameStageData
        * массив boundaries -> Float32Array
        * добавить указатель boundaries bPointer, 
          он должен указывать на последний пустой слот в буфере
        * ellipse boundaries Array<Array>> -> Float32Array
        * point boundaries Array<Array>> -> Float32Array
        * добавить ePointer
        * добавить bPointer
    3. Максимальный размер буферов должны высчитываться по формуле (количество непустых ячеек * 12)
    4. Переделать работу детектора коллизий для работы с Float32Array

Impact:
    No impact.