feat: add flag for keepData for gltf instancing, add highlightScene, add stencilHighlight method
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
#ifndef UNLIT_MATERIAL_PROVIDER_HPP
|
||||
#define UNLIT_MATERIAL_PROVIDER_HPP
|
||||
|
||||
#include <filament/gltfio/MaterialProvider.h>
|
||||
#include <filament/Material.h>
|
||||
#include <filament/MaterialInstance.h>
|
||||
#include <filament/Texture.h>
|
||||
#include <filament/TextureSampler.h>
|
||||
#include <math/mat3.h>
|
||||
#include <math/vec3.h>
|
||||
#include <math/vec4.h>
|
||||
|
||||
namespace thermion_filament {
|
||||
|
||||
class UnlitMaterialProvider : public filament::gltfio::MaterialProvider {
|
||||
private:
|
||||
filament::Material* mUnlitMaterial;
|
||||
const filament::Material* mMaterials[1];
|
||||
filament::Engine* mEngine;
|
||||
|
||||
public:
|
||||
UnlitMaterialProvider(filament::Engine* engine, const void* const data, const size_t size) : mEngine(engine) {
|
||||
mUnlitMaterial = filament::Material::Builder()
|
||||
.package(data, size)
|
||||
.build(*engine);
|
||||
mMaterials[0] = mUnlitMaterial;
|
||||
}
|
||||
|
||||
~UnlitMaterialProvider() {
|
||||
mEngine->destroy(mUnlitMaterial);
|
||||
}
|
||||
|
||||
filament::MaterialInstance* createMaterialInstance(filament::gltfio::MaterialKey* config,
|
||||
filament::gltfio::UvMap* uvmap,
|
||||
const char* label = "unlit",
|
||||
const char* extras = nullptr) override {
|
||||
auto instance = mUnlitMaterial->createInstance();
|
||||
|
||||
// Set default parameters
|
||||
instance->setParameter("color", filament::math::float3{1.0f, 1.0f, 1.0f});
|
||||
instance->setParameter("scale", 1.0f);
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
filament::Material* getMaterial(filament::gltfio::MaterialKey* config,
|
||||
filament::gltfio::UvMap* uvmap,
|
||||
const char* label = "unlit") override {
|
||||
return mUnlitMaterial;
|
||||
}
|
||||
|
||||
const filament::Material* const* getMaterials() const noexcept override {
|
||||
return mMaterials;
|
||||
}
|
||||
|
||||
size_t getMaterialsCount() const noexcept override {
|
||||
return 1;
|
||||
}
|
||||
|
||||
void destroyMaterials() override {
|
||||
// Materials are destroyed in the destructor
|
||||
}
|
||||
|
||||
bool needsDummyData(filament::VertexAttribute attrib) const noexcept override {
|
||||
// For unlit material, we don't need dummy data for any attribute
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace thermion_filament
|
||||
|
||||
#endif // UNLIT_MATERIAL_PROVIDER_HPP
|
||||
Reference in New Issue
Block a user