Compare commits

...

11 Commits

Author SHA1 Message Date
doriswu
5a903f58d9 Merge branch 'main' into exv/mi-sc
# Conflicts:
#	NEW_RELEASE_NOTES.md
#	filament/src/LocalProgramCache.cpp
#	filament/src/PostProcessManager.cpp
#	filament/src/PostProcessManager.h
#	filament/src/details/Material.cpp
2026-04-30 14:03:20 +08:00
Èric Bitriá Ribes
7309a05ac3 feat: iOS simulator (arm64) support (#9893) 2026-04-29 16:20:11 -07:00
Filament Bot
2132e5cda5 [automated] Updating /docs due to commit 96b8015
Full commit hash is 96b8015fb4

DOCS_ALLOW_DIRECT_EDITS
2026-04-29 22:46:17 +00:00
Powei Feng
96b8015fb4 web: rename WEBGL to WASM for cmake (#9941)
This is a more accurate name because it specifies the platform and
not the graphics API.
2026-04-29 22:21:25 +00:00
Eliza Velasquez
8b5af6f515 Update documentation for Material::compile 2026-03-16 11:39:10 +09:00
Eliza Velasquez
bd07193814 engine: address comments 2026-03-16 11:39:10 +09:00
Eliza Velasquez
842967a410 PostProcessManager: prepare programs per instance 2026-03-16 11:39:10 +09:00
Eliza Velasquez
a4e6ec2450 android: fix build errors 2026-03-16 11:39:10 +09:00
Eliza Velasquez
b6c551ac3c java: add bindings for MaterialInstance::compile() 2026-03-16 11:39:10 +09:00
Eliza Velasquez
038062ec77 engine: add MaterialInstance::compile() 2026-03-16 11:39:10 +09:00
Eliza Velasquez
5d6b62de3e engine: override spec constants on instance-basis
This commit adds `getConstant()` and `setConstant()` methods to
`MaterialInstance`.

When a material instance is created, it doesn't create or manage any spec
constants on its own, but instead relies on `Material`. The client can change
constants at any time, after which the necessary resources are copied and
maintained by `MaterialInstance`.

As part of this change, most internal rendering methods which depended on
`Material` have been refactored to instead depend on `MaterialInstance`.
2026-03-16 11:39:10 +09:00
81 changed files with 2165 additions and 1076 deletions

View File

@@ -26,7 +26,7 @@ jobs:
cd build/web && printf "y" | ./build.sh release
- name: Deploy to npm
run: |
cd out/cmake-webgl-release/web/filament-js
cd out/cmake-wasm-release/web/filament-js
npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

View File

@@ -31,6 +31,8 @@ jobs:
with:
fetch-depth: 0
- uses: ./.github/actions/mac-prereq
- name: Select Xcode 16.2
run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
- name: Run build script
run: |
cd build/ios && printf "y" | ./build.sh continuous

View File

@@ -184,6 +184,8 @@ jobs:
with:
fetch-depth: 0
- uses: ./.github/actions/mac-prereq
- name: Select Xcode 16.2
run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
- name: Run build script
run: |
cd build/ios && printf "y" | ./build.sh presubmit

View File

@@ -286,6 +286,8 @@ jobs:
with:
ref: ${{ steps.git_ref.outputs.ref }}
- uses: ./.github/actions/mac-prereq
- name: Select Xcode 16.2
run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
- name: Run build script
env:
TAG: ${{ steps.git_ref.outputs.tag }}

View File

@@ -177,7 +177,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# ==================================================================================================
# OS specific
# ==================================================================================================
if (UNIX AND NOT APPLE AND NOT ANDROID AND NOT WEBGL)
if (UNIX AND NOT APPLE AND NOT ANDROID AND NOT WASM)
set(LINUX TRUE)
else()
# since cmake 3.25 LINUX is automatically set based on CMAKE_SYSTEM_NAME, which the android
@@ -218,7 +218,7 @@ if (LINUX)
endif()
endif()
if (ANDROID OR WEBGL OR IOS OR FILAMENT_LINUX_IS_MOBILE)
if (ANDROID OR WASM OR IOS OR FILAMENT_LINUX_IS_MOBILE)
set(IS_MOBILE_TARGET TRUE)
endif()
@@ -226,7 +226,7 @@ if (ANDROID)
add_definitions(-D__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__)
endif()
if (NOT ANDROID AND NOT WEBGL AND NOT IOS AND NOT FILAMENT_LINUX_IS_MOBILE)
if (NOT ANDROID AND NOT WASM AND NOT IOS AND NOT FILAMENT_LINUX_IS_MOBILE)
set(IS_HOST_PLATFORM TRUE)
endif()
@@ -473,7 +473,7 @@ if (NOT MSVC)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffunction-sections -fdata-sections")
endif()
if (ANDROID OR WEBGL)
if (ANDROID OR WASM)
# On Android and WebGL RELEASE builds, we omit unwind info to save space.
# (We keep unwind info on iOS to allow readable stack traces in crash reports.)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-unwind-tables -fno-asynchronous-unwind-tables")
@@ -482,11 +482,11 @@ endif()
# With WebGL, we disable RTTI because we pass emscripten::val back and forth
# between C++ and JavaScript in order to efficiently access typed arrays, which are unbound.
# NOTE: This is not documented in emscripten so we should consider a different approach.
if (WEBGL)
if (WASM)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
endif()
if (WEBGL_PTHREADS)
if (WASM_PTHREADS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
endif()
@@ -503,7 +503,7 @@ if (ANDROID)
# keep STL debug infos (mimics what the NDK does)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-limit-debug-info")
endif()
if (NOT MSVC AND NOT WEBGL)
if (NOT MSVC AND NOT WASM)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fstack-protector")
endif()
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${EXTRA_SANITIZE_OPTIONS}")
@@ -522,7 +522,7 @@ endif()
# Linker flags
# ==================================================================================================
# Strip unused sections
if (NOT WEBGL)
if (NOT WASM)
set(GC_SECTIONS "-Wl,--gc-sections")
endif()
@@ -556,7 +556,7 @@ endif()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GC_SECTIONS} ${NO_EXEC_STACK}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GC_SECTIONS} ${B_SYMBOLIC_FUNCTIONS} ${BINARY_ALIGNMENT}")
if (WEBGL_PTHREADS)
if (WASM_PTHREADS)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pthread")
endif()
@@ -586,7 +586,7 @@ endif()
# By default, build with Vulkan support on desktop platforms, although clients must request to use
# it at run time.
if (WIN32 OR WEBGL OR IOS)
if (WIN32 OR WASM OR IOS)
option(FILAMENT_SUPPORTS_VULKAN "Include the Vulkan backend" OFF)
else()
option(FILAMENT_SUPPORTS_VULKAN "Include the Vulkan backend" ON)
@@ -604,7 +604,7 @@ if (FILAMENT_SUPPORTS_WEBP_TEXTURES)
endif()
# Build with Metal support on non-WebGL Apple platforms.
if (APPLE AND NOT WEBGL)
if (APPLE AND NOT WASM)
option(FILAMENT_SUPPORTS_METAL "Include the Metal backend" ON)
else()
option(FILAMENT_SUPPORTS_METAL "Include the Metal backend" OFF)
@@ -614,7 +614,7 @@ if (FILAMENT_SUPPORTS_METAL)
endif()
# Building filamat increases build times and isn't required for web, so turn it off by default.
if (NOT WEBGL)
if (NOT WASM)
option(FILAMENT_BUILD_FILAMAT "Build filamat and JNI buildings" ON)
else()
option(FILAMENT_BUILD_FILAMAT "Build filamat and JNI buildings" OFF)
@@ -732,6 +732,9 @@ string(TOLOWER "${DIST_ARCH}" DIST_ARCH)
string(REPLACE "amd64" "x86_64" DIST_ARCH "${DIST_ARCH}")
if (NOT DIST_DIR)
set(DIST_DIR "${DIST_ARCH}")
if (PLATFORM_NAME)
set(DIST_DIR "${DIST_DIR}-${PLATFORM_NAME}")
endif()
endif()
# ==================================================================================================
@@ -840,7 +843,7 @@ if (FILAMENT_IMPORT_PREBUILT_EXECUTABLES_DIR)
set(IMPORT_EXECUTABLES_DIR ${FILAMENT_IMPORT_PREBUILT_EXECUTABLES_DIR})
endif()
if (WEBGL)
if (WASM)
set(IMPORT_EXECUTABLES ${FILAMENT}/${IMPORT_EXECUTABLES_DIR}/ImportExecutables-Release.cmake)
else()
if (FILAMENT_EXPORT_PREBUILT_EXECUTABLES OR FILAMENT_IMPORT_PREBUILT_EXECUTABLES)
@@ -875,7 +878,7 @@ function(get_resgen_vars ARCHIVE_DIR ARCHIVE_NAME)
set(RESGEN_HEADER "${ARCHIVE_DIR}/${ARCHIVE_NAME}.h" PARENT_SCOPE)
# Visual Studio makes it difficult to use assembly without using MASM. MASM doesn't support
# the equivalent of .incbin, so on Windows we'll just tell resgen to output a C file.
if (WEBGL OR WIN32 OR ANDROID_ON_WINDOWS)
if (WASM OR WIN32 OR ANDROID_ON_WINDOWS)
set(RESGEN_OUTPUTS "${OUTPUTS};${ARCHIVE_DIR}/${ARCHIVE_NAME}.c" PARENT_SCOPE)
set(RESGEN_FLAGS -qcx ${ARCHIVE_DIR} -p ${ARCHIVE_NAME} PARENT_SCOPE)
set(RESGEN_SOURCE "${ARCHIVE_DIR}/${ARCHIVE_NAME}.c" PARENT_SCOPE)
@@ -980,7 +983,7 @@ add_subdirectory(${FILAMENT}/filament)
set(FILAMENT_SAMPLES_BINARY_DIR ${PROJECT_BINARY_DIR}/samples)
if (WEBGL)
if (WASM)
add_subdirectory(web/filament-js)
add_subdirectory(web/examples)
endif()

View File

@@ -6,3 +6,6 @@
appropriate header in [RELEASE_NOTES.md](./RELEASE_NOTES.md).
## Release notes for next branch cut
- iOS: add Apple silicon (`arm64`) iOS Simulator support. The sample Xcode projects now require Xcode 16+ (CI is pinned to Xcode 16.2).
- WEBGL_PTHREADS renamed to WASM_PTHREADS in CMakeLists.txt

View File

@@ -8,7 +8,7 @@
[![Web Build Status](https://github.com/google/filament/actions/workflows/status-web.yml/badge.svg)](https://github.com/google/filament/actions/workflows/status-web.yml)
Filament is a real-time physically based rendering engine for Android, iOS, Linux, macOS, Windows,
and WebGL. It is designed to be as small as possible and as efficient as possible on Android.
and WASM. It is designed to be as small as possible and as efficient as possible on Android.
## Download

View File

@@ -20,6 +20,8 @@
#include <filament/Texture.h>
#include <filament/TextureSampler.h>
#include "common/CallbackUtils.h"
#include <math/mat3.h>
#include <math/mat4.h>
#include <math/vec2.h>
@@ -256,6 +258,69 @@ Java_com_google_android_filament_MaterialInstance_nSetFloatParameterArray(JNIEnv
env->ReleaseStringUTFChars(name_, name);
}
extern "C"
JNIEXPORT jboolean JNICALL
Java_com_google_android_filament_MaterialInstance_nGetConstantBool(JNIEnv *env, jclass,
jlong nativeMaterialInstance, jstring name_) {
MaterialInstance* instance = (MaterialInstance*) nativeMaterialInstance;
const char *name = env->GetStringUTFChars(name_, 0);
jboolean result = instance->getConstant<bool>(name);
env->ReleaseStringUTFChars(name_, name);
return result;
}
extern "C"
JNIEXPORT jfloat JNICALL
Java_com_google_android_filament_MaterialInstance_nGetConstantFloat(JNIEnv *env, jclass,
jlong nativeMaterialInstance, jstring name_) {
MaterialInstance* instance = (MaterialInstance*) nativeMaterialInstance;
const char *name = env->GetStringUTFChars(name_, 0);
jfloat result = instance->getConstant<float>(name);
env->ReleaseStringUTFChars(name_, name);
return result;
}
extern "C"
JNIEXPORT jint JNICALL
Java_com_google_android_filament_MaterialInstance_nGetConstantInt(JNIEnv *env, jclass,
jlong nativeMaterialInstance, jstring name_) {
MaterialInstance* instance = (MaterialInstance*) nativeMaterialInstance;
const char *name = env->GetStringUTFChars(name_, 0);
jint result = instance->getConstant<int32_t>(name);
env->ReleaseStringUTFChars(name_, name);
return result;
}
extern "C"
JNIEXPORT void JNICALL
Java_com_google_android_filament_MaterialInstance_nSetConstantBool(JNIEnv *env, jclass,
jlong nativeMaterialInstance, jstring name_, jboolean x) {
MaterialInstance* instance = (MaterialInstance*) nativeMaterialInstance;
const char *name = env->GetStringUTFChars(name_, 0);
instance->setConstant<bool>(name, x);
env->ReleaseStringUTFChars(name_, name);
}
extern "C"
JNIEXPORT void JNICALL
Java_com_google_android_filament_MaterialInstance_nSetConstantFloat(JNIEnv *env, jclass,
jlong nativeMaterialInstance, jstring name_, jfloat x) {
MaterialInstance* instance = (MaterialInstance*) nativeMaterialInstance;
const char *name = env->GetStringUTFChars(name_, 0);
instance->setConstant<float>(name, x);
env->ReleaseStringUTFChars(name_, name);
}
extern "C"
JNIEXPORT void JNICALL
Java_com_google_android_filament_MaterialInstance_nSetConstantInt(JNIEnv *env, jclass,
jlong nativeMaterialInstance, jstring name_, jint x) {
MaterialInstance* instance = (MaterialInstance*) nativeMaterialInstance;
const char *name = env->GetStringUTFChars(name_, 0);
instance->setConstant<int32_t>(name, x);
env->ReleaseStringUTFChars(name_, name);
}
// defined in TextureSampler.cpp
namespace filament::JniUtils {
TextureSampler from_long(jlong params) noexcept;
@@ -592,3 +657,17 @@ Java_com_google_android_filament_MaterialInstance_nGetTransparencyMode(JNIEnv*,
MaterialInstance* instance = (MaterialInstance*) nativeMaterialInstance;
return (jint) instance->getTransparencyMode();
}
extern "C"
JNIEXPORT void JNICALL
Java_com_google_android_filament_MaterialInstance_nCompile(JNIEnv *env, jclass clazz,
jlong nativeMaterialInstance, jint priority, jint variants, jobject handler, jobject runnable) {
MaterialInstance* materialInstance = (MaterialInstance*) nativeMaterialInstance;
JniCallback* jniCallback = JniCallback::make(env, handler, runnable);
materialInstance->compile(
(MaterialInstance::CompilerPriorityQueue) priority,
(UserVariantFilterBit) variants,
jniCallback->getHandler(), [jniCallback](MaterialInstance*){
JniCallback::postToJavaAndDestroy(jniCallback);
});
}

View File

@@ -523,11 +523,19 @@ public class Material {
* for stereoscopic rendering. If an application is not planning to render in stereo, this bit
* should be turned off to avoid unnecessary material compilations.
*</p>
*<p>
* Note that it is possible to override specialization constants on a per-MaterialInstance basis
* (see {@link MaterialInstance#setConstant}). In that case, the programs compiled by a call to
* Material::compile() may not be reusable by that MaterialInstance. It's better to call
* MaterialInstance::compile() in cases where you intend to override specialization constants.
*</p>
* @param priority Which priority queue to use, LOW or HIGH.
* @param variants Variants to include to the compile command.
* @param handler An {@link java.util.concurrent.Executor Executor}. On Android this can also be a {@link android.os.Handler Handler}.
* @param callback callback called on the main thread when the compilation is done on
* by backend.
*
* @see MaterialInstance#compile
*/
public void compile(@NonNull CompilerPriorityQueue priority,
int variants,

View File

@@ -18,6 +18,7 @@ package com.google.android.filament;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Size;
import com.google.android.filament.proguard.UsedByNative;
@@ -142,6 +143,28 @@ public class MaterialInstance {
return mMaterial;
}
/**
* Asynchronously ensures that a subset of this MaterialInstance's variants are compiled.
*
* <p>This function behaves identically to {@link Material#compile}, but takes into account
* the specific constants overridden by {@link #setConstant}.</p>
*
* @param priority Priority of the compile command.
* @param variants Variants to include to the compile command.
* @param handler An {@link java.util.concurrent.Executor Executor}. On Android this can also be a {@link android.os.Handler Handler}.
* @param callback callback called on the main thread when the compilation is done on
* by backend.
*
* @see Material#compile
* @see #setConstant
*/
public void compile(@NonNull Material.CompilerPriorityQueue priority,
int variants,
@Nullable Object handler,
@Nullable Runnable callback) {
nCompile(getNativeObject(), priority.ordinal(), variants, handler, callback);
}
/** @return the name associated with this instance */
@NonNull
public String getName() {
@@ -420,6 +443,69 @@ public class MaterialInstance {
nSetParameterFloat4(getNativeObject(), name, color[0], color[1], color[2], color[3]);
}
/**
* Overrides a specialization constant of this material instance.
*
* @param name The name of the constant as defined in the material.
* @param value The value of the constant.
* @see Material.Builder#constant
*/
public void setConstant(@NonNull String name, boolean value) {
nSetConstantBool(getNativeObject(), name, value);
}
/**
* Overrides a specialization constant of this material instance.
*
* @param name The name of the constant as defined in the material.
* @param value The value of the constant.
* @see Material.Builder#constant
*/
public void setConstant(@NonNull String name, float value) {
nSetConstantFloat(getNativeObject(), name, value);
}
/**
* Overrides a specialization constant of this material instance.
*
* @param name The name of the constant as defined in the material.
* @param value The value of the constant.
* @see Material.Builder#constant
*/
public void setConstant(@NonNull String name, int value) {
nSetConstantInt(getNativeObject(), name, value);
}
/**
* Gets the value of a specialization constant by name.
*
* @param name The name of the constant as defined in the material.
* @return The value of the constant.
*/
public boolean getConstantBoolean(@NonNull String name) {
return nGetConstantBool(getNativeObject(), name);
}
/**
* Gets the value of a specialization constant by name.
*
* @param name The name of the constant as defined in the material.
* @return The value of the constant.
*/
public float getConstantFloat(@NonNull String name) {
return nGetConstantFloat(getNativeObject(), name);
}
/**
* Gets the value of a specialization constant by name.
*
* @param name The name of the constant as defined in the material.
* @return The value of the constant.
*/
public int getConstantInt(@NonNull String name) {
return nGetConstantInt(getNativeObject(), name);
}
/**
* Set-up a custom scissor rectangle; by default it is disabled.
*
@@ -955,6 +1041,17 @@ public class MaterialInstance {
@NonNull String name, int element, @NonNull @Size(min = 1) float[] v,
@IntRange(from = 0) int offset, @IntRange(from = 1) int count);
private static native boolean nGetConstantBool(long nativeMaterialInstance, @NonNull String name);
private static native float nGetConstantFloat(long nativeMaterialInstance, @NonNull String name);
private static native int nGetConstantInt(long nativeMaterialInstance, @NonNull String name);
private static native void nSetConstantBool(long nativeMaterialInstance,
@NonNull String name, boolean x);
private static native void nSetConstantFloat(long nativeMaterialInstance,
@NonNull String name, float x);
private static native void nSetConstantInt(long nativeMaterialInstance,
@NonNull String name, int x);
private static native void nSetParameterTexture(long nativeMaterialInstance,
@NonNull String name, long nativeTexture, long sampler);
@@ -1018,4 +1115,5 @@ public class MaterialInstance {
private static native int nGetDepthFunc(long nativeMaterialInstance);
private static native void nSetTransparencyMode(long nativeMaterialInstance, int mode);
private static native int nGetTransparencyMode(long nativeMaterialInstance);
private static native void nCompile(long nativeMaterialInstance, int priority, int variants, Object handler, Runnable callback);
}

119
build.sh
View File

@@ -1,7 +1,7 @@
#!/bin/bash
set -e
# Host tools required by Android, WebGL, and iOS builds
# Host tools required by Android, WASM, and iOS builds
MOBILE_HOST_TOOLS="matc resgen cmgen filamesh uberz"
WEB_HOST_TOOLS="${MOBILE_HOST_TOOLS} mipgen filamesh"
@@ -34,7 +34,7 @@ function print_help {
echo " -m"
echo " Compile with make instead of ninja."
echo " -p platform1,platform2,..."
echo " Where platformN is [desktop|android|ios|webgl|all]."
echo " Where platformN is [desktop|android|ios|wasm|all]."
echo " Platform(s) to build, defaults to desktop."
echo " Building for iOS will automatically perform a partial desktop build."
echo " -q abi1,abi2,..."
@@ -53,8 +53,8 @@ function print_help {
echo " -e"
echo " Enable EGL on Linux support for desktop builds."
echo " -l"
echo " Build arm64/x86_64 universal libraries."
echo " For iOS, this builds universal binaries for devices and the simulator (implies -s)."
echo " Build universal libraries/frameworks."
echo " For iOS, this builds XCFrameworks for devices and the simulator (implies -s)."
echo " For macOS, this builds universal binaries for both Apple silicon and Intel-based Macs."
echo " -k sample1,sample2,..."
echo " When building for Android, also build select sample APKs."
@@ -173,7 +173,7 @@ ISSUE_RELEASE_BUILD=false
ISSUE_ANDROID_BUILD=false
ISSUE_IOS_BUILD=false
ISSUE_DESKTOP_BUILD=true
ISSUE_WEBGL_BUILD=false
ISSUE_WASM_BUILD=false
# Default: all
ABI_ARMEABI_V7A=true
@@ -356,12 +356,12 @@ function build_desktop {
fi
}
function build_webgl_with_target {
function build_wasm_with_target {
local lc_target=$(echo "$1" | tr '[:upper:]' '[:lower:]')
echo "Building WebGL ${lc_target}..."
mkdir -p "out/cmake-webgl-${lc_target}"
pushd "out/cmake-webgl-${lc_target}" > /dev/null
echo "Building WASM ${lc_target}..."
mkdir -p "out/cmake-wasm-${lc_target}"
pushd "out/cmake-wasm-${lc_target}" > /dev/null
if [[ ! "${BUILD_TARGETS}" ]]; then
BUILD_TARGETS=${BUILD_CUSTOM_TARGETS}
@@ -378,13 +378,13 @@ function build_webgl_with_target {
${IMPORT_EXECUTABLES_DIR_OPTION} \
-DCMAKE_TOOLCHAIN_FILE="${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" \
-DCMAKE_BUILD_TYPE="$1" \
-DCMAKE_INSTALL_PREFIX="../webgl-${lc_target}/filament" \
-DWEBGL=1 \
-DCMAKE_INSTALL_PREFIX="../wasm-${lc_target}/filament" \
-DWASM=1 \
${WEBGPU_OPTION} \
${BACKEND_DEBUG_FLAG_OPTION} \
${EXCEPTIONS_OPTION} \
../..
ln -sf "out/cmake-webgl-${lc_target}/compile_commands.json" \
ln -sf "out/cmake-wasm-${lc_target}/compile_commands.json" \
../../compile_commands.json
${BUILD_COMMAND} ${BUILD_TARGETS}
)
@@ -416,7 +416,7 @@ function build_webgl_with_target {
popd > /dev/null
}
function build_webgl {
function build_wasm {
# For the host tools, suppress install and always use Release.
local old_install_command=${INSTALL_COMMAND}; INSTALL_COMMAND=
local old_issue_debug_build=${ISSUE_DEBUG_BUILD}; ISSUE_DEBUG_BUILD=false
@@ -429,11 +429,11 @@ function build_webgl {
ISSUE_RELEASE_BUILD=${old_issue_release_build}
if [[ "${ISSUE_DEBUG_BUILD}" == "true" ]]; then
build_webgl_with_target "Debug"
build_wasm_with_target "Debug"
fi
if [[ "${ISSUE_RELEASE_BUILD}" == "true" ]]; then
build_webgl_with_target "Release"
build_wasm_with_target "Release"
fi
}
@@ -685,9 +685,9 @@ function build_ios_target {
local platform=$3
echo "Building iOS ${lc_target} (${arch}) for ${platform}..."
mkdir -p "out/cmake-ios-${lc_target}-${arch}"
mkdir -p "out/cmake-ios-${lc_target}-${arch}-${platform}"
pushd "out/cmake-ios-${lc_target}-${arch}" > /dev/null
pushd "out/cmake-ios-${lc_target}-${arch}-${platform}" > /dev/null
if [[ ! -d "CMakeFiles" ]] || [[ "${ISSUE_CMAKE_ALWAYS}" == "true" ]]; then
cmake \
@@ -746,38 +746,79 @@ function build_ios {
# only arm64 devices support OpenGL 3.0 / Metal
if [[ "${ISSUE_DEBUG_BUILD}" == "true" ]]; then
local out_dir="out/ios-debug/filament"
local lib_dir="${out_dir}/lib"
build_ios_target "Debug" "arm64" "iphoneos"
if [[ "${IOS_BUILD_SIMULATOR}" == "true" ]]; then
build_ios_target "Debug" "arm64" "iphonesimulator"
build_ios_target "Debug" "x86_64" "iphonesimulator"
# Create a universal library for the simulator
build/ios/create-universal-libs.sh \
-o "${lib_dir}/universal" \
"${lib_dir}/arm64-iphonesimulator" \
"${lib_dir}/x86_64-iphonesimulator"
fi
if [[ "${BUILD_UNIVERSAL_LIBRARIES}" == "true" ]]; then
build/ios/create-universal-libs.sh \
-o out/ios-debug/filament/lib/universal \
out/ios-debug/filament/lib/arm64 \
out/ios-debug/filament/lib/x86_64
rm -rf out/ios-debug/filament/lib/arm64
rm -rf out/ios-debug/filament/lib/x86_64
# Always create XCFrameworks
local xcframework_paths=("${lib_dir}/arm64-iphoneos")
if [[ -d "${lib_dir}/universal" ]]; then
xcframework_paths+=("${lib_dir}/universal")
elif [[ -d "${lib_dir}/arm64-iphonesimulator" ]]; then
# If we built only one simulator arch but not both
xcframework_paths+=("${lib_dir}/arm64-iphonesimulator")
elif [[ -d "${lib_dir}/x86_64-iphonesimulator" ]]; then
xcframework_paths+=("${lib_dir}/x86_64-iphonesimulator")
fi
build/ios/create-xc-frameworks.sh -o "${lib_dir}" "${xcframework_paths[@]}"
rm -rf \
"${lib_dir}/arm64-iphoneos" \
"${lib_dir}/arm64-iphonesimulator" \
"${lib_dir}/x86_64-iphonesimulator" \
"${lib_dir}/universal"
archive_ios "Debug"
fi
if [[ "${ISSUE_RELEASE_BUILD}" == "true" ]]; then
local out_dir="out/ios-release/filament"
local lib_dir="${out_dir}/lib"
build_ios_target "Release" "arm64" "iphoneos"
if [[ "${IOS_BUILD_SIMULATOR}" == "true" ]]; then
build_ios_target "Release" "arm64" "iphonesimulator"
build_ios_target "Release" "x86_64" "iphonesimulator"
# Create a universal library for the simulator
build/ios/create-universal-libs.sh \
-o "${lib_dir}/universal" \
"${lib_dir}/arm64-iphonesimulator" \
"${lib_dir}/x86_64-iphonesimulator"
fi
if [[ "${BUILD_UNIVERSAL_LIBRARIES}" == "true" ]]; then
build/ios/create-universal-libs.sh \
-o out/ios-release/filament/lib/universal \
out/ios-release/filament/lib/arm64 \
out/ios-release/filament/lib/x86_64
rm -rf out/ios-release/filament/lib/arm64
rm -rf out/ios-release/filament/lib/x86_64
# Always create XCFrameworks
local xcframework_paths=("${lib_dir}/arm64-iphoneos")
if [[ -d "${lib_dir}/universal" ]]; then
xcframework_paths+=("${lib_dir}/universal")
elif [[ -d "${lib_dir}/arm64-iphonesimulator" ]]; then
xcframework_paths+=("${lib_dir}/arm64-iphonesimulator")
elif [[ -d "${lib_dir}/x86_64-iphonesimulator" ]]; then
xcframework_paths+=("${lib_dir}/x86_64-iphonesimulator")
fi
build/ios/create-xc-frameworks.sh -o "${lib_dir}" "${xcframework_paths[@]}"
rm -rf \
"${lib_dir}/arm64-iphoneos" \
"${lib_dir}/arm64-iphonesimulator" \
"${lib_dir}/x86_64-iphonesimulator" \
"${lib_dir}/universal"
archive_ios "Release"
fi
}
@@ -809,7 +850,7 @@ function validate_build_command {
fi
fi
# If building a WebAssembly module, ensure we know where Emscripten lives.
if [[ "${EMSDK}" == "" ]] && [[ "${ISSUE_WEBGL_BUILD}" == "true" ]]; then
if [[ "${EMSDK}" == "" ]] && [[ "${ISSUE_WASM_BUILD}" == "true" ]]; then
echo "Error: EMSDK is not set, exiting"
exit 1
fi
@@ -835,7 +876,7 @@ function run_test {
}
function run_tests {
if [[ "${ISSUE_WEBGL_BUILD}" == "true" ]]; then
if [[ "${ISSUE_WASM_BUILD}" == "true" ]]; then
if ! echo "TypeScript $(tsc --version)" ; then
tsc --noEmit \
third_party/gl-matrix/gl-matrix.d.ts \
@@ -920,18 +961,18 @@ while getopts ":hacCfgimp:q:uvWslwedtk:bVx:S:X:Py:E" opt; do
ios)
ISSUE_IOS_BUILD=true
;;
webgl)
ISSUE_WEBGL_BUILD=true
wasm)
ISSUE_WASM_BUILD=true
;;
all)
ISSUE_ANDROID_BUILD=true
ISSUE_IOS_BUILD=true
ISSUE_DESKTOP_BUILD=true
ISSUE_WEBGL_BUILD=false
ISSUE_WASM_BUILD=false
;;
*)
echo "Unknown platform ${platform}"
echo "Platform must be one of [desktop|android|ios|webgl|all]"
echo "Platform must be one of [desktop|android|ios|wasm|all]"
echo ""
exit 1
;;
@@ -1112,8 +1153,8 @@ if [[ "${ISSUE_IOS_BUILD}" == "true" ]]; then
check_debug_release_build build_ios
fi
if [[ "${ISSUE_WEBGL_BUILD}" == "true" ]]; then
check_debug_release_build build_webgl
if [[ "${ISSUE_WASM_BUILD}" == "true" ]]; then
check_debug_release_build build_wasm
fi
if [[ "${RUN_TESTS}" == "true" ]]; then

View File

@@ -0,0 +1,87 @@
#!/usr/bin/env bash
set -e
function print_help {
local SELF_NAME
SELF_NAME=$(basename "$0")
echo "$SELF_NAME. Combine multiple platform-specific libraries into XCFramework bundles."
echo ""
echo "Usage:"
echo " $SELF_NAME [options] <path>..."
echo ""
echo "Options:"
echo " -h"
echo " Print this help message."
echo " -o"
echo " Output directory to store the XCFrameworks."
echo ""
echo "Example:"
echo " $SELF_NAME -o xcframeworks/ iphoneos/ iphonesimulator/"
echo ""
}
OUTPUT_DIR=""
while getopts "ho:" opt; do
case ${opt} in
h)
print_help
exit 1
;;
o)
OUTPUT_DIR="${OPTARG}"
;;
*)
print_help
exit 1
;;
esac
done
shift $((OPTIND - 1))
PATHS=("$@")
if [[ ! "${PATHS[*]}" ]]; then
echo "One or more paths required."
print_help
exit 1
fi
if [[ ! "${OUTPUT_DIR}" ]]; then
echo "Output directory required."
print_help
exit 1
fi
mkdir -p "${OUTPUT_DIR}"
# Use the first path as the leader to find all .a files
LEADER_PATH="${PATHS[0]}"
for FILE in "${LEADER_PATH}"/*.a; do
[ -f "${FILE}" ] || continue
LIBRARY_NAME="${FILE##*/}"
FRAMEWORK_NAME="${LIBRARY_NAME%.a}.xcframework"
echo "Creating XCFramework for: ${LIBRARY_NAME}"
CMD="xcodebuild -create-xcframework"
for PLATFORM_PATH in "${PATHS[@]}"; do
LIB_PATH="${PLATFORM_PATH}/${LIBRARY_NAME}"
if [[ -f "${LIB_PATH}" ]]; then
CMD="${CMD} -library ${LIB_PATH}"
else
echo "Warning: ${LIB_PATH} does not exist, skipping this platform for ${LIBRARY_NAME}"
fi
done
CMD="${CMD} -output ${OUTPUT_DIR}/${FRAMEWORK_NAME}"
# Remove existing framework if it exists
rm -rf "${OUTPUT_DIR}/${FRAMEWORK_NAME}"
eval "${CMD}"
done

View File

@@ -8,4 +8,4 @@ set -x
source `dirname $0`/../common/build-common.sh
pushd `dirname $0`/../.. > /dev/null
./build.sh -p webgl -c $RUN_TESTS $GENERATE_ARCHIVES $BUILD_DEBUG $BUILD_RELEASE
./build.sh -p wasm -c $RUN_TESTS $GENERATE_ARCHIVES $BUILD_DEBUG $BUILD_RELEASE

View File

@@ -234,11 +234,11 @@ book.</p>
<p>The process for copying and processing these READMEs is outlined in
<a href="#introductory-doc">Introductory docs</a>.</p>
<h3 id="web-examples-and-tutorials"><a class="header" href="#web-examples-and-tutorials">Web Examples and Tutorials</a></h3>
<p>Filament provides a number of WebGL tutorials and examples in the <code>web/</code> directory. These are
compiled during the WebGL CMake build and are integrated into the documentation via
<p>Filament provides a number of web tutorials and examples in the <code>web/</code> directory. These are
compiled during the web CMake build and are integrated into the documentation via
<code>duplicates.json</code>. The process is entirely automated:</p>
<ol>
<li><code>run.py</code> maps the <code>.html</code> and <code>.md</code> WebGL outputs from the <code>out/cmake-webgl-release/...</code>
<li><code>run.py</code> maps the <code>.html</code> and <code>.md</code> web outputs from the <code>out/cmake-wasm-release/...</code>
directory into <code>docs_src/src_mdbook/src/samples/web/</code> using the instructions in <code>duplicates.json</code>.</li>
<li>While transferring <code>.html</code> to <code>.md</code>, <code>run.py</code> strips away the <code>&lt;!DOCTYPE html&gt;</code>, <code>&lt;head&gt;</code>, and
<code>&lt;html&gt;</code> tags. By retaining only the <code>&lt;style&gt;</code> and <code>&lt;body&gt;</code> elements, the HTML samples can be

View File

@@ -166,7 +166,7 @@
<a href="https://github.com/google/filament/actions/workflows/status-windows.yml"><img src="https://github.com/google/filament/actions/workflows/status-windows.yml/badge.svg" alt="Windows Build Status" /></a>
<a href="https://github.com/google/filament/actions/workflows/status-web.yml"><img src="https://github.com/google/filament/actions/workflows/status-web.yml/badge.svg" alt="Web Build Status" /></a></p>
<p>Filament is a real-time physically based rendering engine for Android, iOS, Linux, macOS, Windows,
and WebGL. It is designed to be as small as possible and as efficient as possible on Android.</p>
and WASM. It is designed to be as small as possible and as efficient as possible on Android.</p>
<h2 id="download"><a class="header" href="#download">Download</a></h2>
<p><a href="https://github.com/google/filament/releases">Download Filament releases</a> to access stable builds.
Filament release archives contains host-side tools that are required to generate assets.</p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -81,10 +81,10 @@ The process for copying and processing these READMEs is outlined in
[Introductory docs](#introductory-doc).
### Web Examples and Tutorials
Filament provides a number of WebGL tutorials and examples in the `web/` directory. These are
compiled during the WebGL CMake build and are integrated into the documentation via
Filament provides a number of web tutorials and examples in the `web/` directory. These are
compiled during the web CMake build and are integrated into the documentation via
`duplicates.json`. The process is entirely automated:
1. `run.py` maps the `.html` and `.md` WebGL outputs from the `out/cmake-webgl-release/...`
1. `run.py` maps the `.html` and `.md` web outputs from the `out/cmake-wasm-release/...`
directory into `docs_src/src_mdbook/src/samples/web/` using the instructions in `duplicates.json`.
2. While transferring `.html` to `.md`, `run.py` strips away the `<!DOCTYPE html>`, `<head>`, and
`<html>` tags. By retaining only the `<style>` and `<body>` elements, the HTML samples can be

View File

@@ -20,7 +20,7 @@ import glob
import re
CUR_DIR = os.path.dirname(os.path.abspath(__file__))
OUT_DIR = os.path.join(CUR_DIR, "../../out/cmake-webgl-release/web/examples/examples")
OUT_DIR = os.path.join(CUR_DIR, "../../out/cmake-wasm-release/web/examples/examples")
BOOK_DIR = os.path.join(CUR_DIR, "../src_mdbook/book")
def setup_dirs():

View File

@@ -106,43 +106,43 @@
"filament/backend/test/README.md": {
"dest": "dup/backend_test.md"
},
"out/cmake-webgl-release/web/examples/examples/triangle/triangle.md": {
"out/cmake-wasm-release/web/examples/examples/triangle/triangle.md": {
"dest": "samples/web/triangle.md"
},
"out/cmake-webgl-release/web/examples/examples/redball/redball.md": {
"out/cmake-wasm-release/web/examples/examples/redball/redball.md": {
"dest": "samples/web/redball.md"
},
"out/cmake-webgl-release/web/examples/examples/suzanne/suzanne.md": {
"out/cmake-wasm-release/web/examples/examples/suzanne/suzanne.md": {
"dest": "samples/web/suzanne.md"
},
"out/cmake-webgl-release/web/examples/examples/animation/animation.html": {
"out/cmake-wasm-release/web/examples/examples/animation/animation.html": {
"dest": "samples/web/animation.md"
},
"out/cmake-webgl-release/web/examples/examples/cube_fl0/cube_fl0.html": {
"out/cmake-wasm-release/web/examples/examples/cube_fl0/cube_fl0.html": {
"dest": "samples/web/cube_fl0.md"
},
"out/cmake-webgl-release/web/examples/examples/helmet/helmet.html": {
"out/cmake-wasm-release/web/examples/examples/helmet/helmet.html": {
"dest": "samples/web/helmet.md"
},
"out/cmake-webgl-release/web/examples/examples/morphing/morphing.html": {
"out/cmake-wasm-release/web/examples/examples/morphing/morphing.html": {
"dest": "samples/web/morphing.md"
},
"out/cmake-webgl-release/web/examples/examples/parquet/parquet.html": {
"out/cmake-wasm-release/web/examples/examples/parquet/parquet.html": {
"dest": "samples/web/parquet.md"
},
"out/cmake-webgl-release/web/examples/examples/skinning/skinning.html": {
"out/cmake-wasm-release/web/examples/examples/skinning/skinning.html": {
"dest": "samples/web/skinning.md"
},
"out/cmake-webgl-release/web/examples/examples/sky/sky.html": {
"out/cmake-wasm-release/web/examples/examples/sky/sky.html": {
"dest": "samples/web/sky.md",
"replacements": {
"<!-- mdbook: add fullscreen mode -->": "<a href=\"../../web/sky.html\">Full screen</a>"
}
},
"./out/cmake-webgl-release/web/examples/examples/sky/sky.html": {
"./out/cmake-wasm-release/web/examples/examples/sky/sky.html": {
"dest": "web/sky.html"
},
"out/cmake-webgl-release/web/examples/examples/remote/remote.html": {
"out/cmake-wasm-release/web/examples/examples/remote/remote.html": {
"dest": "remote/index.html"
}
}

View File

@@ -19,7 +19,7 @@ FILAMENT_BOT_TOKEN=$2
set -ex
function update_to_main() {
./build.sh -p webgl release
./build.sh -p wasm release
python3 docs_src/build/run.py
mkdir -p tmp
pushd .

View File

@@ -744,10 +744,10 @@ if (MSVC)
set(OPTIMIZATION_FLAGS
/fp:fast
)
elseif(WEBGL)
elseif (WASM)
# Avoid strict-vtable-pointers here, it is broken in WebAssembly.
set(OPTIMIZATION_FLAGS -fvisibility-inlines-hidden)
elseif(FILAMENT_USING_GCC)
elseif (FILAMENT_USING_GCC)
set(OPTIMIZATION_FLAGS
-ffast-math
-fno-finite-math-only

View File

@@ -124,7 +124,7 @@ if (FILAMENT_SUPPORTS_OPENGL AND NOT FILAMENT_USE_EXTERNAL_GLES3)
list(APPEND SRCS src/opengl/platforms/PlatformCocoaGL.mm)
list(APPEND SRCS src/opengl/platforms/CocoaExternalImage.mm)
endif()
elseif (WEBGL)
elseif (WASM)
list(APPEND SRCS src/opengl/platforms/PlatformWebGL.cpp)
elseif (LINUX)
if (FILAMENT_SUPPORTS_X11)
@@ -432,7 +432,7 @@ if (FILAMENT_USE_ABSEIL_LOGGING)
endif()
# Android, iOS, and WebGL do not use bluegl.
if(FILAMENT_SUPPORTS_OPENGL AND NOT IOS AND NOT ANDROID AND NOT WEBGL)
if(FILAMENT_SUPPORTS_OPENGL AND NOT IOS AND NOT ANDROID AND NOT WASM)
target_link_libraries(${TARGET} PRIVATE bluegl)
endif()
@@ -463,7 +463,7 @@ if (MSVC)
set(OPTIMIZATION_FLAGS
/fp:fast
)
elseif(WEBGL)
elseif(WASM)
# Avoid strict-vtable-pointers here, it is broken in WebAssembly.
set(OPTIMIZATION_FLAGS -fvisibility-inlines-hidden)
elseif(FILAMENT_USING_GCC)
@@ -699,7 +699,7 @@ if (FILAMENT_BUILD_TESTING)
# ==================================================================================================
# Compute tests
#
#if (NOT IOS AND NOT WEBGL)
#if (NOT IOS AND NOT WASM)
#
#add_executable(compute_test
# test/ComputeTest.cpp

View File

@@ -14,6 +14,7 @@
* limitations under the License.
*/
#include <TargetConditionals.h>
#include "backend/PresentCallable.h"
#include "private/backend/CommandStream.h"
#include "CommandStreamDispatcher.h"
@@ -160,9 +161,11 @@ MetalDriver::MetalDriver(
}
mContext->supportsDepthClamp = false;
#if !TARGET_OS_SIMULATOR
if (@available(macOS 10.11, iOS 11.0, *)) {
mContext->supportsDepthClamp = true;
}
#endif
// In order to support resolve store action on depth attachment, the GPU needs to support it.
// Note that support for depth resolve implies support for stencil resolve using .sample0 resolve filter.

View File

@@ -139,10 +139,8 @@ public:
Builder& package(const void* UTILS_NONNULL payload, size_t size);
template<typename T>
using is_supported_constant_parameter_t = std::enable_if_t<
std::is_same_v<int32_t, T> ||
std::is_same_v<float, T> ||
std::is_same_v<bool, T>>;
using is_supported_constant_parameter_t =
MaterialInstance::is_supported_constant_parameter_t<T>;
/**
* Specialize a constant parameter specified in the material definition with a concrete
@@ -243,11 +241,18 @@ public:
* for stereoscopic rendering. If an application is not planning to render in stereo, this bit
* should be turned off to avoid unnecessary material compilations.
*
* Note that it is possible to override specialization constants on a per-MaterialInstance basis
* (@see MaterialInstance::setConstant). In that case, the programs compiled by a call to
* Material::compile() may not be reusable by that MaterialInstance. It's better to call
* MaterialInstance::compile() in cases where you intend to override specialization constants.
*
* @param priority Which priority queue to use, LOW or HIGH.
* @param variants Variants to include to the compile command.
* @param handler Handler to dispatch the callback or nullptr for the default handler
* @param callback callback called on the main thread when the compilation is done on
* by backend.
*
* @see Material::compile
*/
void compile(CompilerPriorityQueue priority,
UserVariantFilterMask variants,

View File

@@ -94,6 +94,12 @@ public:
std::is_same_v<math::mat3f, T>
>;
template<typename T>
using is_supported_constant_parameter_t = std::enable_if_t<
std::is_same_v<int32_t, T> ||
std::is_same_v<float, T> ||
std::is_same_v<bool, T>>;
/**
* Creates a new MaterialInstance using another MaterialInstance as a template for initialization.
* The new MaterialInstance is an instance of the same Material of the template instance and
@@ -276,6 +282,91 @@ public:
return getParameter<T>(name, strlen(name));
}
/**
* Overrides a specialization constant of this material instance.
*
* @tparam T The type of the constant. Must be int32_t, float, or bool.
* @param name The name of the constant as defined in the material. Cannot be nullptr.
* @param nameLength Length in `char` of the name parameter.
* @param value The value of the constant.
*
* @see Material::Builder::constant
*/
template<typename T, typename = is_supported_constant_parameter_t<T>>
void setConstant(const char* UTILS_NONNULL name, size_t nameLength, T value);
/** inline helper to provide the name as a null-terminated string literal */
template<typename T, typename = is_supported_constant_parameter_t<T>>
void setConstant(StringLiteral const name, T value) {
setConstant<T>(name.data, name.size, value);
}
/** inline helper to provide the name as a null-terminated C string */
template<typename T, typename = is_supported_constant_parameter_t<T>>
void setConstant(const char* UTILS_NONNULL name, T value) {
setConstant<T>(name, strlen(name), value);
}
/**
* Gets the value of a specialization constant by name.
*
* @tparam T The type of the constant. Must be int32_t, float, or bool.
* @param name The name of the constant as defined in the material. Cannot be nullptr.
* @param nameLength Length in `char` of the name parameter.
* @return The value of the constant.
*/
template<typename T, typename = is_supported_constant_parameter_t<T>>
T getConstant(const char* UTILS_NONNULL name, size_t nameLength) const;
/** inline helper to provide the name as a null-terminated C string */
template<typename T, typename = is_supported_constant_parameter_t<T>>
T getConstant(StringLiteral const name) const {
return getConstant<T>(name.data, name.size);
}
/** inline helper to provide the name as a null-terminated C string */
template<typename T, typename = is_supported_constant_parameter_t<T>>
T getConstant(const char* UTILS_NONNULL name) const {
return getConstant<T>(name, strlen(name));
}
using CompilerPriorityQueue = backend::CompilerPriorityQueue;
/**
* Asynchronously ensures that a subset of this MaterialInstance's variants are compiled.
*
* This function behaves identically to Material::compile(), but takes into account the
* specific constants overridden by setConstant().
*
* @param priority Which priority queue to use, LOW or HIGH.
* @param variants Variants to include to the compile command.
* @param handler Handler to dispatch the callback or nullptr for the default handler
* @param callback callback called on the main thread when the compilation is done on
* by backend.
*
* @see Material::compile
* @see setConstant
*/
void compile(CompilerPriorityQueue priority,
UserVariantFilterMask variants,
backend::CallbackHandler* UTILS_NULLABLE handler = nullptr,
utils::Invocable<void(MaterialInstance* UTILS_NONNULL)>&& callback = {}) noexcept;
inline void compile(CompilerPriorityQueue priority,
UserVariantFilterBit variants,
backend::CallbackHandler* UTILS_NULLABLE handler = nullptr,
utils::Invocable<void(MaterialInstance* UTILS_NONNULL)>&& callback = {}) noexcept {
compile(priority, UserVariantFilterMask(variants), handler,
std::forward<utils::Invocable<void(MaterialInstance* UTILS_NONNULL)>>(callback));
}
inline void compile(CompilerPriorityQueue priority,
backend::CallbackHandler* UTILS_NULLABLE handler = nullptr,
utils::Invocable<void(MaterialInstance* UTILS_NONNULL)>&& callback = {}) noexcept {
compile(priority, UserVariantFilterBit::ALL, handler,
std::forward<utils::Invocable<void(MaterialInstance* UTILS_NONNULL)>>(callback));
}
/**
* Set-up a custom scissor rectangle; by default it is disabled.
*

View File

@@ -182,15 +182,11 @@ Program::SpecializationConstant LocalProgramCache::getConstantImpl(
std::string_view name) const noexcept {
assert_invariant(mMaterial != nullptr);
MaterialDefinition const& definition = mMaterial->getDefinition();
auto it = definition.specializationConstantsNameToIndex.find(name);
if (it != definition.specializationConstantsNameToIndex.cend()) {
return getConstantImpl(it->second + CONFIG_MAX_RESERVED_SPEC_CONSTANTS);
}
auto const& constants = mMaterial->getDefinition().specializationConstantsNameToIndex;
auto it = constants.find(name);
FILAMENT_CHECK_PRECONDITION(it != constants.end()) << "Constant " << name << " does not exist";
CString name_cstring(name);
PANIC_PRECONDITION("No such constant exists: %s", name_cstring.c_str());
return {};
return getConstantImpl(it->second + CONFIG_MAX_RESERVED_SPEC_CONSTANTS);
}
void LocalProgramCache::setConstants(
@@ -240,6 +236,13 @@ void LocalProgramCache::setConstants(
}
}
void LocalProgramCache::setConstants(
FixedCapacityVector<Program::SpecializationConstant> constants) noexcept {
assert_invariant(mMaterial != nullptr);
setConstantsImpl(std::move(constants));
}
void LocalProgramCache::setConstantsImpl(
FixedCapacityVector<Program::SpecializationConstant> constants) noexcept {
FEngine& engine = mMaterial->getEngine();

View File

@@ -119,7 +119,14 @@ public:
std::pair<std::string_view, backend::Program::SpecializationConstant>>
constants) noexcept;
// Set constants list directly.
void setConstants(utils::FixedCapacityVector<backend::Program::SpecializationConstant>
constants) noexcept;
private:
// Apply any pending specialization constants. Invalidates programs as necessary.
void flushConstants() const;
backend::Handle<backend::HwProgram> prepareProgramSlow(backend::DriverApi& driver,
Variant const variant,
backend::CompilerPriorityQueue const priorityQueue) const noexcept;

View File

@@ -233,6 +233,26 @@ template UTILS_PUBLIC mat3f MaterialInstance::getParameter<mat3f> (const ch
// ------------------------------------------------------------------------------------------------
template<typename T, typename>
void MaterialInstance::setConstant(const char* name, size_t nameLength, T value) {
downcast(this)->setConstantImpl(std::string_view{name, nameLength}, value);
}
template UTILS_PUBLIC void MaterialInstance::setConstant<int32_t>(const char* name, size_t nameLength, int32_t value);
template UTILS_PUBLIC void MaterialInstance::setConstant<float>(const char* name, size_t nameLength, float value);
template UTILS_PUBLIC void MaterialInstance::setConstant<bool>(const char* name, size_t nameLength, bool value);
template<typename T, typename>
T MaterialInstance::getConstant(const char* name, size_t nameLength) const {
return downcast(this)->getConstantImpl<T>(std::string_view{name, nameLength});
}
template UTILS_PUBLIC int32_t MaterialInstance::getConstant<int32_t>(const char* name, size_t nameLength) const;
template UTILS_PUBLIC float MaterialInstance::getConstant<float>(const char* name, size_t nameLength) const;
template UTILS_PUBLIC bool MaterialInstance::getConstant<bool>(const char* name, size_t nameLength) const;
// ------------------------------------------------------------------------------------------------
Material const* MaterialInstance::getMaterial() const noexcept {
return downcast(this)->getMaterial();
}
@@ -403,4 +423,10 @@ void MaterialInstance::commit(Engine& engine) const {
downcast(this)->commit(downcast(engine));
}
void MaterialInstance::compile(CompilerPriorityQueue const priority,
UserVariantFilterMask const variants, CallbackHandler* handler,
utils::Invocable<void(MaterialInstance*)>&& callback) noexcept {
downcast(this)->compile(priority, variants, handler, std::move(callback));
}
} // namespace filament

View File

@@ -186,12 +186,10 @@ void PostProcessManager::PostProcessMaterial::loadMaterial(FEngine& engine) cons
}
UTILS_NOINLINE
FMaterial* PostProcessManager::PostProcessMaterial::getMaterial(FEngine& engine,
DriverApi& driver, Variant::type_t const variant) const noexcept {
FMaterial* PostProcessManager::PostProcessMaterial::getMaterial(FEngine& engine) const noexcept {
if (UTILS_UNLIKELY(mSize)) {
loadMaterial(engine);
}
mMaterial->prepareProgram(driver, Variant{ variant }, CompilerPriorityQueue::CRITICAL);
return mMaterial;
}
@@ -249,6 +247,20 @@ void PostProcessManager::bindPerRenderableDescriptorSet(DriverApi& driver) const
{ { 0, 0 }, driver });
}
FMaterialInstance* PostProcessManager::getMaterialInstance(backend::DriverApi& driver,
FMaterial const* ma, Variant::type_t variant) const {
FMaterialInstance* mi = mMaterialInstanceManager.getMaterialInstance(ma);
mi->prepareProgram(driver, Variant{ variant }, backend::CompilerPriorityQueue::CRITICAL);
return mi;
}
FMaterialInstance* PostProcessManager::getMaterialInstanceWithTag(backend::DriverApi& driver,
FMaterial const* ma, uint32_t tag, Variant::type_t variant) const {
FMaterialInstance* mi = mMaterialInstanceManager.getMaterialInstance(ma, tag);
mi->prepareProgram(driver, Variant { variant }, backend::CompilerPriorityQueue::CRITICAL);
return mi;
}
UboManager* PostProcessManager::getUboManager() const noexcept {
return mEngine.getUboManager();
}
@@ -468,9 +480,10 @@ void PostProcessManager::unbindAllDescriptorSets(DriverApi& driver) noexcept {
UTILS_NOINLINE
PipelineState PostProcessManager::getPipelineState(
FMaterial const* const ma, Variant::type_t const variant) const noexcept {
FMaterialInstance const* const mi, Variant::type_t const variant) const noexcept {
FMaterial const* const ma = mi->getMaterial();
return {
.program = ma->getProgram(Variant{ variant }),
.program = mi->getProgram(Variant{ variant }),
.vertexBufferInfo = mFullScreenQuadVbih,
.pipelineLayout = {
.setLayout = {
@@ -478,7 +491,7 @@ PipelineState PostProcessManager::getPipelineState(
mPerRenderableDslh,
ma->getDescriptorSetLayout().getHandle()
}},
.rasterState = ma->getRasterState()
.rasterState = mi->getRasterState()
};
}
@@ -518,8 +531,7 @@ void PostProcessManager::commitAndRenderFullScreenQuad(DriverApi& driver,
PostProcessVariant const variant) const noexcept {
mi->commit(driver, getUboManager());
mi->use(driver);
FMaterial const* const ma = mi->getMaterial();
PipelineState const pipeline = getPipelineState(ma, variant);
PipelineState const pipeline = getPipelineState(mi, variant);
assert_invariant(
((out.params.readOnlyDepthStencil & RenderPassParams::READONLY_DEPTH)
@@ -636,12 +648,12 @@ PostProcessManager::StructurePassOutput PostProcessManager::structure(FrameGraph
auto in = resources.getTexture(data.depth);
auto& material = getPostProcessMaterial("mipmapDepth");
FMaterial const* const ma = material.getMaterial(mEngine, driver);
FMaterialInstance* const mi = getMaterialInstance(ma);
FMaterial const* const ma = material.getMaterial(mEngine);
FMaterialInstance* const mi = getMaterialInstance(driver, ma);
// Only the depth texture is changing in the material instance (no UBO updates),
// we do not move getMaterialInstance() inside the loop.
auto pipeline = getPipelineState(ma);
auto pipeline = getPipelineState(mi);
// The first mip already exists, so we process n-1 lods
for (size_t level = 0; level < levelCount - 1; level++) {
@@ -1001,14 +1013,13 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::screenSpaceAmbientOcclusion(
#endif
auto& material = getPostProcessMaterial(materialName);
FMaterial* ma = material.getMaterial(mEngine, driver);
FMaterial* ma = material.getMaterial(mEngine);
ma->getPrograms().setConstants({
{ "useVisibilityBitmasks", options.gtao.useVisibilityBitmasks },
{ "linearThickness", options.gtao.linearThickness },
});
ma = material.getMaterial(mEngine, driver);
FMaterialInstance* const mi = getMaterialInstance(ma);
FMaterialInstance* const mi = getMaterialInstance(driver, ma);
// Set AO type specific material parameters
switch (aoType) {
@@ -1084,7 +1095,7 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::screenSpaceAmbientOcclusion(
mi->commit(driver, getUboManager());
mi->use(driver);
auto pipeline = getPipelineState(ma);
auto pipeline = getPipelineState(mi);
pipeline.rasterState.depthFunc = RasterState::DepthFunc::L;
assert_invariant(ssao.params.readOnlyDepthStencil & RenderPassParams::READONLY_DEPTH);
renderFullScreenQuad(ssao, pipeline, driver);
@@ -1194,8 +1205,8 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::bilateralBlurPass(FrameGraph
auto& material = config.bentNormals ?
getPostProcessMaterial("bilateralBlurBentNormals") :
getPostProcessMaterial("bilateralBlur");
FMaterial const* const ma = material.getMaterial(mEngine, driver);
FMaterialInstance* const mi = getMaterialInstance(ma);
FMaterial const* const ma = material.getMaterial(mEngine);
FMaterialInstance* const mi = getMaterialInstance(driver, ma);
mi->setParameter("ssao", ssao, { /* only reads level 0 */ });
mi->setParameter("axis", axis / float2{desc.width, desc.height});
mi->setParameter("kernel", kGaussianSamples, kGaussianCount);
@@ -1205,7 +1216,7 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::bilateralBlurPass(FrameGraph
mi->commit(driver, getUboManager());
mi->use(driver);
auto pipeline = getPipelineState(ma);
auto pipeline = getPipelineState(mi);
pipeline.rasterState.depthFunc = RasterState::DepthFunc::L;
renderFullScreenQuad(blurred, pipeline, driver);
unbindAllDescriptorSets(driver);
@@ -1364,7 +1375,7 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::gaussianBlurPass(FrameGraph&
"separableGaussianBlur4L"sv : "separableGaussianBlur4"sv; break;
}
auto const& separableGaussianBlur = getPostProcessMaterial(materialName);
auto ma = separableGaussianBlur.getMaterial(mEngine, driver);
auto ma = separableGaussianBlur.getMaterial(mEngine);
const size_t kernelStorageSize = ma->reflect("kernel")->size;
float2 kernel[64];
@@ -1887,9 +1898,10 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::dof(FrameGraph& fg,
auto inOutCoc = resources.getTexture(data.inOutCoc);
auto const& material = getPostProcessMaterial("dofMipmap");
FMaterial const* const ma = material.getMaterial(mEngine, driver);
FMaterial const* const ma = material.getMaterial(mEngine);
FMaterialInstance* const mi = getMaterialInstance(driver, ma);
auto const pipeline = getPipelineState(ma, variant);
auto const pipeline = getPipelineState(mi, variant);
for (size_t level = 0 ; level < mipmapCount - 1u ; level++) {
const float w = FTexture::valueForLevel(level, desc.width);
@@ -1897,7 +1909,8 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::dof(FrameGraph& fg,
auto const& out = resources.getRenderPassInfo(data.rp[level]);
auto inColor = driver.createTextureView(inOutColor, level, 1);
auto inCoc = driver.createTextureView(inOutCoc, level, 1);
FMaterialInstance* const mi = getMaterialInstance(ma);
// FIXME: is this necessary?
FMaterialInstance* const mi = getMaterialInstance(driver, ma);
mi->setParameter("color", inColor, SamplerParams{
.filterMin = SamplerMinFilter::NEAREST_MIPMAP_NEAREST });
@@ -2426,9 +2439,9 @@ PostProcessManager::BloomPassOutput PostProcessManager::bloom(FrameGraph& fg,
auto const& outDesc = resources.getDescriptor(data.out);
auto const& material = getPostProcessMaterial("bloomUpsample");
FMaterial const* const ma = material.getMaterial(mEngine, driver);
FMaterial const* const ma = material.getMaterial(mEngine);
auto pipeline = getPipelineState(ma);
auto pipeline = getPipelineState(getMaterialInstance(driver, ma));
pipeline.rasterState.blendFunctionSrcRGB = BlendFunction::ONE;
pipeline.rasterState.blendFunctionDstRGB = BlendFunction::ONE;
@@ -2436,7 +2449,7 @@ PostProcessManager::BloomPassOutput PostProcessManager::bloom(FrameGraph& fg,
// Note that we wouldn't want to use the same instance for each pass since that
// would imply using the same UBOs, which implies synchronization across the
// passes.
FMaterialInstance* mi = getMaterialInstance(ma);
FMaterialInstance* mi = getMaterialInstance(driver, ma);
auto hwDstRT = resources.getRenderPassInfo(data.outRT[i - 1]);
hwDstRT.params.flags.discardStart = TargetBufferFlags::NONE; // b/c we'll blend
hwDstRT.params.flags.discardEnd = TargetBufferFlags::NONE;
@@ -2569,11 +2582,12 @@ void PostProcessManager::colorGradingSubpass(DriverApi& driver,
PostProcessVariant::TRANSLUCENT : PostProcessVariant::OPAQUE;
auto const& material = getPostProcessMaterial("colorGradingAsSubpass");
FMaterial const* const ma = material.getMaterial(mEngine, driver, variant);
FMaterial const* const ma = material.getMaterial(mEngine);
// the UBO has been set and committed in colorGradingPrepareSubpass()
FMaterialInstance const* mi = mMaterialInstanceManager.getMaterialInstance(ma, colorGradingConfig.translucent);
FMaterialInstance const* mi =
getMaterialInstanceWithTag(driver, ma, colorGradingConfig.translucent, variant);
mi->use(driver);
auto const pipeline = getPipelineState(ma, variant);
auto const pipeline = getPipelineState(mi, variant);
driver.nextSubpass();
driver.scissor(mi->getScissor());
driver.draw(pipeline, mFullScreenQuadRph, 0, 3, 1);
@@ -2581,8 +2595,8 @@ void PostProcessManager::colorGradingSubpass(DriverApi& driver,
void PostProcessManager::customResolvePrepareSubpass(DriverApi& driver, CustomResolveOp const op) noexcept {
auto const& material = getPostProcessMaterial("customResolveAsSubpass");
auto const ma = material.getMaterial(mEngine, driver, PostProcessVariant::OPAQUE);
auto* const mi = mMaterialInstanceManager.getMaterialInstance(ma, 0);
auto const ma = material.getMaterial(mEngine);
auto* const mi = getMaterialInstance(driver, ma, 0);
mi->setParameter("direction", op == CustomResolveOp::COMPRESS ? 1.0f : -1.0f),
mi->commit(driver, getUboManager());
}
@@ -2592,12 +2606,12 @@ void PostProcessManager::customResolveSubpass(DriverApi& driver) noexcept {
bindPerRenderableDescriptorSet(driver);
auto const& material = getPostProcessMaterial("customResolveAsSubpass");
FMaterial const* const ma = material.getMaterial(mEngine, driver);
FMaterial const* const ma = material.getMaterial(mEngine);
// the UBO has been set and committed in customResolvePrepareSubpass()
FMaterialInstance const* mi = mMaterialInstanceManager.getMaterialInstance(ma, 0);
FMaterialInstance const* mi = getMaterialInstance(driver, ma, 0);
mi->use(driver);
auto const pipeline = getPipelineState(ma);
auto const pipeline = getPipelineState(mi);
driver.nextSubpass();
driver.scissor(mi->getScissor());
driver.draw(pipeline, mFullScreenQuadRph, 0, 3, 1);
@@ -2633,8 +2647,8 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::customResolveUncompressPass(
void PostProcessManager::clearAncillaryBuffersPrepare(DriverApi& driver,
Variant::type_t variant) noexcept {
auto const& material = getPostProcessMaterial("clearDepth");
auto const ma = material.getMaterial(mEngine, driver, variant);
auto const mi = mMaterialInstanceManager.getMaterialInstance(ma, 0);
auto const ma = material.getMaterial(mEngine);
auto const mi = getMaterialInstanceWithTag(driver, ma, 0, variant);
mi->commit(driver, getUboManager());
}
@@ -2649,13 +2663,13 @@ void PostProcessManager::clearAncillaryBuffers(DriverApi& driver,
bindPerRenderableDescriptorSet(driver);
auto const& material = getPostProcessMaterial("clearDepth");
FMaterial const* const ma = material.getMaterial(mEngine, driver, variant);
FMaterial const* const ma = material.getMaterial(mEngine);
// the UBO has been set and committed in clearAncillaryBuffersPrepare()
FMaterialInstance const* const mi = mMaterialInstanceManager.getMaterialInstance(ma, 0);
FMaterialInstance const* const mi = getMaterialInstanceWithTag(driver, ma, 0, variant);
mi->use(driver);
auto pipeline = getPipelineState(ma, variant);
auto pipeline = getPipelineState(mi, variant);
pipeline.rasterState.depthFunc = RasterState::DepthFunc::A;
driver.scissor(mi->getScissor());
@@ -2665,7 +2679,7 @@ void PostProcessManager::clearAncillaryBuffers(DriverApi& driver,
void PostProcessManager::fogPrepare(DriverApi& driver) noexcept {
// ensures the material is loaded and material instance created
auto const& material = getPostProcessMaterial("fog");
FMaterial const* const ma = material.getMaterial(mEngine, driver, PostProcessVariant::OPAQUE);
FMaterial const* const ma = material.getMaterial(mEngine);
FMaterialInstance const* mi = ma->getDefaultInstance();
mi->commit(driver, getUboManager());
}
@@ -2676,11 +2690,11 @@ void PostProcessManager::fog(DriverApi& driver) noexcept {
bindPerRenderableDescriptorSet(driver);
auto const& material = getPostProcessMaterial("fog");
FMaterial const* const ma = material.getMaterial(mEngine, driver);
FMaterial const* const ma = material.getMaterial(mEngine);
FMaterialInstance const* mi = ma->getDefaultInstance();
mi->use(driver);
auto pipeline = getPipelineState(ma, Variant::NO_VARIANT);
auto pipeline = getPipelineState(mi, Variant::NO_VARIANT);
driver.scissor(mi->getScissor());
driver.draw(pipeline, mFullScreenQuadRph, 0, 3, 1);
}
@@ -2937,7 +2951,7 @@ void PostProcessManager::TaaJitterCamera(
void PostProcessManager::configureTemporalAntiAliasingMaterial(backend::DriverApi& driver,
TemporalAntiAliasingOptions const& taaOptions) noexcept {
FMaterial* const ma = getPostProcessMaterial("taa").getMaterial(mEngine, driver);
FMaterial* const ma = getPostProcessMaterial("taa").getMaterial(mEngine);
ma->getPrograms().setConstants({
{ "upscaling", taaOptions.upscaling > 1.0f },
{ "historyReprojection", taaOptions.historyReprojection },
@@ -2956,7 +2970,7 @@ FMaterialInstance* PostProcessManager::configureColorGradingMaterial(backend::Dr
PostProcessMaterial const& material, FColorGrading const* colorGrading,
ColorGradingConfig const& colorGradingConfig, VignetteOptions const& vignetteOptions,
uint32_t const width, uint32_t const height) noexcept {
FMaterial* ma = material.getMaterial(mEngine, driver);
FMaterial* ma = material.getMaterial(mEngine);
ma->getPrograms().setConstants({
{ "isOneDimensional", colorGrading->isOneDimensional() },
{ "isLDR", colorGrading->isLDR() },
@@ -2965,8 +2979,9 @@ FMaterialInstance* PostProcessManager::configureColorGradingMaterial(backend::Dr
PostProcessVariant const variant = colorGradingConfig.translucent
? PostProcessVariant::TRANSLUCENT
: PostProcessVariant::OPAQUE;
ma = material.getMaterial(mEngine, driver, variant);
FMaterialInstance* mi = mMaterialInstanceManager.getMaterialInstance(ma, colorGradingConfig.translucent);
ma = material.getMaterial(mEngine);
FMaterialInstance* mi =
getMaterialInstanceWithTag(driver, ma, colorGradingConfig.translucent, variant);
const SamplerParams params = SamplerParams{
.filterMag = SamplerMagFilter::LINEAR,
@@ -3078,9 +3093,9 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::taa(FrameGraph& fg,
PostProcessVariant const variant = colorGradingConfig.translucent ?
PostProcessVariant::TRANSLUCENT : PostProcessVariant::OPAQUE;
FMaterial const* const ma = material.getMaterial(mEngine, driver, variant);
FMaterial const* const ma = material.getMaterial(mEngine);
FMaterialInstance* mi = getMaterialInstance(ma);
FMaterialInstance* mi = getMaterialInstance(driver, ma);
mi->setParameter("color", color, SamplerParams{}); // nearest
mi->setParameter("depth", depth, SamplerParams{}); // nearest
mi->setParameter("history", history, SamplerParams{
@@ -3120,7 +3135,7 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::taa(FrameGraph& fg,
if (colorGradingConfig.asSubpass) {
out.params.subpassMask = 1;
}
auto const pipeline = getPipelineState(ma, variant);
auto const pipeline = getPipelineState(mi, variant);
driver.beginRenderPass(out.target, out.params);
driver.draw(pipeline, mFullScreenQuadRph, 0, 3, 1);
@@ -3202,7 +3217,7 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::rcas(
mi->commit(driver, getUboManager());
mi->use(driver);
auto pipeline = getPipelineState(material.getMaterial(mEngine, driver), variant);
auto pipeline = getPipelineState(mi, variant);
if (mode == RcasMode::BLENDED) {
pipeline.rasterState.blendFunctionSrcRGB = BlendFunction::ONE;
pipeline.rasterState.blendFunctionSrcAlpha = BlendFunction::ONE;
@@ -3295,7 +3310,7 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::upscaleBilinear(FrameGraph&
auto out = resources.getRenderPassInfo();
auto pipeline = getPipelineState(material.getMaterial(mEngine, driver));
auto pipeline = getPipelineState(mi);
if (blended) {
pipeline.rasterState.blendFunctionSrcRGB = BlendFunction::ONE;
pipeline.rasterState.blendFunctionSrcAlpha = BlendFunction::ONE;
@@ -3509,15 +3524,15 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::upscaleFSR1(FrameGraph& fg,
auto out = resources.getRenderPassInfo();
if (UTILS_UNLIKELY(twoPassesEASU)) {
auto pipeline0 = getPipelineState(splitEasuMaterial->getMaterial(mEngine, driver));
auto pipeline1 = getPipelineState(easuMaterial->getMaterial(mEngine, driver));
auto pipeline0 = getPipelineState(getMaterialInstance(mEngine, driver, *splitEasuMaterial));
auto pipeline1 = getPipelineState(getMaterialInstance(mEngine, driver, *easuMaterial));
pipeline1.rasterState.depthFunc = SamplerCompareFunc::NE;
driver.beginRenderPass(out.target, out.params);
driver.draw(pipeline0, mFullScreenQuadRph, 0, 3, 1);
driver.draw(pipeline1, mFullScreenQuadRph, 0, 3, 1);
driver.endRenderPass();
} else {
auto pipeline = getPipelineState(easuMaterial->getMaterial(mEngine, driver));
auto pipeline = getPipelineState(getMaterialInstance(mEngine, driver, *easuMaterial));
renderFullScreenQuad(out, pipeline, driver);
}
unbindAllDescriptorSets(driver);
@@ -3569,8 +3584,8 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::blit(FrameGraph& fg, bool co
PostProcessMaterial const& material =
getPostProcessMaterial(layer ? "blitArray" : "blitLow");
FMaterial const* const ma = material.getMaterial(mEngine, driver);
auto* mi = getMaterialInstance(ma);
FMaterial const* const ma = material.getMaterial(mEngine);
auto* mi = getMaterialInstance(driver, ma);
mi->setParameter("color", color, SamplerParams{
.filterMag = filterMag,
.filterMin = filterMin
@@ -3588,7 +3603,7 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::blit(FrameGraph& fg, bool co
mi->commit(driver, getUboManager());
mi->use(driver);
auto pipeline = getPipelineState(ma);
auto pipeline = getPipelineState(mi);
if (translucent) {
pipeline.rasterState.blendFunctionSrcRGB = BlendFunction::ONE;
pipeline.rasterState.blendFunctionSrcAlpha = BlendFunction::ONE;
@@ -3886,10 +3901,10 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::debugCombineArrayTexture(Fra
// set uniforms
PostProcessMaterial const& material = getPostProcessMaterial("blitArray");
FMaterial const* const ma = material.getMaterial(mEngine, driver);
FMaterial const* const ma = material.getMaterial(mEngine);
// It should be ok to not move this getMaterialInstance to inside the loop, since
// this is a pass meant for debug.
auto* mi = getMaterialInstance(ma);
auto* mi = getMaterialInstance(driver, ma);
mi->setParameter("color", color, SamplerParams{
.filterMag = filterMag,
.filterMin = filterMin
@@ -3903,7 +3918,7 @@ FrameGraphId<FrameGraphTexture> PostProcessManager::debugCombineArrayTexture(Fra
mi->commit(driver, getUboManager());
mi->use(driver);
auto pipeline = getPipelineState(ma);
auto pipeline = getPipelineState(mi);
if (translucent) {
pipeline.rasterState.blendFunctionSrcRGB = BlendFunction::ONE;
pipeline.rasterState.blendFunctionSrcAlpha = BlendFunction::ONE;

View File

@@ -360,13 +360,7 @@ public:
void terminate(FEngine& engine) noexcept;
FMaterial* getMaterial(FEngine& engine, backend::DriverApi& driver,
Variant::type_t variant) const noexcept;
FMaterial* getMaterial(FEngine& engine, backend::DriverApi& driver,
PostProcessVariant variant = PostProcessVariant::OPAQUE) const noexcept {
return getMaterial(engine, driver, Variant::type_t(variant));
}
FMaterial* getMaterial(FEngine& engine) const noexcept;
private:
void loadMaterial(FEngine& engine) const noexcept;
@@ -393,11 +387,12 @@ public:
void bindPerRenderableDescriptorSet(backend::DriverApi& driver) const noexcept;
backend::PipelineState getPipelineState(FMaterial const* ma, Variant::type_t variant) const noexcept;
backend::PipelineState getPipelineState(FMaterialInstance const* mi,
Variant::type_t variant) const noexcept;
backend::PipelineState getPipelineState(FMaterial const* ma,
PostProcessVariant variant = PostProcessVariant::OPAQUE) const noexcept {
return getPipelineState(ma, Variant::type_t(variant));
backend::PipelineState getPipelineState(FMaterialInstance const* mi,
PostProcessVariant variant = PostProcessVariant::OPAQUE) const noexcept {
return getPipelineState(mi, Variant::type_t(variant));
}
void renderFullScreenQuad(FrameGraphResources::RenderPassInfo const& out,
@@ -427,27 +422,47 @@ public:
void resetForRender();
MaterialInstanceManager& getMaterialInstanceManager() noexcept {
return mMaterialInstanceManager;
}
// Helper to get a MaterialInstance from a FMaterial
// This currently just call FMaterial::getDefaultInstance().
FMaterialInstance* getMaterialInstance(FMaterial const* ma) {
return mMaterialInstanceManager.getMaterialInstance(ma);
}
// Helper to get a MaterialInstance from a PostProcessMaterial.
FMaterialInstance* getMaterialInstance(FEngine& engine, backend::DriverApi& driver,
PostProcessMaterial const& material, PostProcessVariant variant = PostProcessVariant::OPAQUE) {
FMaterial const* ma = material.getMaterial(engine, driver, variant);
return getMaterialInstance(ma);
}
static void unbindAllDescriptorSets(backend::DriverApi& driver) noexcept;
private:
// Helpers to get MaterialInstances.
//
// These funcions additionally ensure that the necessary shader programs are compiled via
// prepareProgram().
FMaterialInstance* getMaterialInstance(backend::DriverApi& driver, FMaterial const* ma,
Variant::type_t variant) const;
FMaterialInstance* getMaterialInstance(backend::DriverApi& driver, FMaterial const* ma,
PostProcessVariant variant = PostProcessVariant::OPAQUE) const {
return getMaterialInstance(driver, ma, Variant::type_t(variant));
}
FMaterialInstance* getMaterialInstance(FEngine& engine, backend::DriverApi& driver,
PostProcessMaterial const& material,
PostProcessVariant variant = PostProcessVariant::OPAQUE) const {
return getMaterialInstance(driver, material.getMaterial(engine), Variant::type_t(variant));
}
FMaterialInstance* getMaterialInstanceWithTag(backend::DriverApi& driver, FMaterial const* ma,
uint32_t tag, Variant::type_t variant) const;
FMaterialInstance* getMaterialInstanceWithTag(backend::DriverApi& driver, FMaterial const* ma,
uint32_t tag, PostProcessVariant variant = PostProcessVariant::OPAQUE) const {
return getMaterialInstanceWithTag(driver, ma, tag, Variant::type_t(variant));
}
FMaterialInstance* getMaterialInstanceWithTag(FEngine& engine, backend::DriverApi& driver,
PostProcessMaterial const& material, uint32_t tag,
PostProcessVariant variant = PostProcessVariant::OPAQUE) const {
return getMaterialInstanceWithTag(driver, material.getMaterial(engine), tag,
Variant::type_t(variant));
}
UboManager* getUboManager() const noexcept;
backend::RenderPrimitiveHandle mFullScreenQuadRph;

View File

@@ -243,8 +243,8 @@ void RenderPass::appendCommands(FEngine const& engine, backend::DriverApi& drive
// This must be done from the main thread.
for (Command const* first = curr, *last = curr + commandCount ; first != last ; ++first) {
if (UTILS_LIKELY((first->key & CUSTOM_MASK) == uint64_t(CustomCommand::PASS))) {
auto ma = first->info.mi->getMaterial();
ma->prepareProgram(driver, first->info.materialVariant, CompilerPriorityQueue::CRITICAL);
first->info.mi->prepareProgram(driver, first->info.materialVariant,
CompilerPriorityQueue::CRITICAL);
}
}
}
@@ -426,16 +426,18 @@ void RenderPass::setupColorCommand(Command& cmdDraw, Variant variant,
bool const isBlendingCommand = !hasScreenSpaceRefraction &&
(blendingMode != BlendingMode::OPAQUE && blendingMode != BlendingMode::MASKED);
RasterState rasterState = mi->getRasterState();
uint64_t keyDraw = cmdDraw.key;
keyDraw &= ~(PASS_MASK | BLENDING_MASK | MATERIAL_MASK);
keyDraw |= uint64_t(hasScreenSpaceRefraction ? Pass::REFRACT : Pass::COLOR);
keyDraw |= uint64_t(CustomCommand::PASS);
keyDraw |= mi->getSortingKey(); // already all set-up for direct or'ing
keyDraw |= makeField(variant.key, MATERIAL_VARIANT_KEY_MASK, MATERIAL_VARIANT_KEY_SHIFT);
keyDraw |= makeField(ma->getRasterState().alphaToCoverage, BLENDING_MASK, BLENDING_SHIFT);
keyDraw |= makeField(rasterState.alphaToCoverage, BLENDING_MASK, BLENDING_SHIFT);
cmdDraw.key = isBlendingCommand ? keyBlending : keyDraw;
cmdDraw.info.rasterState = ma->getRasterState();
cmdDraw.info.rasterState = rasterState;
// for SSR pass, the blending mode of opaques (including MASKED) must be off
// see Material.cpp.
@@ -446,10 +448,6 @@ void RenderPass::setupColorCommand(Command& cmdDraw, Variant variant,
BlendFunction::ZERO : cmdDraw.info.rasterState.blendFunctionDstAlpha;
cmdDraw.info.rasterState.inverseFrontFaces = inverseFrontFaces;
cmdDraw.info.rasterState.culling = mi->getCullingMode();
cmdDraw.info.rasterState.colorWrite = mi->isColorWriteEnabled();
cmdDraw.info.rasterState.depthWrite = mi->isDepthWriteEnabled();
cmdDraw.info.rasterState.depthFunc = mi->getDepthFunc();
cmdDraw.info.rasterState.depthClamp = hasDepthClamp;
cmdDraw.info.materialVariant = variant;
// we keep "RasterState::colorWrite" to the value set by material (could be disabled)
@@ -1090,8 +1088,7 @@ void RenderPass::Executor::execute(FEngine const& engine, DriverApi& driver,
mi->use(driver, info.materialVariant);
}
assert_invariant(ma);
pipeline.program = ma->getProgram(info.materialVariant);
pipeline.program = mi->getProgram(info.materialVariant);
if (UTILS_UNLIKELY(memcmp(&pipeline, &currentPipeline, sizeof(PipelineState)) != 0)) {
currentPipeline = pipeline;

View File

@@ -636,7 +636,7 @@ FrameGraphId<FrameGraphTexture> ShadowMapManager::gaussianBlurSeparatedPass(
// get the material
auto const& separableGaussianBlur = ppm.getPostProcessMaterial("gaussian");
auto const ma = separableGaussianBlur.getMaterial(engine, driver);
auto const ma = separableGaussianBlur.getMaterial(engine);
// Generates half of a Gaussian kernel (center + one side)
auto generateGaussianWeights = [](std::array<float, 32>& weights,
@@ -685,7 +685,7 @@ FrameGraphId<FrameGraphTexture> ShadowMapManager::gaussianBlurSeparatedPass(
for (auto const mi : miList) {
mi->use(driver);
driver.scissor(mi->getScissor());
driver.draw(ppm.getPipelineState(ma), engine.getFullScreenRenderPrimitive(), 0, 3, 1);
driver.draw(ppm.getPipelineState(mi), engine.getFullScreenRenderPrimitive(), 0, 3, 1);
}
driver.endRenderPass();
@@ -733,12 +733,12 @@ FrameGraphId<FrameGraphTexture> ShadowMapManager::vsmMipmapPass(
ppm.bindPerRenderableDescriptorSet(driver);
auto& material = ppm.getPostProcessMaterial("vsmMipmap");
FMaterial const* const ma = material.getMaterial(engine, driver);
FMaterial const* const ma = material.getMaterial(engine);
auto const mi = ppm.getMaterialInstanceManager().getMaterialInstance(ma);
auto const pipeline = ppm.getPipelineState(ma);
auto const pipeline = ppm.getPipelineState(mi);
backend::Viewport const scissor = { 0, 0, dim, dim };
auto const mi = ppm.getMaterialInstanceManager().getMaterialInstance(ma);
mi->setParameter("color", in, SamplerParams{
.filterMag = SamplerMagFilter::NEAREST,
.filterMin = SamplerMinFilter::NEAREST_MIPMAP_NEAREST

View File

@@ -1830,7 +1830,7 @@ void FEngine::compile(
CallbackHandler* handler,
Invocable<void(Material*)>&& callback) {
auto const variants = getMaterialCompileVariants(view, shadowReceiver, skinning);
material->compile(priority, variants, handler, std::move(callback));
const_cast<FMaterial*>(material)->compile(priority, variants, handler, std::move(callback));
}
// ------------------------------------------------------------------------------------------------

View File

@@ -170,8 +170,6 @@ FMaterial::FMaterial(FEngine& engine, const Builder& builder, MaterialDefinition
DriverApi& driver = engine.getDriverApi();
mIsStereoSupported = driver.isStereoSupported();
mIsParallelShaderCompileSupported = driver.isParallelShaderCompileSupported();
mDepthPrecacheDisabled =
driver.isWorkaroundNeeded(Workaround::DISABLE_DEPTH_PRECACHE_FOR_DEFAULT_MATERIAL);
mDefaultMaterial = engine.getDefaultMaterial();
@@ -240,44 +238,33 @@ filament::DescriptorSetLayout const& FMaterial::getPerViewDescriptorSetLayout(
void FMaterial::compile(CompilerPriorityQueue const priority,
UserVariantFilterMask variantSpec,
CallbackHandler* handler,
Invocable<void(Material*)>&& callback) const noexcept {
DriverApi& driver = mEngine.getDriverApi();
// Turn off the STE variant if stereo is not supported.
if (!mIsStereoSupported) {
variantSpec &= ~UserVariantFilterMask(UserVariantFilterBit::STE);
Invocable<void(Material*)>&& callback) noexcept {
FMaterialInstance* mi = getDefaultInstance();
if (callback) {
mi->compile(priority, variantSpec, handler,
[this, callback = std::move(callback)](MaterialInstance*) {
callback(this);
});
} else {
mi->compile(priority, variantSpec, handler, {});
}
UserVariantFilterMask const variantFilter = ~variantSpec & UserVariantFilterMask(UserVariantFilterBit::ALL);
ShaderModel const shaderModel = mEngine.getShaderModel();
bool const isStereoSupported = mEngine.getDriverApi().isStereoSupported();
if (UTILS_LIKELY(mIsParallelShaderCompileSupported)) {
for (auto const variant: mDefinition.getVariants()) {
if (!variantFilter || variant == Variant::filterUserVariant(variant, variantFilter)) {
if (mDefinition.hasVariant(variant, shaderModel, isStereoSupported)) {
prepareProgram(driver, variant, priority);
}
}
}
}
compileAllPrograms(priority, handler, std::move(callback));
}
void FMaterial::compile(CompilerPriorityQueue const priority,
FixedCapacityVector<Variant> const& variants,
CallbackHandler* handler,
Invocable<void(Material*)>&& callback) const noexcept {
Invocable<void(Material*)>&& callback) noexcept {
DriverApi& driver = mEngine.getDriverApi();
FMaterialInstance* mi = getDefaultInstance();
ShaderModel const shaderModel = mEngine.getShaderModel();
bool const isStereoSupported = driver.isStereoSupported();
bool const isParallelShaderCompileSupported = driver.isParallelShaderCompileSupported();
if (UTILS_LIKELY(mIsParallelShaderCompileSupported)) {
if (UTILS_LIKELY(isParallelShaderCompileSupported)) {
for (auto const variant : variants) {
if (mDefinition.hasVariant(variant, shaderModel, isStereoSupported)) {
prepareProgram(driver, variant, priority);
mi->prepareProgram(driver, variant, priority);
}
}
}
@@ -287,7 +274,7 @@ void FMaterial::compile(CompilerPriorityQueue const priority,
void FMaterial::compileAllPrograms(CompilerPriorityQueue const priority,
CallbackHandler* handler,
Invocable<void(Material*)>&& callback) const noexcept {
Invocable<void(Material*)>&& callback) noexcept {
DriverApi& driver = mEngine.getDriverApi();
if (callback) {

View File

@@ -106,12 +106,12 @@ public:
void compile(CompilerPriorityQueue priority,
UserVariantFilterMask variantSpec,
backend::CallbackHandler* handler,
utils::Invocable<void(Material*)>&& callback) const noexcept;
utils::Invocable<void(Material*)>&& callback) noexcept;
void compile(CompilerPriorityQueue priority,
utils::FixedCapacityVector<Variant> const& variants,
backend::CallbackHandler* handler,
utils::Invocable<void(Material*)>&& callback) const noexcept;
utils::Invocable<void(Material*)>&& callback) noexcept;
// Creates an instance of this material, specifying the batching mode.
FMaterialInstance* createInstance(const char* name) const noexcept;
@@ -130,40 +130,6 @@ public:
FEngine& getEngine() const noexcept { return mEngine; }
// prepareProgram creates the program for the material's given variant at the backend level.
// Must be called outside of backend render pass.
// Must be called before getProgram() below.
backend::Handle<backend::HwProgram> prepareProgram(backend::DriverApi& driver,
Variant const variant,
backend::CompilerPriorityQueue const priorityQueue) const noexcept {
return mPrograms.prepareProgram(driver, variant, priorityQueue);
}
// getProgram returns the backend program for the material's given variant.
// Must be called after prepareProgram().
[[nodiscard]]
backend::Handle<backend::HwProgram> getProgram(Variant variant) const noexcept {
if (UTILS_UNLIKELY(mEngine.features.material.enable_fog_as_postprocess)) {
// if the fog as post-process feature is enabled, we need to proceed "as-if" the material
// didn't have the FOG variant bit.
if (getMaterialDomain() == MaterialDomain::SURFACE) {
BlendingMode const blendingMode = getBlendingMode();
bool const hasScreenSpaceRefraction = getRefractionMode() == RefractionMode::SCREEN_SPACE;
bool const isBlendingCommand = !hasScreenSpaceRefraction &&
(blendingMode != BlendingMode::OPAQUE && blendingMode != BlendingMode::MASKED);
if (!isBlendingCommand) {
variant.setFog(false);
}
}
}
#if FILAMENT_ENABLE_MATDBG
updateActiveProgramsForMatdbg(variant);
#endif
return mPrograms.getProgram(variant);
}
// MaterialInstance::use() binds descriptor sets before drawing. For shared variants,
// however, the material instance will call useShared() to bind the default material's sets
// instead.
@@ -310,6 +276,9 @@ public:
}
/** @}*/
// Called by getProgram() to update active program list for matdbg UI.
void updateActiveProgramsForMatdbg(Variant const variant) const noexcept;
#endif
private:
@@ -318,15 +287,13 @@ private:
void compileAllPrograms(CompilerPriorityQueue priority,
backend::CallbackHandler* handler,
utils::Invocable<void(Material*)>&& callback) const noexcept;
utils::Invocable<void(Material*)>&& callback) noexcept;
MaterialDefinition const& mDefinition;
bool mIsDefaultMaterial = false;
bool mUseUboBatching = false;
bool mIsStereoSupported = false;
bool mIsParallelShaderCompileSupported = false;
bool mDepthPrecacheDisabled = false;
FMaterial const* mDefaultMaterial = nullptr;
@@ -341,8 +308,6 @@ private:
mutable utils::Mutex mPendingEditsLock;
std::unique_ptr<MaterialParser> mPendingEdits;
std::unique_ptr<MaterialParser> mEditedMaterialParser;
// Called by getProgram() to update active program list for matdbg UI.
void updateActiveProgramsForMatdbg(Variant const variant) const noexcept;
void setPendingEdits(std::unique_ptr<MaterialParser> pendingEdits) noexcept;
bool hasPendingEdits() const noexcept;
void latchPendingEdits() noexcept;

View File

@@ -17,6 +17,7 @@
#include <filament/MaterialInstance.h>
#include "RenderPass.h"
#include "MaterialParser.h"
#include "ds/DescriptorSetLayout.h"
@@ -131,6 +132,7 @@ FMaterialInstance::FMaterialInstance(FEngine& engine,
mTextureParameters(other->mTextureParameters),
mDescriptorSet(other->mDescriptorSet.duplicate(
"MaterialInstance", mMaterial->getDescriptorSetLayout())),
mPrograms(other->mPrograms),
mPolygonOffset(other->mPolygonOffset),
mStencilState(other->mStencilState),
mMaskThreshold(other->mMaskThreshold),
@@ -207,6 +209,10 @@ void FMaterialInstance::terminate(FEngine& engine) {
if (ubHandle){
driver.destroyBufferObject(*ubHandle);
}
if (mPrograms.isInitialized()) {
mPrograms.terminate(engine);
}
}
void FMaterialInstance::commit(FEngine& engine) const {
@@ -264,6 +270,39 @@ void FMaterialInstance::commit(FEngine::DriverApi& driver, UboManager* uboManage
// ------------------------------------------------------------------------------------------------
template<typename T>
void FMaterialInstance::setConstantImpl(std::string_view name, T value) {
auto const& constants = mMaterial->getDefinition().specializationConstantsNameToIndex;
auto it = constants.find(name);
FILAMENT_CHECK_PRECONDITION(it != constants.end()) << "Constant " << name << " does not exist";
if (UTILS_UNLIKELY(mPendingSpecializationConstants.empty())) {
mPendingSpecializationConstants =
FixedCapacityVector<backend::Program::SpecializationConstant>(
getPrograms().getSpecializationConstants());
}
uint32_t id = it->second + CONFIG_MAX_RESERVED_SPEC_CONSTANTS;
mPendingSpecializationConstants[id] = value;
}
template<typename T>
T FMaterialInstance::getConstantImpl(std::string_view name) const {
auto const& constants = mMaterial->getDefinition().specializationConstantsNameToIndex;
auto it = constants.find(name);
FILAMENT_CHECK_PRECONDITION(it != constants.end()) << "Constant " << name << " does not exist";
uint32_t id = it->second + CONFIG_MAX_RESERVED_SPEC_CONSTANTS;
if (UTILS_UNLIKELY(!mPendingSpecializationConstants.empty())) {
return std::get<T>(mPendingSpecializationConstants[id]);
}
return getPrograms().getConstant<T>(id);
}
// ------------------------------------------------------------------------------------------------
void FMaterialInstance::setParameter(std::string_view const name,
Handle<HwTexture> texture, SamplerParams const params) {
auto const binding = mMaterial->getSamplerBinding(name);
@@ -383,6 +422,15 @@ void FMaterialInstance::setTransparencyMode(TransparencyMode const mode) noexcep
mTransparencyMode = mode;
}
RasterState FMaterialInstance::getRasterState() const noexcept {
RasterState rs = mMaterial->getRasterState();
rs.culling = mCulling;
rs.depthWrite = mDepthWrite;
rs.depthFunc = mDepthFunc;
rs.colorWrite = mColorWrite;
return rs;
}
void FMaterialInstance::setDepthCulling(bool const enable) noexcept {
mDepthFunc = enable ? RasterState::DepthFunc::GE : RasterState::DepthFunc::A;
}
@@ -403,6 +451,51 @@ const char* FMaterialInstance::getName() const noexcept {
// ------------------------------------------------------------------------------------------------
void FMaterialInstance::compile(CompilerPriorityQueue const priority,
UserVariantFilterMask variantSpec, CallbackHandler* handler,
Invocable<void(MaterialInstance*)>&& callback) noexcept {
FEngine& engine = mMaterial->getEngine();
DriverApi& driver = engine.getDriverApi();
MaterialDefinition const& definition = mMaterial->getDefinition();
bool const isStereoSupported = driver.isStereoSupported();
// Turn off the STE variant if stereo is not supported.
if (UTILS_LIKELY(!isStereoSupported)) {
variantSpec &= ~UserVariantFilterMask(UserVariantFilterBit::STE);
}
UserVariantFilterMask const variantFilter =
~variantSpec & UserVariantFilterMask(UserVariantFilterBit::ALL);
ShaderModel const shaderModel = engine.getShaderModel();
if (UTILS_LIKELY(driver.isParallelShaderCompileSupported())) {
for (auto const variant: definition.getVariants()) {
if (!variantFilter || variant == Variant::filterUserVariant(variant, variantFilter)) {
if (definition.hasVariant(variant, shaderModel, isStereoSupported)) {
prepareProgram(driver, variant, priority);
}
}
}
}
if (callback) {
struct Callback {
Invocable<void(MaterialInstance*)> f;
MaterialInstance* m;
static void func(void* user) {
auto* const c = static_cast<Callback*>(user);
c->f(c->m);
delete c;
}
};
auto* const user = new (std::nothrow) Callback{ std::move(callback), this };
driver.compilePrograms(priority, handler, &Callback::func, user);
} else {
driver.compilePrograms(priority, nullptr, nullptr, nullptr);
}
}
void FMaterialInstance::use(FEngine::DriverApi& driver, Variant variant) const {
assert_invariant(mDescriptorSet.getHandle());
assert_invariant(!isUsingUboBatching() || BufferAllocator::isValid(getAllocationId()));
@@ -507,4 +600,36 @@ void FMaterialInstance::fixMissingSamplers() const {
}
}
LocalProgramCache const& FMaterialInstance::getPrograms() const noexcept {
return mPrograms.isInitialized() ? mPrograms : mMaterial->getPrograms();
}
void FMaterialInstance::flushSpecializationConstants() const noexcept {
if (mPendingSpecializationConstants.empty()) {
return;
}
if (!mPrograms.isInitialized()) {
mPrograms.initializeForMaterialInstance(mMaterial->getEngine(), *mMaterial);
}
mPrograms.setConstants(std::move(mPendingSpecializationConstants));
mPendingSpecializationConstants.clear();
}
#if FILAMENT_ENABLE_MATDBG
void FMaterialInstance::updateActiveProgramsForMatdbg(Variant const variant) const noexcept {
mMaterial->updateActiveProgramsForMatdbg(variant);
}
#endif // FILAMENT_ENABLE_MATDBG
template void FMaterialInstance::setConstantImpl<int32_t>(std::string_view name, int32_t value);
template void FMaterialInstance::setConstantImpl<float>(std::string_view name, float value);
template void FMaterialInstance::setConstantImpl<bool>(std::string_view name, bool value);
template int32_t FMaterialInstance::getConstantImpl<int32_t>(std::string_view name) const;
template float FMaterialInstance::getConstantImpl<float>(std::string_view name) const;
template bool FMaterialInstance::getConstantImpl<bool>(std::string_view name) const;
} // namespace filament

View File

@@ -18,7 +18,7 @@
#define TNT_FILAMENT_DETAILS_MATERIALINSTANCE_H
#include "downcast.h"
#include "LocalProgramCache.h"
#include "UniformBuffer.h"
#include "ds/DescriptorSet.h"
@@ -26,8 +26,6 @@
#include "details/BufferAllocator.h"
#include "details/Engine.h"
#include "private/backend/DriverApi.h"
#include <filament/MaterialInstance.h>
#include <private/filament/Variant.h>
@@ -67,7 +65,7 @@ public:
~FMaterialInstance() noexcept;
void terminate(FEngine& engine);
void commit(FEngine& engine) const;
void commit(FEngine::DriverApi& driver, UboManager* uboManager) const;
@@ -86,6 +84,32 @@ public:
UniformBuffer const& getUniformBuffer() const noexcept { return mUniforms; }
void compile(backend::CompilerPriorityQueue priority, UserVariantFilterMask variantSpec,
backend::CallbackHandler* handler,
utils::Invocable<void(MaterialInstance*)>&& callback) noexcept;
// prepareProgram creates the program for the material's given variant at the backend level.
// Must be called outside of backend render pass.
// Must be called before getProgram() below.
backend::Handle<backend::HwProgram> prepareProgram(backend::DriverApi& driver,
Variant const variant,
backend::CompilerPriorityQueue const priorityQueue) const noexcept {
flushSpecializationConstants();
return getPrograms().prepareProgram(driver, variant, priorityQueue);
}
// getProgram returns the backend program for the material's given variant.
// Must be called after prepareProgram().
//
// See also Material::getProgram().
[[nodiscard]]
backend::Handle<backend::HwProgram> getProgram(Variant const variant) const noexcept {
#if FILAMENT_ENABLE_MATDBG
updateActiveProgramsForMatdbg(variant);
#endif
return getPrograms().getProgram(variant);
}
void setScissor(uint32_t const left, uint32_t const bottom, uint32_t const width, uint32_t const height) noexcept {
constexpr uint32_t maxvalu = std::numeric_limits<int32_t>::max();
mScissorRect = { int32_t(left), int32_t(bottom),
@@ -107,6 +131,8 @@ public:
bool hasScissor() const noexcept { return mHasScissor; }
backend::RasterState getRasterState() const noexcept;
backend::CullingMode getCullingMode() const noexcept { return mCulling; }
backend::CullingMode getShadowCullingMode() const noexcept { return mShadowCulling; }
@@ -254,11 +280,15 @@ public:
backend::Handle<backend::HwTexture> texture, backend::SamplerParams params);
using MaterialInstance::setParameter;
using MaterialInstance::setConstant;
private:
friend class FMaterial;
friend class MaterialInstance;
// Cannot inline since it inspects the FMaterial class.
LocalProgramCache const& getPrograms() const noexcept;
template<size_t Size>
void setParameterUntypedImpl(std::string_view name, const void* value);
@@ -277,6 +307,19 @@ private:
template<typename T>
T getParameterImpl(std::string_view name) const;
template<typename T>
void setConstantImpl(std::string_view name, T value);
template<typename T>
T getConstantImpl(std::string_view name) const;
void flushSpecializationConstants() const noexcept;
#if FILAMENT_ENABLE_MATDBG
// Called by getProgram() to update active program list for matdbg UI.
void updateActiveProgramsForMatdbg(Variant const variant) const noexcept;
#endif
// keep these grouped, they're accessed together in the render-loop
FMaterial const* mMaterial = nullptr;
@@ -291,6 +334,11 @@ private:
mutable DescriptorSet mDescriptorSet;
UniformBuffer mUniforms;
// HACK: Mutable so that prepareProgram() can update specialization constants.
mutable LocalProgramCache mPrograms;
mutable utils::FixedCapacityVector<backend::Program::SpecializationConstant>
mPendingSpecializationConstants;
backend::PolygonOffset mPolygonOffset{};
backend::StencilState mStencilState{};

View File

@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.19)
project(filament-tests)
if(IOS OR WEBGL)
if(IOS OR WASM)
return()
endif()

View File

@@ -19,6 +19,7 @@
#include <filament/Engine.h>
#include <filament/Material.h>
#include <filament/MaterialInstance.h>
#include "filament_test_resources.h"
@@ -167,3 +168,52 @@ TEST(Material, MaterialSettingInvalidApiLevelReturnsAnInvalidPackage) {
Engine::destroy(engine);
}
TEST(MaterialInstanceTest, SetConstant) {
Engine* engine = Engine::create(Engine::Backend::NOOP);
std::string shaderCode(R"(
void material(inout MaterialInputs material) {
prepareMaterial(material);
material.baseColor = vec4(1.0);
}
)");
filamat::MaterialBuilder builder;
builder.init();
builder.name("MaterialInstanceTest");
builder.material(shaderCode.c_str());
builder.constant("myFloat", filamat::MaterialBuilder::ConstantType::FLOAT, 1.0f);
builder.constant("myInt", filamat::MaterialBuilder::ConstantType::INT, 2);
builder.constant("myBool", filamat::MaterialBuilder::ConstantType::BOOL, false);
filamat::Package result = builder.build(engine->getJobSystem());
ASSERT_TRUE(result.isValid());
Material* material = Material::Builder()
.package(result.getData(), result.getSize())
.build(*engine);
ASSERT_NE(material, nullptr);
MaterialInstance* instance = material->createInstance();
ASSERT_NE(instance, nullptr);
// Verify default values
EXPECT_EQ(instance->getConstant<float>("myFloat"), 1.0f);
EXPECT_EQ(instance->getConstant<int32_t>("myInt"), 2);
EXPECT_EQ(instance->getConstant<bool>("myBool"), false);
// Set new values
instance->setConstant("myFloat", 3.0f);
instance->setConstant("myInt", 4);
instance->setConstant("myBool", true);
// Verify new values
EXPECT_EQ(instance->getConstant<float>("myFloat"), 3.0f);
EXPECT_EQ(instance->getConstant<int32_t>("myInt"), 4);
EXPECT_EQ(instance->getConstant<bool>("myBool"), true);
engine->destroy(instance);
engine->destroy(material);
Engine::destroy(engine);
}

View File

@@ -10,12 +10,6 @@ Pod::Spec.new do |spec|
spec.libraries = 'c++'
# Fix linking error with Xcode 12; we do not yet support the simulator on Apple silicon.
spec.pod_target_xcconfig = {
'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'
}
spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
spec.subspec "filament" do |ss|
ss.source_files =
"include/filament/*.h",
@@ -25,13 +19,13 @@ Pod::Spec.new do |spec|
"include/ibl/*.h",
"include/geometry/*.h"
ss.header_mappings_dir = "include"
ss.vendored_libraries =
"lib/universal/libfilament.a",
"lib/universal/libbackend.a",
"lib/universal/libfilabridge.a",
"lib/universal/libfilaflat.a",
"lib/universal/libibl.a",
"lib/universal/libgeometry.a"
ss.vendored_frameworks =
"lib/libfilament.xcframework",
"lib/libbackend.xcframework",
"lib/libfilabridge.xcframework",
"lib/libfilaflat.xcframework",
"lib/libibl.xcframework",
"lib/libgeometry.xcframework"
ss.dependency "Filament/utils"
ss.dependency "Filament/math"
end
@@ -42,11 +36,10 @@ Pod::Spec.new do |spec|
"include/filament/MaterialChunkType.h",
"include/filament/MaterialEnums.h"
ss.header_mappings_dir = "include"
ss.vendored_libraries =
"lib/universal/libfilamat.a",
"lib/universal/libshaders.a",
"lib/universal/libsmol-v.a",
"lib/universal/libfilabridge.a"
ss.vendored_frameworks =
"lib/libfilamat.xcframework",
"lib/libshaders.xcframework",
"lib/libsmol-v.xcframework"
ss.dependency "Filament/utils"
ss.dependency "Filament/math"
end
@@ -54,11 +47,11 @@ Pod::Spec.new do |spec|
spec.subspec "gltfio_core" do |ss|
ss.source_files = "include/gltfio/**/*.h"
ss.header_mappings_dir = "include"
ss.vendored_libraries =
"lib/universal/libgltfio_core.a",
"lib/universal/libdracodec.a",
"lib/universal/libuberarchive.a",
"lib/universal/libstb.a"
ss.vendored_frameworks =
"lib/libgltfio_core.xcframework",
"lib/libdracodec.xcframework",
"lib/libuberarchive.xcframework",
"lib/libstb.xcframework"
ss.dependency "Filament/filament"
ss.dependency "Filament/ktxreader"
ss.dependency "Filament/uberz"
@@ -66,23 +59,23 @@ Pod::Spec.new do |spec|
spec.subspec "camutils" do |ss|
ss.source_files = "include/camutils/*.h"
ss.vendored_libraries = "lib/universal/libcamutils.a"
ss.vendored_frameworks = "lib/libcamutils.xcframework"
ss.header_dir = "camutils"
ss.dependency "Filament/math"
end
spec.subspec "filameshio" do |ss|
ss.source_files = "include/filameshio/*.h"
ss.vendored_libraries =
"lib/universal/libfilameshio.a",
"lib/universal/libmeshoptimizer.a"
ss.vendored_frameworks =
"lib/libfilameshio.xcframework",
"lib/libmeshoptimizer.xcframework"
ss.header_dir = "filameshio"
ss.dependency "Filament/filament"
end
spec.subspec "image" do |ss|
ss.source_files = "include/image/*.h"
ss.vendored_libraries = "lib/universal/libimage.a"
ss.vendored_frameworks = "lib/libimage.xcframework"
ss.header_dir = "image"
ss.dependency "Filament/filament"
end
@@ -90,7 +83,7 @@ Pod::Spec.new do |spec|
spec.subspec "utils" do |ss|
ss.source_files = "include/utils/**/*.h"
ss.header_mappings_dir = "include"
ss.vendored_libraries = "lib/universal/libutils.a"
ss.vendored_frameworks = "lib/libutils.xcframework"
ss.dependency "Filament/tsl"
end
@@ -107,9 +100,9 @@ Pod::Spec.new do |spec|
spec.subspec "ktxreader" do |ss|
ss.source_files = "include/ktxreader/*.h"
ss.header_mappings_dir = "include"
ss.vendored_libraries =
"lib/universal/libktxreader.a",
"lib/universal/libbasis_transcoder.a"
ss.vendored_frameworks =
"lib/libktxreader.xcframework",
"lib/libbasis_transcoder.xcframework"
ss.dependency "Filament/image"
ss.dependency "Filament/filament"
end
@@ -117,9 +110,9 @@ Pod::Spec.new do |spec|
spec.subspec "viewer" do |ss|
ss.source_files = "include/viewer/*.h"
ss.header_mappings_dir = "include"
ss.vendored_libraries =
"lib/universal/libviewer.a",
"lib/universal/libcivetweb.a"
ss.vendored_frameworks =
"lib/libviewer.xcframework",
"lib/libcivetweb.xcframework"
ss.dependency "Filament/filament"
ss.dependency "Filament/gltfio_core"
end
@@ -127,9 +120,9 @@ Pod::Spec.new do |spec|
spec.subspec "uberz" do |ss|
ss.source_files = "include/uberz/*.h"
ss.header_mappings_dir = "include"
ss.vendored_libraries =
"lib/universal/libuberzlib.a",
"lib/universal/libzstd.a"
ss.vendored_frameworks =
"lib/libuberzlib.xcframework",
"lib/libzstd.xcframework"
ss.header_dir = "uberz"
ss.dependency "Filament/filamat"
ss.dependency "Filament/tsl"

View File

@@ -47,14 +47,16 @@ build Filament in Release mode, replace `debug` with `release` in the above `bui
If you also want to be able to run on the iOS simulator, add the `-s` flag to the `build.sh`
command. For example, the following command will build for both devices (ARM64) and the simulator
(x86_64) in Debug mode:
(both Apple silicon `arm64` and Intel `x86_64`) in Debug mode:
```
$ ./build.sh -s -p ios -i debug
```
When building for the simulator, the sample will then link against the libraries present in
`out/ios-debug/filament/lib/x86_64`.
When building for the simulator, the samples link against the libraries present in
`out/ios-debug/filament/lib/arm64` (Apple silicon simulators) or
`out/ios-debug/filament/lib/x86_64` (Intel simulators). The Filament `.xcframework`s expose both
slices, so Xcode automatically picks the right one for the active simulator runtime.
## Xcode
@@ -88,17 +90,20 @@ from scratch.
## XcodeGen
[XcodeGen](https://github.com/yonaskolb/XcodeGen) version 2.43.0 is used to generate the Xcode
projects. While not required to run the samples, XcodeGen makes modifying them easier. Each sample
folder contains the `project.yml` file used for the sample, which includes a global
`app-template.yml` file. Simply run
[XcodeGen](https://github.com/yonaskolb/XcodeGen) is used to generate the Xcode projects. While not
required to run the samples, XcodeGen makes modifying them easier. Each sample folder contains the
`project.yml` file used for the sample, which includes a global `app-template.yml` file. Either run
```
$ xcodegen
```
within a sample folder to re-generate the Xcode project. You may need to close and re-open the
project in Xcode to see changes take effect.
within a sample folder, or run `./generate-samples.sh` from this directory to regenerate all of
them at once.
The committed `project.pbxproj` files use `objectVersion = 77`, which requires **Xcode 16 or newer**
to open. CI pins Xcode 16.2 for this reason. You may need to close and re-open the project in Xcode
to see changes take effect.
## Building iOS Samples with ASan / UBSan

View File

@@ -13,30 +13,35 @@ targetTemplates:
- path: ${target_name}/Materials
buildPhase: none
optional: true
dependencies:
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilament.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbackend.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilaflat.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libktxreader.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilabridge.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libutils.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libsmol-v.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgeometry.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libibl.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libabseil.xcframework
- framework: ../../out/$(FILAMENT_OUT_NAME)/filament/lib/libzstd.xcframework
scheme:
configVariants:
- Metal
- OpenGL
settings:
base:
OTHER_LDFLAGS: ["-lfilament", "-lbackend", "-lfilaflat", "-lktxreader",
"-lfilabridge", "-lutils", "-lsmol-v", "-lgeometry", "-libl",
"-labseil", "-lzstd"]
ENABLE_BITCODE: NO
CLANG_CXX_LANGUAGE_STANDARD: c++20
# This allows users to not have to specify a unique bundle ID when building the sample apps.
SAMPLE_CODE_DISAMBIGUATOR: ${DEVELOPMENT_TEAM}
configs:
debug:
HEADER_SEARCH_PATHS: ["../../../out/ios-debug/filament/include", "generated"]
LIBRARY_SEARCH_PATHS:
- "../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)"
- "../../../out/ios-debug/filament/lib/universal"
FILAMENT_OUT_NAME: ios-debug
HEADER_SEARCH_PATHS: ["$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include", "generated"]
release:
HEADER_SEARCH_PATHS: ["../../../out/ios-release/filament/include", "generated"]
LIBRARY_SEARCH_PATHS:
- "../../../out/ios-release/filament/lib/$(CURRENT_ARCH)"
- "../../../out/ios-release/filament/lib/universal"
FILAMENT_OUT_NAME: ios-release
HEADER_SEARCH_PATHS: ["$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include", "generated"]
metal:
GCC_PREPROCESSOR_DEFINITIONS: ["FILAMENT_APP_USE_METAL=1", "$(inherited)"]
opengl:

View File

@@ -3,34 +3,117 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
0DE5DD77BF1B9049D63B76D0 /* libutils.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7C969D515221A7739C68F3AC /* libutils.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
20863805FC626BF952BA3275 /* ViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33D80A4472074C601C57C773 /* ViewController.mm */; };
2AABB2C1262EBA9553666078 /* libsmol-v.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8F108854ADC54BBAA29C2055 /* libsmol-v.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
305D6C983D22F7BC74FC76C7 /* libabseil.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0ED51915983DAE97083D44EF /* libabseil.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
32AC9F2183DD11F130D4A91D /* libfilament.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 912652335565C18B252345DE /* libfilament.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
376F63E72973F07BF618082D /* FilamentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = B54DFEB4DB6ACC0289FA3046 /* FilamentView.mm */; };
3D73E90782CC3A2124DF046F /* libfilaflat.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E8375B927AFDFD1069016D1 /* libfilaflat.xcframework */; };
477A2A67D32B7A3AF2E7B2F4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EB0A767D257F3D05BE9F0960 /* LaunchScreen.storyboard */; };
66014C413BCBF00E8E6DAF76 /* libgeometry.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB3F32D8D3D7310FA3A0C1A1 /* libgeometry.xcframework */; };
6A5D5E984CA862B943742745 /* libgeometry.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DB3F32D8D3D7310FA3A0C1A1 /* libgeometry.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6C8A7D49A8F689E20D60F4D4 /* libabseil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0ED51915983DAE97083D44EF /* libabseil.xcframework */; };
7D8D3494388D7BF4D9FE4FCE /* libfilamat.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4BDDF85AADA2069C0F9FBAE /* libfilamat.xcframework */; };
7E671E777FDB5F34AAA13D5A /* libutils.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C969D515221A7739C68F3AC /* libutils.xcframework */; };
8095A6D37F6F1C9C13BBFEA8 /* libfilamat.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C4BDDF85AADA2069C0F9FBAE /* libfilamat.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
8402B2AC6D081D1E8E065552 /* libbackend.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8632D4625CFCBD32A46772B5 /* libbackend.xcframework */; };
88C039F10343B8598FD5FF7F /* libfilabridge.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2A3753419FC4A7D4C039868 /* libfilabridge.xcframework */; };
91CCBA3BA96DC289D0E8E975 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = AE6C78F32A0494087B0CEF32 /* main.mm */; };
AA5AB498C5A6117057B06824 /* libfilaflat.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9E8375B927AFDFD1069016D1 /* libfilaflat.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
AE63AFEA7E7D507BB677C158 /* libbackend.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8632D4625CFCBD32A46772B5 /* libbackend.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
B3684DB18E82C867020294F1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDB89AD408A508D6CB74C32 /* AppDelegate.m */; };
BFE92829375EE1DBA1E4A689 /* libfilabridge.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B2A3753419FC4A7D4C039868 /* libfilabridge.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
C74DDEF71B6F3C060BB56189 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B63A6E45E40F58037ABD8F84 /* Main.storyboard */; };
C8C8BF3416B9B37003F1031E /* libktxreader.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 19CBBB6C426E8D038BDAC97B /* libktxreader.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D0E54C592A378E549C96A54D /* libibl.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D1E30700B368B5F84196FD97 /* libibl.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D472EB54D462394FE99DCE2B /* libibl.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1E30700B368B5F84196FD97 /* libibl.xcframework */; };
D5B2F0A85F7C6F352AA99DF1 /* libsmol-v.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F108854ADC54BBAA29C2055 /* libsmol-v.xcframework */; };
E090ED826EE54CA2EA611D83 /* libzstd.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4C3E6E0AB2BA7D686E424D8F /* libzstd.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E6163776920A1643B1ED01FA /* libzstd.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C3E6E0AB2BA7D686E424D8F /* libzstd.xcframework */; };
F5E844BFD77174F770543A87 /* libfilament.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 912652335565C18B252345DE /* libfilament.xcframework */; };
FB393C813D7A30404A2DEF23 /* libktxreader.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19CBBB6C426E8D038BDAC97B /* libktxreader.xcframework */; };
FC9D623AC5CF31BA9FB0C47B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 93394D7D4A78C56A2BD31A7D /* Assets.xcassets */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
0ABB76F2D4011A4AF5186FCA /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
32AC9F2183DD11F130D4A91D /* libfilament.xcframework in Embed Frameworks */,
AE63AFEA7E7D507BB677C158 /* libbackend.xcframework in Embed Frameworks */,
AA5AB498C5A6117057B06824 /* libfilaflat.xcframework in Embed Frameworks */,
C8C8BF3416B9B37003F1031E /* libktxreader.xcframework in Embed Frameworks */,
BFE92829375EE1DBA1E4A689 /* libfilabridge.xcframework in Embed Frameworks */,
0DE5DD77BF1B9049D63B76D0 /* libutils.xcframework in Embed Frameworks */,
2AABB2C1262EBA9553666078 /* libsmol-v.xcframework in Embed Frameworks */,
6A5D5E984CA862B943742745 /* libgeometry.xcframework in Embed Frameworks */,
D0E54C592A378E549C96A54D /* libibl.xcframework in Embed Frameworks */,
305D6C983D22F7BC74FC76C7 /* libabseil.xcframework in Embed Frameworks */,
E090ED826EE54CA2EA611D83 /* libzstd.xcframework in Embed Frameworks */,
8095A6D37F6F1C9C13BBFEA8 /* libfilamat.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
056C16E7805E8D33D4C8F7B4 /* FilamentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentView.h; sourceTree = "<group>"; };
0ED51915983DAE97083D44EF /* libabseil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libabseil.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libabseil.xcframework"; sourceTree = "<group>"; };
13DDE7723EC1A6EFCA4D2D58 /* backend-test.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "backend-test.app"; sourceTree = BUILT_PRODUCTS_DIR; };
17364ECD407006EEBDC06024 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
19CBBB6C426E8D038BDAC97B /* libktxreader.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libktxreader.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libktxreader.xcframework"; sourceTree = "<group>"; };
276A0ADD5B521719BBB1DA21 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
33D80A4472074C601C57C773 /* ViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ViewController.mm; sourceTree = "<group>"; };
4C3E6E0AB2BA7D686E424D8F /* libzstd.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libzstd.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libzstd.xcframework"; sourceTree = "<group>"; };
5FDB89AD408A508D6CB74C32 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
603475CEE63507AA04A9B21A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
7C969D515221A7739C68F3AC /* libutils.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libutils.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libutils.xcframework"; sourceTree = "<group>"; };
8632D4625CFCBD32A46772B5 /* libbackend.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libbackend.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbackend.xcframework"; sourceTree = "<group>"; };
8F108854ADC54BBAA29C2055 /* libsmol-v.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = "libsmol-v.xcframework"; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libsmol-v.xcframework"; sourceTree = "<group>"; };
912652335565C18B252345DE /* libfilament.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilament.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilament.xcframework"; sourceTree = "<group>"; };
93394D7D4A78C56A2BD31A7D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
9E8375B927AFDFD1069016D1 /* libfilaflat.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilaflat.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilaflat.xcframework"; sourceTree = "<group>"; };
A283B2D6DB365368855E2D7A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
AE6C78F32A0494087B0CEF32 /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; };
B2A3753419FC4A7D4C039868 /* libfilabridge.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilabridge.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilabridge.xcframework"; sourceTree = "<group>"; };
B54DFEB4DB6ACC0289FA3046 /* FilamentView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FilamentView.mm; sourceTree = "<group>"; };
C4BDDF85AADA2069C0F9FBAE /* libfilamat.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilamat.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilamat.xcframework"; sourceTree = "<group>"; };
C76230D48038E8109EC121B0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
D1E30700B368B5F84196FD97 /* libibl.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libibl.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libibl.xcframework"; sourceTree = "<group>"; };
DB3F32D8D3D7310FA3A0C1A1 /* libgeometry.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libgeometry.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgeometry.xcframework"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
5E31B50ED1338E6ADE1FA49A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
F5E844BFD77174F770543A87 /* libfilament.xcframework in Frameworks */,
8402B2AC6D081D1E8E065552 /* libbackend.xcframework in Frameworks */,
3D73E90782CC3A2124DF046F /* libfilaflat.xcframework in Frameworks */,
FB393C813D7A30404A2DEF23 /* libktxreader.xcframework in Frameworks */,
88C039F10343B8598FD5FF7F /* libfilabridge.xcframework in Frameworks */,
7E671E777FDB5F34AAA13D5A /* libutils.xcframework in Frameworks */,
D5B2F0A85F7C6F352AA99DF1 /* libsmol-v.xcframework in Frameworks */,
66014C413BCBF00E8E6DAF76 /* libgeometry.xcframework in Frameworks */,
D472EB54D462394FE99DCE2B /* libibl.xcframework in Frameworks */,
6C8A7D49A8F689E20D60F4D4 /* libabseil.xcframework in Frameworks */,
E6163776920A1643B1ED01FA /* libzstd.xcframework in Frameworks */,
7D8D3494388D7BF4D9FE4FCE /* libfilamat.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
05CA69F10D830E40A8FB561D /* Products */ = {
isa = PBXGroup;
@@ -44,10 +127,30 @@
isa = PBXGroup;
children = (
FE198F0E1EF047534F8F3128 /* backend-test */,
81BF22C13654E58F622E6BEC /* Frameworks */,
05CA69F10D830E40A8FB561D /* Products */,
);
sourceTree = "<group>";
};
81BF22C13654E58F622E6BEC /* Frameworks */ = {
isa = PBXGroup;
children = (
0ED51915983DAE97083D44EF /* libabseil.xcframework */,
8632D4625CFCBD32A46772B5 /* libbackend.xcframework */,
B2A3753419FC4A7D4C039868 /* libfilabridge.xcframework */,
9E8375B927AFDFD1069016D1 /* libfilaflat.xcframework */,
C4BDDF85AADA2069C0F9FBAE /* libfilamat.xcframework */,
912652335565C18B252345DE /* libfilament.xcframework */,
DB3F32D8D3D7310FA3A0C1A1 /* libgeometry.xcframework */,
D1E30700B368B5F84196FD97 /* libibl.xcframework */,
19CBBB6C426E8D038BDAC97B /* libktxreader.xcframework */,
8F108854ADC54BBAA29C2055 /* libsmol-v.xcframework */,
7C969D515221A7739C68F3AC /* libutils.xcframework */,
4C3E6E0AB2BA7D686E424D8F /* libzstd.xcframework */,
);
name = Frameworks;
sourceTree = "<group>";
};
FE198F0E1EF047534F8F3128 /* backend-test */ = {
isa = PBXGroup;
children = (
@@ -57,11 +160,11 @@
056C16E7805E8D33D4C8F7B4 /* FilamentView.h */,
B54DFEB4DB6ACC0289FA3046 /* FilamentView.mm */,
A283B2D6DB365368855E2D7A /* Info.plist */,
EB0A767D257F3D05BE9F0960 /* LaunchScreen.storyboard */,
AE6C78F32A0494087B0CEF32 /* main.mm */,
B63A6E45E40F58037ABD8F84 /* Main.storyboard */,
276A0ADD5B521719BBB1DA21 /* ViewController.h */,
33D80A4472074C601C57C773 /* ViewController.mm */,
EB0A767D257F3D05BE9F0960 /* LaunchScreen.storyboard */,
B63A6E45E40F58037ABD8F84 /* Main.storyboard */,
);
path = "backend-test";
sourceTree = "<group>";
@@ -75,6 +178,8 @@
buildPhases = (
445863ED54C294354A388281 /* Sources */,
BD71575ED7ED3237FEFD94C7 /* Resources */,
5E31B50ED1338E6ADE1FA49A /* Frameworks */,
0ABB76F2D4011A4AF5186FCA /* Embed Frameworks */,
);
buildRules = (
);
@@ -95,9 +200,10 @@
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
};
};
buildConfigurationList = E89E1EEA671E49DBAC9D5A9C /* Build configuration list for PBXProject "backend-test" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -106,7 +212,8 @@
);
mainGroup = 3D2B936C924E0DB70941EE6D;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 54;
preferredProjectObjectVersion = 77;
productRefGroup = 05CA69F10D830E40A8FB561D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
@@ -168,7 +275,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -224,12 +331,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "backend-test/Info.plist";
@@ -238,24 +350,8 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilamat",
"-force_load ../../../out/ios-debug/filament/lib/arm64/libbackend_test.a",
"-force_load $(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/lib/$(CURRENT_ARCH)-$(PLATFORM_NAME)/libbackend_test.a",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.backend-test";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
@@ -270,7 +366,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -333,12 +429,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "backend-test/Info.plist";
@@ -347,24 +448,8 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilamat",
"-force_load ../../../out/ios-debug/filament/lib/arm64/libbackend_test.a",
"-force_load $(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/lib/$(CURRENT_ARCH)-$(PLATFORM_NAME)/libbackend_test.a",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.backend-test";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
@@ -379,7 +464,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -435,12 +520,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "backend-test/Info.plist";
@@ -449,24 +539,8 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilamat",
"-force_load ../../../out/ios-debug/filament/lib/arm64/libbackend_test.a",
"-force_load $(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/lib/$(CURRENT_ARCH)-$(PLATFORM_NAME)/libbackend_test.a",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.backend-test";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
@@ -482,12 +556,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "backend-test/Info.plist";
@@ -496,24 +575,8 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilamat",
"-force_load ../../../out/ios-debug/filament/lib/arm64/libbackend_test.a",
"-force_load $(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/lib/$(CURRENT_ARCH)-$(PLATFORM_NAME)/libbackend_test.a",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.backend-test";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
@@ -528,7 +591,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;

View File

@@ -6,8 +6,10 @@ targets:
backend-test:
templates:
- FilamentApp
dependencies:
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilamat.xcframework
settings:
base:
# Because each test case is a separate file, the -force_load flag is necessary to prevent the
# linker from removing "unused" symbols.
OTHER_LDFLAGS: ["-lfilamat", "-force_load ../../../out/ios-debug/filament/lib/arm64/libbackend_test.a"]
OTHER_LDFLAGS: ["-force_load $(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/lib/$(CURRENT_ARCH)-$(PLATFORM_NAME)/libbackend_test.a"]

View File

@@ -10,7 +10,7 @@ set -e
HOST_TOOLS_PATH="${HOST_TOOLS_PATH:-../../../out/release/filament/bin}"
cmgen_path=`find ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`
cmgen_path=`find -L ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`
# Ensure that the required tools are present in the out/ directory.
# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.

View File

@@ -3,40 +3,178 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
00101E55E74547D6C2FD8C03 /* default_env_ibl.ktx in Resources */ = {isa = PBXBuildFile; fileRef = A027015F6F283E92C379F0B1 /* default_env_ibl.ktx */; };
0A6463A23D9E0C766EF24559 /* libgeometry.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61B9468E1B7FED7F00513152 /* libgeometry.xcframework */; };
10A51B4DB601FEF9A6F1C0E3 /* libgeometry.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 61B9468E1B7FED7F00513152 /* libgeometry.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
10EB5B0EBD334A09BFC3B9DF /* libibl.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D2FB034B2AD911A82D44F4E /* libibl.xcframework */; };
1297B48507BF2849751AE0E6 /* FILViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3B5A2C1598614ED63098A783 /* FILViewController.mm */; };
1404696E6E1E5E4D265773B8 /* libsmol-v.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C766C894259479FC62B7C8B4 /* libsmol-v.xcframework */; };
14D3627324AE91F7B9C74745 /* libuberzlib.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F7030A0C0BABAD05CDEAFDE8 /* libuberzlib.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
174327B08EFFA8255829FF49 /* libbackend.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1CFC9093A6EF27302A37326E /* libbackend.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1E42FEC5AE043BDDCE3CB0A4 /* libcamutils.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2B534EACCD70A2DA1623F743 /* libcamutils.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
22EBD00922E4FBAE5F20AF3B /* libviewer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52712E0BD50CA883190B6C1D /* libviewer.xcframework */; };
285A74424AF5E3014363F8E6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14BA4B8B6A697847DA9934D2 /* Main.storyboard */; };
2B0B9C8428D402D919CAC47E /* libimageio-lite.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60330C4B6F21AA47B5524999 /* libimageio-lite.xcframework */; };
318A6749D6D4258385B67447 /* libzstd.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75EFC385D49A53E005466F45 /* libzstd.xcframework */; };
36E0764917CB1EE729C6B771 /* libfilaflat.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CF656283054DABCE73A96F57 /* libfilaflat.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
379B9C62A9AB782FDBC0E16C /* libabseil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFA0007FC472C65083E2452 /* libabseil.xcframework */; };
3CF14DE9557B15702D1CC5A9 /* libstb.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 487A93E37417074697C5AEE1 /* libstb.xcframework */; };
4033B9273D8B4C4631200EC1 /* libimage.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F6D55F40189E2AD59138BFC /* libimage.xcframework */; };
453F7CCB3A029F9604857C1C /* FILModelView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F16324F2F287CB27E1A84EB /* FILModelView.mm */; };
45F28F70A616F4B5C67FEC66 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DF545E3F8FD553E334F5D6D6 /* Assets.xcassets */; };
4C287DB6F93BD352927F003A /* libabseil.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6BFA0007FC472C65083E2452 /* libabseil.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4FE0C24C9B962C9F7439C9D4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF7EE9D5DD74F1A740C0D88 /* main.m */; };
58EBAAC97B7EA63E102CDCDB /* BusterDrone in Resources */ = {isa = PBXBuildFile; fileRef = 7F78E613984102280C822052 /* BusterDrone */; };
5C706EF98086B64B4CB3EF9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A0A866F9B1B8D315E88D3D12 /* AppDelegate.m */; };
5FA818045C43856C7FFED3DB /* libcivetweb.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B41054C75146CF46900EB674 /* libcivetweb.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
60EB0B4391BB0FB171A4481D /* libmeshoptimizer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F696C8553E8CC1A6416678CB /* libmeshoptimizer.xcframework */; };
698BA8E8638E7BD46D6BC337 /* libcamutils.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B534EACCD70A2DA1623F743 /* libcamutils.xcframework */; };
700D3E15E852F06C5D8AD28B /* libfilament.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 515259657B354C8F37272D16 /* libfilament.xcframework */; };
701EA9C2DFA93FC8D27E4831 /* libimage.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8F6D55F40189E2AD59138BFC /* libimage.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
7922299F8548416D6E8504AB /* libfilabridge.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 020557AD44AE2D4F9D99EC33 /* libfilabridge.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
7FB58BE1AF39FD8710F6903E /* libzstd.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 75EFC385D49A53E005466F45 /* libzstd.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
847436C12F9597E494EDD811 /* libutils.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91CAACDECFDED76D0DBD8404 /* libutils.xcframework */; };
872D52205E6A17C440CEFB8B /* libbackend.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CFC9093A6EF27302A37326E /* libbackend.xcframework */; };
8949CFB77397BDDBB71B155C /* libfilaflat.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF656283054DABCE73A96F57 /* libfilaflat.xcframework */; };
8A03666082048B85BDE1C1CE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 21CA7296309BBFADBB0B00C3 /* LaunchScreen.storyboard */; };
902D317731C0347ED896B7D2 /* libuberzlib.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7030A0C0BABAD05CDEAFDE8 /* libuberzlib.xcframework */; };
A5D1D0F914C22A76A15EF93E /* libktxreader.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AF19593AAD6D35C6A9198C27 /* libktxreader.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A6C04B690A802EBF133E23C4 /* libfilament.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 515259657B354C8F37272D16 /* libfilament.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A7C7D42BDE57B77CB9D9C5D2 /* default_env_skybox.ktx in Resources */ = {isa = PBXBuildFile; fileRef = 5271315876D6BC61346DFD97 /* default_env_skybox.ktx */; };
AB07A9DD1861F9233ADC5A9F /* libibl.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4D2FB034B2AD911A82D44F4E /* libibl.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
AE30134D543B24298D96BC03 /* libdracodec.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7A57517D52C2BDCA859338D1 /* libdracodec.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
AEDF1CEAF183E92426DA594A /* libmeshoptimizer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F696C8553E8CC1A6416678CB /* libmeshoptimizer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
AFAD827230601E60E38FA771 /* libstb.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 487A93E37417074697C5AEE1 /* libstb.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
B54C62933C17714E465A76A5 /* libutils.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 91CAACDECFDED76D0DBD8404 /* libutils.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
C0D8E3E2C38F674A23427224 /* libuberarchive.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 25D5A93890B91F8C86BE2F0A /* libuberarchive.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
C427F6D58A977156565AE677 /* libcivetweb.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = B41054C75146CF46900EB674 /* libcivetweb.xcframework */; };
C7A64F27B1A83023C1212E1C /* libdracodec.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A57517D52C2BDCA859338D1 /* libdracodec.xcframework */; };
CB3A6143B788613B58BAB28A /* libgltfio_core.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B9B11A731D26A94397D4B9B /* libgltfio_core.xcframework */; };
CDD73BDF196F559F671AE616 /* libbasis_transcoder.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4EDA245B8F43311DD75A1F81 /* libbasis_transcoder.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D3AE8B47D9F8509C8A875E39 /* libgltfio_core.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5B9B11A731D26A94397D4B9B /* libgltfio_core.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D89F33EFEDE5814BFA8D9892 /* libimageio-lite.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 60330C4B6F21AA47B5524999 /* libimageio-lite.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D93CA0A2E8A487D040934121 /* libsmol-v.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C766C894259479FC62B7C8B4 /* libsmol-v.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
EFBDF01BC780CE2F40B83CE0 /* libbasis_transcoder.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EDA245B8F43311DD75A1F81 /* libbasis_transcoder.xcframework */; };
F14C52ECDB8C27794AD54DB0 /* libuberarchive.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 25D5A93890B91F8C86BE2F0A /* libuberarchive.xcframework */; };
F5B36F9395DFC29EA677B406 /* libktxreader.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF19593AAD6D35C6A9198C27 /* libktxreader.xcframework */; };
F682DAD214D9F8E2DD36A110 /* libviewer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 52712E0BD50CA883190B6C1D /* libviewer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
FC3919370067F7747B9C4C53 /* libfilabridge.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 020557AD44AE2D4F9D99EC33 /* libfilabridge.xcframework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
26182010104312BFB0BA3CE4 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
A6C04B690A802EBF133E23C4 /* libfilament.xcframework in Embed Frameworks */,
174327B08EFFA8255829FF49 /* libbackend.xcframework in Embed Frameworks */,
36E0764917CB1EE729C6B771 /* libfilaflat.xcframework in Embed Frameworks */,
A5D1D0F914C22A76A15EF93E /* libktxreader.xcframework in Embed Frameworks */,
7922299F8548416D6E8504AB /* libfilabridge.xcframework in Embed Frameworks */,
B54C62933C17714E465A76A5 /* libutils.xcframework in Embed Frameworks */,
D93CA0A2E8A487D040934121 /* libsmol-v.xcframework in Embed Frameworks */,
10A51B4DB601FEF9A6F1C0E3 /* libgeometry.xcframework in Embed Frameworks */,
AB07A9DD1861F9233ADC5A9F /* libibl.xcframework in Embed Frameworks */,
4C287DB6F93BD352927F003A /* libabseil.xcframework in Embed Frameworks */,
7FB58BE1AF39FD8710F6903E /* libzstd.xcframework in Embed Frameworks */,
D3AE8B47D9F8509C8A875E39 /* libgltfio_core.xcframework in Embed Frameworks */,
C0D8E3E2C38F674A23427224 /* libuberarchive.xcframework in Embed Frameworks */,
701EA9C2DFA93FC8D27E4831 /* libimage.xcframework in Embed Frameworks */,
AFAD827230601E60E38FA771 /* libstb.xcframework in Embed Frameworks */,
CDD73BDF196F559F671AE616 /* libbasis_transcoder.xcframework in Embed Frameworks */,
1E42FEC5AE043BDDCE3CB0A4 /* libcamutils.xcframework in Embed Frameworks */,
AE30134D543B24298D96BC03 /* libdracodec.xcframework in Embed Frameworks */,
AEDF1CEAF183E92426DA594A /* libmeshoptimizer.xcframework in Embed Frameworks */,
F682DAD214D9F8E2DD36A110 /* libviewer.xcframework in Embed Frameworks */,
5FA818045C43856C7FFED3DB /* libcivetweb.xcframework in Embed Frameworks */,
14D3627324AE91F7B9C74745 /* libuberzlib.xcframework in Embed Frameworks */,
D89F33EFEDE5814BFA8D9892 /* libimageio-lite.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
020557AD44AE2D4F9D99EC33 /* libfilabridge.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilabridge.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilabridge.xcframework"; sourceTree = "<group>"; };
03A535A718B2F64A70C5F231 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
1CFC9093A6EF27302A37326E /* libbackend.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libbackend.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbackend.xcframework"; sourceTree = "<group>"; };
1ED9318FEC158171D99C0857 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
1F16324F2F287CB27E1A84EB /* FILModelView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FILModelView.mm; sourceTree = "<group>"; };
1FF7EE9D5DD74F1A740C0D88 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
25D5A93890B91F8C86BE2F0A /* libuberarchive.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libuberarchive.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libuberarchive.xcframework"; sourceTree = "<group>"; };
2B534EACCD70A2DA1623F743 /* libcamutils.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libcamutils.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libcamutils.xcframework"; sourceTree = "<group>"; };
2B973C3E0FE0EEED37D41D32 /* FILModelView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FILModelView.h; sourceTree = "<group>"; };
3B5A2C1598614ED63098A783 /* FILViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FILViewController.mm; sourceTree = "<group>"; };
487A93E37417074697C5AEE1 /* libstb.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libstb.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libstb.xcframework"; sourceTree = "<group>"; };
4D2FB034B2AD911A82D44F4E /* libibl.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libibl.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libibl.xcframework"; sourceTree = "<group>"; };
4EDA245B8F43311DD75A1F81 /* libbasis_transcoder.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libbasis_transcoder.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbasis_transcoder.xcframework"; sourceTree = "<group>"; };
515259657B354C8F37272D16 /* libfilament.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilament.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilament.xcframework"; sourceTree = "<group>"; };
52712E0BD50CA883190B6C1D /* libviewer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libviewer.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libviewer.xcframework"; sourceTree = "<group>"; };
5271315876D6BC61346DFD97 /* default_env_skybox.ktx */ = {isa = PBXFileReference; path = default_env_skybox.ktx; sourceTree = "<group>"; };
5B9B11A731D26A94397D4B9B /* libgltfio_core.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libgltfio_core.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgltfio_core.xcframework"; sourceTree = "<group>"; };
60330C4B6F21AA47B5524999 /* libimageio-lite.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = "libimageio-lite.xcframework"; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimageio-lite.xcframework"; sourceTree = "<group>"; };
61B9468E1B7FED7F00513152 /* libgeometry.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libgeometry.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgeometry.xcframework"; sourceTree = "<group>"; };
6BFA0007FC472C65083E2452 /* libabseil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libabseil.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libabseil.xcframework"; sourceTree = "<group>"; };
6E6BB885F2B193E786CD9F14 /* FILViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FILViewController.h; sourceTree = "<group>"; };
75EFC385D49A53E005466F45 /* libzstd.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libzstd.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libzstd.xcframework"; sourceTree = "<group>"; };
7A57517D52C2BDCA859338D1 /* libdracodec.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libdracodec.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libdracodec.xcframework"; sourceTree = "<group>"; };
7F78E613984102280C822052 /* BusterDrone */ = {isa = PBXFileReference; lastKnownFileType = folder; name = BusterDrone; path = ../../../third_party/models/BusterDrone; sourceTree = SOURCE_ROOT; };
8F6D55F40189E2AD59138BFC /* libimage.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libimage.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimage.xcframework"; sourceTree = "<group>"; };
91CAACDECFDED76D0DBD8404 /* libutils.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libutils.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libutils.xcframework"; sourceTree = "<group>"; };
9ADEA6DE7305D0B8CCFFA53D /* gltf-viewer.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "gltf-viewer.app"; sourceTree = BUILT_PRODUCTS_DIR; };
A027015F6F283E92C379F0B1 /* default_env_ibl.ktx */ = {isa = PBXFileReference; path = default_env_ibl.ktx; sourceTree = "<group>"; };
A0A866F9B1B8D315E88D3D12 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
AF19593AAD6D35C6A9198C27 /* libktxreader.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libktxreader.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libktxreader.xcframework"; sourceTree = "<group>"; };
B41054C75146CF46900EB674 /* libcivetweb.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libcivetweb.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libcivetweb.xcframework"; sourceTree = "<group>"; };
B9C391BBD90EB54D27F8E4FD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
C766C894259479FC62B7C8B4 /* libsmol-v.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = "libsmol-v.xcframework"; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libsmol-v.xcframework"; sourceTree = "<group>"; };
C7ECAA95F4A55C69B948F806 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
CF656283054DABCE73A96F57 /* libfilaflat.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilaflat.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilaflat.xcframework"; sourceTree = "<group>"; };
DF545E3F8FD553E334F5D6D6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
F696C8553E8CC1A6416678CB /* libmeshoptimizer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libmeshoptimizer.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libmeshoptimizer.xcframework"; sourceTree = "<group>"; };
F7030A0C0BABAD05CDEAFDE8 /* libuberzlib.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libuberzlib.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libuberzlib.xcframework"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
E646271806112A138895CBE3 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
700D3E15E852F06C5D8AD28B /* libfilament.xcframework in Frameworks */,
872D52205E6A17C440CEFB8B /* libbackend.xcframework in Frameworks */,
8949CFB77397BDDBB71B155C /* libfilaflat.xcframework in Frameworks */,
F5B36F9395DFC29EA677B406 /* libktxreader.xcframework in Frameworks */,
FC3919370067F7747B9C4C53 /* libfilabridge.xcframework in Frameworks */,
847436C12F9597E494EDD811 /* libutils.xcframework in Frameworks */,
1404696E6E1E5E4D265773B8 /* libsmol-v.xcframework in Frameworks */,
0A6463A23D9E0C766EF24559 /* libgeometry.xcframework in Frameworks */,
10EB5B0EBD334A09BFC3B9DF /* libibl.xcframework in Frameworks */,
379B9C62A9AB782FDBC0E16C /* libabseil.xcframework in Frameworks */,
318A6749D6D4258385B67447 /* libzstd.xcframework in Frameworks */,
CB3A6143B788613B58BAB28A /* libgltfio_core.xcframework in Frameworks */,
F14C52ECDB8C27794AD54DB0 /* libuberarchive.xcframework in Frameworks */,
4033B9273D8B4C4631200EC1 /* libimage.xcframework in Frameworks */,
3CF14DE9557B15702D1CC5A9 /* libstb.xcframework in Frameworks */,
EFBDF01BC780CE2F40B83CE0 /* libbasis_transcoder.xcframework in Frameworks */,
698BA8E8638E7BD46D6BC337 /* libcamutils.xcframework in Frameworks */,
C7A64F27B1A83023C1212E1C /* libdracodec.xcframework in Frameworks */,
60EB0B4391BB0FB171A4481D /* libmeshoptimizer.xcframework in Frameworks */,
22EBD00922E4FBAE5F20AF3B /* libviewer.xcframework in Frameworks */,
C427F6D58A977156565AE677 /* libcivetweb.xcframework in Frameworks */,
902D317731C0347ED896B7D2 /* libuberzlib.xcframework in Frameworks */,
2B0B9C8428D402D919CAC47E /* libimageio-lite.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
2678CEA2FDBFE6D6DC1D4D71 /* gltf-viewer */ = {
isa = PBXGroup;
@@ -65,8 +203,8 @@
children = (
DF545E3F8FD553E334F5D6D6 /* Assets.xcassets */,
B9C391BBD90EB54D27F8E4FD /* Info.plist */,
21CA7296309BBFADBB0B00C3 /* LaunchScreen.storyboard */,
1FF7EE9D5DD74F1A740C0D88 /* main.m */,
21CA7296309BBFADBB0B00C3 /* LaunchScreen.storyboard */,
14BA4B8B6A697847DA9934D2 /* Main.storyboard */,
);
path = SupportFiles;
@@ -78,10 +216,41 @@
7F78E613984102280C822052 /* BusterDrone */,
E102A6C527928715EF7B0497 /* default_env */,
2678CEA2FDBFE6D6DC1D4D71 /* gltf-viewer */,
8826A1E62E0B87AA4A9982D5 /* Frameworks */,
3BFD6EBD6D97D6F1C40F1C90 /* Products */,
);
sourceTree = "<group>";
};
8826A1E62E0B87AA4A9982D5 /* Frameworks */ = {
isa = PBXGroup;
children = (
6BFA0007FC472C65083E2452 /* libabseil.xcframework */,
1CFC9093A6EF27302A37326E /* libbackend.xcframework */,
4EDA245B8F43311DD75A1F81 /* libbasis_transcoder.xcframework */,
2B534EACCD70A2DA1623F743 /* libcamutils.xcframework */,
B41054C75146CF46900EB674 /* libcivetweb.xcframework */,
7A57517D52C2BDCA859338D1 /* libdracodec.xcframework */,
020557AD44AE2D4F9D99EC33 /* libfilabridge.xcframework */,
CF656283054DABCE73A96F57 /* libfilaflat.xcframework */,
515259657B354C8F37272D16 /* libfilament.xcframework */,
61B9468E1B7FED7F00513152 /* libgeometry.xcframework */,
5B9B11A731D26A94397D4B9B /* libgltfio_core.xcframework */,
4D2FB034B2AD911A82D44F4E /* libibl.xcframework */,
8F6D55F40189E2AD59138BFC /* libimage.xcframework */,
60330C4B6F21AA47B5524999 /* libimageio-lite.xcframework */,
AF19593AAD6D35C6A9198C27 /* libktxreader.xcframework */,
F696C8553E8CC1A6416678CB /* libmeshoptimizer.xcframework */,
C766C894259479FC62B7C8B4 /* libsmol-v.xcframework */,
487A93E37417074697C5AEE1 /* libstb.xcframework */,
25D5A93890B91F8C86BE2F0A /* libuberarchive.xcframework */,
F7030A0C0BABAD05CDEAFDE8 /* libuberzlib.xcframework */,
91CAACDECFDED76D0DBD8404 /* libutils.xcframework */,
52712E0BD50CA883190B6C1D /* libviewer.xcframework */,
75EFC385D49A53E005466F45 /* libzstd.xcframework */,
);
name = Frameworks;
sourceTree = "<group>";
};
E102A6C527928715EF7B0497 /* default_env */ = {
isa = PBXGroup;
children = (
@@ -102,6 +271,8 @@
0B375996CE4EBC4A5B258C27 /* Build Resources */,
C8F38C978C83CD5335A21F72 /* Sources */,
7D3B1B99EEAFB6F53ECBAA5A /* Resources */,
E646271806112A138895CBE3 /* Frameworks */,
26182010104312BFB0BA3CE4 /* Embed Frameworks */,
);
buildRules = (
);
@@ -122,9 +293,10 @@
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
};
};
buildConfigurationList = 90327DE42AE5DF12C4BD2113 /* Build configuration list for PBXProject "gltf-viewer" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -133,7 +305,8 @@
);
mainGroup = 7DB4500696DB13904CDF40C4;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 56;
preferredProjectObjectVersion = 77;
productRefGroup = 3BFD6EBD6D97D6F1C40F1C90 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
@@ -167,7 +340,7 @@
inputFileListPaths = (
);
inputPaths = (
"$(SRCROOT)/../../../third_party/environments/lightroom_14b.hdr",
../../../third_party/environments/lightroom_14b.hdr,
);
name = "Build Resources";
outputFileListPaths = (
@@ -178,7 +351,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "#/usr/bin/env/bash\n\nset -e\n\n# Compile resources.\n\n# The gltf-viewer app requires two resources:\n# 1. The IBL image\n# 2. The skybox image\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\n\ncmgen_path=`find ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`\n\n# Ensure that the required tools are present in the out/ directory.\n# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.\n\nif [[ ! -e \"${cmgen_path}\" ]]; then\n echo \"No cmgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\n# cmgen consumes an HDR environment map and generates two mipmapped KTX files (IBL and skybox)\n\"${cmgen_path}\" \\\n --quiet \\\n --deploy=\"${PROJECT_DIR}/generated/default_env\" \\\n --format=ktx --size=256 --extract-blur=0.1 \\\n \"${PROJECT_DIR}/../../../third_party/environments/lightroom_14b.hdr\"\n";
shellScript = "#/usr/bin/env/bash\n\nset -e\n\n# Compile resources.\n\n# The gltf-viewer app requires two resources:\n# 1. The IBL image\n# 2. The skybox image\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\n\ncmgen_path=`find -L ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`\n\n# Ensure that the required tools are present in the out/ directory.\n# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.\n\nif [[ ! -e \"${cmgen_path}\" ]]; then\n echo \"No cmgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\n# cmgen consumes an HDR environment map and generates two mipmapped KTX files (IBL and skybox)\n\"${cmgen_path}\" \\\n --quiet \\\n --deploy=\"${PROJECT_DIR}/generated/default_env\" \\\n --format=ktx --size=256 --extract-blur=0.1 \\\n \"${PROJECT_DIR}/../../../third_party/environments/lightroom_14b.hdr\"\n";
};
/* End PBXShellScriptBuildPhase section */
@@ -222,7 +395,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -284,7 +457,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -339,7 +512,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -395,12 +568,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "gltf-viewer/SupportFiles/Info.plist";
@@ -409,36 +587,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lgltfio_core",
"-luberarchive",
"-limage",
"-lstb",
"-lbasis_transcoder",
"-lzstd",
"-lcamutils",
"-ldracodec",
"-lmeshoptimizer",
"-lviewer",
"-lcivetweb",
"-luberzlib",
"-limageio-lite",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.gltf-viewer";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -453,12 +601,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "gltf-viewer/SupportFiles/Info.plist";
@@ -467,36 +620,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lgltfio_core",
"-luberarchive",
"-limage",
"-lstb",
"-lbasis_transcoder",
"-lzstd",
"-lcamutils",
"-ldracodec",
"-lmeshoptimizer",
"-lviewer",
"-lcivetweb",
"-luberzlib",
"-limageio-lite",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.gltf-viewer";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -510,7 +633,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -573,12 +696,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "gltf-viewer/SupportFiles/Info.plist";
@@ -587,36 +715,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lgltfio_core",
"-luberarchive",
"-limage",
"-lstb",
"-lbasis_transcoder",
"-lzstd",
"-lcamutils",
"-ldracodec",
"-lmeshoptimizer",
"-lviewer",
"-lcivetweb",
"-luberzlib",
"-limageio-lite",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.gltf-viewer";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -631,12 +729,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "gltf-viewer/SupportFiles/Info.plist";
@@ -645,36 +748,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lgltfio_core",
"-luberarchive",
"-limage",
"-lstb",
"-lbasis_transcoder",
"-lzstd",
"-lcamutils",
"-ldracodec",
"-lmeshoptimizer",
"-lviewer",
"-lcivetweb",
"-luberzlib",
"-limageio-lite",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.gltf-viewer";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;

View File

@@ -17,16 +17,24 @@ targets:
optional: true
templates:
- FilamentApp
settings:
base:
OTHER_LDFLAGS: ["-lgltfio_core", "-luberarchive", "-limage", "-lstb", "-lbasis_transcoder",
"-lzstd", "-lcamutils", "-ldracodec", "-lmeshoptimizer", "-lviewer", "-lcivetweb",
"-luberzlib", "-limageio-lite"]
dependencies:
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgltfio_core.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libuberarchive.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimage.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libstb.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbasis_transcoder.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libcamutils.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libdracodec.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libmeshoptimizer.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libviewer.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libcivetweb.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libuberzlib.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimageio-lite.xcframework
preBuildScripts:
- path: build-resources.sh
name: Build Resources
inputFiles:
- $(SRCROOT)/../../../third_party/environments/lightroom_14b.hdr
- ../../../third_party/environments/lightroom_14b.hdr
outputFiles:
- $(SRCROOT)/generated/default_env/default_env_ibl.ktx
- $(SRCROOT)/generated/default_env/default_env_skybox.ktx

View File

@@ -14,10 +14,10 @@ set -e
HOST_TOOLS_PATH="${HOST_TOOLS_PATH:-../../../out/release/filament/bin}"
filamesh_path=`find ${HOST_TOOLS_PATH} -name filamesh -type f | head -n 1`
matc_path=`find ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`
resgen_path=`find ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`
cmgen_path=`find ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`
filamesh_path=`find -L ${HOST_TOOLS_PATH} -name filamesh -type f | head -n 1`
matc_path=`find -L ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`
resgen_path=`find -L ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`
cmgen_path=`find -L ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`
# Ensure that the required tools are present in the out/ directory.
# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.

View File

@@ -3,44 +3,113 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
01DEF0C8AAF14D275D5E731B /* libgeometry.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D3D6EFC9EE7349AC9F4F845A /* libgeometry.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
0704BBFECEFCE6618E4A67F7 /* libfilabridge.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 67D8E02D1AF661E4EF7CC2CD /* libfilabridge.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
072B1333A85F99F6FBA10846 /* libzstd.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E238CF2D5E37556427C00675 /* libzstd.xcframework */; };
091D995885B1312DA4322F31 /* libsmol-v.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0DE88103BBBE542FC5D46B1 /* libsmol-v.xcframework */; };
11DE997161B2D3272247EE72 /* libbackend.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9E445414106E7103104FC16C /* libbackend.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1EFC9E499E3733CF230DAECB /* libabseil.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DB899E40418A88883E6ED2E4 /* libabseil.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
2956D56161744254E2FFD353 /* libgeometry.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D6EFC9EE7349AC9F4F845A /* libgeometry.xcframework */; };
2B4ED44D08F36953D3D111CF /* libfilaflat.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C9D99ABAB340140BF94D57B3 /* libfilaflat.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4FAC85567A730FCCB7B3B6EC /* FilamentApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF21F54926F34F027F4FCEA4 /* FilamentApp.cpp */; };
50F0F62A949F9DB17E1E102D /* libmeshoptimizer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CA1720B9D4D55AB6B8513B0 /* libmeshoptimizer.xcframework */; };
5432120E716355C4A519ABC6 /* FilamentArViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA47852B486CBD549FA68729 /* FilamentArViewController.mm */; };
5FEA2EC1B8A6FECCACA5FAFA /* libutils.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 644F36437FC03CCC25AC6EFC /* libutils.xcframework */; };
66754FE8EF26B5335C0CC9FF /* FullScreenTriangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05D9AFA7CFC6498FE2A8C6A5 /* FullScreenTriangle.cpp */; };
6D2DAB291A29345E5179ECD8 /* libfilament.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 87261693EC970989615C5AE7 /* libfilament.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6DF5D6B097AC3C124C576DD1 /* libfilabridge.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67D8E02D1AF661E4EF7CC2CD /* libfilabridge.xcframework */; };
819CEF9004BAA1BD59EB3ADE /* libktxreader.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8E5A38F197D487277FDED20 /* libktxreader.xcframework */; };
84AC34B44E1AEE96BA8C53B0 /* libimage.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 586F9BE85A436EBA56181848 /* libimage.xcframework */; };
85C9CA885D3E9BA87AEA24E8 /* libsmol-v.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D0DE88103BBBE542FC5D46B1 /* libsmol-v.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
89E16D259F951AA787C3B265 /* libutils.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 644F36437FC03CCC25AC6EFC /* libutils.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
9718E9B12B1D353DF9E66311 /* libibl.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6422176EDC22262D20C51A8 /* libibl.xcframework */; };
99BD70EFF08A1419FE539A44 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE684A73135705C4EDAA7C53 /* Assets.xcassets */; };
ACF87F0F3989EF583E90E499 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B92BD0FA8E6F9CFEAE1707 /* main.m */; };
AE4035E76423745AFC8CEB58 /* libfilameshio.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 16ED3BF9A0D7194CECB86D55 /* libfilameshio.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
AEEFE325E8BDB00E30FDEC93 /* Resources.S in Sources */ = {isa = PBXBuildFile; fileRef = DD0010D60097DEAA82DAA089 /* Resources.S */; };
B28ED2F81785F13E0B9A3607 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EC652AC3D2C91759215320C3 /* AppDelegate.m */; };
B48D41A39CF5F4FDE5CF6770 /* libfilameshio.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16ED3BF9A0D7194CECB86D55 /* libfilameshio.xcframework */; };
B604AB5F246840D2CCF4762B /* libfilaflat.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D99ABAB340140BF94D57B3 /* libfilaflat.xcframework */; };
B8934FC46557424E705A2154 /* ARKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33B2CBA1A0F654632B39A45D /* ARKit.framework */; };
BC6AAB72CD468EF04F684014 /* libabseil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB899E40418A88883E6ED2E4 /* libabseil.xcframework */; };
CB7C1B8F335B873B77D15934 /* libmeshoptimizer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4CA1720B9D4D55AB6B8513B0 /* libmeshoptimizer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CBBBF68C2F58FF0F4FA81008 /* libimage.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 586F9BE85A436EBA56181848 /* libimage.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CE6AB7B76D5EB580EFD90897 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AFCB91D87494B7FC879A7A5E /* Main.storyboard */; };
CFCD1B57C3CDFA2AC3525EF6 /* libfilament.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87261693EC970989615C5AE7 /* libfilament.xcframework */; };
D56834764BC4D127736878DF /* libbackend.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E445414106E7103104FC16C /* libbackend.xcframework */; };
DD6C337BAEC527FA0F5DB4A3 /* libibl.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D6422176EDC22262D20C51A8 /* libibl.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DEF78081F52F6A776242A599 /* FilamentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53D025A0625708CC50AEA0DB /* FilamentView.m */; };
E4C06B048BFA075CD9FB73AD /* libktxreader.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A8E5A38F197D487277FDED20 /* libktxreader.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E92B00016D52070448DA66F6 /* libzstd.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E238CF2D5E37556427C00675 /* libzstd.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
F933D6701B0A0E90381E8030 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C88A8BDFC06D144D80EC052B /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
AA70CE1AA47836D72F588764 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
6D2DAB291A29345E5179ECD8 /* libfilament.xcframework in Embed Frameworks */,
11DE997161B2D3272247EE72 /* libbackend.xcframework in Embed Frameworks */,
2B4ED44D08F36953D3D111CF /* libfilaflat.xcframework in Embed Frameworks */,
E4C06B048BFA075CD9FB73AD /* libktxreader.xcframework in Embed Frameworks */,
0704BBFECEFCE6618E4A67F7 /* libfilabridge.xcframework in Embed Frameworks */,
89E16D259F951AA787C3B265 /* libutils.xcframework in Embed Frameworks */,
85C9CA885D3E9BA87AEA24E8 /* libsmol-v.xcframework in Embed Frameworks */,
01DEF0C8AAF14D275D5E731B /* libgeometry.xcframework in Embed Frameworks */,
DD6C337BAEC527FA0F5DB4A3 /* libibl.xcframework in Embed Frameworks */,
1EFC9E499E3733CF230DAECB /* libabseil.xcframework in Embed Frameworks */,
E92B00016D52070448DA66F6 /* libzstd.xcframework in Embed Frameworks */,
AE4035E76423745AFC8CEB58 /* libfilameshio.xcframework in Embed Frameworks */,
CB7C1B8F335B873B77D15934 /* libmeshoptimizer.xcframework in Embed Frameworks */,
CBBBF68C2F58FF0F4FA81008 /* libimage.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
05D9AFA7CFC6498FE2A8C6A5 /* FullScreenTriangle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FullScreenTriangle.cpp; sourceTree = "<group>"; };
16ED3BF9A0D7194CECB86D55 /* libfilameshio.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilameshio.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilameshio.xcframework"; sourceTree = "<group>"; };
2AFEFBF6FE91628599F70817 /* clear_coat.mat */ = {isa = PBXFileReference; path = clear_coat.mat; sourceTree = "<group>"; };
2AFF66F1228C5F1079042FE2 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
33B2CBA1A0F654632B39A45D /* ARKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ARKit.framework; path = System/Library/Frameworks/ARKit.framework; sourceTree = SDKROOT; };
4CA1720B9D4D55AB6B8513B0 /* libmeshoptimizer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libmeshoptimizer.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libmeshoptimizer.xcframework"; sourceTree = "<group>"; };
4F8E6B508F8C5DE284DA2E34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
53D025A0625708CC50AEA0DB /* FilamentView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FilamentView.m; sourceTree = "<group>"; };
586F9BE85A436EBA56181848 /* libimage.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libimage.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimage.xcframework"; sourceTree = "<group>"; };
5B5D3E611DCDD9CD2C13B825 /* FilamentApp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentApp.h; sourceTree = "<group>"; };
644F36437FC03CCC25AC6EFC /* libutils.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libutils.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libutils.xcframework"; sourceTree = "<group>"; };
67D8E02D1AF661E4EF7CC2CD /* libfilabridge.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilabridge.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilabridge.xcframework"; sourceTree = "<group>"; };
6938BE21CFB8BEB2422BD490 /* FilamentArViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentArViewController.h; sourceTree = "<group>"; };
7C5E322BA97EEB4FB7EC030F /* camera_feed.mat */ = {isa = PBXFileReference; path = camera_feed.mat; sourceTree = "<group>"; };
87261693EC970989615C5AE7 /* libfilament.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilament.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilament.xcframework"; sourceTree = "<group>"; };
8832D93E678057F9940A226D /* shadow_plane.mat */ = {isa = PBXFileReference; path = shadow_plane.mat; sourceTree = "<group>"; };
973EB840E804440B2AA0F93A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
9E445414106E7103104FC16C /* libbackend.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libbackend.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbackend.xcframework"; sourceTree = "<group>"; };
A85B9D53F72DEE0374F8EBDF /* FullScreenTriangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FullScreenTriangle.h; sourceTree = "<group>"; };
A8E5A38F197D487277FDED20 /* libktxreader.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libktxreader.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libktxreader.xcframework"; sourceTree = "<group>"; };
AA47852B486CBD549FA68729 /* FilamentArViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FilamentArViewController.mm; sourceTree = "<group>"; };
AE684A73135705C4EDAA7C53 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
AF451D7D0FAAD069F916F51C /* MathHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MathHelpers.h; sourceTree = "<group>"; };
B6B92BD0FA8E6F9CFEAE1707 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
C9D99ABAB340140BF94D57B3 /* libfilaflat.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilaflat.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilaflat.xcframework"; sourceTree = "<group>"; };
CF21F54926F34F027F4FCEA4 /* FilamentApp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FilamentApp.cpp; sourceTree = "<group>"; };
D0800F9FE0C390D084082637 /* FilamentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentView.h; sourceTree = "<group>"; };
D0DE88103BBBE542FC5D46B1 /* libsmol-v.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = "libsmol-v.xcframework"; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libsmol-v.xcframework"; sourceTree = "<group>"; };
D3D6EFC9EE7349AC9F4F845A /* libgeometry.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libgeometry.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgeometry.xcframework"; sourceTree = "<group>"; };
D6422176EDC22262D20C51A8 /* libibl.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libibl.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libibl.xcframework"; sourceTree = "<group>"; };
D7BA0AA38645722DCFA3490D /* hello-ar.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "hello-ar.app"; sourceTree = BUILT_PRODUCTS_DIR; };
DB899E40418A88883E6ED2E4 /* libabseil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libabseil.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libabseil.xcframework"; sourceTree = "<group>"; };
DD0010D60097DEAA82DAA089 /* Resources.S */ = {isa = PBXFileReference; path = Resources.S; sourceTree = "<group>"; };
E238CF2D5E37556427C00675 /* libzstd.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libzstd.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libzstd.xcframework"; sourceTree = "<group>"; };
EC652AC3D2C91759215320C3 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
FCF16FE1B4146DE87F2B76F3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -50,7 +119,21 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CFCD1B57C3CDFA2AC3525EF6 /* libfilament.xcframework in Frameworks */,
D56834764BC4D127736878DF /* libbackend.xcframework in Frameworks */,
B604AB5F246840D2CCF4762B /* libfilaflat.xcframework in Frameworks */,
819CEF9004BAA1BD59EB3ADE /* libktxreader.xcframework in Frameworks */,
6DF5D6B097AC3C124C576DD1 /* libfilabridge.xcframework in Frameworks */,
5FEA2EC1B8A6FECCACA5FAFA /* libutils.xcframework in Frameworks */,
091D995885B1312DA4322F31 /* libsmol-v.xcframework in Frameworks */,
2956D56161744254E2FFD353 /* libgeometry.xcframework in Frameworks */,
9718E9B12B1D353DF9E66311 /* libibl.xcframework in Frameworks */,
BC6AAB72CD468EF04F684014 /* libabseil.xcframework in Frameworks */,
072B1333A85F99F6FBA10846 /* libzstd.xcframework in Frameworks */,
B8934FC46557424E705A2154 /* ARKit.framework in Frameworks */,
B48D41A39CF5F4FDE5CF6770 /* libfilameshio.xcframework in Frameworks */,
50F0F62A949F9DB17E1E102D /* libmeshoptimizer.xcframework in Frameworks */,
84AC34B44E1AEE96BA8C53B0 /* libimage.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -92,6 +175,20 @@
isa = PBXGroup;
children = (
33B2CBA1A0F654632B39A45D /* ARKit.framework */,
DB899E40418A88883E6ED2E4 /* libabseil.xcframework */,
9E445414106E7103104FC16C /* libbackend.xcframework */,
67D8E02D1AF661E4EF7CC2CD /* libfilabridge.xcframework */,
C9D99ABAB340140BF94D57B3 /* libfilaflat.xcframework */,
87261693EC970989615C5AE7 /* libfilament.xcframework */,
16ED3BF9A0D7194CECB86D55 /* libfilameshio.xcframework */,
D3D6EFC9EE7349AC9F4F845A /* libgeometry.xcframework */,
D6422176EDC22262D20C51A8 /* libibl.xcframework */,
586F9BE85A436EBA56181848 /* libimage.xcframework */,
A8E5A38F197D487277FDED20 /* libktxreader.xcframework */,
4CA1720B9D4D55AB6B8513B0 /* libmeshoptimizer.xcframework */,
D0DE88103BBBE542FC5D46B1 /* libsmol-v.xcframework */,
644F36437FC03CCC25AC6EFC /* libutils.xcframework */,
E238CF2D5E37556427C00675 /* libzstd.xcframework */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -101,10 +198,10 @@
children = (
AE684A73135705C4EDAA7C53 /* Assets.xcassets */,
FCF16FE1B4146DE87F2B76F3 /* Info.plist */,
C88A8BDFC06D144D80EC052B /* LaunchScreen.storyboard */,
B6B92BD0FA8E6F9CFEAE1707 /* main.m */,
AFCB91D87494B7FC879A7A5E /* Main.storyboard */,
DD0010D60097DEAA82DAA089 /* Resources.S */,
C88A8BDFC06D144D80EC052B /* LaunchScreen.storyboard */,
AFCB91D87494B7FC879A7A5E /* Main.storyboard */,
);
path = SupportFiles;
sourceTree = "<group>";
@@ -144,6 +241,7 @@
A5598850636B6208AE64E95E /* Sources */,
77189A28CB88A4753728F549 /* Resources */,
FA9CC5F2D3E84FB632557A2E /* Frameworks */,
AA70CE1AA47836D72F588764 /* Embed Frameworks */,
);
buildRules = (
);
@@ -164,9 +262,10 @@
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
};
};
buildConfigurationList = 281E763643B2F1F3B903864B /* Build configuration list for PBXProject "hello-ar" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -175,7 +274,8 @@
);
mainGroup = 316A56C698744769908E6F88;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 54;
preferredProjectObjectVersion = 77;
productRefGroup = E2EC9706948EC07E74121EF1 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
@@ -214,7 +314,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "#/usr/bin/env/bash\n\nset -e\n\n# Compile resources.\n\n# The hello-ar app requires four resources:\n# 1. The cube mesh\n# 2. The Filament material definition\n# 3. The Filament camera feed material definition\n# 4. The Filament shadow plane material definition\n# 5. The IBL image\n# These will be compiled into the final binary via the resgen tool.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\n\nfilamesh_path=`find ${HOST_TOOLS_PATH} -name filamesh -type f | head -n 1`\nmatc_path=`find ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`\nresgen_path=`find ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`\ncmgen_path=`find ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`\n\n# Ensure that the required tools are present in the out/ directory.\n# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.\n\nif [[ ! -e \"${filamesh_path}\" ]]; then\n echo \"No filamesh binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${matc_path}\" ]]; then\n echo \"No matc binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${resgen_path}\" ]]; then\n echo \"No resgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${cmgen_path}\" ]]; then\n echo \"No cmgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\n# The filamesh tool converts the .obj file into a Filament-specific filamesh file that has been\n# optimized for loading into Filament.\nmkdir -p \"${PROJECT_DIR}/generated/\"\n\"${filamesh_path}\" \\\n \"${PROJECT_DIR}/../../../assets/models/rounded_cube/rounded_cube.obj\" \\\n \"${PROJECT_DIR}/generated/cube.filamesh\"\n\n# The matc tool compiles the clear_coat.mat, shadow_plane.mat, and camera_feed.mat materials into\n# Filament material BLOBs.\n\n\"${matc_path}\" \\\n --api all \\\n --platform mobile \\\n -o \"${PROJECT_DIR}/generated/clear_coat.filamat\" \\\n \"${PROJECT_DIR}/Materials/clear_coat.mat\"\n\n\"${matc_path}\" \\\n --api all \\\n --platform mobile \\\n -o \"${PROJECT_DIR}/generated/shadow_plane.filamat\" \\\n \"${PROJECT_DIR}/Materials/shadow_plane.mat\"\n\n\"${matc_path}\" \\\n --api all \\\n --platform mobile \\\n -o \"${PROJECT_DIR}/generated/camera_feed.filamat\" \\\n \"${PROJECT_DIR}/Materials/camera_feed.mat\"\n\n# cmgen consumes an HDR environment map and generates two mipmapped KTX files (IBL and skybox)\n\"${cmgen_path}\" \\\n --quiet \\\n --deploy=\"${PROJECT_DIR}/generated/venetian_crossroads_2k\" \\\n --format=ktx --size=256 \\\n \"${PROJECT_DIR}/../../../third_party/environments/venetian_crossroads_2k.hdr\"\n\n# The resgen tool generates an assembly file, resources.apple.S that gets compiled and linked\n# into the final binary. It contains all the resources consumed by the app.\n\"${resgen_path}\" \\\n --deploy=\"${PROJECT_DIR}/generated\" \\\n \"${PROJECT_DIR}/generated/cube.filamesh\" \\\n \"${PROJECT_DIR}/generated/clear_coat.filamat\" \\\n \"${PROJECT_DIR}/generated/shadow_plane.filamat\" \\\n \"${PROJECT_DIR}/generated/camera_feed.filamat\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_ibl.ktx\"\n\n# FilamentApp.cpp and Resources.S include files generated by resgen.\n# Touch them to force Xcode to recompile.\ntouch \"${PROJECT_DIR}/hello-ar/FilamentArView/FullScreenTriangle.cpp\"\ntouch \"${PROJECT_DIR}/hello-ar/FilamentArView/FilamentApp.cpp\"\ntouch \"${PROJECT_DIR}/hello-ar/SupportFiles/Resources.S\"\n";
shellScript = "#/usr/bin/env/bash\n\nset -e\n\n# Compile resources.\n\n# The hello-ar app requires four resources:\n# 1. The cube mesh\n# 2. The Filament material definition\n# 3. The Filament camera feed material definition\n# 4. The Filament shadow plane material definition\n# 5. The IBL image\n# These will be compiled into the final binary via the resgen tool.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\n\nfilamesh_path=`find -L ${HOST_TOOLS_PATH} -name filamesh -type f | head -n 1`\nmatc_path=`find -L ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`\nresgen_path=`find -L ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`\ncmgen_path=`find -L ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`\n\n# Ensure that the required tools are present in the out/ directory.\n# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.\n\nif [[ ! -e \"${filamesh_path}\" ]]; then\n echo \"No filamesh binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${matc_path}\" ]]; then\n echo \"No matc binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${resgen_path}\" ]]; then\n echo \"No resgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${cmgen_path}\" ]]; then\n echo \"No cmgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\n# The filamesh tool converts the .obj file into a Filament-specific filamesh file that has been\n# optimized for loading into Filament.\nmkdir -p \"${PROJECT_DIR}/generated/\"\n\"${filamesh_path}\" \\\n \"${PROJECT_DIR}/../../../assets/models/rounded_cube/rounded_cube.obj\" \\\n \"${PROJECT_DIR}/generated/cube.filamesh\"\n\n# The matc tool compiles the clear_coat.mat, shadow_plane.mat, and camera_feed.mat materials into\n# Filament material BLOBs.\n\n\"${matc_path}\" \\\n --api all \\\n --platform mobile \\\n -o \"${PROJECT_DIR}/generated/clear_coat.filamat\" \\\n \"${PROJECT_DIR}/Materials/clear_coat.mat\"\n\n\"${matc_path}\" \\\n --api all \\\n --platform mobile \\\n -o \"${PROJECT_DIR}/generated/shadow_plane.filamat\" \\\n \"${PROJECT_DIR}/Materials/shadow_plane.mat\"\n\n\"${matc_path}\" \\\n --api all \\\n --platform mobile \\\n -o \"${PROJECT_DIR}/generated/camera_feed.filamat\" \\\n \"${PROJECT_DIR}/Materials/camera_feed.mat\"\n\n# cmgen consumes an HDR environment map and generates two mipmapped KTX files (IBL and skybox)\n\"${cmgen_path}\" \\\n --quiet \\\n --deploy=\"${PROJECT_DIR}/generated/venetian_crossroads_2k\" \\\n --format=ktx --size=256 \\\n \"${PROJECT_DIR}/../../../third_party/environments/venetian_crossroads_2k.hdr\"\n\n# The resgen tool generates an assembly file, resources.apple.S that gets compiled and linked\n# into the final binary. It contains all the resources consumed by the app.\n\"${resgen_path}\" \\\n --deploy=\"${PROJECT_DIR}/generated\" \\\n \"${PROJECT_DIR}/generated/cube.filamesh\" \\\n \"${PROJECT_DIR}/generated/clear_coat.filamat\" \\\n \"${PROJECT_DIR}/generated/shadow_plane.filamat\" \\\n \"${PROJECT_DIR}/generated/camera_feed.filamat\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_ibl.ktx\"\n\n# FilamentApp.cpp and Resources.S include files generated by resgen.\n# Touch them to force Xcode to recompile.\ntouch \"${PROJECT_DIR}/hello-ar/FilamentArView/FullScreenTriangle.cpp\"\ntouch \"${PROJECT_DIR}/hello-ar/FilamentArView/FilamentApp.cpp\"\ntouch \"${PROJECT_DIR}/hello-ar/SupportFiles/Resources.S\"\n";
};
/* End PBXShellScriptBuildPhase section */
@@ -262,12 +362,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-ar/SupportFiles/Info.plist";
@@ -276,26 +381,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilameshio",
"-lmeshoptimizer",
"-limage",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-ar";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -310,12 +395,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-ar/SupportFiles/Info.plist";
@@ -324,26 +414,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilameshio",
"-lmeshoptimizer",
"-limage",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-ar";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -357,7 +427,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -420,12 +490,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-ar/SupportFiles/Info.plist";
@@ -434,26 +509,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilameshio",
"-lmeshoptimizer",
"-limage",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-ar";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -467,7 +522,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -529,7 +584,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -585,12 +640,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-ar/SupportFiles/Info.plist";
@@ -599,26 +659,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilameshio",
"-lmeshoptimizer",
"-limage",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-ar";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -632,7 +672,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;

View File

@@ -8,9 +8,9 @@ targets:
- FilamentApp
dependencies:
- sdk: ARKit.framework
settings:
base:
OTHER_LDFLAGS: ["-lfilameshio", "-lmeshoptimizer", "-limage"]
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilameshio.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libmeshoptimizer.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimage.xcframework
preBuildScripts:
- path: build-resources.sh
name: Build Resources

View File

@@ -11,8 +11,8 @@ set -e
HOST_TOOLS_PATH="${HOST_TOOLS_PATH:-../../../out/release/filament/bin}"
resgen_path=`find ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`
cmgen_path=`find ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`
resgen_path=`find -L ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`
cmgen_path=`find -L ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`
# Ensure that the required tools are present in the out/ directory.
# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.

View File

@@ -3,44 +3,162 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
0023225ED0F6344A42FDF021 /* libbasis_transcoder.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 18129A9C5FC10A170625F0DF /* libbasis_transcoder.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
032FA0177E5B258A6EFC10FB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3F8FDA2F8F0B257A1364E302 /* Assets.xcassets */; };
0C4676263C3C6F429DE8E1E7 /* libabseil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ABE8F592F84AD947269C79F /* libabseil.xcframework */; };
12FA790CDCF4048A3B3D816B /* libuberzlib.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AE9C8F3B16EEC02C00FC462 /* libuberzlib.xcframework */; };
153DF9C7D86AB76EDBEB3AC4 /* libktxreader.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6E2AD103B6A164CA10779A2C /* libktxreader.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1A4585E6153963D89D838344 /* libutils.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51E07CB7D191EE70C8393733 /* libutils.xcframework */; };
2101923AA53D391D871C0BCF /* libutils.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 51E07CB7D191EE70C8393733 /* libutils.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
272268CA1B14AE98DFACDD33 /* libstb.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A40EBFD944F94426FBCEDB82 /* libstb.xcframework */; };
3153490EB02DE914E6C7B16B /* libimage.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 481A41C1DE19D71E21CA17C0 /* libimage.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3370EF2CC0CD0D08F69CC581 /* libmeshoptimizer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9B29DDB1D323E259E5EDBE4 /* libmeshoptimizer.xcframework */; };
357279930C4271E22C329E27 /* libbackend.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4A955859FB96A0B4AA15C36D /* libbackend.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
372DC481D060CF95FDFA9DD7 /* libzstd.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 190D6FD76C902A52E8C71DF7 /* libzstd.xcframework */; };
3DA39FBD408D7B6F50822939 /* FilamentViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4544E7FD3EC9BC5C5E4487B7 /* FilamentViewController.mm */; };
415CBC815DE6A370EE6DD502 /* libfilament.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B9CD116AEF8BD291A123F2A /* libfilament.xcframework */; };
41E74598143C17C5C2037D67 /* libfilament.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4B9CD116AEF8BD291A123F2A /* libfilament.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4474017EFFC53567F2369DB8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FEA341C442B210CFD35E4663 /* LaunchScreen.storyboard */; };
4F555B8114838AF666F39CD1 /* App.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF77884F45974610F79F92F /* App.cpp */; };
53C4CFCFC54929CEDE416EC5 /* libstb.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A40EBFD944F94426FBCEDB82 /* libstb.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6057DA6A016889B23EE6410F /* libgeometry.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6842BC9C9A130CE658B642CB /* libgeometry.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6535EDC4F6D3BBCA745C453F /* libsmol-v.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E33DC0C95B9B0260504E357 /* libsmol-v.xcframework */; };
6D84A7C1AA03C171F01A044D /* libgltfio_core.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 06B530A8294DD5CBAD41DB51 /* libgltfio_core.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6DFCBA84E571F0C5B1683640 /* libbackend.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A955859FB96A0B4AA15C36D /* libbackend.xcframework */; };
7BFDB88EAFC7B8CE0B571A35 /* libdracodec.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CC1A326E7C2E54A8F3227045 /* libdracodec.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
7FD7B7E760C10ACDA64F0890 /* libuberarchive.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BEC8295652B68CF0854F861 /* libuberarchive.xcframework */; };
8309D337274D6920F81FDFED /* libfilaflat.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8947E0E5B74BA8785FE2158D /* libfilaflat.xcframework */; };
872251D9846351641FFE1EDB /* libibl.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83035F42A448BDA20C5EC0DB /* libibl.xcframework */; };
872990CD06765549CBE6EB85 /* libbasis_transcoder.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18129A9C5FC10A170625F0DF /* libbasis_transcoder.xcframework */; };
899A92E0F0148A9BAE3E7B1A /* Resources.S in Sources */ = {isa = PBXBuildFile; fileRef = B1B470F3CDEE0D4A60B11C72 /* Resources.S */; };
8D82323C866A8429A29903A8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F534BD31E8FB84B3925B0402 /* AppDelegate.m */; };
916F7A5DE5031D7523FB1FA1 /* libsmol-v.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5E33DC0C95B9B0260504E357 /* libsmol-v.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A38DF6C8EA6292F62E9D5F68 /* libimage.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 481A41C1DE19D71E21CA17C0 /* libimage.xcframework */; };
A8004A31F0068178EF0557DA /* libgeometry.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6842BC9C9A130CE658B642CB /* libgeometry.xcframework */; };
ABF42D2B7081EB39CEC1B43B /* libgltfio_core.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06B530A8294DD5CBAD41DB51 /* libgltfio_core.xcframework */; };
ADE1F0D02BA65C77C6B109AB /* FilamentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84D7269DBC8441140F7F8905 /* FilamentView.m */; };
B69E7A38F3A58F7DB4002219 /* libdracodec.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC1A326E7C2E54A8F3227045 /* libdracodec.xcframework */; };
B766A23145C9D58BB09CB068 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 47B161015D23D464253ABAF1 /* main.m */; };
B9E63A561CEE77D5D0D29A0E /* libuberarchive.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0BEC8295652B68CF0854F861 /* libuberarchive.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BFD25191C0BF9804FF3C1B19 /* DamagedHelmet.glb in Resources */ = {isa = PBXBuildFile; fileRef = B299B19218E1CF7B2D13ABB8 /* DamagedHelmet.glb */; };
C609C4B4BD4082A399517524 /* libfilabridge.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9555C4935AFD98E079719C07 /* libfilabridge.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CE0DC84646DB51D505E521E9 /* libuberzlib.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8AE9C8F3B16EEC02C00FC462 /* libuberzlib.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CFADC7EF16411309B0CF08D8 /* libzstd.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 190D6FD76C902A52E8C71DF7 /* libzstd.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D1174ECF9CDDC1EA7DE95840 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 59032D070D1641AA60F6CC2D /* Main.storyboard */; };
DB90B94FBBD5F819ED9D1685 /* CameraManipulator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6238AED51F5F46CCFBE6892D /* CameraManipulator.cpp */; };
DC96354994E844E3730CBEB7 /* libibl.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 83035F42A448BDA20C5EC0DB /* libibl.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E9C1BC8EC1312B0CCEF66A2F /* libabseil.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2ABE8F592F84AD947269C79F /* libabseil.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
F4022ECAAC6BEA543556B428 /* libktxreader.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E2AD103B6A164CA10779A2C /* libktxreader.xcframework */; };
FB7DB6BC4ADAEA3F02731E73 /* libmeshoptimizer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F9B29DDB1D323E259E5EDBE4 /* libmeshoptimizer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
FBC7DAEE0262EB58EC6BADC9 /* libfilaflat.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8947E0E5B74BA8785FE2158D /* libfilaflat.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
FD9CF0E054C901D1D3E7D6B2 /* libfilabridge.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9555C4935AFD98E079719C07 /* libfilabridge.xcframework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
D5C4D57398FACAA29F2C2549 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
41E74598143C17C5C2037D67 /* libfilament.xcframework in Embed Frameworks */,
357279930C4271E22C329E27 /* libbackend.xcframework in Embed Frameworks */,
FBC7DAEE0262EB58EC6BADC9 /* libfilaflat.xcframework in Embed Frameworks */,
153DF9C7D86AB76EDBEB3AC4 /* libktxreader.xcframework in Embed Frameworks */,
C609C4B4BD4082A399517524 /* libfilabridge.xcframework in Embed Frameworks */,
2101923AA53D391D871C0BCF /* libutils.xcframework in Embed Frameworks */,
916F7A5DE5031D7523FB1FA1 /* libsmol-v.xcframework in Embed Frameworks */,
6057DA6A016889B23EE6410F /* libgeometry.xcframework in Embed Frameworks */,
DC96354994E844E3730CBEB7 /* libibl.xcframework in Embed Frameworks */,
E9C1BC8EC1312B0CCEF66A2F /* libabseil.xcframework in Embed Frameworks */,
CFADC7EF16411309B0CF08D8 /* libzstd.xcframework in Embed Frameworks */,
6D84A7C1AA03C171F01A044D /* libgltfio_core.xcframework in Embed Frameworks */,
B9E63A561CEE77D5D0D29A0E /* libuberarchive.xcframework in Embed Frameworks */,
3153490EB02DE914E6C7B16B /* libimage.xcframework in Embed Frameworks */,
7BFDB88EAFC7B8CE0B571A35 /* libdracodec.xcframework in Embed Frameworks */,
FB7DB6BC4ADAEA3F02731E73 /* libmeshoptimizer.xcframework in Embed Frameworks */,
0023225ED0F6344A42FDF021 /* libbasis_transcoder.xcframework in Embed Frameworks */,
53C4CFCFC54929CEDE416EC5 /* libstb.xcframework in Embed Frameworks */,
CE0DC84646DB51D505E521E9 /* libuberzlib.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
06B530A8294DD5CBAD41DB51 /* libgltfio_core.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libgltfio_core.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgltfio_core.xcframework"; sourceTree = "<group>"; };
07D735319AF2DC69DB8981FE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
0AF0F63216DE40C526ABFABF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
0BEC8295652B68CF0854F861 /* libuberarchive.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libuberarchive.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libuberarchive.xcframework"; sourceTree = "<group>"; };
18129A9C5FC10A170625F0DF /* libbasis_transcoder.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libbasis_transcoder.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbasis_transcoder.xcframework"; sourceTree = "<group>"; };
190D6FD76C902A52E8C71DF7 /* libzstd.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libzstd.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libzstd.xcframework"; sourceTree = "<group>"; };
2ABE8F592F84AD947269C79F /* libabseil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libabseil.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libabseil.xcframework"; sourceTree = "<group>"; };
31A71C869E24044EA5F802D5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
3259514676E5E799670D0F86 /* CameraManipulator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CameraManipulator.h; sourceTree = "<group>"; };
3AF77884F45974610F79F92F /* App.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = App.cpp; sourceTree = "<group>"; };
3F8FDA2F8F0B257A1364E302 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
4544E7FD3EC9BC5C5E4487B7 /* FilamentViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FilamentViewController.mm; sourceTree = "<group>"; };
47B161015D23D464253ABAF1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
481A41C1DE19D71E21CA17C0 /* libimage.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libimage.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimage.xcframework"; sourceTree = "<group>"; };
4A955859FB96A0B4AA15C36D /* libbackend.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libbackend.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbackend.xcframework"; sourceTree = "<group>"; };
4B9CD116AEF8BD291A123F2A /* libfilament.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilament.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilament.xcframework"; sourceTree = "<group>"; };
51E07CB7D191EE70C8393733 /* libutils.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libutils.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libutils.xcframework"; sourceTree = "<group>"; };
5E33DC0C95B9B0260504E357 /* libsmol-v.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = "libsmol-v.xcframework"; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libsmol-v.xcframework"; sourceTree = "<group>"; };
6238AED51F5F46CCFBE6892D /* CameraManipulator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CameraManipulator.cpp; sourceTree = "<group>"; };
6842BC9C9A130CE658B642CB /* libgeometry.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libgeometry.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgeometry.xcframework"; sourceTree = "<group>"; };
6E2AD103B6A164CA10779A2C /* libktxreader.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libktxreader.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libktxreader.xcframework"; sourceTree = "<group>"; };
83035F42A448BDA20C5EC0DB /* libibl.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libibl.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libibl.xcframework"; sourceTree = "<group>"; };
84D7269DBC8441140F7F8905 /* FilamentView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FilamentView.m; sourceTree = "<group>"; };
8947E0E5B74BA8785FE2158D /* libfilaflat.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilaflat.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilaflat.xcframework"; sourceTree = "<group>"; };
8AE9C8F3B16EEC02C00FC462 /* libuberzlib.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libuberzlib.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libuberzlib.xcframework"; sourceTree = "<group>"; };
9555C4935AFD98E079719C07 /* libfilabridge.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilabridge.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilabridge.xcframework"; sourceTree = "<group>"; };
A37B936423E3B1BF1CA137E0 /* hello-gltf.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "hello-gltf.app"; sourceTree = BUILT_PRODUCTS_DIR; };
A40EBFD944F94426FBCEDB82 /* libstb.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libstb.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libstb.xcframework"; sourceTree = "<group>"; };
A52D063A6C24A885D52E2F79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
B1B470F3CDEE0D4A60B11C72 /* Resources.S */ = {isa = PBXFileReference; path = Resources.S; sourceTree = "<group>"; };
B299B19218E1CF7B2D13ABB8 /* DamagedHelmet.glb */ = {isa = PBXFileReference; path = DamagedHelmet.glb; sourceTree = "<group>"; };
BAEAC7786B3EA7E47855A56B /* FilamentViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentViewController.h; sourceTree = "<group>"; };
CC1A326E7C2E54A8F3227045 /* libdracodec.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libdracodec.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libdracodec.xcframework"; sourceTree = "<group>"; };
D3A6F9906B0647549CF53196 /* FilamentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentView.h; sourceTree = "<group>"; };
EC3FAC405D5790391F3AE4FB /* App.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = App.h; sourceTree = "<group>"; };
F534BD31E8FB84B3925B0402 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
F9B29DDB1D323E259E5EDBE4 /* libmeshoptimizer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libmeshoptimizer.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libmeshoptimizer.xcframework"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
0F4486CC8242411EE5C50136 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
415CBC815DE6A370EE6DD502 /* libfilament.xcframework in Frameworks */,
6DFCBA84E571F0C5B1683640 /* libbackend.xcframework in Frameworks */,
8309D337274D6920F81FDFED /* libfilaflat.xcframework in Frameworks */,
F4022ECAAC6BEA543556B428 /* libktxreader.xcframework in Frameworks */,
FD9CF0E054C901D1D3E7D6B2 /* libfilabridge.xcframework in Frameworks */,
1A4585E6153963D89D838344 /* libutils.xcframework in Frameworks */,
6535EDC4F6D3BBCA745C453F /* libsmol-v.xcframework in Frameworks */,
A8004A31F0068178EF0557DA /* libgeometry.xcframework in Frameworks */,
872251D9846351641FFE1EDB /* libibl.xcframework in Frameworks */,
0C4676263C3C6F429DE8E1E7 /* libabseil.xcframework in Frameworks */,
372DC481D060CF95FDFA9DD7 /* libzstd.xcframework in Frameworks */,
ABF42D2B7081EB39CEC1B43B /* libgltfio_core.xcframework in Frameworks */,
7FD7B7E760C10ACDA64F0890 /* libuberarchive.xcframework in Frameworks */,
A38DF6C8EA6292F62E9D5F68 /* libimage.xcframework in Frameworks */,
B69E7A38F3A58F7DB4002219 /* libdracodec.xcframework in Frameworks */,
3370EF2CC0CD0D08F69CC581 /* libmeshoptimizer.xcframework in Frameworks */,
872990CD06765549CBE6EB85 /* libbasis_transcoder.xcframework in Frameworks */,
272268CA1B14AE98DFACDD33 /* libstb.xcframework in Frameworks */,
12FA790CDCF4048A3B3D816B /* libuberzlib.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
213197BBE06FB8316C6A730F /* DamagedHelmet */ = {
isa = PBXGroup;
@@ -56,6 +174,7 @@
children = (
213197BBE06FB8316C6A730F /* DamagedHelmet */,
A57096EADC8A05A97A275513 /* hello-gltf */,
F6A35BB32F71E5F5DC464FCC /* Frameworks */,
E24AFBD404D0689AD84371D6 /* Products */,
);
sourceTree = "<group>";
@@ -78,10 +197,10 @@
children = (
3F8FDA2F8F0B257A1364E302 /* Assets.xcassets */,
A52D063A6C24A885D52E2F79 /* Info.plist */,
FEA341C442B210CFD35E4663 /* LaunchScreen.storyboard */,
47B161015D23D464253ABAF1 /* main.m */,
59032D070D1641AA60F6CC2D /* Main.storyboard */,
B1B470F3CDEE0D4A60B11C72 /* Resources.S */,
FEA341C442B210CFD35E4663 /* LaunchScreen.storyboard */,
59032D070D1641AA60F6CC2D /* Main.storyboard */,
);
path = SupportFiles;
sourceTree = "<group>";
@@ -107,6 +226,32 @@
name = Products;
sourceTree = "<group>";
};
F6A35BB32F71E5F5DC464FCC /* Frameworks */ = {
isa = PBXGroup;
children = (
2ABE8F592F84AD947269C79F /* libabseil.xcframework */,
4A955859FB96A0B4AA15C36D /* libbackend.xcframework */,
18129A9C5FC10A170625F0DF /* libbasis_transcoder.xcframework */,
CC1A326E7C2E54A8F3227045 /* libdracodec.xcframework */,
9555C4935AFD98E079719C07 /* libfilabridge.xcframework */,
8947E0E5B74BA8785FE2158D /* libfilaflat.xcframework */,
4B9CD116AEF8BD291A123F2A /* libfilament.xcframework */,
6842BC9C9A130CE658B642CB /* libgeometry.xcframework */,
06B530A8294DD5CBAD41DB51 /* libgltfio_core.xcframework */,
83035F42A448BDA20C5EC0DB /* libibl.xcframework */,
481A41C1DE19D71E21CA17C0 /* libimage.xcframework */,
6E2AD103B6A164CA10779A2C /* libktxreader.xcframework */,
F9B29DDB1D323E259E5EDBE4 /* libmeshoptimizer.xcframework */,
5E33DC0C95B9B0260504E357 /* libsmol-v.xcframework */,
A40EBFD944F94426FBCEDB82 /* libstb.xcframework */,
0BEC8295652B68CF0854F861 /* libuberarchive.xcframework */,
8AE9C8F3B16EEC02C00FC462 /* libuberzlib.xcframework */,
51E07CB7D191EE70C8393733 /* libutils.xcframework */,
190D6FD76C902A52E8C71DF7 /* libzstd.xcframework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -117,6 +262,8 @@
434C630C7F01B07ABD7545B4 /* Build Resources */,
30FFFB72D409D092136A7E09 /* Sources */,
143100B2FF97ACD9B03A078A /* Resources */,
0F4486CC8242411EE5C50136 /* Frameworks */,
D5C4D57398FACAA29F2C2549 /* Embed Frameworks */,
);
buildRules = (
);
@@ -137,9 +284,10 @@
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
};
};
buildConfigurationList = C7514DDCFDA3C5F803E239F9 /* Build configuration list for PBXProject "hello-gltf" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -148,7 +296,8 @@
);
mainGroup = 74FBC1573C79190CC198A030;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 54;
preferredProjectObjectVersion = 77;
productRefGroup = E24AFBD404D0689AD84371D6 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
@@ -188,7 +337,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "#/usr/bin/env/bash\n\nset -e\n\n# Compile resources.\n\n# The hello-gltf app requires two resources:\n# 1. The IBL image\n# 2. The skybox image\n# These will be compiled into the final binary via the resgen tool.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\n\nresgen_path=`find ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`\ncmgen_path=`find ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`\n\n# Ensure that the required tools are present in the out/ directory.\n# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.\n\nif [[ ! -e \"${resgen_path}\" ]]; then\n echo \"No resgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${cmgen_path}\" ]]; then\n echo \"No cmgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\n# cmgen consumes an HDR environment map and generates two mipmapped KTX files (IBL and skybox)\n\"${cmgen_path}\" \\\n --quiet \\\n --deploy=\"${PROJECT_DIR}/generated/venetian_crossroads_2k\" \\\n --format=ktx --size=256 --extract-blur=0.1 \\\n \"${PROJECT_DIR}/../../../third_party/environments/venetian_crossroads_2k.hdr\"\n\n# The resgen tool generates an assembly file, resources.apple.S that gets compiled and linked\n# into the final binary. It contains all the resources consumed by the app.\n\"${resgen_path}\" \\\n --deploy=\"${PROJECT_DIR}/generated\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_skybox.ktx\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_ibl.ktx\"\n\n# App.cpp and Resources.S include files generated by resgen.\n# Touch them to force Xcode to recompile.\ntouch \"${PROJECT_DIR}/hello-gltf/FilamentView/App.cpp\"\ntouch \"${PROJECT_DIR}/hello-gltf/SupportFiles/Resources.S\"\n";
shellScript = "#/usr/bin/env/bash\n\nset -e\n\n# Compile resources.\n\n# The hello-gltf app requires two resources:\n# 1. The IBL image\n# 2. The skybox image\n# These will be compiled into the final binary via the resgen tool.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\n\nresgen_path=`find -L ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`\ncmgen_path=`find -L ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`\n\n# Ensure that the required tools are present in the out/ directory.\n# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.\n\nif [[ ! -e \"${resgen_path}\" ]]; then\n echo \"No resgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${cmgen_path}\" ]]; then\n echo \"No cmgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\n# cmgen consumes an HDR environment map and generates two mipmapped KTX files (IBL and skybox)\n\"${cmgen_path}\" \\\n --quiet \\\n --deploy=\"${PROJECT_DIR}/generated/venetian_crossroads_2k\" \\\n --format=ktx --size=256 --extract-blur=0.1 \\\n \"${PROJECT_DIR}/../../../third_party/environments/venetian_crossroads_2k.hdr\"\n\n# The resgen tool generates an assembly file, resources.apple.S that gets compiled and linked\n# into the final binary. It contains all the resources consumed by the app.\n\"${resgen_path}\" \\\n --deploy=\"${PROJECT_DIR}/generated\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_skybox.ktx\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_ibl.ktx\"\n\n# App.cpp and Resources.S include files generated by resgen.\n# Touch them to force Xcode to recompile.\ntouch \"${PROJECT_DIR}/hello-gltf/FilamentView/App.cpp\"\ntouch \"${PROJECT_DIR}/hello-gltf/SupportFiles/Resources.S\"\n";
};
/* End PBXShellScriptBuildPhase section */
@@ -235,7 +384,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -298,12 +447,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-gltf/SupportFiles/Info.plist";
@@ -312,32 +466,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lgltfio_core",
"-luberarchive",
"-limage",
"-ldracodec",
"-lmeshoptimizer",
"-lbasis_transcoder",
"-lstb",
"-lzstd",
"-luberzlib",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-gltf";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -352,12 +480,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-gltf/SupportFiles/Info.plist";
@@ -366,32 +499,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lgltfio_core",
"-luberarchive",
"-limage",
"-ldracodec",
"-lmeshoptimizer",
"-lbasis_transcoder",
"-lstb",
"-lzstd",
"-luberzlib",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-gltf";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -405,7 +512,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -467,7 +574,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -522,7 +629,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -578,12 +685,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-gltf/SupportFiles/Info.plist";
@@ -592,32 +704,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lgltfio_core",
"-luberarchive",
"-limage",
"-ldracodec",
"-lmeshoptimizer",
"-lbasis_transcoder",
"-lstb",
"-lzstd",
"-luberzlib",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-gltf";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -632,12 +718,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-gltf/SupportFiles/Info.plist";
@@ -646,32 +737,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lgltfio_core",
"-luberarchive",
"-limage",
"-ldracodec",
"-lmeshoptimizer",
"-lbasis_transcoder",
"-lstb",
"-lzstd",
"-luberzlib",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-gltf";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;

View File

@@ -10,10 +10,15 @@ targets:
buildPhase: resources
templates:
- FilamentApp
settings:
base:
OTHER_LDFLAGS: ["-lgltfio_core", "-luberarchive", "-limage", "-ldracodec", "-lmeshoptimizer",
"-lbasis_transcoder", "-lstb", "-lzstd", "-luberzlib"]
dependencies:
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgltfio_core.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libuberarchive.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimage.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libdracodec.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libmeshoptimizer.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbasis_transcoder.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libstb.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libuberzlib.xcframework
preBuildScripts:
- path: build-resources.sh
name: Build Resources

View File

@@ -13,10 +13,10 @@ set -e
HOST_TOOLS_PATH="${HOST_TOOLS_PATH:-../../../out/release/filament/bin}"
filamesh_path=`find ${HOST_TOOLS_PATH} -name filamesh -type f | head -n 1`
matc_path=`find ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`
resgen_path=`find ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`
cmgen_path=`find ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`
filamesh_path=`find -L ${HOST_TOOLS_PATH} -name filamesh -type f | head -n 1`
matc_path=`find -L ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`
resgen_path=`find -L ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`
cmgen_path=`find -L ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`
# Ensure that the required tools are present in the out/ directory.
# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.

View File

@@ -3,43 +3,136 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
06156526AD22EF2AD34A6E63 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A17327655C031D575A522AD1 /* main.m */; };
0B2B31A41B31D3D9592809BE /* libzstd.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A1DC71CABF5B4C9A99EA62D8 /* libzstd.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1F86261681826B617D56A65A /* libutils.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A9FD2FF109F8EDD63D2DAB37 /* libutils.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
253D85057959A92D9C3FF638 /* libfilabridge.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE951DB3A83CC5BD589751BC /* libfilabridge.xcframework */; };
29861FFCDF2A0BCF3C5C35E2 /* libmeshoptimizer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6BBA4C3095CCF35600F500B8 /* libmeshoptimizer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3386B37A2A36AAE2D1A7EEA3 /* libfilameshio.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3DAD80BE7693C1D70E06675 /* libfilameshio.xcframework */; };
3CE3011F1556DF145D8D5641 /* libfilameshio.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B3DAD80BE7693C1D70E06675 /* libfilameshio.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3D7229A87468A795596F67E5 /* libutils.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9FD2FF109F8EDD63D2DAB37 /* libutils.xcframework */; };
3F24E10B5F119498FEC839BD /* libimage.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB7CEED84501DA291C801893 /* libimage.xcframework */; };
47C387BD3672FED21E46A5CB /* libibl.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 37522F0B15C029FD4127180C /* libibl.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4E2366C19FC594E529713AFD /* libgeometry.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C379E4CC0D2A41B53A494804 /* libgeometry.xcframework */; };
4E4E761A4D37F2479672E9CB /* libibl.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37522F0B15C029FD4127180C /* libibl.xcframework */; };
4F76C2B304B91E3396FB9BE0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 43FDC2D4E6776749006FF5E8 /* Main.storyboard */; };
5507E62B8924EAD813F76A12 /* libktxreader.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D2E61F2554690ADAD89442FA /* libktxreader.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
612E11B0F5513B4426B753E3 /* libfilament.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 35C7020A906FD87045CA9188 /* libfilament.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
774BE86075C3087EE3E973F2 /* libzstd.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1DC71CABF5B4C9A99EA62D8 /* libzstd.xcframework */; };
7C7FE778A73B60FEF2A3E87B /* libsmol-v.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 503D2F0E98B22FD99D9C4B32 /* libsmol-v.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
7FADC9D9565BFFBE23EE2B19 /* libabseil.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3FC6071B5A7CDAE7AC8F9F6A /* libabseil.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
80797782FC992AB6AC57F689 /* libsmol-v.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 503D2F0E98B22FD99D9C4B32 /* libsmol-v.xcframework */; };
909A5210FF76323C0162AC03 /* libbackend.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE479671EAC6847969DCCA35 /* libbackend.xcframework */; };
9ADC886BBE230370776B1CF3 /* libktxreader.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2E61F2554690ADAD89442FA /* libktxreader.xcframework */; };
9F723250641BA99F8DAFEDFB /* libimage.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FB7CEED84501DA291C801893 /* libimage.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
9FB8B786881C0C4C0CFBC55D /* libabseil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FC6071B5A7CDAE7AC8F9F6A /* libabseil.xcframework */; };
A702E1AB94B19F53E55A946B /* CameraManipulator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D57C53C47A84D05D23B65278 /* CameraManipulator.cpp */; };
B127450573BCB07E794547F3 /* FilamentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42B9073CE652C53E7F0A4602 /* FilamentView.mm */; };
BD8BEB81AFF4F10D2CC14D3D /* libmeshoptimizer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BBA4C3095CCF35600F500B8 /* libmeshoptimizer.xcframework */; };
CD584D8F302B74996AB93340 /* libfilaflat.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4939E8DA8B4093E147961B /* libfilaflat.xcframework */; };
CEA57549E5C487794BD5351D /* libgeometry.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C379E4CC0D2A41B53A494804 /* libgeometry.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D15F2C7D58D8FC89CE6116E1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1CAE8879115ECEC53FA0F052 /* Assets.xcassets */; };
D66BEC047A004E63BD105F94 /* libfilaflat.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DA4939E8DA8B4093E147961B /* libfilaflat.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D760F404EE39FF9CA3DB15EF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 45C71AD43B55E58E07243647 /* LaunchScreen.storyboard */; };
DD28C38B1BA7DC985D18010F /* libbackend.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CE479671EAC6847969DCCA35 /* libbackend.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E6438E524A7CA8B4ADCD6BB8 /* libfilabridge.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CE951DB3A83CC5BD589751BC /* libfilabridge.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
F036B4FF12A2B4005547C01F /* FilamentApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F01D34676A81F3F367B9F6AF /* FilamentApp.cpp */; };
F7A5CF35639D0528CCD03908 /* Resources.S in Sources */ = {isa = PBXBuildFile; fileRef = AC02B019CB36611A7BCE5773 /* Resources.S */; };
FAF09598FE02F9B10459EB34 /* libfilament.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35C7020A906FD87045CA9188 /* libfilament.xcframework */; };
FCEE5B4DF0074DCD841DFF12 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DACB12BFCAAA3222E7D1E9BB /* ViewController.m */; };
FEA410A98CE28689BEF2251F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FE9A0CE98FB055F3478E1CC /* AppDelegate.m */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
8E3DFDFC69EBD646F294582B /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
612E11B0F5513B4426B753E3 /* libfilament.xcframework in Embed Frameworks */,
DD28C38B1BA7DC985D18010F /* libbackend.xcframework in Embed Frameworks */,
D66BEC047A004E63BD105F94 /* libfilaflat.xcframework in Embed Frameworks */,
5507E62B8924EAD813F76A12 /* libktxreader.xcframework in Embed Frameworks */,
E6438E524A7CA8B4ADCD6BB8 /* libfilabridge.xcframework in Embed Frameworks */,
1F86261681826B617D56A65A /* libutils.xcframework in Embed Frameworks */,
7C7FE778A73B60FEF2A3E87B /* libsmol-v.xcframework in Embed Frameworks */,
CEA57549E5C487794BD5351D /* libgeometry.xcframework in Embed Frameworks */,
47C387BD3672FED21E46A5CB /* libibl.xcframework in Embed Frameworks */,
7FADC9D9565BFFBE23EE2B19 /* libabseil.xcframework in Embed Frameworks */,
0B2B31A41B31D3D9592809BE /* libzstd.xcframework in Embed Frameworks */,
3CE3011F1556DF145D8D5641 /* libfilameshio.xcframework in Embed Frameworks */,
29861FFCDF2A0BCF3C5C35E2 /* libmeshoptimizer.xcframework in Embed Frameworks */,
9F723250641BA99F8DAFEDFB /* libimage.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
17ADA23252FA61486B05D5BA /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
1CAE8879115ECEC53FA0F052 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
35C7020A906FD87045CA9188 /* libfilament.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilament.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilament.xcframework"; sourceTree = "<group>"; };
37522F0B15C029FD4127180C /* libibl.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libibl.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libibl.xcframework"; sourceTree = "<group>"; };
37CB2FCA6711AE57BD4B39F7 /* hello-pbr.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "hello-pbr.app"; sourceTree = BUILT_PRODUCTS_DIR; };
3FC6071B5A7CDAE7AC8F9F6A /* libabseil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libabseil.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libabseil.xcframework"; sourceTree = "<group>"; };
42B9073CE652C53E7F0A4602 /* FilamentView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FilamentView.mm; sourceTree = "<group>"; };
4618C7511DE661F89B114734 /* FilamentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentView.h; sourceTree = "<group>"; };
503D2F0E98B22FD99D9C4B32 /* libsmol-v.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = "libsmol-v.xcframework"; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libsmol-v.xcframework"; sourceTree = "<group>"; };
6BBA4C3095CCF35600F500B8 /* libmeshoptimizer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libmeshoptimizer.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libmeshoptimizer.xcframework"; sourceTree = "<group>"; };
7D60AE7BAB964978FAA0C84C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
7FE9A0CE98FB055F3478E1CC /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
A17327655C031D575A522AD1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
A1DC71CABF5B4C9A99EA62D8 /* libzstd.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libzstd.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libzstd.xcframework"; sourceTree = "<group>"; };
A3680F594905261290AEDB79 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
A9FD2FF109F8EDD63D2DAB37 /* libutils.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libutils.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libutils.xcframework"; sourceTree = "<group>"; };
AC02B019CB36611A7BCE5773 /* Resources.S */ = {isa = PBXFileReference; path = Resources.S; sourceTree = "<group>"; };
ADF252527D202BB9D53E29C8 /* clear_coat.mat */ = {isa = PBXFileReference; path = clear_coat.mat; sourceTree = "<group>"; };
B35CDFC5B6E5142B5E57BE33 /* FilamentApp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentApp.h; sourceTree = "<group>"; };
B3DAD80BE7693C1D70E06675 /* libfilameshio.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilameshio.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilameshio.xcframework"; sourceTree = "<group>"; };
C379E4CC0D2A41B53A494804 /* libgeometry.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libgeometry.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgeometry.xcframework"; sourceTree = "<group>"; };
CE479671EAC6847969DCCA35 /* libbackend.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libbackend.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbackend.xcframework"; sourceTree = "<group>"; };
CE951DB3A83CC5BD589751BC /* libfilabridge.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilabridge.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilabridge.xcframework"; sourceTree = "<group>"; };
D2E61F2554690ADAD89442FA /* libktxreader.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libktxreader.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libktxreader.xcframework"; sourceTree = "<group>"; };
D57C53C47A84D05D23B65278 /* CameraManipulator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CameraManipulator.cpp; sourceTree = "<group>"; };
DA4939E8DA8B4093E147961B /* libfilaflat.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilaflat.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilaflat.xcframework"; sourceTree = "<group>"; };
DACB12BFCAAA3222E7D1E9BB /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
E176563EAAB0B36EFA7D67FD /* CameraManipulator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CameraManipulator.h; sourceTree = "<group>"; };
EC2A85E8863E17F68089B198 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
ED2321CED4601521B7D1D849 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
F01D34676A81F3F367B9F6AF /* FilamentApp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FilamentApp.cpp; sourceTree = "<group>"; };
FB7CEED84501DA291C801893 /* libimage.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libimage.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimage.xcframework"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
464CABCAA933FAA2A5568882 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
FAF09598FE02F9B10459EB34 /* libfilament.xcframework in Frameworks */,
909A5210FF76323C0162AC03 /* libbackend.xcframework in Frameworks */,
CD584D8F302B74996AB93340 /* libfilaflat.xcframework in Frameworks */,
9ADC886BBE230370776B1CF3 /* libktxreader.xcframework in Frameworks */,
253D85057959A92D9C3FF638 /* libfilabridge.xcframework in Frameworks */,
3D7229A87468A795596F67E5 /* libutils.xcframework in Frameworks */,
80797782FC992AB6AC57F689 /* libsmol-v.xcframework in Frameworks */,
4E2366C19FC594E529713AFD /* libgeometry.xcframework in Frameworks */,
4E4E761A4D37F2479672E9CB /* libibl.xcframework in Frameworks */,
9FB8B786881C0C4C0CFBC55D /* libabseil.xcframework in Frameworks */,
774BE86075C3087EE3E973F2 /* libzstd.xcframework in Frameworks */,
3386B37A2A36AAE2D1A7EEA3 /* libfilameshio.xcframework in Frameworks */,
BD8BEB81AFF4F10D2CC14D3D /* libmeshoptimizer.xcframework in Frameworks */,
3F24E10B5F119498FEC839BD /* libimage.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
4A44033C70281A0FC58A64FE /* hello-pbr */ = {
isa = PBXGroup;
@@ -54,21 +147,43 @@
4618C7511DE661F89B114734 /* FilamentView.h */,
42B9073CE652C53E7F0A4602 /* FilamentView.mm */,
EC2A85E8863E17F68089B198 /* Info.plist */,
45C71AD43B55E58E07243647 /* LaunchScreen.storyboard */,
A17327655C031D575A522AD1 /* main.m */,
43FDC2D4E6776749006FF5E8 /* Main.storyboard */,
AC02B019CB36611A7BCE5773 /* Resources.S */,
17ADA23252FA61486B05D5BA /* ViewController.h */,
DACB12BFCAAA3222E7D1E9BB /* ViewController.m */,
45C71AD43B55E58E07243647 /* LaunchScreen.storyboard */,
43FDC2D4E6776749006FF5E8 /* Main.storyboard */,
);
path = "hello-pbr";
sourceTree = "<group>";
};
6CD8748D8B4DAD182A726DC0 /* Frameworks */ = {
isa = PBXGroup;
children = (
3FC6071B5A7CDAE7AC8F9F6A /* libabseil.xcframework */,
CE479671EAC6847969DCCA35 /* libbackend.xcframework */,
CE951DB3A83CC5BD589751BC /* libfilabridge.xcframework */,
DA4939E8DA8B4093E147961B /* libfilaflat.xcframework */,
35C7020A906FD87045CA9188 /* libfilament.xcframework */,
B3DAD80BE7693C1D70E06675 /* libfilameshio.xcframework */,
C379E4CC0D2A41B53A494804 /* libgeometry.xcframework */,
37522F0B15C029FD4127180C /* libibl.xcframework */,
FB7CEED84501DA291C801893 /* libimage.xcframework */,
D2E61F2554690ADAD89442FA /* libktxreader.xcframework */,
6BBA4C3095CCF35600F500B8 /* libmeshoptimizer.xcframework */,
503D2F0E98B22FD99D9C4B32 /* libsmol-v.xcframework */,
A9FD2FF109F8EDD63D2DAB37 /* libutils.xcframework */,
A1DC71CABF5B4C9A99EA62D8 /* libzstd.xcframework */,
);
name = Frameworks;
sourceTree = "<group>";
};
8B171658B4A1227B9CA44459 = {
isa = PBXGroup;
children = (
4A44033C70281A0FC58A64FE /* hello-pbr */,
D92946BE29B34E951A7E0714 /* Materials */,
6CD8748D8B4DAD182A726DC0 /* Frameworks */,
A90A4582D4144797492F5C08 /* Products */,
);
sourceTree = "<group>";
@@ -99,6 +214,8 @@
18BC4E25ED5FC66EC7B77F97 /* Build Resources */,
4EAE126B59B0A66AD866406A /* Sources */,
4C132EE193B59194A5C7572B /* Resources */,
464CABCAA933FAA2A5568882 /* Frameworks */,
8E3DFDFC69EBD646F294582B /* Embed Frameworks */,
);
buildRules = (
);
@@ -119,9 +236,10 @@
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
};
};
buildConfigurationList = 0479354FB8D9A411347D91A6 /* Build configuration list for PBXProject "hello-pbr" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -130,7 +248,8 @@
);
mainGroup = 8B171658B4A1227B9CA44459;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 54;
preferredProjectObjectVersion = 77;
productRefGroup = A90A4582D4144797492F5C08 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
@@ -169,7 +288,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "#/usr/bin/env/bash\n\nset -e\n\n# Compile resources.\n\n# The hello-pbr app requires four resources:\n# 1. The material sphere mesh\n# 2. The Filament material definition\n# 3. The IBL image\n# 4. The skybox image\n# These will be compiled into the final binary via the resgen tool.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\n\nfilamesh_path=`find ${HOST_TOOLS_PATH} -name filamesh -type f | head -n 1`\nmatc_path=`find ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`\nresgen_path=`find ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`\ncmgen_path=`find ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`\n\n# Ensure that the required tools are present in the out/ directory.\n# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.\n\nif [[ ! -e \"${filamesh_path}\" ]]; then\n echo \"No filamesh binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${matc_path}\" ]]; then\n echo \"No matc binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${resgen_path}\" ]]; then\n echo \"No resgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${cmgen_path}\" ]]; then\n echo \"No cmgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\n# The filamesh tool converts the .obj file into a Filament-specific filamesh file that has been\n# optimized for loading into Filament.\nmkdir -p \"${PROJECT_DIR}/generated/\"\n\"${filamesh_path}\" \\\n \"${PROJECT_DIR}/../../../assets/models/material_sphere/material_sphere.obj\" \\\n \"${PROJECT_DIR}/generated/material_sphere.filamesh\"\n\n# The matc tool compiles the clear_coat.mat material into a Filament material BLOB.\n\"${matc_path}\" \\\n --api all \\\n --platform mobile \\\n -o \"${PROJECT_DIR}/generated/clear_coat.filamat\" \\\n \"${PROJECT_DIR}/Materials/clear_coat.mat\"\n\n# cmgen consumes an HDR environment map and generates two mipmapped KTX files (IBL and skybox)\n\"${cmgen_path}\" \\\n --quiet \\\n --deploy=\"${PROJECT_DIR}/generated/venetian_crossroads_2k\" \\\n --format=ktx --size=256 --extract-blur=0.1 \\\n \"${PROJECT_DIR}/../../../third_party/environments/venetian_crossroads_2k.hdr\"\n\n# The resgen tool generates an assembly file, resources.apple.S that gets compiled and linked\n# into the final binary. It contains all the resources consumed by the app.\n\"${resgen_path}\" \\\n --deploy=\"${PROJECT_DIR}/generated\" \\\n \"${PROJECT_DIR}/generated/material_sphere.filamesh\" \\\n \"${PROJECT_DIR}/generated/clear_coat.filamat\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_ibl.ktx\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_skybox.ktx\"\n\n# FilamentApp.cpp and Resources.S include files generated by resgen.\n# Touch them to force Xcode to recompile.\ntouch \"${PROJECT_DIR}/hello-pbr/FilamentApp.cpp\"\ntouch \"${PROJECT_DIR}/hello-pbr/Resources.S\"\n";
shellScript = "#/usr/bin/env/bash\n\nset -e\n\n# Compile resources.\n\n# The hello-pbr app requires four resources:\n# 1. The material sphere mesh\n# 2. The Filament material definition\n# 3. The IBL image\n# 4. The skybox image\n# These will be compiled into the final binary via the resgen tool.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\n\nfilamesh_path=`find -L ${HOST_TOOLS_PATH} -name filamesh -type f | head -n 1`\nmatc_path=`find -L ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`\nresgen_path=`find -L ${HOST_TOOLS_PATH} -name resgen -type f | head -n 1`\ncmgen_path=`find -L ${HOST_TOOLS_PATH} -name cmgen -type f | head -n 1`\n\n# Ensure that the required tools are present in the out/ directory.\n# These can be built by running ./build.sh -p desktop -i release at Filament's root directory.\n\nif [[ ! -e \"${filamesh_path}\" ]]; then\n echo \"No filamesh binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${matc_path}\" ]]; then\n echo \"No matc binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${resgen_path}\" ]]; then\n echo \"No resgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nif [[ ! -e \"${cmgen_path}\" ]]; then\n echo \"No cmgen binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\n# The filamesh tool converts the .obj file into a Filament-specific filamesh file that has been\n# optimized for loading into Filament.\nmkdir -p \"${PROJECT_DIR}/generated/\"\n\"${filamesh_path}\" \\\n \"${PROJECT_DIR}/../../../assets/models/material_sphere/material_sphere.obj\" \\\n \"${PROJECT_DIR}/generated/material_sphere.filamesh\"\n\n# The matc tool compiles the clear_coat.mat material into a Filament material BLOB.\n\"${matc_path}\" \\\n --api all \\\n --platform mobile \\\n -o \"${PROJECT_DIR}/generated/clear_coat.filamat\" \\\n \"${PROJECT_DIR}/Materials/clear_coat.mat\"\n\n# cmgen consumes an HDR environment map and generates two mipmapped KTX files (IBL and skybox)\n\"${cmgen_path}\" \\\n --quiet \\\n --deploy=\"${PROJECT_DIR}/generated/venetian_crossroads_2k\" \\\n --format=ktx --size=256 --extract-blur=0.1 \\\n \"${PROJECT_DIR}/../../../third_party/environments/venetian_crossroads_2k.hdr\"\n\n# The resgen tool generates an assembly file, resources.apple.S that gets compiled and linked\n# into the final binary. It contains all the resources consumed by the app.\n\"${resgen_path}\" \\\n --deploy=\"${PROJECT_DIR}/generated\" \\\n \"${PROJECT_DIR}/generated/material_sphere.filamesh\" \\\n \"${PROJECT_DIR}/generated/clear_coat.filamat\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_ibl.ktx\" \\\n \"${PROJECT_DIR}/generated/venetian_crossroads_2k/venetian_crossroads_2k_skybox.ktx\"\n\n# FilamentApp.cpp and Resources.S include files generated by resgen.\n# Touch them to force Xcode to recompile.\ntouch \"${PROJECT_DIR}/hello-pbr/FilamentApp.cpp\"\ntouch \"${PROJECT_DIR}/hello-pbr/Resources.S\"\n";
};
/* End PBXShellScriptBuildPhase section */
@@ -216,7 +335,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -279,12 +398,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-pbr/Info.plist";
@@ -293,26 +417,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilameshio",
"-lmeshoptimizer",
"-limage",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-pbr";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -327,12 +431,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-pbr/Info.plist";
@@ -341,26 +450,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilameshio",
"-lmeshoptimizer",
"-limage",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-pbr";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -375,12 +464,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-pbr/Info.plist";
@@ -389,26 +483,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilameshio",
"-lmeshoptimizer",
"-limage",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-pbr";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -422,7 +496,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -477,7 +551,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -533,12 +607,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-pbr/Info.plist";
@@ -547,26 +626,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
"-lfilameshio",
"-lmeshoptimizer",
"-limage",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-pbr";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -580,7 +639,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;

View File

@@ -6,9 +6,10 @@ targets:
hello-pbr:
templates:
- FilamentApp
settings:
base:
OTHER_LDFLAGS: ["-lfilameshio", "-lmeshoptimizer", "-limage"]
dependencies:
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilameshio.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libmeshoptimizer.xcframework
- framework: ../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libimage.xcframework
preBuildScripts:
- path: build-resources.sh
name: Build Resources

View File

@@ -1,7 +1,7 @@
# Compile bakedColor material.
HOST_TOOLS_PATH="${HOST_TOOLS_PATH:-../../../out/release/filament/bin}"
matc_path=`find ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`
matc_path=`find -L ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`
if [[ ! -e "${matc_path}" ]]; then
echo "No matc binary could be found in ${HOST_TOOLS_PATH}."

View File

@@ -3,35 +3,113 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
0A3A34EAB98A45D1D4355A52 /* libbackend.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3BA0FF5017E4FECD94CF3F2 /* libbackend.xcframework */; };
0F0218402B9C73D7B3775497 /* libabseil.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D0F16339A5D96AB6AAF03A4C /* libabseil.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
12A40CB70167F2609E428EC6 /* libbackend.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F3BA0FF5017E4FECD94CF3F2 /* libbackend.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1326DEBB610801CD041AE322 /* libibl.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED0BAF80B49E29533E492727 /* libibl.xcframework */; };
291EA8BF9E335683AD324451 /* libfilabridge.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA668D9E9DC67AD1FA16422A /* libfilabridge.xcframework */; };
2DE5F1C322D1B8288CF6F1A9 /* libgeometry.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 44224172FC58D500DEFE7A7D /* libgeometry.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
34826A3819309F25EAF82B78 /* libibl.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = ED0BAF80B49E29533E492727 /* libibl.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
371FE9F805A6B436B22EF70D /* libfilaflat.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C4952E6805DB5E7B871DF61C /* libfilaflat.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4715F63AF782F1A15A37EFA8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 45FE9476D47ECFFEA65D7146 /* AppDelegate.m */; };
4B0C2B6E7D4BF89D8EDEB84F /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2620C967534D81CFFAB5D3FF /* ViewController.m */; };
5B76FEB9522BC17E14EF3270 /* libutils.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3604FD7E74C46AC4FAB12BFA /* libutils.xcframework */; };
67B75B37DC3FFFE6BDD91455 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDE4A219AEB5B4507F51B873 /* Main.storyboard */; };
68822E4B9059C8A1E67EF062 /* libfilament.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E36164E9425CAABBE17EF153 /* libfilament.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6BBD88355CE6932E706CE45C /* libzstd.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8D062C70EFE8916B7656BB4E /* libzstd.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
7A4FA872EA928DB67BBF9351 /* libfilaflat.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4952E6805DB5E7B871DF61C /* libfilaflat.xcframework */; };
8897619E0912B69F232FCC88 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 524293A0A8CDE9047347EF48 /* Assets.xcassets */; };
915E0D1FE043E873C17EB0AB /* libgeometry.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44224172FC58D500DEFE7A7D /* libgeometry.xcframework */; };
966626FAF79F36B16F9AE201 /* libabseil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0F16339A5D96AB6AAF03A4C /* libabseil.xcframework */; };
96FBF778C4E3563A7C8D3A47 /* libsmol-v.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 727785EA0395D939E6804AF4 /* libsmol-v.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
978AB6421E245452AD8D9AE0 /* libktxreader.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AC6CC7E260B2F20D0EA171E2 /* libktxreader.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A05C6F2172B5C29D9A056E39 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 46A2FAD3D476FDADF45F70F8 /* LaunchScreen.storyboard */; };
AC1320F672694ABEF53EFAC8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E56C70616FF30C50DFA8238B /* main.m */; };
AD9F281E6F4F05A4B98FD437 /* libutils.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3604FD7E74C46AC4FAB12BFA /* libutils.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
B156789E3EC8798928C58BD2 /* libsmol-v.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 727785EA0395D939E6804AF4 /* libsmol-v.xcframework */; };
BED52BA49D882353BBCEA4F4 /* FilamentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0CDCD26337640C57D07E41ED /* FilamentView.mm */; };
CF4322AB55566F31A284739B /* libktxreader.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC6CC7E260B2F20D0EA171E2 /* libktxreader.xcframework */; };
D5837AE122E300682E245E00 /* libfilament.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E36164E9425CAABBE17EF153 /* libfilament.xcframework */; };
ECA5B4596C78D6B18043153D /* libfilabridge.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DA668D9E9DC67AD1FA16422A /* libfilabridge.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
ECE38C7FF5D52E4222C22216 /* libzstd.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D062C70EFE8916B7656BB4E /* libzstd.xcframework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
C514B8F3AF16FEA064256123 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
68822E4B9059C8A1E67EF062 /* libfilament.xcframework in Embed Frameworks */,
12A40CB70167F2609E428EC6 /* libbackend.xcframework in Embed Frameworks */,
371FE9F805A6B436B22EF70D /* libfilaflat.xcframework in Embed Frameworks */,
978AB6421E245452AD8D9AE0 /* libktxreader.xcframework in Embed Frameworks */,
ECA5B4596C78D6B18043153D /* libfilabridge.xcframework in Embed Frameworks */,
AD9F281E6F4F05A4B98FD437 /* libutils.xcframework in Embed Frameworks */,
96FBF778C4E3563A7C8D3A47 /* libsmol-v.xcframework in Embed Frameworks */,
2DE5F1C322D1B8288CF6F1A9 /* libgeometry.xcframework in Embed Frameworks */,
34826A3819309F25EAF82B78 /* libibl.xcframework in Embed Frameworks */,
0F0218402B9C73D7B3775497 /* libabseil.xcframework in Embed Frameworks */,
6BBD88355CE6932E706CE45C /* libzstd.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0CDCD26337640C57D07E41ED /* FilamentView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FilamentView.mm; sourceTree = "<group>"; };
2620C967534D81CFFAB5D3FF /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
350DC65C7EE8D98D8FE181DC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
3604FD7E74C46AC4FAB12BFA /* libutils.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libutils.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libutils.xcframework"; sourceTree = "<group>"; };
3BB2247EC7FE4EFB2C3ED10A /* hello-triangle.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "hello-triangle.app"; sourceTree = BUILT_PRODUCTS_DIR; };
41033B581E89DF4B33A2EB53 /* bakedColor.mat */ = {isa = PBXFileReference; path = bakedColor.mat; sourceTree = "<group>"; };
44224172FC58D500DEFE7A7D /* libgeometry.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libgeometry.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgeometry.xcframework"; sourceTree = "<group>"; };
45FE9476D47ECFFEA65D7146 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
524293A0A8CDE9047347EF48 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
727785EA0395D939E6804AF4 /* libsmol-v.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = "libsmol-v.xcframework"; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libsmol-v.xcframework"; sourceTree = "<group>"; };
761A2C7D6295697614AD3434 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D062C70EFE8916B7656BB4E /* libzstd.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libzstd.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libzstd.xcframework"; sourceTree = "<group>"; };
AC6CC7E260B2F20D0EA171E2 /* libktxreader.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libktxreader.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libktxreader.xcframework"; sourceTree = "<group>"; };
C16E9A84F33BDFAEDC1E4837 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
C311F8DEBEFEB185F0A7E4CC /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
C4952E6805DB5E7B871DF61C /* libfilaflat.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilaflat.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilaflat.xcframework"; sourceTree = "<group>"; };
CDBB6BE341D1C708FCB68750 /* FilamentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentView.h; sourceTree = "<group>"; };
D0F16339A5D96AB6AAF03A4C /* libabseil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libabseil.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libabseil.xcframework"; sourceTree = "<group>"; };
DA668D9E9DC67AD1FA16422A /* libfilabridge.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilabridge.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilabridge.xcframework"; sourceTree = "<group>"; };
E36164E9425CAABBE17EF153 /* libfilament.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilament.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilament.xcframework"; sourceTree = "<group>"; };
E36D17DB3F44ADF8EFBEDBAF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
E56C70616FF30C50DFA8238B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
ED0BAF80B49E29533E492727 /* libibl.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libibl.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libibl.xcframework"; sourceTree = "<group>"; };
F3BA0FF5017E4FECD94CF3F2 /* libbackend.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libbackend.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbackend.xcframework"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3691C25600B8D42B8E9BC308 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D5837AE122E300682E245E00 /* libfilament.xcframework in Frameworks */,
0A3A34EAB98A45D1D4355A52 /* libbackend.xcframework in Frameworks */,
7A4FA872EA928DB67BBF9351 /* libfilaflat.xcframework in Frameworks */,
CF4322AB55566F31A284739B /* libktxreader.xcframework in Frameworks */,
291EA8BF9E335683AD324451 /* libfilabridge.xcframework in Frameworks */,
5B76FEB9522BC17E14EF3270 /* libutils.xcframework in Frameworks */,
B156789E3EC8798928C58BD2 /* libsmol-v.xcframework in Frameworks */,
915E0D1FE043E873C17EB0AB /* libgeometry.xcframework in Frameworks */,
1326DEBB610801CD041AE322 /* libibl.xcframework in Frameworks */,
966626FAF79F36B16F9AE201 /* libabseil.xcframework in Frameworks */,
ECE38C7FF5D52E4222C22216 /* libzstd.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
39FD47E0213E1FFE59609A06 /* Products */ = {
isa = PBXGroup;
@@ -41,11 +119,30 @@
name = Products;
sourceTree = "<group>";
};
554175C148AC5EDE93591BB3 /* Frameworks */ = {
isa = PBXGroup;
children = (
D0F16339A5D96AB6AAF03A4C /* libabseil.xcframework */,
F3BA0FF5017E4FECD94CF3F2 /* libbackend.xcframework */,
DA668D9E9DC67AD1FA16422A /* libfilabridge.xcframework */,
C4952E6805DB5E7B871DF61C /* libfilaflat.xcframework */,
E36164E9425CAABBE17EF153 /* libfilament.xcframework */,
44224172FC58D500DEFE7A7D /* libgeometry.xcframework */,
ED0BAF80B49E29533E492727 /* libibl.xcframework */,
AC6CC7E260B2F20D0EA171E2 /* libktxreader.xcframework */,
727785EA0395D939E6804AF4 /* libsmol-v.xcframework */,
3604FD7E74C46AC4FAB12BFA /* libutils.xcframework */,
8D062C70EFE8916B7656BB4E /* libzstd.xcframework */,
);
name = Frameworks;
sourceTree = "<group>";
};
5B3E3AAF5C75644908492410 = {
isa = PBXGroup;
children = (
C54ABC8D31D1863EF16253A0 /* hello-triangle */,
8F55D652979868A470D724FA /* Materials */,
554175C148AC5EDE93591BB3 /* Frameworks */,
39FD47E0213E1FFE59609A06 /* Products */,
);
sourceTree = "<group>";
@@ -67,11 +164,11 @@
CDBB6BE341D1C708FCB68750 /* FilamentView.h */,
0CDCD26337640C57D07E41ED /* FilamentView.mm */,
761A2C7D6295697614AD3434 /* Info.plist */,
46A2FAD3D476FDADF45F70F8 /* LaunchScreen.storyboard */,
E56C70616FF30C50DFA8238B /* main.m */,
DDE4A219AEB5B4507F51B873 /* Main.storyboard */,
C311F8DEBEFEB185F0A7E4CC /* ViewController.h */,
2620C967534D81CFFAB5D3FF /* ViewController.m */,
46A2FAD3D476FDADF45F70F8 /* LaunchScreen.storyboard */,
DDE4A219AEB5B4507F51B873 /* Main.storyboard */,
);
path = "hello-triangle";
sourceTree = "<group>";
@@ -86,6 +183,8 @@
668105208CE7DFC4DC55F8EC /* Build Materials */,
7B94E1FEEC48280815A91021 /* Sources */,
471869BF4E82B6ADC791072D /* Resources */,
3691C25600B8D42B8E9BC308 /* Frameworks */,
C514B8F3AF16FEA064256123 /* Embed Frameworks */,
);
buildRules = (
);
@@ -106,9 +205,10 @@
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
};
};
buildConfigurationList = 69A012BABE82CB5D1986B1BB /* Build configuration list for PBXProject "hello-triangle" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -117,7 +217,8 @@
);
mainGroup = 5B3E3AAF5C75644908492410;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 54;
preferredProjectObjectVersion = 77;
productRefGroup = 39FD47E0213E1FFE59609A06 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
@@ -156,7 +257,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "# Compile bakedColor material.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\nmatc_path=`find ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`\n\nif [[ ! -e \"${matc_path}\" ]]; then\n echo \"No matc binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nmkdir -p \"${PROJECT_DIR}/generated/\"\n\"${matc_path}\" \\\n --api all \\\n -f header \\\n -o \"${PROJECT_DIR}/generated/bakedColor.inc\" \\\n \"${PROJECT_DIR}/Materials/bakedColor.mat\"\n\n# FilamentView.mm includes bakedColor.filamat, so touch it to force Xcode to\n# recompile it.\ntouch \"${PROJECT_DIR}/hello-triangle/FilamentView.mm\"\n";
shellScript = "# Compile bakedColor material.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\nmatc_path=`find -L ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`\n\nif [[ ! -e \"${matc_path}\" ]]; then\n echo \"No matc binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nmkdir -p \"${PROJECT_DIR}/generated/\"\n\"${matc_path}\" \\\n --api all \\\n -f header \\\n -o \"${PROJECT_DIR}/generated/bakedColor.inc\" \\\n \"${PROJECT_DIR}/Materials/bakedColor.mat\"\n\n# FilamentView.mm includes bakedColor.filamat, so touch it to force Xcode to\n# recompile it.\ntouch \"${PROJECT_DIR}/hello-triangle/FilamentView.mm\"\n";
};
/* End PBXShellScriptBuildPhase section */
@@ -201,12 +302,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-triangle/Info.plist";
@@ -215,23 +321,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-triangle";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -245,7 +334,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -308,12 +397,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-triangle/Info.plist";
@@ -322,23 +416,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-triangle";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -353,12 +430,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-triangle/Info.plist";
@@ -367,23 +449,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-triangle";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -397,7 +462,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -452,7 +517,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -508,12 +573,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "hello-triangle/Info.plist";
@@ -522,23 +592,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.hello-triangle";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -552,7 +605,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;

View File

@@ -1,7 +1,7 @@
# Compile bakedColor material.
HOST_TOOLS_PATH="${HOST_TOOLS_PATH:-../../../out/release/filament/bin}"
matc_path=`find ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`
matc_path=`find -L ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`
if [[ ! -e "${matc_path}" ]]; then
echo "No matc binary could be found in ${HOST_TOOLS_PATH}."

View File

@@ -3,34 +3,112 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
1277F800D6D46E364FC36888 /* libgeometry.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 567E8EB7B4914540B082DA80 /* libgeometry.xcframework */; };
1E31EA1A79A550407E4A39BB /* libzstd.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E2AF349D32EBA154923EABB5 /* libzstd.xcframework */; };
23318D8F70A6E13214CF15E0 /* libutils.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91DE2DCC79C7DD9D830D883B /* libutils.xcframework */; };
243D3B219322B6BD829F39F8 /* libktxreader.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6D7469820FD760B1040BFD2 /* libktxreader.xcframework */; };
3A1A568B3431D8FB66F60DB3 /* libabseil.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B254EC414E4905EC4CA22173 /* libabseil.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
527FF7B484BA83BCC248B097 /* libfilabridge.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 393E02B47C7710AB8B1F257A /* libfilabridge.xcframework */; };
593638720D5E6F09E52ECB01 /* libibl.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1C8DFBE4D515753D5B51FF1 /* libibl.xcframework */; };
5F8AE993649815236EC665EB /* libibl.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E1C8DFBE4D515753D5B51FF1 /* libibl.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
60C0A11E074409CE5F88B4FE /* libbackend.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6EB7C2D5C91942D2B1EA056D /* libbackend.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
616A1B9A177BA2F02C920165 /* libfilaflat.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0202CBA0AE1EAA3EE3DE0FFC /* libfilaflat.xcframework */; };
643749757FD9F8A609A336C7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E749A05E4E5F36757FB9399C /* Assets.xcassets */; };
65FE8CD16998C5D479C9858E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C8CF5D9EB8BA11B44F639DFE /* AppDelegate.m */; };
6B53BDEF1DAB8E4AD8CE754B /* libfilabridge.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 393E02B47C7710AB8B1F257A /* libfilabridge.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
7032AB98BE03DFE8E3071FD0 /* libbackend.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EB7C2D5C91942D2B1EA056D /* libbackend.xcframework */; };
715FFF9658000B58BFEC22C6 /* libutils.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 91DE2DCC79C7DD9D830D883B /* libutils.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
740AB9277340CDD2222020E2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AA728ADDAAE09D3A5FD80C82 /* main.m */; };
7F65E29DE4BF2CAA0D0759AA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 959043C1F56EAAE872B0FF05 /* Main.storyboard */; };
80F7D25E275FE8C31AF9196E /* libzstd.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E2AF349D32EBA154923EABB5 /* libzstd.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
852D4BD096E865D7263928C8 /* libabseil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = B254EC414E4905EC4CA22173 /* libabseil.xcframework */; };
8DA900E9A495C25262F78773 /* libgeometry.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 567E8EB7B4914540B082DA80 /* libgeometry.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
9F3C8B197C22178413BBAA37 /* libfilaflat.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0202CBA0AE1EAA3EE3DE0FFC /* libfilaflat.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A0FCB25FCDAE129BB6369957 /* libfilament.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF18A248DCF11412DDFAB5AE /* libfilament.xcframework */; };
A9C3D93FE47802953C8A0868 /* FilamentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A807B46A326F19ABCEE0D62 /* FilamentView.mm */; };
BA514AFE134AFD317CD71AA1 /* libsmol-v.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 26B0C9089541BEB14FE28934 /* libsmol-v.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
C8F443E4A5064C2D1F755954 /* libsmol-v.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26B0C9089541BEB14FE28934 /* libsmol-v.xcframework */; };
CAB4734A7E608F3C36C4C9C8 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6D9072BB2A497EEE9A7B662 /* ViewController.m */; };
CDF7D87AB0D036A143F37946 /* libfilament.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DF18A248DCF11412DDFAB5AE /* libfilament.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DF6374DDCFE55DD536B52033 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 96B770972E0F353852755AB3 /* LaunchScreen.storyboard */; };
F6EEC66B42DF66E5C4CEC17C /* libktxreader.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A6D7469820FD760B1040BFD2 /* libktxreader.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
89F6975F74EBC72BCCA1074F /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
CDF7D87AB0D036A143F37946 /* libfilament.xcframework in Embed Frameworks */,
60C0A11E074409CE5F88B4FE /* libbackend.xcframework in Embed Frameworks */,
9F3C8B197C22178413BBAA37 /* libfilaflat.xcframework in Embed Frameworks */,
F6EEC66B42DF66E5C4CEC17C /* libktxreader.xcframework in Embed Frameworks */,
6B53BDEF1DAB8E4AD8CE754B /* libfilabridge.xcframework in Embed Frameworks */,
715FFF9658000B58BFEC22C6 /* libutils.xcframework in Embed Frameworks */,
BA514AFE134AFD317CD71AA1 /* libsmol-v.xcframework in Embed Frameworks */,
8DA900E9A495C25262F78773 /* libgeometry.xcframework in Embed Frameworks */,
5F8AE993649815236EC665EB /* libibl.xcframework in Embed Frameworks */,
3A1A568B3431D8FB66F60DB3 /* libabseil.xcframework in Embed Frameworks */,
80F7D25E275FE8C31AF9196E /* libzstd.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0202CBA0AE1EAA3EE3DE0FFC /* libfilaflat.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilaflat.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilaflat.xcframework"; sourceTree = "<group>"; };
023105B81B6C662A3BABDC92 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
0A8B371B11D177469DFEBB86 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
1A807B46A326F19ABCEE0D62 /* FilamentView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FilamentView.mm; sourceTree = "<group>"; };
26B0C9089541BEB14FE28934 /* libsmol-v.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = "libsmol-v.xcframework"; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libsmol-v.xcframework"; sourceTree = "<group>"; };
2F32AE4C99AA8AE39BB09F0A /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
393E02B47C7710AB8B1F257A /* libfilabridge.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilabridge.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilabridge.xcframework"; sourceTree = "<group>"; };
567E8EB7B4914540B082DA80 /* libgeometry.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libgeometry.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libgeometry.xcframework"; sourceTree = "<group>"; };
6EB7C2D5C91942D2B1EA056D /* libbackend.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libbackend.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libbackend.xcframework"; sourceTree = "<group>"; };
7ED3EBFE01876351CFF9AD1A /* transparent-rendering.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "transparent-rendering.app"; sourceTree = BUILT_PRODUCTS_DIR; };
91DE2DCC79C7DD9D830D883B /* libutils.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libutils.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libutils.xcframework"; sourceTree = "<group>"; };
952B0BE8EFAEF9B6FCB77798 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
A5E8D7CA26C338BF3D9D1932 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
A6D7469820FD760B1040BFD2 /* libktxreader.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libktxreader.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libktxreader.xcframework"; sourceTree = "<group>"; };
AA728ADDAAE09D3A5FD80C82 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
B254EC414E4905EC4CA22173 /* libabseil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libabseil.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libabseil.xcframework"; sourceTree = "<group>"; };
BD21E933E2F77EE5ACBCDD5F /* FilamentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilamentView.h; sourceTree = "<group>"; };
C8CF5D9EB8BA11B44F639DFE /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
DF18A248DCF11412DDFAB5AE /* libfilament.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libfilament.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libfilament.xcframework"; sourceTree = "<group>"; };
E1C8DFBE4D515753D5B51FF1 /* libibl.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libibl.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libibl.xcframework"; sourceTree = "<group>"; };
E2AF349D32EBA154923EABB5 /* libzstd.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libzstd.xcframework; path = "../../../out/$(FILAMENT_OUT_NAME)/filament/lib/libzstd.xcframework"; sourceTree = "<group>"; };
E6D9072BB2A497EEE9A7B662 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
E749A05E4E5F36757FB9399C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
9267558086B89E5F350ADDC4 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
A0FCB25FCDAE129BB6369957 /* libfilament.xcframework in Frameworks */,
7032AB98BE03DFE8E3071FD0 /* libbackend.xcframework in Frameworks */,
616A1B9A177BA2F02C920165 /* libfilaflat.xcframework in Frameworks */,
243D3B219322B6BD829F39F8 /* libktxreader.xcframework in Frameworks */,
527FF7B484BA83BCC248B097 /* libfilabridge.xcframework in Frameworks */,
23318D8F70A6E13214CF15E0 /* libutils.xcframework in Frameworks */,
C8F443E4A5064C2D1F755954 /* libsmol-v.xcframework in Frameworks */,
1277F800D6D46E364FC36888 /* libgeometry.xcframework in Frameworks */,
593638720D5E6F09E52ECB01 /* libibl.xcframework in Frameworks */,
852D4BD096E865D7263928C8 /* libabseil.xcframework in Frameworks */,
1E31EA1A79A550407E4A39BB /* libzstd.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
0B098038EF2CFAC88AFE0F18 /* Products */ = {
isa = PBXGroup;
@@ -44,6 +122,7 @@
isa = PBXGroup;
children = (
6E33B6C4EE9FFF8BBCE5DD20 /* transparent-rendering */,
C5AF8AD86B58EF5D0BD7B0B2 /* Frameworks */,
0B098038EF2CFAC88AFE0F18 /* Products */,
);
sourceTree = "<group>";
@@ -57,15 +136,33 @@
BD21E933E2F77EE5ACBCDD5F /* FilamentView.h */,
1A807B46A326F19ABCEE0D62 /* FilamentView.mm */,
952B0BE8EFAEF9B6FCB77798 /* Info.plist */,
96B770972E0F353852755AB3 /* LaunchScreen.storyboard */,
AA728ADDAAE09D3A5FD80C82 /* main.m */,
959043C1F56EAAE872B0FF05 /* Main.storyboard */,
2F32AE4C99AA8AE39BB09F0A /* ViewController.h */,
E6D9072BB2A497EEE9A7B662 /* ViewController.m */,
96B770972E0F353852755AB3 /* LaunchScreen.storyboard */,
959043C1F56EAAE872B0FF05 /* Main.storyboard */,
);
path = "transparent-rendering";
sourceTree = "<group>";
};
C5AF8AD86B58EF5D0BD7B0B2 /* Frameworks */ = {
isa = PBXGroup;
children = (
B254EC414E4905EC4CA22173 /* libabseil.xcframework */,
6EB7C2D5C91942D2B1EA056D /* libbackend.xcframework */,
393E02B47C7710AB8B1F257A /* libfilabridge.xcframework */,
0202CBA0AE1EAA3EE3DE0FFC /* libfilaflat.xcframework */,
DF18A248DCF11412DDFAB5AE /* libfilament.xcframework */,
567E8EB7B4914540B082DA80 /* libgeometry.xcframework */,
E1C8DFBE4D515753D5B51FF1 /* libibl.xcframework */,
A6D7469820FD760B1040BFD2 /* libktxreader.xcframework */,
26B0C9089541BEB14FE28934 /* libsmol-v.xcframework */,
91DE2DCC79C7DD9D830D883B /* libutils.xcframework */,
E2AF349D32EBA154923EABB5 /* libzstd.xcframework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -76,6 +173,8 @@
31596072423F6FB0A84C97A0 /* Build Materials */,
EE3B63E6A11EDDBC48502B27 /* Sources */,
A676D3A853739CDAB454587E /* Resources */,
9267558086B89E5F350ADDC4 /* Frameworks */,
89F6975F74EBC72BCCA1074F /* Embed Frameworks */,
);
buildRules = (
);
@@ -96,9 +195,10 @@
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
};
};
buildConfigurationList = 8A22BD23DB15965551506480 /* Build configuration list for PBXProject "transparent-rendering" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -107,7 +207,8 @@
);
mainGroup = 4C27390036DEB15C67D5A664;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 54;
preferredProjectObjectVersion = 77;
productRefGroup = 0B098038EF2CFAC88AFE0F18 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
@@ -146,7 +247,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "# Compile bakedColor material.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\nmatc_path=`find ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`\n\nif [[ ! -e \"${matc_path}\" ]]; then\n echo \"No matc binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nmkdir -p \"${PROJECT_DIR}/generated/\"\n\"${matc_path}\" \\\n --api all \\\n -f header \\\n -o \"${PROJECT_DIR}/generated/bakedColor.inc\" \\\n \"${PROJECT_DIR}/Materials/bakedColor.mat\"\n\n# FilamentView.mm includes bakedColor.filamat, so touch it to force Xcode to\n# recompile it.\ntouch \"${PROJECT_DIR}/transparent-rendering/FilamentView.mm\"\n";
shellScript = "# Compile bakedColor material.\n\nHOST_TOOLS_PATH=\"${HOST_TOOLS_PATH:-../../../out/release/filament/bin}\"\nmatc_path=`find -L ${HOST_TOOLS_PATH} -name matc -type f | head -n 1`\n\nif [[ ! -e \"${matc_path}\" ]]; then\n echo \"No matc binary could be found in ${HOST_TOOLS_PATH}.\"\n echo \"Ensure Filament has been built/installed before building this app.\"\n exit 1\nfi\n\nmkdir -p \"${PROJECT_DIR}/generated/\"\n\"${matc_path}\" \\\n --api all \\\n -f header \\\n -o \"${PROJECT_DIR}/generated/bakedColor.inc\" \\\n \"${PROJECT_DIR}/Materials/bakedColor.mat\"\n\n# FilamentView.mm includes bakedColor.filamat, so touch it to force Xcode to\n# recompile it.\ntouch \"${PROJECT_DIR}/transparent-rendering/FilamentView.mm\"\n";
};
/* End PBXShellScriptBuildPhase section */
@@ -190,7 +291,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -245,7 +346,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -307,7 +408,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -363,12 +464,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "transparent-rendering/Info.plist";
@@ -377,23 +483,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.transparent-rendering";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -408,12 +497,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "transparent-rendering/Info.plist";
@@ -422,23 +516,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.transparent-rendering";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -453,12 +530,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-debug";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_OPENGL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-debug/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "transparent-rendering/Info.plist";
@@ -467,23 +549,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-debug/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-debug/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.transparent-rendering";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -498,12 +563,17 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
FILAMENT_OUT_NAME = "ios-release";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"../../../out/$(FILAMENT_OUT_NAME)/filament/lib\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"FILAMENT_APP_USE_METAL=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"../../../out/ios-release/filament/include",
"$(SRCROOT)/../../../out/$(FILAMENT_OUT_NAME)/filament/include",
generated,
);
INFOPLIST_FILE = "transparent-rendering/Info.plist";
@@ -512,23 +582,6 @@
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"../../../out/ios-release/filament/lib/$(CURRENT_ARCH)",
"../../../out/ios-release/filament/lib/universal",
);
OTHER_LDFLAGS = (
"-lfilament",
"-lbackend",
"-lfilaflat",
"-lktxreader",
"-lfilabridge",
"-lutils",
"-lsmol-v",
"-lgeometry",
"-libl",
"-labseil",
"-lzstd",
);
PRODUCT_BUNDLE_IDENTIFIER = "${SAMPLE_CODE_DISAMBIGUATOR}.google.filament.transparent-rendering";
SAMPLE_CODE_DISAMBIGUATOR = "${DEVELOPMENT_TEAM}";
SDKROOT = iphoneos;
@@ -542,7 +595,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;

View File

@@ -50,7 +50,7 @@ install(DIRECTORY ${PUBLIC_HDR_DIR}/camutils DESTINATION include)
# ==================================================================================================
# Tests
# ==================================================================================================
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WEBGL AND NOT IOS)
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WASM AND NOT IOS)
add_executable(test_${TARGET} tests/test_camutils.cpp)
target_link_libraries(test_${TARGET} PRIVATE camutils gtest)
set_target_properties(test_${TARGET} PROPERTIES FOLDER Tests)

View File

@@ -37,7 +37,7 @@ install(FILES ${DIST_HDRS} DESTINATION include/${TARGET})
# ==================================================================================================
# Tests
# ==================================================================================================
if (FILAMENT_BUILD_TESTING AND NOT IOS AND NOT WEBGL AND NOT ANDROID)
if (FILAMENT_BUILD_TESTING AND NOT IOS AND NOT WASM AND NOT ANDROID)
add_executable(test_${TARGET} tests/test_filamesh.cpp )
target_link_libraries(test_${TARGET} PRIVATE filameshio gtest)
set_target_properties(test_${TARGET} PROPERTIES FOLDER Tests)

View File

@@ -46,7 +46,7 @@ if (MSVC)
set(OPTIMIZATION_FLAGS
/fp:fast
)
elseif(WEBGL)
elseif (WASM)
# Avoid strict-vtable-pointers here, it is broken in WebAssembly.
set(OPTIMIZATION_FLAGS -fvisibility-inlines-hidden)
else()

View File

@@ -73,7 +73,7 @@ install(FILES "${GEOMETRY_COMBINED_OUTPUT}" DESTINATION lib/${DIST_DIR} RENAME $
# ==================================================================================================
# Tests
# ==================================================================================================
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WEBGL AND NOT IOS)
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WASM AND NOT IOS)
set(TARGET test_transcoder)
add_executable(${TARGET} tests/test_transcoder.cpp)
target_link_libraries(${TARGET} PRIVATE geometry gtest)

View File

@@ -198,13 +198,13 @@ set_target_properties(gltfio_core PROPERTIES FOLDER Libs)
target_compile_definitions(gltfio_core PUBLIC -DGLTFIO_DRACO_SUPPORTED=1)
target_link_libraries(gltfio_core PUBLIC dracodec meshoptimizer ${WEBP_DECODER_LIB_TARGET})
if (WEBGL_PTHREADS)
if (WASM_PTHREADS)
target_compile_definitions(gltfio_core PUBLIC -DFILAMENT_WASM_THREADS)
endif()
target_compile_options(gltfio_core PRIVATE ${FILAMENT_WARNINGS})
if (NOT WEBGL AND NOT ANDROID AND NOT IOS)
if (NOT WASM AND NOT ANDROID AND NOT IOS)
# ==================================================================================================
# Link the core library with additional dependencies to create the "full" library
@@ -246,7 +246,7 @@ if (FILAMENT_BUILD_TESTING)
# The following tests rely on private APIs that are stripped
# away in Release builds
if (TNT_DEV AND NOT WEBGL AND NOT ANDROID AND NOT IOS)
if (TNT_DEV AND NOT WASM AND NOT ANDROID AND NOT IOS)
set(TEST_TARGET test_gltfio)
add_executable(${TEST_TARGET} test/gltfio_test.cpp)

View File

@@ -99,7 +99,7 @@ if (MSVC)
set(OPTIMIZATION_FLAGS
/fp:fast
)
elseif(WEBGL)
elseif (WASM)
# Avoid strict-vtable-pointers here, it is broken in WebAssembly.
set(OPTIMIZATION_FLAGS -fvisibility-inlines-hidden)
else()

View File

@@ -53,7 +53,7 @@ install(DIRECTORY ${PUBLIC_HDR_DIR}/image DESTINATION include)
# ==================================================================================================
# Tests
# ==================================================================================================
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WEBGL AND NOT IOS AND NOT FILAMENT_SKIP_SDL2)
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WASM AND NOT IOS AND NOT FILAMENT_SKIP_SDL2)
add_executable(test_${TARGET} tests/test_image.cpp)
target_link_libraries(test_${TARGET} PRIVATE imageio gtest)
set_target_properties(test_${TARGET} PROPERTIES FOLDER Tests)

View File

@@ -17,9 +17,9 @@ target_link_libraries(imagediff PRIVATE
)
if (NOT ANDROID AND NOT WEBGL AND NOT IOS)
if (NOT ANDROID AND NOT WASM AND NOT IOS)
add_executable(test_imagediff tests/test_ImageDiff.cpp)
target_link_libraries(test_imagediff PRIVATE imagediff gtest image utils)
endif()
install(TARGETS imagediff ARCHIVE DESTINATION lib/${DIST_ARCH} LIBRARY DESTINATION lib/${DIST_ARCH})
install(TARGETS imagediff ARCHIVE DESTINATION lib/${DIST_DIR} LIBRARY DESTINATION lib/${DIST_DIR})

View File

@@ -45,7 +45,7 @@ install(DIRECTORY ${PUBLIC_HDR_DIR}/imageio-lite DESTINATION include)
# ==================================================================================================
# Tests
# ==================================================================================================
if (NOT ANDROID AND NOT WEBGL AND NOT IOS)
if (NOT ANDROID AND NOT WASM AND NOT IOS)
add_executable(test_${TARGET} tests/test_imageio-lite.cpp)
target_link_libraries(test_${TARGET} PRIVATE ${TARGET} image gtest)
set_target_properties(test_${TARGET} PROPERTIES FOLDER Tests)

View File

@@ -60,7 +60,7 @@ endfunction()
add_testfile(color_grid_uastc_zstd.ktx2)
add_testfile(lightroom_ibl.ktx)
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WEBGL AND NOT IOS)
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WASM AND NOT IOS)
add_executable(test_ktxreader tests/test_ktxreader.cpp ${TESTFILES})
target_link_libraries(test_ktxreader PRIVATE ${TARGET} gtest)
set_target_properties(test_ktxreader PROPERTIES FOLDER Tests)

View File

@@ -115,7 +115,7 @@ if (APPLE)
list(APPEND SRCS src/darwin/Systrace.cpp)
list(APPEND SRCS src/darwin/Tracing.cpp)
endif()
if (WEBGL)
if (WASM)
list(APPEND SRCS src/web/Path.cpp)
endif()
@@ -208,12 +208,12 @@ if (FILAMENT_BUILD_TESTING)
test/test_Status.cpp
)
if (WEBGL_PTHREADS)
if (WASM_PTHREADS)
target_compile_definitions(${TARGET} PUBLIC -DFILAMENT_WASM_THREADS)
endif()
# The Path tests are platform-specific
if (NOT WEBGL)
if (NOT WASM)
if (WIN32)
list(APPEND TEST_SRCS test/test_WinPath.cpp)
else()
@@ -231,7 +231,7 @@ endif()
# Benchmarks
# ==================================================================================================
if (FILAMENT_BUILD_TESTING AND NOT WEBGL)
if (FILAMENT_BUILD_TESTING AND NOT WASM)
add_library(benchmark_${TARGET}_callee SHARED benchmark/benchmark_callee.cpp)
set_target_properties(benchmark_${TARGET}_callee PROPERTIES FOLDER Benchmarks)

View File

@@ -57,7 +57,7 @@ install(DIRECTORY ${PUBLIC_HDR_DIR}/viewer DESTINATION include)
# ==================================================================================================
# Tests
# ==================================================================================================
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WEBGL AND NOT IOS)
if (FILAMENT_BUILD_TESTING AND NOT ANDROID AND NOT WASM AND NOT IOS)
add_executable(test_settings tests/test_settings.cpp)
target_link_libraries(test_settings PRIVATE ${TARGET} gtest)
set_target_properties(test_settings PROPERTIES FOLDER Tests)

View File

@@ -21,6 +21,8 @@ if(PLATFORM_NAME STREQUAL "iphonesimulator")
add_definitions(-DFILAMENT_IOS_SIMULATOR)
# The simulator only supports iOS >= 13.0
set(IOS_MIN_TARGET "13.0")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -target ${IOS_ARCH}-apple-ios${IOS_MIN_TARGET}-simulator")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -target ${IOS_ARCH}-apple-ios${IOS_MIN_TARGET}-simulator")
endif()
SET(CMAKE_SYSTEM_NAME Darwin)

View File

@@ -15,11 +15,11 @@ set(WEBP_BUILD_WEBPMUX OFF)
set(WEBP_BUILD_EXTRAS OFF)
set(WEBP_BUILD_FUZZTEST OFF)
if (WEBGL)
if (WASM)
set(WEBP_BUILD_WEBP_JS ON)
set(WEBP_ENABLE_SIMD OFF)
# ensure non-empty config var value
if (WEBGL_PTHREADS)
if (WASM_PTHREADS)
set(WEBP_USE_THREAD ON)
else()
set(WEBP_USE_THREAD OFF)

View File

@@ -5,7 +5,7 @@ This directory contains the web-based samples, tutorials, and the JavaScript wra
## Structure
- `examples/`
Contains the source for the WebGL tutorials, HTML samples, materials, and assets.
Contains the source for the Web tutorials, HTML samples, materials, and assets.
These examples use `filament.js` and `filament.wasm` to demonstrate various features of the engine.
- `filament-js/`
@@ -13,7 +13,7 @@ This directory contains the web-based samples, tutorials, and the JavaScript wra
## Building the Web Examples
To build the WebGL targets and compile all required materials and assets, you will need the Emscripten SDK installed and activated.
To build the Web targets and compile all required materials and assets, you will need the Emscripten SDK installed and activated.
1. **Activate Emscripten SDK:**
Make sure you have `EMSDK` in your environment.
@@ -24,15 +24,15 @@ To build the WebGL targets and compile all required materials and assets, you wi
```
2. **Run the Build Script:**
From the root directory of the repository, execute the build script targeting WebGL:
From the root directory of the repository, execute the build script targeting Web:
```bash
./build.sh -p webgl release
./build.sh -p wasm release
```
This will:
- Compile the C++ engine to `filament.wasm` and `filament.js`.
- Build all materials (`.mat` to `.filamat`) and process textures required by the examples.
- Output everything into `out/cmake-webgl-release/examples/`.
- Output everything into `out/cmake-wasm-release/examples/`.
## Running the Examples
@@ -71,7 +71,7 @@ If you want your web sample or tutorial to appear on the official Filament docum
Add your generated `.html` or `.md` file to the mapping in `docs_src/build/duplicates.json`. This
tells the documentation build script to copy your sample into the `mdbook` structure.
```json
"out/cmake-webgl-release/web/examples/examples/your_sample/your_sample.html": {
"out/cmake-wasm-release/web/examples/examples/your_sample/your_sample.html": {
"dest": "samples/web/your_sample.md"
}
```

View File

@@ -42,7 +42,7 @@ def find_examples_dir():
examples_dir = find_examples_dir()
if not examples_dir:
print("Could not find the built examples directory in out/. Please build the webgl target first.", file=sys.stderr)
print("Could not find the built examples directory in out/. Please build the wasm target first.", file=sys.stderr)
# fallback to web/examples for testing, though it won't have the built assets
examples_dir = str(SCRIPT_DIR)

View File

@@ -17,7 +17,7 @@ set(CPP_SRC
# The emcc options are not documented well, the best place to find them is the source:
# https://github.com/kripken/emscripten/blob/main/src/settings.js
if (WEBGL_PTHREADS)
if (WASM_PTHREADS)
set(COPTS "${COPTS} -pthread")
set(LOPTS "${LOPTS} -pthread")
endif()

View File

@@ -22,7 +22,7 @@ To publish a new package to npm, do the following.
3. Edit the version number in `package.json`. You cannot publish the same version more than once.
4. From the root folder in your Filament repo, do:
```
./build.sh -ap webgl release
./build.sh -ap wasm release
./build.sh -ap all release
```
5. Make a commit and a tag whose label is the 3-tiered version number prefixed with a `v`:
@@ -36,7 +36,7 @@ git commit && git tag -a v{XX}.{YY}.{ZZ}
:---: | :---
```
cd out/cmake-webgl-release/web/filament-js
cd out/cmake-wasm-release/web/filament-js
npm publish --dry-run
```
8. If the output of the dry run looks okay to you (double check the version number!), then finally

View File

@@ -16,7 +16,7 @@
/*
* This file exists only to test the buildability of our TypeScript annotations, To run the test,
* invoke Filament's easy build script with "./build.sh -up webgl release", or do:
* invoke Filament's easy build script with "./build.sh -up wasm release", or do:
*
* npx tsc --noEmit \
* ../../third_party/gl-matrix/gl-matrix.d.ts \