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()