// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_SHADERBINDING_HPP #define NAZARA_SHADERBINDING_HPP #include #include #include #include namespace Nz { class AbstractBuffer; class ShaderBinding; class ShaderBindingDeleter; class Texture; class TextureSampler; using ShaderBindingPtr = std::unique_ptr; class NAZARA_RENDERER_API ShaderBinding { friend ShaderBindingDeleter; public: struct Binding; ShaderBinding() = default; virtual ~ShaderBinding(); virtual void Update(std::initializer_list bindings) = 0; struct TextureBinding { Texture* texture; TextureSampler* sampler; }; struct UniformBufferBinding { AbstractBuffer* buffer; UInt64 offset; UInt64 range; }; struct Binding { std::size_t bindingIndex; std::variant content; }; protected: virtual void Release() = 0; ShaderBinding(const ShaderBinding&) = delete; ShaderBinding(ShaderBinding&&) = default; }; class ShaderBindingDeleter { public: inline void operator()(ShaderBinding* binding); }; } #include #endif // NAZARA_SHADERBINDING_HPP