// Copyright (C) 2017 Jérôme Leclercq // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_MATERIALSETTINGS_HPP #define NAZARA_MATERIALSETTINGS_HPP #include #include #include #include #include #include #include #include namespace Nz { class MaterialSettings { public: using PredefinedBinding = std::array; struct SharedUniformBlock; struct Texture; struct UniformBlock; inline MaterialSettings(); inline MaterialSettings(std::vector textures, std::vector uniformBlocks, std::vector sharedUniformBlocks, const PredefinedBinding& predefinedBinding); MaterialSettings(const MaterialSettings&) = default; MaterialSettings(MaterialSettings&&) = delete; ~MaterialSettings() = default; inline std::size_t GetPredefinedBindingIndex(PredefinedShaderBinding binding) const; inline const std::shared_ptr& GetRenderPipelineLayout() const; inline const std::vector& GetSharedUniformBlocks() const; inline std::size_t GetSharedUniformBlockVariableOffset(std::size_t uniformBlockIndex, const std::string_view& name) const; inline std::size_t GetSharedUniformBlockIndex(const std::string_view& name) const; inline const std::vector& GetTextures() const; inline std::size_t GetTextureIndex(const std::string_view& name) const; inline const std::vector& GetUniformBlocks() const; inline std::size_t GetUniformBlockIndex(const std::string_view& name) const; inline std::size_t GetUniformBlockVariableOffset(std::size_t uniformBlockIndex, const std::string_view& name) const; MaterialSettings& operator=(const MaterialSettings&) = delete; MaterialSettings& operator=(MaterialSettings&&) = delete; static constexpr std::size_t InvalidIndex = std::numeric_limits::max(); struct UniformVariable { std::string name; std::size_t offset; }; struct SharedUniformBlock { std::string name; std::string bindingPoint; std::vector uniforms; }; struct Texture { std::string bindingPoint; std::string name; ImageType type; }; struct UniformBlock { std::size_t blockSize; std::string name; std::string bindingPoint; std::vector uniforms; std::vector defaultValues; }; private: std::shared_ptr m_pipelineLayout; std::vector m_sharedUniformBlocks; std::vector m_textures; std::vector m_uniformBlocks; PredefinedBinding m_predefinedBinding; }; } #include #endif // NAZARA_MATERIALPIPELINESETTINGS_HPP