opynsim
Unofficial C++ Documentation
Loading...
Searching...
No Matches
material_property_block.h
Go to the documentation of this file.
1#pragma once
2
6
7#include <iosfwd>
8#include <optional>
9#include <ranges>
10#include <span>
11#include <string_view>
12#include <utility>
13
14namespace osc
15{
16 // material property block
17 //
18 // enables callers to apply per-instance properties when using a material (more efficiently
19 // than using a different `Material` every time)
21 public:
23
24 void clear();
25 [[nodiscard]] bool empty() const;
26
27 template<MaterialPropertyValue T> std::optional<T> get(std::string_view property_name) const;
28 template<MaterialPropertyValue T> std::optional<T> get(const StringName& property_name) const;
29 template<MaterialPropertyValue T> void set(std::string_view property_name, const T& value);
30 template<MaterialPropertyValue T> void set(const StringName& property_name, const T& value);
31 template<MaterialPropertyValue T> std::optional<std::span<const T>> get_array(std::string_view property_name) const;
32 template<MaterialPropertyValue T> std::optional<std::span<const T>> get_array(const StringName& property_name) const;
33 template<MaterialPropertyValue T> void set_array(std::string_view property_name, std::span<const T> values);
34 template<MaterialPropertyValue T> void set_array(const StringName& property_name, std::span<const T> values);
35
36 // calling `set_array` without a type argument (e.g. `set_array(prop, some_range)`) deduces
37 // the type from the range in order to call `set_array<T>(prop, some_range)`
38 template<
39 std::convertible_to<std::string_view> StringLike,
40 std::ranges::contiguous_range Range
41 >
42 void set_array(StringLike&& property_name, Range&& values)
43 {
44 set_array<std::ranges::range_value_t<Range>>(std::forward<StringLike>(property_name), std::forward<Range>(values));
45 }
46
47 void unset(std::string_view property_name);
48 void unset(const StringName& property_name);
49
50 private:
52 friend std::ostream& operator<<(std::ostream&, const MaterialPropertyBlock&);
53 friend class GraphicsBackend;
54
55 class Impl;
57 };
58
60 std::ostream& operator<<(std::ostream&, const MaterialPropertyBlock&);
61}
Definition copy_on_upd_shared_value.h:16
Definition material_property_block.h:20
void set_array(const StringName &property_name, std::span< const T > values)
void set_array(StringLike &&property_name, Range &&values)
Definition material_property_block.h:42
friend class GraphicsBackend
Definition material_property_block.h:53
friend bool operator==(const MaterialPropertyBlock &, const MaterialPropertyBlock &)
std::optional< T > get(const StringName &property_name) const
std::optional< std::span< const T > > get_array(std::string_view property_name) const
void set_array(std::string_view property_name, std::span< const T > values)
std::optional< std::span< const T > > get_array(const StringName &property_name) const
void unset(const StringName &property_name)
void set(const StringName &property_name, const T &value)
std::optional< T > get(std::string_view property_name) const
void unset(std::string_view property_name)
void set(std::string_view property_name, const T &value)
friend std::ostream & operator<<(std::ostream &, const MaterialPropertyBlock &)
Definition string_name.h:14
Definition custom_decoration_generator.h:5
std::ostream & operator<<(std::ostream &, const Object &)
bool operator==(const Class &, const Class &)
constexpr U to(T &&value)
Definition conversion.h:56