• Nikitos's avatar
    §10: лимиты видны игре, рассинхрон слоёв исправлен
    · 278cbe7d
    Nikitos создал
    Разобран §10. Главная проблема была не в самих числах, а в том, что игре нечем
    узнать, близко ли она к потолку, и что поведение при достижении разное — где-то
    -1, где-то исключение, где-то тихая потеря цвета.
    
    ЧТО СДЕЛАНО:
    * $.debug.limits() отдаёт ЗАНЯТОСТЬ, а не только потолки: вьюпорты,
      обработчики UI, события контакта, эффекты узлов, геймпады, касания. Раньше
      вьюпорты/обработчики/документы/контакты отдавали только максимум — то есть
      «где-то есть лимит», но не «сколько осталось»;
    * ИСПРАВЛЕН РАССИНХРОН СЛОЁВ: JS держал MAX_NODE_FX = 60, а C принимает 64 —
      четыре лишних эффекта JS терял молча. Теперь предел один (64, как в render.h);
    * новый r2d_render_viewport_live_count: занятость слотов вьюпорта;
    * API.md §14: ОДНА таблица всех лимитов с поведением при достижении (суставы,
      эффекты узла, шейдеры, вьюпорты, контакты, очередь текста, запросы к физике,
      группы звука, подписчики SDL, обработчики UI, документы, геймпады, касания) и
      указанием на $.debug.limits() для рантайма;
    * §10 переписан как «закрыто» с перечислением, что именно было не так,
      включая два пункта, о которых доки молчали: слоты вьюпортов берутся из общего
      бюджета 256 текстур, а «лимит 64 документа» не смертелен — слоты
      переиспользуются.
    
    Проверка (tests/agent/highlevel_limits_test.py, 15 проверок): отчёт отдаёт 23
    поля, потолки совпадают с C (эффекты 64, вьюпорты 8, шейдеры 16, геймпады 4),
    занятость тел/суставов/вьюпортов РЕАЛЬНО растёт от действий игры, после
    destroy вьюпорта возвращается, занятость нигде не выше потолка. Полный набор
    qjs, агентские тесты, doc_coverage, doc_claims, быстрый набор — зелёные.
    278cbe7d