• Nikitos's avatar
    Z-буфер: глубина в рендере, тест в конвейерах, путь меша псевдо-3D
    · 9ee5a4cb
    Nikitos создал
    Первый шаг псевдо-3D (docs/TASKS.md §12.12). Без z-буфера псевдо-3D не бывает:
    плоский спрайт не может перекрываться выпуклостью, если глубины нет вовсе.
    
    * текстура глубины D32_FLOAT под размер кадра со пересозданием при смене размера;
      подключается целью глубины к проходу сцены с очисткой в 1.0 (дальняя
      плоскость, ближе — меньше);
    * тест глубины (LESS_OR_EQUAL) включён в конвейерах по умолчанию, управляется
      из игры: $.gfx.depth(on?) и engine.setDepth/engine.depth;
    * СПРАЙТЫ пишут z = 0, поэтому порядок отрисовки между ними сохраняется, а
      прежняя отрисовка выглядит ровно как раньше — это проверено сравнением
      кадров (тест highlevel_depth_test.py);
    * новая подсистема меша: свой формат вершины (позиция float3 с глубиной + uv +
      цвет, 24 байта), свой вершинный шейдер, конвейеры на каждый режим смешивания,
      свой GPU-буфер и заливка; меш рисуется ПЕРВЫМ в проходе сцены, чтобы успеть
      записать глубину до спрайтов;
    * engine.depthInfo() — диагностика (текстура, конвейер, счётчики меша): без неё
      «меш не рисуется» неотличимо от «меш не создан».
    
    Найденные ошибки:
    1) атрибут глубины с нулевым смещением пересекался с позицией, и конвейер меша
       молча не создавался (заметно только по диагностике);
    2) ранний выход заливки и ранний выход отрисовки сцены забывали про меш — кадр
       только с мешем не заливался и не рисовался вовсе;
    3) конвейеры меша создавались только в пути живых шейдеров и отсутствовали в
       базовом пути инициализации.
    
    ЧЕСТНО: сам меш пока НЕ рисуется на экране — конвейер и буфер есть, кадр не
    меняется. Это записано в docs/highlevel/depth.md и в docs/TASKS.md §12 отдельной
    задачей; z-буфер при этом полностью рабочий и проверенный.
    
    Проверка: tests/agent/highlevel_depth_test.py (6 проверок), полный набор qjs,
    bsp и агентских тестов зелёный.
    9ee5a4cb