diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 07:54:52 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 07:54:52 +0300 |
| commit | b500e32ca2b35fbefbdd5c94a1cf782e309ed20a (patch) | |
| tree | f6edcad955c0e4adc8571e03e3ddffe5b8be1914 /docs/tomes/08-evidence.md | |
| parent | e7d869d8d04e8137ad68c0c82ab1908568c80f72 (diff) | |
| download | fparkan-b500e32ca2b35fbefbdd5c94a1cf782e309ed20a.tar.xz fparkan-b500e32ca2b35fbefbdd5c94a1cf782e309ed20a.zip | |
docs(evidence): correct Terrain camera receiver
Diffstat (limited to 'docs/tomes/08-evidence.md')
| -rw-r--r-- | docs/tomes/08-evidence.md | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/docs/tomes/08-evidence.md b/docs/tomes/08-evidence.md index fb7c363..7c35ab4 100644 --- a/docs/tomes/08-evidence.md +++ b/docs/tomes/08-evidence.md @@ -244,6 +244,16 @@ end-of-render callbacks вынесен также в отдельный `sendEnd Это доказывает порядок передачи camera и границы frame lifecycle, но не layout camera object, не матрицы projection/view и не значения viewport selectors. +Отдельная проверка GOG `Terrain.dll` (`AF87D1B2E728A0BE73C52BE3B44CC196AB46DA7799F25A15D40F8C9B0B425EAD`, +499 712 bytes) уточняет receiver side. `stdSetCurrentCamera2` находится по +RVA `0x4FD40`: при инициализированном Terrain он требует у переданного объекта +interface selector `18` и вызывает slot `+12` результата. Он **не** записывает +переданный pointer в `stdGetCurrentCamera2`. Последний возвращает Terrain global, +который внутренний initialization path устанавливает результатом selector `8` на +Terrain object. Следовательно, selector `18`, slot `+12` и global selector `8` +должны оставаться именованными evidence boundary до dynamic capture; считать +`stdGetCurrentCamera2` getter-ом переданной camera было бы ошибкой. + ### Vtable и interface negotiation Вызовы вида `object->vfunc(offset)` доказывают порядок slots, даже когда имя |
