Program Listing for File materialBuilder.h
↰ Return to documentation for file (PrismEngine/src/materialBuilder.h)
#pragma once
#include <string>
#include <optional>
#include <vector>
#include <filesystem>
#include <array>
#include "scene.h"
#include "meshComponent.h"
#include "materialComponent.h"
#include "textureStorage.h"
#include "assetSpec.h"
namespace prism {
namespace render {
struct MaterialBuilder {
struct MaterialData {
std::optional<assets::AssetSpec> albedo;
std::optional<assets::AssetSpec> normal;
std::optional<assets::AssetSpec> metallic;
std::optional<assets::AssetSpec> roughness;
std::optional<assets::AssetSpec> ambient;
std::optional<assets::AssetSpec> emission;
std::optional<assets::AssetSpec> height;
float metallicScalar = 1.0f;
float roughnessScalar = 1.0f;
float ambientScalar = 1.0f;
float emissionScalar = 1.0f;
float heightScalar = 1.0f;
};
std::vector<MaterialData> materialsData;
float globalMetallicScalar = 1.0f;
float globalRoughnessScalar = 1.0f;
float globalEmissionScalar = 1.0f;
float globalAmbientScalar = 1.0f;
float globalHeightScalar = 1.0f;
prism::scene::Scene& scene;
prism::PGC::L1::TextureStorage& storage;
MaterialBuilder(prism::scene::Scene& scene, prism::PGC::L1::TextureStorage& storage);
MaterialBuilder& size(uint16_t size);
MaterialBuilder& forMesh(prism::scene::MeshComponent& mesh);
MaterialBuilder& forMesh(prism::scene::Entity entity);
MaterialBuilder& copyAll(prism::scene::MaterialComponent material);
MaterialBuilder& copy(prism::scene::MaterialComponent material, uint16_t subMaterialId);
MaterialBuilder& albedo(uint16_t subMaterialId, std::filesystem::path filename);
MaterialBuilder& albedo(uint16_t subMaterialId, std::array<unsigned char, 4> rgba);
MaterialBuilder& normal(uint16_t subMaterialId, std::filesystem::path filename);
MaterialBuilder& normal(uint16_t subMaterialId, std::array<unsigned char, 4> rgba);
MaterialBuilder& mrao(uint16_t subMaterialId, std::filesystem::path filename);
MaterialBuilder& mrao(uint16_t subMaterialId, std::array<unsigned char, 4> rgba);
MaterialBuilder& mraoh(uint16_t subMaterialId, std::filesystem::path filename);
MaterialBuilder& mraoh(uint16_t subMaterialId, std::array<unsigned char, 4> rgba);
MaterialBuilder& metallic(uint16_t subMaterialId, std::filesystem::path filename);
MaterialBuilder& metallic(uint16_t subMaterialId, float metallic);
MaterialBuilder& metallic(float metallic);
MaterialBuilder& roughness(uint16_t subMaterialId, std::filesystem::path filename);
MaterialBuilder& roughness(uint16_t subMaterialId, float roughness);
MaterialBuilder& roughness(float roughness);
MaterialBuilder& ambientOcclusion(uint16_t subMaterialId, std::filesystem::path filename);
MaterialBuilder& ambientOcclusion(uint16_t subMaterialId, float ambient);
MaterialBuilder& ambientOcclusion(float ambient);
MaterialBuilder& emission(uint16_t subMaterialId, std::filesystem::path filename);
MaterialBuilder& emission(uint16_t subMaterialId, std::array<unsigned char, 4> rgba);
MaterialBuilder& emission(uint16_t subMaterialId, float emission);
MaterialBuilder& emission(float emission);
MaterialBuilder& height(uint16_t subMaterialId, std::filesystem::path filename);
MaterialBuilder& height(uint16_t subMaterialId, float height);
MaterialBuilder& height(float height);
prism::scene::MaterialComponent complete();
};
} // namespace render
} // namespace prism