effect-format.runtime.state-and-metadata |
Пара runtime-артефактов |
RenderEffect загружает запечённый исходник .fofx для состояния проходов/рендеринга и один артефакт .fofx-N-info на проход для отражённых позиций ресурсов. |
Изменение только бинарного файла шейдера не может изменить число проходов или состояние смешивания/глубины. |
Source/Frontend/Rendering.cpp |
effect-format.runtime.cache-key |
Кеш эффекта только по пути |
EffectManager кеширует один изменяемый объект RenderEffect для каждого пути ресурса. Повторная загрузка того же пути возвращает существующий объект. |
ScriptValueBuf и необязательные buffer-ы кадра принадлежат кешированному объекту, а не слоту эффекта. |
Source/Client/EffectManager.cpp |
effect-format.runtime.first-usage |
EffectUsage первой загрузки |
Первая загрузка пути фиксирует EffectUsage объекта RenderEffect. Не используйте один путь для несовместимых категорий ImGui, QuadSprite, Primitive или Model. |
Ключ кеша не включает EffectUsage, поэтому последующие загрузки возвращают первый объект без перестройки его вершинного layout или допущений pipeline. |
Source/Client/EffectManager.cpp, Source/Frontend/Rendering.h |
effect-format.runtime.script-value-lifetime |
Сохранение ScriptValue |
При первой загрузке эффект, объявляющий ScriptValueBuf, получает обнулённый buffer. Значения сохраняются у кешированного пути до перезаписи или явной очистки; SetEffect их не очищает. |
Переход на другой путь выбирает buffer другого объекта, а возврат к ранее загруженному пути восстанавливает прежние значения этого объекта. |
Source/Client/EffectManager.cpp, Source/Client/Client.cpp |
effect-format.runtime.script-value-target |
Разрешение цели script value |
Скриптовая запись разрешает выбранный сейчас эффект для одного EffectType/subtype, требует его загрузки и объявления ScriptValueBuf. |
Запись слота в passthrough/эффект по умолчанию без ScriptValueBuf является скриптовой ошибкой. |
Source/Client/Client.cpp |
effect-format.runtime.per-frame-update |
Обновления buffer-ов кадра |
Каждый загруженный эффект посещается в каждом кадре; TimeBuf и RandomValueBuf создаются/обновляются только тогда, когда reflection помечает их необходимыми. |
Объявление встроенного buffer-а подключает эффект к его producer-у Engine. |
Source/Client/EffectManager.cpp |
effect-format.runtime.default-selection |
Разрешение эффекта по умолчанию |
Пустой путь SetEffect возвращает эффект слота по умолчанию; непустой путь загружается с EffectUsage эффекта по умолчанию. |
Проекты могут временно переопределить слот и восстановить значение Engine/проекта по умолчанию, не указывая его путь. |
Source/Client/EffectManager.cpp |