#pragma once #include "RE/N/NiTArray.h" namespace RE { class BSTriShape; class ImageSpaceManager; class ImageSpaceEffectParam; class ImageSpaceTexture; namespace BSGraphics { enum class TextureFilterMode; } class __declspec(novtable) ImageSpaceEffect { public: static constexpr auto RTTI{ RTTI::ImageSpaceEffect }; static constexpr auto VTABLE{ VTABLE::ImageSpaceEffect }; class EffectDesc { public: // members std::uint32_t startEffect; // 00 std::uint32_t lastEffect; // 04 ImageSpaceEffect* parentEffect; // 08 std::uint64_t labelWait; // 10 std::uint64_t* writeLabel; // 18 }; static_assert(sizeof(EffectDesc) == 0x20); class EffectInput { public: // members std::int32_t texIndex; // 00 BSGraphics::TextureFilterMode filterMode; // 04 }; static_assert(sizeof(EffectInput) == 0x08); virtual ~ImageSpaceEffect(); // 00 // add virtual void Render(BSTriShape* a_geometry, ImageSpaceEffectParam* a_param); // 01 virtual void Dispatch(ImageSpaceEffectParam* a_param, bool a_useAsyncPipe, std::uint32_t a_effect, EffectDesc* a_effectDesc); // 02 virtual void Setup(ImageSpaceManager* a_manager, ImageSpaceEffectParam* a_param); // 03 virtual void Shutdown(); // 04 virtual void BorrowTextures(ImageSpaceEffectParam* a_param); // 05 virtual void ReturnTextures(); // 06 virtual void UpdateComputeShaderParam(std::uint32_t a_effect); // 07 virtual bool IsActive(); // 08 virtual bool UpdateParams(ImageSpaceEffectParam* a_param); // 09 virtual bool SetRenderStates(ImageSpaceEffectParam* a_param); // 0A virtual bool RestoreRenderStates(ImageSpaceEffectParam* a_param); // 0B // members bool isActive; // 08 bool paramsChanged; // 09 NiTPrimitiveArray effectList; // 10 NiTPrimitiveArray effectParamList; // 28 NiTPrimitiveArray textures; // 40 NiTPrimitiveArray vsTextures; // 58 NiTPrimitiveArray effectInputs; // 70 NiTPrimitiveArray effectOutput; // 88 bool isComputeShader; // A0 std::uint32_t nbOutput; // A4 bool useDynamicResolution; // A8 }; static_assert(sizeof(ImageSpaceEffect) == 0xB0); }