-
Nikitos создал
Первый пункт §4.1 («текстурированные треугольники и меш»). Раньше `r2d_batch_mesh` всегда биндил БЕЛУЮ текстуру, и `u`/`v` были мертвы — текстурированный псевдо-3D был невозможен. Теперь: * `R2DTriBatch` помнит `texture` — id текстуры пакета; * `engine.submitMesh(vertices, count?, texture?)`: третий аргумент — id из `engine.loadTexture` / `engine.textureFromPixels` / `$.atlas`; без него белая текстура, как раньше; * `r2d_render_draw_mesh` биндит текстуру пакета, а не жёстко белую. ПРОВЕРЕНО ПО ПИКСЕЛЯМ (tests/agent/highlevel_mesh_test.py): текстура 2x1 «красный | зелёный», u=0 слева → красная половина 100..199, u=1 справа → зелёная 200..299. Плюс прежние проверки: меш ровно по вершинам, z-буфер отсекает дальний треугольник независимо от порядка, 100 треугольников без падения. ЗАОДНО ИСПРАВЛЕНА ЛОЖЬ В ДОКЕ: `r`/`g`/`b` у вершин — 0..255 (как у drawRect), а не 0..1. `r2d__color_f32` клампит в 255, поэтому игрок, следующий доке, получал почти чёрный меш — я сам на этом обжёгся при первом замере. Поправлено в комментарии script.c, в API.md (там же появился пример с текстурой) и в depth.md. ТЕСТ ПЕРЕПИСАН на ОДИН обработчик `$.update`: он накапливает функции, и каждый новый кадр рисовал бы все меши сразу — более поздний перекрывал предыдущий, и проверки UV «падали» из-за моего же теста. Второй аргумент `undefined` движок читает как count=0, поэтому count считается в JS явно. ОСТАЛОСЬ ИЗ §4.1: `$.mesh` (вершины с UV, веса на 1-2 кости, скелет-дерево, CPU-деформация без аллокаций) и извлечение тегов/пивотов/костей из Aseprite JSON (сам импорт атласов уже есть в `$.atlas`). §4.2 (stencil) тоже не сделан — depth-stencil формат сейчас только depth. Полный qjs, агентские тесты, doc_coverage, doc_claims, быстрый набор — зелёные.
f0fb28e7