Graphics: Add Material and made use of passes (WIP)
This commit is contained in:
@@ -44,8 +44,8 @@ namespace Nz
|
||||
|
||||
private:
|
||||
BakedFrameGraph BuildFrameGraph();
|
||||
void RegisterMaterial(MaterialPass* material);
|
||||
void UnregisterMaterial(MaterialPass* material);
|
||||
void RegisterMaterialPass(MaterialPass* material);
|
||||
void UnregisterMaterialPass(MaterialPass* material);
|
||||
|
||||
struct MaterialData
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
namespace Nz
|
||||
{
|
||||
class CommandBufferBuilder;
|
||||
class MaterialPass;
|
||||
class Material;
|
||||
class WorldInstance;
|
||||
|
||||
class NAZARA_GRAPHICS_API InstancedRenderable
|
||||
@@ -26,15 +26,15 @@ namespace Nz
|
||||
InstancedRenderable(InstancedRenderable&&) noexcept = default;
|
||||
~InstancedRenderable();
|
||||
|
||||
virtual void Draw(CommandBufferBuilder& commandBuffer) const = 0;
|
||||
virtual void Draw(const std::string& pass, CommandBufferBuilder& commandBuffer) const = 0;
|
||||
|
||||
virtual const std::shared_ptr<MaterialPass>& GetMaterial(std::size_t i) const = 0;
|
||||
virtual const std::shared_ptr<Material>& GetMaterial(std::size_t i) const = 0;
|
||||
virtual std::size_t GetMaterialCount() const = 0;
|
||||
|
||||
InstancedRenderable& operator=(const InstancedRenderable&) = delete;
|
||||
InstancedRenderable& operator=(InstancedRenderable&&) noexcept = default;
|
||||
|
||||
NazaraSignal(OnMaterialInvalidated, InstancedRenderable* /*instancedRenderable*/, std::size_t /*materialIndex*/, const std::shared_ptr<MaterialPass>& /*newMaterial*/);
|
||||
NazaraSignal(OnMaterialInvalidated, InstancedRenderable* /*instancedRenderable*/, std::size_t /*materialIndex*/, const std::shared_ptr<Material>& /*newMaterial*/);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
36
include/Nazara/Graphics/Material.hpp
Normal file
36
include/Nazara/Graphics/Material.hpp
Normal file
@@ -0,0 +1,36 @@
|
||||
// Copyright (C) 2021 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_MATERIAL_HPP
|
||||
#define NAZARA_MATERIAL_HPP
|
||||
|
||||
#include <Nazara/Prerequisites.hpp>
|
||||
#include <Nazara/Graphics/MaterialPass.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
class NAZARA_GRAPHICS_API Material : public Resource
|
||||
{
|
||||
public:
|
||||
Material();
|
||||
~Material() = default;
|
||||
|
||||
void AddPass(std::string name, std::shared_ptr<MaterialPass> pass);
|
||||
|
||||
inline MaterialPass* GetPass(const std::string& name) const;
|
||||
|
||||
bool HasPass(const std::string& name) const;
|
||||
|
||||
void RemovePass(const std::string& name);
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, std::shared_ptr<MaterialPass>> m_passes;
|
||||
};
|
||||
}
|
||||
|
||||
#include <Nazara/Graphics/Material.inl>
|
||||
|
||||
#endif // NAZARA_MATERIAL_HPP
|
||||
20
include/Nazara/Graphics/Material.inl
Normal file
20
include/Nazara/Graphics/Material.inl
Normal file
@@ -0,0 +1,20 @@
|
||||
// Copyright (C) 2021 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
|
||||
|
||||
#include <Nazara/Graphics/Material.hpp>
|
||||
#include <Nazara/Graphics/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
inline MaterialPass* Material::GetPass(const std::string& name) const
|
||||
{
|
||||
auto it = m_passes.find(name);
|
||||
if (it == m_passes.end())
|
||||
return nullptr;
|
||||
|
||||
return it->second.get();
|
||||
}
|
||||
}
|
||||
|
||||
#include <Nazara/Graphics/DebugOff.hpp>
|
||||
@@ -18,7 +18,7 @@
|
||||
namespace Nz
|
||||
{
|
||||
class GraphicalMesh;
|
||||
class MaterialPass;
|
||||
class Material;
|
||||
|
||||
class NAZARA_GRAPHICS_API Model : public InstancedRenderable
|
||||
{
|
||||
@@ -28,17 +28,17 @@ namespace Nz
|
||||
Model(Model&&) noexcept = default;
|
||||
~Model() = default;
|
||||
|
||||
void Draw(CommandBufferBuilder& commandBuffer) const override;
|
||||
void Draw(const std::string& pass, CommandBufferBuilder& commandBuffer) const override;
|
||||
|
||||
const std::shared_ptr<AbstractBuffer>& GetIndexBuffer(std::size_t subMeshIndex) const;
|
||||
std::size_t GetIndexCount(std::size_t subMeshIndex) const;
|
||||
const std::shared_ptr<MaterialPass>& GetMaterial(std::size_t subMeshIndex) const override;
|
||||
const std::shared_ptr<Material>& GetMaterial(std::size_t subMeshIndex) const override;
|
||||
std::size_t GetMaterialCount() const override;
|
||||
const std::shared_ptr<RenderPipeline>& GetRenderPipeline(std::size_t subMeshIndex) const;
|
||||
const std::vector<RenderPipelineInfo::VertexBufferData>& GetVertexBufferData(std::size_t subMeshIndex) const;
|
||||
const std::shared_ptr<AbstractBuffer>& GetVertexBuffer(std::size_t subMeshIndex) const;
|
||||
inline std::size_t GetSubMeshCount() const;
|
||||
|
||||
inline void SetMaterial(std::size_t subMeshIndex, std::shared_ptr<MaterialPass> material);
|
||||
inline void SetMaterial(std::size_t subMeshIndex, std::shared_ptr<Material> material);
|
||||
|
||||
Model& operator=(const Model&) = delete;
|
||||
Model& operator=(Model&&) noexcept = default;
|
||||
@@ -46,7 +46,7 @@ namespace Nz
|
||||
private:
|
||||
struct SubMeshData
|
||||
{
|
||||
std::shared_ptr<MaterialPass> material;
|
||||
std::shared_ptr<Material> material;
|
||||
std::vector<RenderPipelineInfo::VertexBufferData> vertexBufferData;
|
||||
};
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Nz
|
||||
return m_subMeshes.size();
|
||||
}
|
||||
|
||||
inline void Model::SetMaterial(std::size_t subMeshIndex, std::shared_ptr<MaterialPass> material)
|
||||
inline void Model::SetMaterial(std::size_t subMeshIndex, std::shared_ptr<Material> material)
|
||||
{
|
||||
assert(subMeshIndex < m_subMeshes.size());
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace Nz
|
||||
FaceFilling faceFilling = FaceFilling::Fill;
|
||||
FaceSide cullingSide = FaceSide::Back;
|
||||
FrontFace frontFace = FrontFace::CounterClockwise;
|
||||
RendererComparison depthCompare = RendererComparison::Less;
|
||||
RendererComparison depthCompare = RendererComparison::LessOrEqual;
|
||||
PrimitiveMode primitiveMode = PrimitiveMode::TriangleList;
|
||||
|
||||
struct
|
||||
|
||||
Reference in New Issue
Block a user