diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 09:30:21 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 09:30:21 +0300 |
| commit | 6e077f6c9d1b54320e4e8002b5053d4451c3835e (patch) | |
| tree | 4b4570c6b127f8b4ec62b27cfd76ea27970f36d7 /docs/reference/render-frame.md | |
| parent | 8ac6a11100cfe41a8a139f9b6d19c4e82a3bf1c5 (diff) | |
| download | fparkan-6e077f6c9d1b54320e4e8002b5053d4451c3835e.tar.xz fparkan-6e077f6c9d1b54320e4e8002b5053d4451c3835e.zip | |
docs(render): recover camera reflection factory ABI
Diffstat (limited to 'docs/reference/render-frame.md')
| -rw-r--r-- | docs/reference/render-frame.md | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/docs/reference/render-frame.md b/docs/reference/render-frame.md index 54bcf9a..ec78020 100644 --- a/docs/reference/render-frame.md +++ b/docs/reference/render-frame.md @@ -57,6 +57,16 @@ selector `18` on the supplied object and invokes slot `+12` on that result. It does not store the supplied pointer in `stdGetCurrentCamera2`; that getter returns a Terrain global populated by selector `8` during Terrain initialization. +`Terrain.dll!LoadCamera` adds a separate factory-side contract. Its GOG entry +at RVA `0x4EBE0` is `__stdcall` with four machine-word arguments, allocates +`0x1A4` bytes, calls the constructor at RVA `0x4EC60`, and returns the interface +at object offset `+0x134`. The constructor passes arguments 3 and 4 into base +initialization at `this + 4`, writes argument 3 to `this + 0x138`, and calls a +helper at RVA `0x4CEF0` with arguments 1, 2 and 4 plus `this`. Argument 1 is a +mode string: only `REFLECTION` and `REFLECTION_SHIFTED` produce a non-zero mode +value at `this + 0x1A0`. This is factory ABI evidence, not a recovered view or +projection matrix contract. + ## Parity risks - x87 precision and rounding; |
