From 25e3d4994106c74a14adf38ce1d52cb1b1788be7 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Wed, 5 Dec 2018 17:10:18 -0800 Subject: [PATCH 1/6] Add VaryingSet1 to Task aliases --- libraries/task/src/task/Task.h | 1 + libraries/task/src/task/Varying.h | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/libraries/task/src/task/Task.h b/libraries/task/src/task/Task.h index fb7012b16c..9647157a54 100644 --- a/libraries/task/src/task/Task.h +++ b/libraries/task/src/task/Task.h @@ -411,6 +411,7 @@ protected: using Task = task::Task; \ using Engine = task::Engine; \ using Varying = task::Varying; \ + template < typename T0 > using VaryingSet1 = task::VaryingSet1; \ template < typename T0, typename T1 > using VaryingSet2 = task::VaryingSet2; \ template < typename T0, typename T1, typename T2 > using VaryingSet3 = task::VaryingSet3; \ template < typename T0, typename T1, typename T2, typename T3 > using VaryingSet4 = task::VaryingSet4; \ diff --git a/libraries/task/src/task/Varying.h b/libraries/task/src/task/Varying.h index 9536db2799..60f3c6dec4 100644 --- a/libraries/task/src/task/Varying.h +++ b/libraries/task/src/task/Varying.h @@ -69,6 +69,26 @@ protected: std::shared_ptr _concept; }; +template < typename T0 > +class VaryingSet1 : public std::tuple { +public: + using Parent = std::tuple; + + VaryingSet1() : Parent(Varying(T0())) {} + VaryingSet1(const VaryingSet1& src) : Parent(std::get<0>(src)) {} + VaryingSet1(const Varying& first) : Parent(first) {} + + const T0& get0() const { return std::get<0>((*this)).template get(); } + T0& edit0() { return std::get<0>((*this)).template edit(); } + + virtual Varying operator[] (uint8_t index) const { + return std::get<0>((*this)); + } + virtual uint8_t length() const { return 1; } + + Varying asVarying() const { return Varying((*this)); } +}; + using VaryingPairBase = std::pair; template < typename T0, typename T1 > class VaryingSet2 : public VaryingPairBase { From 566d09dc9c9ac96289c7df71ee26ebb048c322a9 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Tue, 4 Dec 2018 14:36:21 -0800 Subject: [PATCH 2/6] Add model preparation step to ModelCache using new library model-baker --- interface/CMakeLists.txt | 2 +- libraries/model-baker/CMakeLists.txt | 7 ++++ .../model-baker/src/model-baker/Baker.cpp | 39 +++++++++++++++++++ libraries/model-baker/src/model-baker/Baker.h | 36 +++++++++++++++++ .../model-baker/src/model-baker/Engine.h | 32 +++++++++++++++ libraries/model-networking/CMakeLists.txt | 3 +- .../src/model-networking/ModelCache.cpp | 9 ++++- libraries/shared/src/Profile.cpp | 1 + libraries/shared/src/Profile.h | 1 + plugins/openvr/CMakeLists.txt | 2 +- 10 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 libraries/model-baker/CMakeLists.txt create mode 100644 libraries/model-baker/src/model-baker/Baker.cpp create mode 100644 libraries/model-baker/src/model-baker/Baker.h create mode 100644 libraries/model-baker/src/model-baker/Engine.h diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index e6d83e7890..c013cfacd3 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -206,7 +206,7 @@ endif() link_hifi_libraries( shared workload task octree ktx gpu gl procedural graphics graphics-scripting render pointers - recording hfm fbx networking model-networking entities avatars trackers + recording hfm fbx networking model-networking model-baker entities avatars trackers audio audio-client animation script-engine physics render-utils entities-renderer avatars-renderer ui qml auto-updater midi controllers plugins image trackers diff --git a/libraries/model-baker/CMakeLists.txt b/libraries/model-baker/CMakeLists.txt new file mode 100644 index 0000000000..7004ec33f3 --- /dev/null +++ b/libraries/model-baker/CMakeLists.txt @@ -0,0 +1,7 @@ +set(TARGET_NAME model-baker) +setup_hifi_library() +include_hifi_library_headers(shared) +include_hifi_library_headers(task) +include_hifi_library_headers(gpu) +include_hifi_library_headers(graphics) +include_hifi_library_headers(hfm) diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp new file mode 100644 index 0000000000..b1ae5653f4 --- /dev/null +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -0,0 +1,39 @@ +// +// Baker.cpp +// model-baker/src/model-baker +// +// Created by Sabrina Shanman on 2018/12/04. +// Copyright 2018 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "Baker.h" + +namespace baker { + + class BakerEngineBuilder { + public: + using Unused = int; + + using Input = VaryingSet1; + using Output = VaryingSet1; + using JobModel = Task::ModelIO; + void build(JobModel& model, const Varying& in, Varying& out) { + out = Output(in.getN(0)); + } + }; + + Baker::Baker(const hfm::Model::Pointer& hfmModel) : + _engine(std::make_shared(BakerEngineBuilder::JobModel::create("Baker"), std::make_shared())) { + _engine->feedInput(0, hfmModel); + } + + void Baker::run() { + _engine->run(); + auto& output = _engine->getOutput().get(); + hfmModel = output.get0(); + } + +}; diff --git a/libraries/model-baker/src/model-baker/Baker.h b/libraries/model-baker/src/model-baker/Baker.h new file mode 100644 index 0000000000..ba233243b3 --- /dev/null +++ b/libraries/model-baker/src/model-baker/Baker.h @@ -0,0 +1,36 @@ +// +// Baker.h +// model-baker/src/model-baker +// +// Created by Sabrina Shanman on 2018/12/04. +// Copyright 2018 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_baker_Baker_h +#define hifi_baker_Baker_h + +#include + +#include "Engine.h" + +namespace baker { + + class Baker { + public: + Baker(const hfm::Model::Pointer& hfmModel); + + void run(); + + // Outputs, available after run() is called + hfm::Model::Pointer hfmModel; + + protected: + EnginePointer _engine; + }; + +}; + +#endif //hifi_baker_Baker_h diff --git a/libraries/model-baker/src/model-baker/Engine.h b/libraries/model-baker/src/model-baker/Engine.h new file mode 100644 index 0000000000..42cad4e99f --- /dev/null +++ b/libraries/model-baker/src/model-baker/Engine.h @@ -0,0 +1,32 @@ +// +// Engine.h +// model-baker/src/model-baker +// +// Created by Sabrina Shanman on 2018/12/04. +// Copyright 2018 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_baker_Engine_h +#define hifi_baker_Engine_h + +#include + +namespace baker { + + class ImportContext : public task::JobContext { + public: + // No context settings yet for model prep + }; + using ImportContextPointer = std::shared_ptr; + + Task_DeclareCategoryTimeProfilerClass(BakerTimeProfiler, trace_baker); + Task_DeclareTypeAliases(ImportContext, BakerTimeProfiler) + + using EnginePointer = std::shared_ptr; + +}; + +#endif // hifi_baker_Engine_h diff --git a/libraries/model-networking/CMakeLists.txt b/libraries/model-networking/CMakeLists.txt index 0fca6fa3d1..6a7182cc33 100644 --- a/libraries/model-networking/CMakeLists.txt +++ b/libraries/model-networking/CMakeLists.txt @@ -1,5 +1,6 @@ set(TARGET_NAME model-networking) setup_hifi_library() -link_hifi_libraries(shared shaders networking graphics fbx ktx image gl) +link_hifi_libraries(shared shaders networking graphics fbx ktx image gl model-baker) include_hifi_library_headers(gpu) include_hifi_library_headers(hfm) +include_hifi_library_headers(task) diff --git a/libraries/model-networking/src/model-networking/ModelCache.cpp b/libraries/model-networking/src/model-networking/ModelCache.cpp index dfee4750f5..05c4aa0e03 100644 --- a/libraries/model-networking/src/model-networking/ModelCache.cpp +++ b/libraries/model-networking/src/model-networking/ModelCache.cpp @@ -27,6 +27,7 @@ #include #include #include +#include Q_LOGGING_CATEGORY(trace_resource_parse_geometry, "trace.resource.parse.geometry") @@ -277,8 +278,12 @@ void GeometryDefinitionResource::downloadFinished(const QByteArray& data) { } void GeometryDefinitionResource::setGeometryDefinition(HFMModel::Pointer hfmModel) { - // Assume ownership of the HFMModel pointer - _hfmModel = hfmModel; + // Do processing on the model + baker::Baker modelBaker(hfmModel); + modelBaker.run(); + + // Assume ownership of the processed HFMModel + _hfmModel = modelBaker.hfmModel; // Copy materials QHash materialIDAtlas; diff --git a/libraries/shared/src/Profile.cpp b/libraries/shared/src/Profile.cpp index f3cbbf9262..778b39aca5 100644 --- a/libraries/shared/src/Profile.cpp +++ b/libraries/shared/src/Profile.cpp @@ -29,6 +29,7 @@ Q_LOGGING_CATEGORY(trace_simulation_physics, "trace.simulation.physics") Q_LOGGING_CATEGORY(trace_simulation_physics_detail, "trace.simulation.physics.detail") Q_LOGGING_CATEGORY(trace_startup, "trace.startup") Q_LOGGING_CATEGORY(trace_workload, "trace.workload") +Q_LOGGING_CATEGORY(trace_baker, "trace.baker") #if defined(NSIGHT_FOUND) #include "nvToolsExt.h" diff --git a/libraries/shared/src/Profile.h b/libraries/shared/src/Profile.h index e78ce210c9..01d86f8f2e 100644 --- a/libraries/shared/src/Profile.h +++ b/libraries/shared/src/Profile.h @@ -34,6 +34,7 @@ Q_DECLARE_LOGGING_CATEGORY(trace_simulation_physics) Q_DECLARE_LOGGING_CATEGORY(trace_simulation_physics_detail) Q_DECLARE_LOGGING_CATEGORY(trace_startup) Q_DECLARE_LOGGING_CATEGORY(trace_workload) +Q_DECLARE_LOGGING_CATEGORY(trace_baker) class Duration { public: diff --git a/plugins/openvr/CMakeLists.txt b/plugins/openvr/CMakeLists.txt index 8953ab7d27..8e43397c19 100644 --- a/plugins/openvr/CMakeLists.txt +++ b/plugins/openvr/CMakeLists.txt @@ -11,7 +11,7 @@ if (WIN32 AND (NOT USE_GLES)) setup_hifi_plugin(Gui Qml Multimedia) link_hifi_libraries(shared task gl qml networking controllers ui plugins display-plugins ui-plugins input-plugins script-engine - audio-client render-utils graphics shaders gpu render model-networking hfm fbx ktx image procedural ${PLATFORM_GL_BACKEND}) + audio-client render-utils graphics shaders gpu render model-networking model-baker hfm fbx ktx image procedural ${PLATFORM_GL_BACKEND}) include_hifi_library_headers(octree) target_openvr() From 9e63caa84acf1359d9114c363eb268a159568811 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Tue, 11 Dec 2018 12:54:44 -0800 Subject: [PATCH 3/6] Fix linker error for model-baker on Android/Linux --- libraries/model-baker/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/model-baker/CMakeLists.txt b/libraries/model-baker/CMakeLists.txt index 7004ec33f3..58d9d1e60e 100644 --- a/libraries/model-baker/CMakeLists.txt +++ b/libraries/model-baker/CMakeLists.txt @@ -1,7 +1,8 @@ set(TARGET_NAME model-baker) setup_hifi_library() -include_hifi_library_headers(shared) -include_hifi_library_headers(task) + +link_hifi_libraries(shared task) + include_hifi_library_headers(gpu) include_hifi_library_headers(graphics) include_hifi_library_headers(hfm) From c41174a823c94d722d60e32f25fc2ccf854d090d Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Thu, 13 Dec 2018 10:17:55 -0800 Subject: [PATCH 4/6] Re-name baker::ImportContext to baker::BakeContext --- libraries/model-baker/src/model-baker/Baker.cpp | 2 +- libraries/model-baker/src/model-baker/Engine.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp index b1ae5653f4..50b635583b 100644 --- a/libraries/model-baker/src/model-baker/Baker.cpp +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -26,7 +26,7 @@ namespace baker { }; Baker::Baker(const hfm::Model::Pointer& hfmModel) : - _engine(std::make_shared(BakerEngineBuilder::JobModel::create("Baker"), std::make_shared())) { + _engine(std::make_shared(BakerEngineBuilder::JobModel::create("Baker"), std::make_shared())) { _engine->feedInput(0, hfmModel); } diff --git a/libraries/model-baker/src/model-baker/Engine.h b/libraries/model-baker/src/model-baker/Engine.h index 42cad4e99f..4f450e2b2b 100644 --- a/libraries/model-baker/src/model-baker/Engine.h +++ b/libraries/model-baker/src/model-baker/Engine.h @@ -16,14 +16,14 @@ namespace baker { - class ImportContext : public task::JobContext { + class BakeContext : public task::JobContext { public: // No context settings yet for model prep }; - using ImportContextPointer = std::shared_ptr; + using BakeContextPointer = std::shared_ptr; Task_DeclareCategoryTimeProfilerClass(BakerTimeProfiler, trace_baker); - Task_DeclareTypeAliases(ImportContext, BakerTimeProfiler) + Task_DeclareTypeAliases(BakeContext, BakerTimeProfiler) using EnginePointer = std::shared_ptr; From c7022988ead77d049a4e75b95e282436907b37e4 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Fri, 14 Dec 2018 09:14:07 -0800 Subject: [PATCH 5/6] Revert "Add VaryingSet1 to Task aliases" This reverts commit 25e3d4994106c74a14adf38ce1d52cb1b1788be7. --- libraries/task/src/task/Task.h | 1 - libraries/task/src/task/Varying.h | 20 -------------------- 2 files changed, 21 deletions(-) diff --git a/libraries/task/src/task/Task.h b/libraries/task/src/task/Task.h index 9647157a54..fb7012b16c 100644 --- a/libraries/task/src/task/Task.h +++ b/libraries/task/src/task/Task.h @@ -411,7 +411,6 @@ protected: using Task = task::Task; \ using Engine = task::Engine; \ using Varying = task::Varying; \ - template < typename T0 > using VaryingSet1 = task::VaryingSet1; \ template < typename T0, typename T1 > using VaryingSet2 = task::VaryingSet2; \ template < typename T0, typename T1, typename T2 > using VaryingSet3 = task::VaryingSet3; \ template < typename T0, typename T1, typename T2, typename T3 > using VaryingSet4 = task::VaryingSet4; \ diff --git a/libraries/task/src/task/Varying.h b/libraries/task/src/task/Varying.h index 60f3c6dec4..9536db2799 100644 --- a/libraries/task/src/task/Varying.h +++ b/libraries/task/src/task/Varying.h @@ -69,26 +69,6 @@ protected: std::shared_ptr _concept; }; -template < typename T0 > -class VaryingSet1 : public std::tuple { -public: - using Parent = std::tuple; - - VaryingSet1() : Parent(Varying(T0())) {} - VaryingSet1(const VaryingSet1& src) : Parent(std::get<0>(src)) {} - VaryingSet1(const Varying& first) : Parent(first) {} - - const T0& get0() const { return std::get<0>((*this)).template get(); } - T0& edit0() { return std::get<0>((*this)).template edit(); } - - virtual Varying operator[] (uint8_t index) const { - return std::get<0>((*this)); - } - virtual uint8_t length() const { return 1; } - - Varying asVarying() const { return Varying((*this)); } -}; - using VaryingPairBase = std::pair; template < typename T0, typename T1 > class VaryingSet2 : public VaryingPairBase { From a36e75672e71929c92d5967b868ea7c0b3c5e668 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Fri, 14 Dec 2018 09:26:19 -0800 Subject: [PATCH 6/6] Remove dependency on VaryingSet1 --- libraries/model-baker/src/model-baker/Baker.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp index 50b635583b..14ec62413e 100644 --- a/libraries/model-baker/src/model-baker/Baker.cpp +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -17,23 +17,22 @@ namespace baker { public: using Unused = int; - using Input = VaryingSet1; - using Output = VaryingSet1; + using Input = hfm::Model::Pointer; + using Output = hfm::Model::Pointer; using JobModel = Task::ModelIO; void build(JobModel& model, const Varying& in, Varying& out) { - out = Output(in.getN(0)); + out = in; } }; Baker::Baker(const hfm::Model::Pointer& hfmModel) : _engine(std::make_shared(BakerEngineBuilder::JobModel::create("Baker"), std::make_shared())) { - _engine->feedInput(0, hfmModel); + _engine->feedInput(hfmModel); } void Baker::run() { _engine->run(); - auto& output = _engine->getOutput().get(); - hfmModel = output.get0(); + hfmModel = _engine->getOutput().get(); } };