#pragma once #include "BsCorePrerequisites.h" #include "BsGpuParam.h" namespace BansheeEngine { /** * @brief A wrapper class that allows you to manage multiple GPU parameters * at once. * * @see TGpuDataParam */ template class BS_CORE_EXPORT TMaterialDataParam { public: TMaterialDataParam(const SPtr>>& params); TMaterialDataParam() { } /** * @copydoc TGpuDataParam::set */ void set(const T& value, UINT32 arrayIdx = 0); /** * @copydoc TGpuDataParam::set */ T get(UINT32 arrayIdx = 0); protected: SPtr>> mParams; }; /** * @copydoc TMaterialDataParam */ template class BS_CORE_EXPORT TMaterialParamStruct { public: TMaterialParamStruct(const SPtr>>& params); TMaterialParamStruct() { } /** * @copydoc TGpuParamStruct::set */ void set(const void* value, UINT32 sizeBytes, UINT32 arrayIdx = 0); /** * @copydoc TGpuParamStruct::get */ void get(void* value, UINT32 sizeBytes, UINT32 arrayIdx = 0); /** * @copydoc TGpuParamStruct::getElementSize */ UINT32 getElementSize() const; protected: SPtr>> mParams; }; /** * @copydoc TMaterialDataParam */ template class BS_CORE_EXPORT TMaterialParamTexture { public: typedef typename TGpuParamTextureType::Type TextureType; TMaterialParamTexture(const SPtr>>& params); TMaterialParamTexture() { } /** * @copydoc GpuParamTexture::set */ void set(const TextureType& texture); /** * @copydoc GpuParamTexture::get */ TextureType get(); protected: SPtr>> mParams; }; /** * @copydoc TMaterialDataParam */ template class BS_CORE_EXPORT TMaterialParamLoadStoreTexture { public: typedef typename TGpuParamTextureType::Type TextureType; TMaterialParamLoadStoreTexture(const SPtr>>& params); TMaterialParamLoadStoreTexture() { } /** * @copydoc GpuParamLoadStoreTexture::set */ void set(const TextureType& texture, const TextureSurface& surface); /** * @copydoc GpuParamLoadStoreTexture::get */ TextureType get(); protected: SPtr>> mParams; }; /** * @copydoc TMaterialDataParam */ template class BS_CORE_EXPORT TMaterialParamSampState { public: typedef typename TGpuParamSamplerStateType::Type SamplerType; TMaterialParamSampState(const SPtr>>& params); TMaterialParamSampState() { } /** * @copydoc GpuParamSampState::set */ void set(const SamplerType& sampState); /** * @copydoc GpuParamSampState::get */ SamplerType get(); protected: SPtr>> mParams; }; typedef TMaterialDataParam MaterialParamFloat; typedef TMaterialDataParam MaterialParamColor; typedef TMaterialDataParam MaterialParamVec2; typedef TMaterialDataParam MaterialParamVec3; typedef TMaterialDataParam MaterialParamVec4; typedef TMaterialDataParam MaterialParamMat3; typedef TMaterialDataParam MaterialParamMat4; typedef TMaterialDataParam MaterialParamFloatCore; typedef TMaterialDataParam MaterialParamColorCore; typedef TMaterialDataParam MaterialParamVec2Core; typedef TMaterialDataParam MaterialParamVec3Core; typedef TMaterialDataParam MaterialParamVec4Core; typedef TMaterialDataParam MaterialParamMat3Core; typedef TMaterialDataParam MaterialParamMat4Core; typedef TMaterialParamStruct MaterialParamStruct; typedef TMaterialParamStruct MaterialParamStructCore; typedef TMaterialParamTexture MaterialParamTexture; typedef TMaterialParamTexture MaterialParamTextureCore; typedef TMaterialParamLoadStoreTexture MaterialParamLoadStoreTexture; typedef TMaterialParamLoadStoreTexture MaterialParamLoadStoreTextureCore; typedef TMaterialParamSampState MaterialParamSampState; typedef TMaterialParamSampState MaterialParamSampStateCore; }