ModelInstance::render poses its model (updateCalSkeleton) before drawing it; the adapter redirects that one call (after checking it) to ours, which between ticks moves each playing animation that went on a frame at the last tick ahead by the fraction of a frame since, has IMVU's code pose the skeleton (Cal3D poses between keyframes), and puts the animations back, marking the skeleton to be posed again. Held, looping and starting animations are posed as they are. The frame lengths come from zero.dll's millisecondsPerFrame and secondsPerFrame. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
065c7e9300
commit
2471b1fd4f
2 files changed
+207
-22
No files matched your search
@@ -1,11 +1,14 @@
|
||||
#pragma once
|
||||
// Our hooks into SceneWindow.dll's scene code, installed once, the first time an engine is made. Each replaces a
|
||||
// pointer IMVU's code calls through (an entry of an exported vtable), after checking it holds the function expected,
|
||||
// with ours, which calls IMVU's: nothing else is changed, and nothing is if a check fails (an unexpected
|
||||
// SceneWindow.dll: the hooks' features are then off, and the client runs as it would without them).
|
||||
// Our hooks into SceneWindow.dll's scene code, installed once, the first time an engine is made. Each replaces where
|
||||
// IMVU's code calls a function (an entry of an exported vtable, or a call instruction's target), after checking it
|
||||
// calls the function expected, with ours, which calls IMVU's: nothing else is changed, and nothing is if a check
|
||||
// fails (an unexpected SceneWindow.dll: the hooks' features are then off, and the client runs as it would without).
|
||||
//
|
||||
// - SceneViewer::step (the IFrameListener vtable): the client's tick, 30 times a second (SceneWindow.dll's runApp
|
||||
// calls stepFrame, which steps each scene viewer). Recorded, for the frame pacer and for drawing between ticks.
|
||||
// - ModelInstance::render's call to updateCalSkeleton, which poses the model before it's drawn: between ticks, the
|
||||
// model is posed at the time between them (its animations' times moved on by the fraction of a frame since the
|
||||
// tick; Cal3D poses between keyframes), then its animations are put back as they were.
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
|
||||
Reference in new issue
Block a user