update FilamentViewer for v1.25 texture & shader providers

This commit is contained in:
Nick Fisher
2022-07-10 17:51:46 +10:00
parent 0e95170fab
commit 363d855cbe
2 changed files with 18 additions and 14 deletions

View File

@@ -16,6 +16,7 @@
#include "FilamentViewer.hpp"
#include <filament/Camera.h>
#include <filament/ColorGrading.h>
#include <filament/Engine.h>
@@ -37,6 +38,9 @@
#include <gltfio/FilamentAsset.h>
#include <gltfio/ResourceLoader.h>
#include <gltfio/Animator.h>
#include <gltfio/TextureProvider.h>
#include <gltfio/materials/uberarchive.h>
#include <camutils/Manipulator.h>
@@ -50,7 +54,7 @@
#include <math/vec3.h>
#include <math/vec4.h>
#include <image/KtxUtility.h>
#include <ktxreader/Ktx1Reader.h>
#include <chrono>
#include <iostream>
@@ -63,11 +67,6 @@ using namespace gltfio;
using namespace utils;
using namespace std::chrono;
namespace gltfio
{
MaterialProvider *createUbershaderLoader(filament::Engine *engine);
}
namespace filament
{
class IndirectLight;
@@ -154,14 +153,16 @@ namespace polyvox
_view->setMultiSampleAntiAliasingOptions(multiSampleAntiAliasingOptions);
_materialProvider = gltfio::createUbershaderLoader(_engine);
_materialProvider = gltfio::createUbershaderProvider(_engine, UBERARCHIVE_DEFAULT_DATA, UBERARCHIVE_DEFAULT_SIZE);
EntityManager &em = EntityManager::get();
_ncm = new NameComponentManager(em);
_assetLoader = AssetLoader::create({_engine, _materialProvider, _ncm, &em});
_resourceLoader = new ResourceLoader(
{.engine = _engine, .normalizeSkinningWeights = true, .recomputeBoundingBoxes = true});
_stbDecoder = createStbProvider(_engine);
_resourceLoader->addTextureProvider("image/png", _stbDecoder);
_resourceLoader->addTextureProvider("image/jpeg", _stbDecoder);
manipulator =
Manipulator<float>::Builder().orbitHomePosition(0.0f, 0.0f, 0.05f).targetPosition(0.0f, 0.0f, 0.0f).build(Mode::ORBIT);
_asset = nullptr;
@@ -299,6 +300,8 @@ namespace polyvox
_animator->updateBoneMatrices();
// transformToUnitCube();
Log("Successfully loaded GLB.");
}
@@ -426,9 +429,9 @@ namespace polyvox
ResourceBuffer skyboxBuffer = _loadResource(skyboxPath);
image::KtxBundle *skyboxBundle =
new image::KtxBundle(static_cast<const uint8_t *>(skyboxBuffer.data), static_cast<uint32_t>(skyboxBuffer.size));
_skyboxTexture = image::ktx::createTexture(_engine, skyboxBundle, false);
image::Ktx1Bundle *skyboxBundle =
new image::Ktx1Bundle(static_cast<const uint8_t *>(skyboxBuffer.data), static_cast<uint32_t>(skyboxBuffer.size));
_skyboxTexture = ktxreader::Ktx1Reader::createTexture(_engine, skyboxBundle, false);
_skybox = filament::Skybox::Builder().environment(_skyboxTexture).build(*_engine);
_scene->setSkybox(_skybox);
@@ -439,11 +442,11 @@ namespace polyvox
// Load IBL.
ResourceBuffer iblBuffer = _loadResource(iblPath);
image::KtxBundle *iblBundle = new image::KtxBundle(
image::Ktx1Bundle *iblBundle = new image::Ktx1Bundle(
static_cast<const uint8_t *>(iblBuffer.data), static_cast<uint32_t>(iblBuffer.size));
math::float3 harmonics[9];
iblBundle->getSphericalHarmonics(harmonics);
_iblTexture = image::ktx::createTexture(_engine, iblBundle, false);
_iblTexture = ktxreader::Ktx1Reader::createTexture(_engine, iblBundle, false);
_indirectLight = IndirectLight::Builder()
.reflections(_iblTexture)
.irradiance(3, harmonics)
@@ -496,7 +499,7 @@ namespace polyvox
{
if (!_view || !_mainCamera || !_swapChain)
{
// Log("Not ready for rendering");
Log("Not ready for rendering");
return;
}

View File

@@ -169,6 +169,7 @@ namespace polyvox {
MaterialProvider* _materialProvider;
gltfio::ResourceLoader* _resourceLoader = nullptr;
gltfio::TextureProvider* _stbDecoder = nullptr;
bool _recomputeAabb = false;
bool _actualSize = false;