Files
XCEngine/engine/Runtime/Resources/Shader/ShaderLoader.h

33 lines
1.2 KiB
C++

#pragma once
#include <XCEngine/Core/IO/IResourceLoader.h>
#include "Shader.h"
namespace XCEngine {
namespace Resources {
class ShaderLoader : public IResourceLoader {
public:
ShaderLoader();
virtual ~ShaderLoader() override;
ResourceType GetResourceType() const override { return ResourceType::Shader; }
Containers::Array<Containers::String> GetSupportedExtensions() const override;
bool CanLoad(const Containers::String& path) const override;
LoadResult Load(const Containers::String& path, const ImportSettings* settings = nullptr) override;
ImportSettings* GetDefaultSettings() const override;
bool CollectSourceDependencies(const Containers::String& path,
Containers::Array<Containers::String>& outDependencies) const;
bool CollectSourceDependencies(const Containers::String& path,
Containers::Array<Containers::String>& outDependencies,
Containers::String* outError) const;
private:
ShaderType DetectShaderType(const Containers::String& path, const Containers::String& source);
bool ParseShaderSource(const Containers::String& source, Shader* shader);
};
} // namespace Resources
} // namespace XCEngine