#pragma once #include #include "config/primitives.hpp" #include "assets/identifiers.hpp" #include "assets/data_stores/texture_store.hpp" #include "assets/data/surface_properties.hpp" #include "util/enum_bitfield_operators.hpp" namespace assets::material_components { using surface_properties = surface_properties; using transparency = z3d::f32; using ambient_color_texture = texture_id; using diffuse_color_texture = texture_id; using specular_color_texture = texture_id; using shininess_texture = texture_id; using alpha_texture = texture_id; using bump_texture = texture_id; namespace indices { inline constexpr z3d::size surface_properties = 0; inline constexpr z3d::size transparency = 1; inline constexpr z3d::size ambient_color_texture = 2; inline constexpr z3d::size diffuse_color_texture = 3; inline constexpr z3d::size specular_color_texture = 4; inline constexpr z3d::size shininess_texture = 5; inline constexpr z3d::size alpha_texture = 6; inline constexpr z3d::size bump_texture = 7; } enum class flags : z3d::u8 { none = 0, surface_properties = 1 << indices::surface_properties, transparency = 1 << indices::transparency, ambient_filter_texture = 1 << indices::ambient_color_texture, diffuse_filter_texture = 1 << indices::diffuse_color_texture, specular_filter_texture = 1 << indices::specular_color_texture, shininess_texture = 1 << indices::shininess_texture, alpha_texture = 1 << indices::alpha_texture, bump_texture = 1 << indices::bump_texture }; using all = z3d::structure< surface_properties, transparency, ambient_color_texture, diffuse_color_texture, specular_color_texture, shininess_texture, alpha_texture, bump_texture >; constexpr inline auto count = std::tuple_size_v; } // namespace material_component DEFINE_ENUM_BITFIELD_OPERATORS(assets::material_components::flags)