/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Code/EditorPlugins/Assets/EditorPluginAssets/MaterialAsset/MaterialAsset.h
165 строк
6 KB
Jan Krassnigg
Fixed #1928: Allow all material types as base materials
03 май 2026, 12:21
03 май 2026, 12:21
6458aaa
Код
Авторство
О чём код?
#pragma once #include <EditorFramework/Assets/SimpleAssetDocument.h> #include <EditorPluginAssets/VisualShader/VisualShaderNodeManager.h> class ezMaterialAssetDocument; struct ezPropertyMetaStateEvent; struct ezEditorAppEvent; struct ezMaterialShaderMode { using StorageType = ezUInt8; enum Enum { BaseMaterial, File, Custom, Default = BaseMaterial }; }; struct ezMaterialVisualShaderEvent { enum Type { TransformFailed, TransformSucceeded, VisualShaderNotUsed, }; Type m_Type; ezString m_sTransformError; }; EZ_DECLARE_REFLECTABLE_TYPE(EZ_NO_LINKAGE, ezMaterialShaderMode); struct ezMaterialAssetPreview { using StorageType = ezUInt8; enum Enum { Ball, Sphere, Box, Plane, Default = Ball }; }; EZ_DECLARE_REFLECTABLE_TYPE(EZ_NO_LINKAGE, ezMaterialAssetPreview); class ezMaterialAssetProperties : public ezReflectedClass { EZ_ADD_DYNAMIC_REFLECTION(ezMaterialAssetProperties, ezReflectedClass); public: ezMaterialAssetProperties() = default; void SetBaseMaterial(const char* szBaseMaterial); const char* GetBaseMaterial() const; void SetSurface(const char* szSurface) { m_sSurface = szSurface; } const char* GetSurface() const { return m_sSurface; } void SetShader(const char* szShader); const char* GetShader() const; void SetShaderProperties(ezReflectedClass* pProperties); ezReflectedClass* GetShaderProperties() const; void SetShaderMode(ezEnum<ezMaterialShaderMode> mode); ezEnum<ezMaterialShaderMode> GetShaderMode() const { return m_ShaderMode; } void SetDocument(ezMaterialAssetDocument* pDocument); void UpdateShader(bool bForce = false); void DeleteProperties(); void CreateProperties(const char* szShaderPath); void SaveOldValues(); void LoadOldValues(); ezString ResolveRelativeShaderPath() const; ezString GetAutoGenShaderPathAbs() const; static void PropertyMetaStateEventHandler(ezPropertyMetaStateEvent& e); public: ezString m_sBaseMaterial; ezString m_sSurface; ezString m_sShader; ezString m_sAssetFilterTags; ezMap<ezString, ezVariant> m_CachedProperties; ezMaterialAssetDocument* m_pDocument = nullptr; ezEnum<ezMaterialShaderMode> m_ShaderMode; }; class ezMaterialAssetDocument : public ezSimpleAssetDocument<ezMaterialAssetProperties> { EZ_ADD_DYNAMIC_REFLECTION(ezMaterialAssetDocument, ezSimpleAssetDocument<ezMaterialAssetProperties>); public: ezMaterialAssetDocument(ezStringView sDocumentPath); ~ezMaterialAssetDocument(); ezDocumentObject* GetShaderPropertyObject(); const ezDocumentObject* GetShaderPropertyObject() const; void SetBaseMaterial(const char* szBaseMaterial); ezStatus WriteMaterialAsset(ezStreamWriter& inout_stream, const ezPlatformProfile* pAssetProfile, bool bEmbedLowResData) const; /// \brief Will make sure that the visual shader is rebuilt. /// Typically called during asset transformation, but can be triggered manually to enforce getting visual shader node changes in. ezStatus RecreateVisualShaderFile(const ezAssetFileHeader& assetHeader); /// \brief If shader compilation failed this will modify the output shader file such that transforming it again, will trigger a full /// regeneration Otherwise the AssetCurator would early out void TagVisualShaderFileInvalid(const ezPlatformProfile* pAssetProfile, const char* szError); /// \brief Deletes all Visual Shader nodes that are not connected to the output void RemoveDisconnectedNodes(); static ezUuid GetLitBaseMaterial(); static ezUuid GetLitAlphaTestBaseMaterial(); static ezUuid GetNeutralNormalMap(); virtual void GetSupportedMimeTypesForPasting(ezDynamicArray<ezString>& out_mimeTypes) const override; virtual bool CopySelectedObjects(ezAbstractObjectGraph& out_objectGraph, ezStringBuilder& out_sMimeType) const override; virtual bool Paste(const ezArrayPtr<PasteInfo>& info, const ezAbstractObjectGraph& objectGraph, bool bAllowPickedPosition, ezStringView sMimeType) override; ezEvent<const ezMaterialVisualShaderEvent&> m_VisualShaderEvents; ezEnum<ezMaterialAssetPreview> m_PreviewModel; protected: ezUuid GetSeedFromBaseMaterial(const ezAbstractObjectGraph* pBaseGraph); static ezUuid GetMaterialNodeGuid(const ezAbstractObjectGraph& graph); virtual void UpdatePrefabObject(ezDocumentObject* pObject, const ezUuid& PrefabAsset, const ezUuid& PrefabSeed, ezStringView sBasePrefab) override; virtual void InitializeAfterLoading(bool bFirstTimeCreation) override; virtual ezTransformStatus InternalTransformAsset(const char* szTargetFile, ezStringView sOutputTag, const ezPlatformProfile* pAssetProfile, const ezAssetFileHeader& AssetHeader, ezBitflags<ezTransformFlags> transformFlags) override; virtual ezTransformStatus InternalTransformAsset(ezStreamWriter& stream, ezStringView sOutputTag, const ezPlatformProfile* pAssetProfile, const ezAssetFileHeader& AssetHeader, ezBitflags<ezTransformFlags> transformFlags) override; virtual ezTransformStatus InternalCreateThumbnail(const ThumbnailInfo& ThumbnailInfo) override; virtual void InternalGetMetaDataHash(const ezDocumentObject* pObject, ezUInt64& inout_uiHash) const override; virtual void AttachMetaDataBeforeSaving(ezAbstractObjectGraph& graph) const override; virtual void RestoreMetaDataAfterLoading(const ezAbstractObjectGraph& graph, bool bUndoable) override; virtual void UpdateAssetDocumentInfo(ezAssetDocumentInfo* pInfo) const override; void InvalidateCachedShader(); void EditorEventHandler(const ezEditorAppEvent& e); private: ezStringBuilder m_sCheckPermutations; static ezUuid s_LitBaseMaterial; static ezUuid s_LitAlphaTextBaseMaterial; static ezUuid s_NeutralNormalMap; }; class ezMaterialObjectManager : public ezVisualShaderNodeManager { };