#pragma once #include #include "assets/components/material_components.hpp" #include "assets/dynamic_data_stores/dynamic_texture_store.hpp" struct dynamic_material_buffer { dynamic_material_buffer() = default; components::material::surface_properties& initialized_surface_properties(); [[nodiscard]] std::optional& surface_properties(); [[nodiscard]] std::optional& transparency(); [[nodiscard]] std::optional& ambient_color_texture_id(); [[nodiscard]] std::optional& diffuse_color_texture_id(); [[nodiscard]] std::optional& specular_color_texture_id(); [[nodiscard]] std::optional& shininess_texture_id(); [[nodiscard]] std::optional& alpha_texture_id(); [[nodiscard]] std::optional& bump_texture_id(); [[nodiscard]] const std::optional& surface_properties() const; [[nodiscard]] const std::optional& transparency() const; [[nodiscard]] const std::optional& ambient_color_texture_id() const; [[nodiscard]] const std::optional& diffuse_color_texture_id() const; [[nodiscard]] const std::optional& specular_color_texture_id() const; [[nodiscard]] const std::optional& shininess_texture_id() const; [[nodiscard]] const std::optional& alpha_texture_id() const; [[nodiscard]] const std::optional& bump_texture_id() const; std::tuple< std::optional, std::optional, std::optional, std::optional, std::optional, std::optional, std::optional, std::optional > data{ std::nullopt, std::nullopt, std::nullopt, std::nullopt, std::nullopt, std::nullopt, std::nullopt, std::nullopt }; }; #define INCLUDE_DYNAMIC_MATERIAL_DATA_IMPLEMENTATION #include "assets/dynamic_read_buffers/dynamic_material_buffer.ipp" #undef INCLUDE_DYNAMIC_MATERIAL_DATA_IMPLEMENTATION