opynsim
Unofficial C++ Documentation
Loading...
Searching...
No Matches
material.h
Go to the documentation of this file.
1#pragma once
2
12
13#include <concepts>
14#include <iosfwd>
15#include <optional>
16#include <span>
17#include <string_view>
18
19namespace osc
20{
21 class Material {
22 public:
23 explicit Material(Shader);
24
25 const Shader& shader() const;
26
27 void clear();
28 [[nodiscard]] bool empty() const;
29
30 template<MaterialPropertyValue T> std::optional<T> get(std::string_view property_name) const;
31 template<MaterialPropertyValue T> std::optional<T> get(const StringName& property_name) const;
32 template<MaterialPropertyValue T> void set(std::string_view property_name, const T& value);
33 template<MaterialPropertyValue T> void set(const StringName& property_name, const T& value);
34 template<MaterialPropertyValue T> std::optional<std::span<const T>> get_array(std::string_view property_name) const;
35 template<MaterialPropertyValue T> std::optional<std::span<const T>> get_array(const StringName& property_name) const;
36 template<MaterialPropertyValue T> void set_array(std::string_view property_name, std::span<const T> values);
37 template<MaterialPropertyValue T> void set_array(const StringName& property_name, std::span<const T> values);
38
39 // calling `set_array` without a type argument (e.g. `set_array(prop, some_range)`) deduces
40 // the type from the range in order to call `set_array<T>(prop, some_range)`
41 template<
42 std::convertible_to<std::string_view> StringLike,
43 std::ranges::contiguous_range Range
44 >
45 void set_array(StringLike&& property_name, Range&& values)
46 {
47 set_array<std::ranges::range_value_t<Range>>(std::forward<StringLike>(property_name), std::forward<Range>(values));
48 }
49
50 void unset(std::string_view property_name);
51 void unset(const StringName& property_name);
52
53 bool is_transparent() const;
54 void set_transparent(bool);
55
58
61
64
65 bool is_depth_tested() const;
66 void set_depth_tested(bool);
67
70
73
74 bool is_wireframe() const;
75 void set_wireframe(bool);
76
79
80 friend bool operator==(const Material&, const Material&) = default;
81
82 private:
83 friend std::ostream& operator<<(std::ostream&, const Material&);
84 friend class GraphicsBackend;
85
86 class Impl;
88 };
89
90 std::ostream& operator<<(std::ostream&, const Material&);
91}
Definition copy_on_upd_shared_value.h:16
Definition material.h:21
SourceBlendingFactor source_blending_factor() const
bool writes_to_depth_buffer() const
void set(std::string_view property_name, const T &value)
void set_depth_tested(bool)
std::optional< T > get(const StringName &property_name) const
friend class GraphicsBackend
Definition material.h:84
bool is_depth_tested() const
Material(Shader)
void unset(const StringName &property_name)
friend bool operator==(const Material &, const Material &)=default
void unset(std::string_view property_name)
std::optional< std::span< const T > > get_array(std::string_view property_name) const
CullMode cull_mode() const
void set(const StringName &property_name, const T &value)
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 set_transparent(bool)
void set_source_blending_factor(SourceBlendingFactor)
std::optional< T > get(std::string_view property_name) const
void set_writes_to_depth_buffer(bool)
bool is_transparent() const
bool empty() const
void set_array(StringLike &&property_name, Range &&values)
Definition material.h:45
void set_wireframe(bool)
DestinationBlendingFactor destination_blending_factor() const
const Shader & shader() const
friend std::ostream & operator<<(std::ostream &, const Material &)
DepthFunction depth_function() const
void set_blending_equation(BlendingEquation)
void set_cull_mode(CullMode)
BlendingEquation blending_equation() const
void set_destination_blending_factor(DestinationBlendingFactor)
void set_depth_function(DepthFunction)
void set_array(const StringName &property_name, std::span< const T > values)
bool is_wireframe() const
Definition shader.h:14
Definition string_name.h:14
Definition custom_decoration_generator.h:5
std::ostream & operator<<(std::ostream &, const Object &)
DestinationBlendingFactor
Definition destination_blending_factor.h:7
CullMode
Definition cull_mode.h:7
BlendingEquation
Definition blending_equation.h:12
constexpr U to(T &&value)
Definition conversion.h:56
DepthFunction
Definition depth_function.h:7
SourceBlendingFactor
Definition source_blending_factor.h:7