Introduce gltfio-lite.
This is 466 KB insted of the usual 850 KB. It assumes that users do not need spec-gloss, non-lit, or a special transparency mode. (uncompressed SO size on arm64) We can add a new maven project for this next week.
This commit is contained in:
@@ -13,6 +13,10 @@ add_library(gltfio_resources STATIC IMPORTED)
|
||||
set_target_properties(gltfio_resources PROPERTIES IMPORTED_LOCATION
|
||||
${FILAMENT_DIR}/lib/${ANDROID_ABI}/libgltfio_resources.a)
|
||||
|
||||
add_library(gltfio_resources_lite STATIC IMPORTED)
|
||||
set_target_properties(gltfio_resources_lite PROPERTIES IMPORTED_LOCATION
|
||||
${FILAMENT_DIR}/lib/${ANDROID_ABI}/libgltfio_resources_lite.a)
|
||||
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-stack-protector")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-rtti")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffast-math -ffp-contract=fast")
|
||||
@@ -25,7 +29,7 @@ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-Bsymbolic-funct
|
||||
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.map")
|
||||
|
||||
add_library(gltfio-jni SHARED
|
||||
set(GLTFIO_SRCS
|
||||
${GLTFIO_DIR}/include/gltfio/Animator.h
|
||||
${GLTFIO_DIR}/include/gltfio/AssetLoader.h
|
||||
${GLTFIO_DIR}/include/gltfio/MaterialProvider.h
|
||||
@@ -60,7 +64,7 @@ add_library(gltfio-jni SHARED
|
||||
../common/NioUtils.cpp
|
||||
)
|
||||
|
||||
target_include_directories(gltfio-jni PRIVATE
|
||||
set(GLTFIO_INCLUDE_DIRS
|
||||
..
|
||||
${FILAMENT_DIR}/include
|
||||
${FILAMENT_DIR}/include/gltfio/resources
|
||||
@@ -70,17 +74,16 @@ target_include_directories(gltfio-jni PRIVATE
|
||||
../../libs/utils/include
|
||||
)
|
||||
|
||||
set_target_properties(gltfio-jni PROPERTIES LINK_DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.symbols)
|
||||
add_library(gltfio-jni SHARED ${GLTFIO_SRCS})
|
||||
target_include_directories(gltfio-jni PRIVATE ${GLTFIO_INCLUDE_DIRS})
|
||||
set_target_properties(gltfio-jni PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.symbols)
|
||||
set_target_properties(gltfio-jni PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.map)
|
||||
target_link_libraries(gltfio-jni filament-jni utils gltfio_resources log)
|
||||
|
||||
# Force a relink when the version script is changed.
|
||||
set_target_properties(gltfio-jni PROPERTIES LINK_DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.map)
|
||||
add_library(gltfio-jni-lite SHARED ${GLTFIO_SRCS})
|
||||
target_include_directories(gltfio-jni-lite PRIVATE ${GLTFIO_INCLUDE_DIRS})
|
||||
set_target_properties(gltfio-jni-lite PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.symbols)
|
||||
set_target_properties(gltfio-jni-lite PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libgltfio-jni.map)
|
||||
target_link_libraries(gltfio-jni-lite filament-jni utils gltfio_resources_lite log)
|
||||
|
||||
# The ordering in the following list is important because CMake does not have dependency information.
|
||||
target_link_libraries(gltfio-jni
|
||||
filament-jni
|
||||
utils
|
||||
gltfio_resources
|
||||
log
|
||||
)
|
||||
target_compile_definitions(gltfio-jni-lite PUBLIC GLTFIO_LITE=1)
|
||||
|
||||
@@ -98,6 +98,29 @@ add_custom_command(OUTPUT ${DUMMY_SRC} COMMAND echo "//" > ${DUMMY_SRC})
|
||||
|
||||
add_library(gltfio_resources ${DUMMY_SRC} ${RESGEN_SOURCE})
|
||||
|
||||
# ==================================================================================================
|
||||
# Build "lite" resources library, which contains only one material
|
||||
# ==================================================================================================
|
||||
|
||||
set(RESOURCE_BINS "${RESOURCE_DIR}/lit_opaque.filamat")
|
||||
|
||||
get_resgen_vars(${RESOURCE_DIR} gltfresources_lite)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${RESGEN_OUTPUTS}
|
||||
COMMAND resgen ${RESGEN_FLAGS} ${RESOURCE_BINS}
|
||||
DEPENDS resgen ${RESOURCE_BINS}
|
||||
)
|
||||
|
||||
if (DEFINED RESGEN_SOURCE_FLAGS)
|
||||
set_source_files_properties(${RESGEN_SOURCE} PROPERTIES COMPILE_FLAGS ${RESGEN_SOURCE_FLAGS})
|
||||
endif()
|
||||
|
||||
set(DUMMY_SRC "${RESOURCE_DIR}/dummy.c")
|
||||
add_custom_command(OUTPUT ${DUMMY_SRC} COMMAND echo "//" > ${DUMMY_SRC})
|
||||
|
||||
add_library(gltfio_resources_lite ${DUMMY_SRC} ${RESGEN_SOURCE})
|
||||
|
||||
# ==================================================================================================
|
||||
# Build the "core" library (no filamat or pipeline)
|
||||
# ==================================================================================================
|
||||
@@ -141,9 +164,10 @@ if (NOT WEBGL AND NOT ANDROID AND NOT IOS)
|
||||
|
||||
else()
|
||||
|
||||
install(TARGETS gltfio_core gltfio_resources ARCHIVE DESTINATION lib/${DIST_DIR})
|
||||
install(TARGETS gltfio_core gltfio_resources gltfio_resources_lite ARCHIVE DESTINATION lib/${DIST_DIR})
|
||||
install(DIRECTORY ${PUBLIC_HDR_DIR}/gltfio DESTINATION include)
|
||||
install(FILES ${RESOURCE_DIR}/gltfresources.h DESTINATION include/gltfio/resources)
|
||||
install(FILES ${RESOURCE_DIR}/gltfresources_lite.h DESTINATION include/gltfio/resources)
|
||||
|
||||
endif()
|
||||
|
||||
|
||||
@@ -362,6 +362,11 @@ void FAssetLoader::createRenderable(const cgltf_node* node, Entity entity) {
|
||||
UvMap uvmap {};
|
||||
bool hasVertexColor = primitiveHasVertexColor(inputPrim);
|
||||
MaterialInstance* mi = createMaterialInstance(inputPrim->material, &uvmap, hasVertexColor);
|
||||
if (!mi) {
|
||||
mError = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
mResult->mDependencyGraph.addEdge(entity, mi);
|
||||
builder.material(index, mi);
|
||||
|
||||
@@ -868,6 +873,11 @@ MaterialInstance* FAssetLoader::createMaterialInstance(const cgltf_material* inp
|
||||
// This not only creates a material instance, it modifies the material key according to our
|
||||
// rendering constraints. For example, Filament only supports 2 sets of texture coordinates.
|
||||
MaterialInstance* mi = mMaterials->createMaterialInstance(&matkey, uvmap, inputMat->name);
|
||||
if (!mi) {
|
||||
slog.e << "No material with the specified requirements exists." << io::endl;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
mResult->mMaterialInstances.push_back(mi);
|
||||
|
||||
if (inputMat->alpha_mode == cgltf_alpha_mode_mask) {
|
||||
|
||||
@@ -22,7 +22,11 @@
|
||||
|
||||
#include <math/mat4.h>
|
||||
|
||||
#if GLTFIO_LITE
|
||||
#include "gltfresources_lite.h"
|
||||
#else
|
||||
#include "gltfresources.h"
|
||||
#endif
|
||||
|
||||
using namespace filament;
|
||||
using namespace filament::math;
|
||||
@@ -61,10 +65,20 @@ public:
|
||||
filament::Engine* mEngine;
|
||||
};
|
||||
|
||||
#if GLTFIO_LITE
|
||||
|
||||
#define CREATE_MATERIAL(name) Material::Builder() \
|
||||
.package(GLTFRESOURCES_LITE_ ## name ## _DATA, GLTFRESOURCES_LITE_ ## name ## _SIZE) \
|
||||
.build(*mEngine);
|
||||
|
||||
#else
|
||||
|
||||
#define CREATE_MATERIAL(name) Material::Builder() \
|
||||
.package(GLTFRESOURCES_ ## name ## _DATA, GLTFRESOURCES_ ## name ## _SIZE) \
|
||||
.build(*mEngine);
|
||||
|
||||
#endif
|
||||
|
||||
#define MATINDEX(shading, alpha) (int(shading) + 3 * int(alpha))
|
||||
|
||||
UbershaderLoader::UbershaderLoader(Engine* engine) : mEngine(engine) {
|
||||
@@ -105,6 +119,7 @@ Material* UbershaderLoader::getMaterial(const MaterialKey& config) const {
|
||||
}
|
||||
switch (matindex) {
|
||||
case MATINDEX(LIT, AlphaMode::OPAQUE): mMaterials[matindex] = CREATE_MATERIAL(LIT_OPAQUE); break;
|
||||
#if !GLTFIO_LITE
|
||||
case MATINDEX(LIT, AlphaMode::MASK): mMaterials[matindex] = CREATE_MATERIAL(LIT_MASKED); break;
|
||||
case MATINDEX(LIT, AlphaMode::BLEND): mMaterials[matindex] = CREATE_MATERIAL(LIT_FADE); break;
|
||||
case MATINDEX(UNLIT, AlphaMode::OPAQUE): mMaterials[matindex] = CREATE_MATERIAL(UNLIT_OPAQUE); break;
|
||||
@@ -113,6 +128,7 @@ Material* UbershaderLoader::getMaterial(const MaterialKey& config) const {
|
||||
case MATINDEX(SPECULAR_GLOSSINESS, AlphaMode::OPAQUE): mMaterials[matindex] = CREATE_MATERIAL(SPECULARGLOSSINESS_OPAQUE); break;
|
||||
case MATINDEX(SPECULAR_GLOSSINESS, AlphaMode::MASK): mMaterials[matindex] = CREATE_MATERIAL(SPECULARGLOSSINESS_MASKED); break;
|
||||
case MATINDEX(SPECULAR_GLOSSINESS, AlphaMode::BLEND): mMaterials[matindex] = CREATE_MATERIAL(SPECULARGLOSSINESS_FADE); break;
|
||||
#endif
|
||||
}
|
||||
return mMaterials[matindex];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user