13 #pragma warning(disable : 4068)
16 #include <filament/MaterialInstance.h>
17 #include <filament/TextureSampler.h>
29 namespace visualization {
36 TextureSampler::WrapMode ConvertWrapMode(
40 return TextureSampler::WrapMode::CLAMP_TO_EDGE;
42 return TextureSampler::WrapMode::REPEAT;
44 return TextureSampler::WrapMode::MIRRORED_REPEAT;
47 return TextureSampler::WrapMode::CLAMP_TO_EDGE;
54 TextureSampler sampler;
58 sampler.setMagFilter(TextureSampler::MagFilter::NEAREST);
61 sampler.setMagFilter(TextureSampler::MagFilter::LINEAR);
67 sampler.setMinFilter(TextureSampler::MinFilter::NEAREST);
70 sampler.setMinFilter(TextureSampler::MinFilter::LINEAR);
74 TextureSampler::MinFilter::NEAREST_MIPMAP_NEAREST);
78 TextureSampler::MinFilter::LINEAR_MIPMAP_NEAREST);
82 TextureSampler::MinFilter::NEAREST_MIPMAP_LINEAR);
86 TextureSampler::MinFilter::LINEAR_MIPMAP_LINEAR);
90 sampler.setWrapModeS(ConvertWrapMode(sampler_config.
wrap_u));
91 sampler.setWrapModeT(ConvertWrapMode(sampler_config.
wrap_v));
92 sampler.setWrapModeR(ConvertWrapMode(sampler_config.
wrap_w));
94 sampler.setAnisotropy(sampler.getAnisotropy());
100 const std::shared_ptr<filament::MaterialInstance>& material_instance,
102 Init(material_instance,
id);
106 if (material_instance_ !=
nullptr) {
108 "Previous material instance modifications are not finished!");
111 material_instance_ =
nullptr;
116 const std::shared_ptr<filament::MaterialInstance>& material_instance,
118 if (material_instance_ !=
nullptr) {
120 "Previous material instance modifications are not finished!");
123 material_instance_ = material_instance;
124 current_handle_ = id;
129 if (material_instance_) {
130 material_instance_->setParameter(parameter, value);
138 if (material_instance_) {
139 material_instance_->setParameter(parameter, value);
146 const char* parameter,
const Eigen::Vector3f& v) {
147 if (material_instance_) {
148 material_instance_->setParameter(parameter,
149 math::float3{v(0), v(1), v(2)});
156 const char* parameter,
const Eigen::Vector3f& value,
bool srgb) {
157 if (material_instance_) {
159 filament::math::float3{value.x(), value.y(), value.z()};
161 srgb ? filament::RgbType::sRGB : filament::RgbType::LINEAR;
162 material_instance_->setParameter(parameter, rgb_type,
color);
169 const char* parameter,
const Eigen::Vector4f& value,
bool srgb) {
170 if (material_instance_) {
172 filament::math::float4{value(0), value(1), value(2), value(3)};
174 srgb ? filament::RgbaType::sRGB : filament::RgbaType::LINEAR;
175 material_instance_->setParameter(parameter, rgba_type,
color);
182 const char* parameter,
185 if (material_instance_) {
189 if (
auto texture_ptr = w_texture.lock()) {
190 material_instance_->setParameter(
191 parameter, texture_ptr.get(),
195 "Failed to set texture for material.\n\tMaterial handle: "
196 "{}\n\tTexture handle: {}\n\tParameter name: {}",
197 current_handle_, texture_handle, parameter);
205 if (material_instance_) {
206 material_instance_->setDoubleSided(double_sided);
212 auto res = current_handle_;
214 material_instance_ =
nullptr;
static FilamentResourceManager & GetResourceManager()
MaterialModifier & SetTexture(const char *parameter, const TextureHandle &texture, const TextureSamplerParameters &sampler) override
MaterialModifier & SetParameter(const char *parameter, int value) override
void Init(const std::shared_ptr< filament::MaterialInstance > &material_instance, const MaterialInstanceHandle &id)
FilamentMaterialModifier()=default
MaterialModifier & SetDoubleSided(bool double_sided) override
static filament::TextureSampler SamplerFromSamplerParameters(const TextureSamplerParameters &sampler_config)
MaterialInstanceHandle Finish() override
MaterialModifier & SetColor(const char *parameter, const Eigen::Vector3f &value, bool srgb) override
std::weak_ptr< filament::Texture > GetTexture(const TextureHandle &id)
Generic file read and write utility for python interface.
static const REHandle kBad
@ Linear
Box filtering. Weighted average of 4 neighbors is used.
@ NearestMipmapNearest
Mip-mapping is activated. But no filtering occurs.
@ Nearest
No filtering. Nearest neighbor is used.
@ LinearMipmapNearest
Box filtering within a mip-map level.
@ Linear
Box filtering. Weighted average of 4 neighbors is used.
@ Nearest
No filtering. Nearest neighbor is used.