diff --git a/CMakeLists.txt b/CMakeLists.txt
index eb079a8..1a2c409 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,7 +20,7 @@ set(EXTERNAL_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/external)
set(CMAKE_TOOLCHAIN_FILE ${EXTERNAL_ROOT}/vcpkg/scripts/buildsystems/vcpkg.cmake)
set(CRCPP_ROOT ${EXTERNAL_ROOT}/CRCpp)
-set(TTFPARSER_ROOT ${EXTERNAL_ROOT}/ttf-parser)
+set(METAL_ROOT ${EXTERNAL_ROOT}/metal-cpp)
set(Boost_NO_WARN_NEW_VERSIONS 1)
@@ -77,6 +77,7 @@ target_link_libraries(Engine PUBLIC GPUOpen::VulkanMemoryAllocator)
target_link_libraries(Engine PUBLIC shader-slang)
if(APPLE)
target_link_directories(Engine PUBLIC /usr/local/lib)
+ target_link_libraries(Engine PUBLIC metal)
endif()
if(UNIX)
target_link_libraries(Engine PUBLIC Threads::Threads)
@@ -142,6 +143,7 @@ install(
Editor
Engine
crcpp
+ metal
EXPORT
EngineTargets
FILE_SET HEADERS
diff --git a/cmake/SuperBuild.cmake b/cmake/SuperBuild.cmake
index d0d1a40..6a94938 100644
--- a/cmake/SuperBuild.cmake
+++ b/cmake/SuperBuild.cmake
@@ -1,68 +1,5 @@
include (ExternalProject)
-#--------------ZLIB------------------------------
-#add_subdirectory(${ZLIB_ROOT} ${ZLIB_ROOT})
-
-#--------------FreeType------------------------------
-#add_subdirectory(${FREETYPE_ROOT})
-
-#------------ASSIMP---------------
-#set(ASSIMP_BUILD_TESTS OFF CACHE INTERNAL "")
-#set(ASSIMP_BUILD_SAMPLES OFF CACHE INTERNAL "")
-#set(ASSIMP_BUILD_OVERALLS OFF CACHE INTERNAL "")
-#set(ASSIMP_BUILD_ASSIMP_TOOLS OFF CACHE INTERNAL "")
-#add_subdirectory(${ASSIMP_ROOT})
-#target_compile_definitions(assimp PRIVATE _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING)
-#if(WIN32)
-# target_compile_options(assimp PRIVATE /WX- /MP14)
-#else()
-# target_compile_options(assimp PRIVATE -Wno-error -fPIC)
-# target_compile_options(IrrXML PRIVATE -fPIC)
-#endif()
-
-#-----------------KTX----------------------------
-#set(KTX_FEATURE_TESTS off)
-#set(KTX_FEATURE_TOOLS off)
-#
-#add_subdirectory(${KTX_ROOT})
-#
-#if(MSVC)
-# target_compile_options(ktx PRIVATE /WX-)
-#else()
-# target_compile_options(ktx PRIVATE -Wno-error)
-#endif()
-
-#--------------------JSON------------------
-#set(JSON_MultipleHeaders ON CACHE INTERNAL "")
-#set(JSON_BuildTests OFF CACHE INTERNAL "")
-#set(JSON_Install ON CACHE INTERNAL "")
-#
-#add_subdirectory(${JSON_ROOT})
-
-
-#--------------GLFW------------------------------
-#set(ENKITS_BUILD_EXAMPLES OFF CACHE BOOL "Build basic example applications" )
-#set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "GLFW lib only" )
-#set(GLFW_BUILD_TESTS OFF CACHE BOOL "GLFW lib only" )
-#set(GLFW_BUILD_DOCS OFF CACHE BOOL "GLFW lib only" )
-#set(GLFW_BUILD_INSTALL OFF CACHE BOOL "GLFW lib only" )
-#set(GLFW_VULKAN_STATIC OFF CACHE BOOL "GLFW vulkan static")
-#
-#add_subdirectory(${GLFW_ROOT})
-
-#--------------EnTT------------------------------
-#add_subdirectory(${ENTT_ROOT})
-
-#--------------thread-pool------------------------------
-#set(TP_BUILD_TESTS OFF)
-#set(TP_BUILD_EXAMPLES OFF)
-#set(TP_BUILD_BENCHMARKS OFF)
-#
-#add_subdirectory(${THREADPOOL_ROOT})
-
-#if(MSVC)
-# target_compile_options(ThreadPool INTERFACE /W0)
-#endif()
#--------------SLang------------------------------
add_library(shader-slang-glslang SHARED IMPORTED)
@@ -95,90 +32,6 @@ target_include_directories(shader-slang INTERFACE
$
$
)
-#string(TOLOWER release_x64 SLANG_CONFIG)
-#if(WIN32)
-#string(TOLOWER ${SLANG_ROOT}/bin/windows-x64/release SLANG_BINARY_DIR)
-#ExternalProject_Add(slang-build
-# SOURCE_DIR ${SLANG_ROOT}
-# BINARY_DIR ${SLANG_ROOT}
-# CONFIGURE_COMMAND ${SLANG_ROOT}/premake.bat vs2019 --file=${SLANG_ROOT}/premake5.lua --arch=x64 --deps=true
-# BUILD_COMMAND msbuild -p:PlatformToolset=v143 -p:Configuration=Release -p:Platform=x64 slang.sln
-# INSTALL_COMMAND ""
-#)
-#elseif(UNIX)
-#set(SLANG_BINARY_DIR ${SLANG_ROOT}/bin/linux-x64/release)
-#ExternalProject_Add(slang-build
-# SOURCE_DIR ${SLANG_ROOT}
-# BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}
-# CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/premake5 --file=${CMAKE_SOURCE_DIR}/external/slang/premake5.lua gmake2 --arch=x64 --deps=true --build-location=build/linux
-# BUILD_COMMAND make -C ${CMAKE_SOURCE_DIR}/external/slang/build/linux config=${SLANG_CONFIG}
-# INSTALL_COMMAND ""
-#)
-#endif()
-#
-#add_library(slang-llvm SHARED IMPORTED)
-#if(WIN32)
-# target_link_libraries(slang-llvm INTERFACE
-# $
-# $
-# )
-# set_target_properties(slang-llvm PROPERTIES IMPORTED_IMPLIB ${SLANG_BINARY_DIR}/slang.lib)
-# set_target_properties(slang-llvm PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/slang-llvm.dll)
-#else()
-# set_target_properties(slang-llvm PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/libslang-llvm.so)
-#endif()
-#
-#add_library(slang-glslang SHARED IMPORTED)
-#
-#if(WIN32)
-# target_link_libraries(slang-glslang INTERFACE
-# $
-# $
-# )
-# set_target_properties(slang-glslang PROPERTIES IMPORTED_IMPLIB ${SLANG_BINARY_DIR}/slang.lib)
-# set_target_properties(slang-glslang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/slang-glslang.dll)
-#else()
-# set_target_properties(slang-glslang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/libslang-glslang.so)
-#endif()
-#
-#add_library(slang SHARED IMPORTED)
-#
-#target_include_directories(slang INTERFACE
-# $
-# $
-#)
-#if(WIN32)
-# target_link_libraries(slang INTERFACE
-# $
-# $
-# )
-# set_target_properties(slang PROPERTIES IMPORTED_IMPLIB ${SLANG_BINARY_DIR}/slang.lib)
-# set_target_properties(slang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/slang.dll)
-#else()
-# set_target_properties(slang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/libslang.so)
-#endif()
-#target_link_libraries(slang INTERFACE slang-glslang)
-#target_link_libraries(slang INTERFACE slang-llvm)
-#
-#install(DIRECTORY
-# ${SLANG_ROOT}
-# DESTINATION ${CMAKE_INSTALL_PREFIX}/include
-# FILES_MATCHING PATTERN "*.h"
-#)
-#
-#install(FILES
-# $
-# $
-# $
-# DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
-#)
-#
-#install(FILES
-# $
-# $
-# $
-# DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
-#)
#--------------CRC++------------------------------
add_library(crcpp INTERFACE)
@@ -193,36 +46,19 @@ install(FILES
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
)
-#--------------GLM------------------------------
-#add_library(glm INTERFACE)
-#target_include_directories(glm INTERFACE
-# $
-# $
-#)
-#
-#install(DIRECTORY
-# ${GLM_ROOT}/glm
-# DESTINATION ${CMAKE_INSTALL_PREFIX}/include
-# FILES_MATCHING PATTERN "*.h*"
-#)
-#
-#install(DIRECTORY
-# ${GLM_ROOT}/glm
-# DESTINATION ${CMAKE_INSTALL_PREFIX}/include
-# FILES_MATCHING PATTERN "*.inl"
-#)
-#
-##--------------STB-----------------------------------
-#add_library(stb INTERFACE)
-#
-#target_include_directories(stb INTERFACE
-# $
-# $
-#)
-#
-#install(DIRECTORY
-# ${STB_ROOT}
-# DESTINATION ${CMAKE_INSTALL_PREFIX}/include
-# FILES_MATCHING PATTERN "*.h"
-#)
-#
\ No newline at end of file
+add_library(metal INTERFACE)
+target_include_directories(metal INTERFACE
+ $
+ $
+)
+install(DIRECTORY
+ ${METAL_ROOT}/
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/include
+)
+target_link_libraries(metal INTERFACE
+ "-framework Metal"
+ "-framework MetalKit"
+ "-framework AppKit"
+ "-framework Foundation"
+ "-framework QuartzCore"
+)
diff --git a/external/metal-cpp/Foundation/Foundation.hpp b/external/metal-cpp/Foundation/Foundation.hpp
new file mode 100644
index 0000000..8b64277
--- /dev/null
+++ b/external/metal-cpp/Foundation/Foundation.hpp
@@ -0,0 +1,47 @@
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+//
+// Foundation/Foundation.hpp
+//
+// Copyright 2020-2023 Apple Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+#pragma once
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+#include "NSArray.hpp"
+#include "NSAutoreleasePool.hpp"
+#include "NSBundle.hpp"
+#include "NSData.hpp"
+#include "NSDate.hpp"
+#include "NSDefines.hpp"
+#include "NSDictionary.hpp"
+#include "NSEnumerator.hpp"
+#include "NSError.hpp"
+#include "NSLock.hpp"
+#include "NSNotification.hpp"
+#include "NSNumber.hpp"
+#include "NSObject.hpp"
+#include "NSPrivate.hpp"
+#include "NSProcessInfo.hpp"
+#include "NSRange.hpp"
+#include "NSSet.hpp"
+#include "NSSharedPtr.hpp"
+#include "NSString.hpp"
+#include "NSTypes.hpp"
+#include "NSURL.hpp"
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
diff --git a/external/metal-cpp/Foundation/NSArray.hpp b/external/metal-cpp/Foundation/NSArray.hpp
new file mode 100644
index 0000000..7ccdb80
--- /dev/null
+++ b/external/metal-cpp/Foundation/NSArray.hpp
@@ -0,0 +1,115 @@
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+//
+// Foundation/NSArray.hpp
+//
+// Copyright 2020-2023 Apple Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+#pragma once
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+#include "NSObject.hpp"
+#include "NSTypes.hpp"
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+namespace NS
+{
+class Array : public Copying
+{
+public:
+ static Array* array();
+ static Array* array(const Object* pObject);
+ static Array* array(const Object* const* pObjects, UInteger count);
+
+ static Array* alloc();
+
+ Array* init();
+ Array* init(const Object* const* pObjects, UInteger count);
+ Array* init(const class Coder* pCoder);
+
+ template
+ _Object* object(UInteger index) const;
+ UInteger count() const;
+};
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Array* NS::Array::array()
+{
+ return Object::sendMessage(_NS_PRIVATE_CLS(NSArray), _NS_PRIVATE_SEL(array));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Array* NS::Array::array(const Object* pObject)
+{
+ return Object::sendMessage(_NS_PRIVATE_CLS(NSArray), _NS_PRIVATE_SEL(arrayWithObject_), pObject);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Array* NS::Array::array(const Object* const* pObjects, UInteger count)
+{
+ return Object::sendMessage(_NS_PRIVATE_CLS(NSArray), _NS_PRIVATE_SEL(arrayWithObjects_count_), pObjects, count);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Array* NS::Array::alloc()
+{
+ return NS::Object::alloc(_NS_PRIVATE_CLS(NSArray));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Array* NS::Array::init()
+{
+ return NS::Object::init();
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Array* NS::Array::init(const Object* const* pObjects, UInteger count)
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(initWithObjects_count_), pObjects, count);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Array* NS::Array::init(const class Coder* pCoder)
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::UInteger NS::Array::count() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(count));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+template
+_NS_INLINE _Object* NS::Array::object(UInteger index) const
+{
+ return Object::sendMessage<_Object*>(this, _NS_PRIVATE_SEL(objectAtIndex_), index);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
diff --git a/external/metal-cpp/Foundation/NSAutoreleasePool.hpp b/external/metal-cpp/Foundation/NSAutoreleasePool.hpp
new file mode 100644
index 0000000..3008590
--- /dev/null
+++ b/external/metal-cpp/Foundation/NSAutoreleasePool.hpp
@@ -0,0 +1,83 @@
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+//
+// Foundation/NSAutoreleasePool.hpp
+//
+// Copyright 2020-2023 Apple Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+#pragma once
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+#include "NSDefines.hpp"
+#include "NSObject.hpp"
+#include "NSPrivate.hpp"
+#include "NSTypes.hpp"
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+namespace NS
+{
+class AutoreleasePool : public Object
+{
+public:
+ static AutoreleasePool* alloc();
+ AutoreleasePool* init();
+
+ void drain();
+
+ void addObject(Object* pObject);
+
+ static void showPools();
+};
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::AutoreleasePool* NS::AutoreleasePool::alloc()
+{
+ return NS::Object::alloc(_NS_PRIVATE_CLS(NSAutoreleasePool));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::AutoreleasePool* NS::AutoreleasePool::init()
+{
+ return NS::Object::init();
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE void NS::AutoreleasePool::drain()
+{
+ Object::sendMessage(this, _NS_PRIVATE_SEL(drain));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE void NS::AutoreleasePool::addObject(Object* pObject)
+{
+ Object::sendMessage(this, _NS_PRIVATE_SEL(addObject_), pObject);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE void NS::AutoreleasePool::showPools()
+{
+ Object::sendMessage(_NS_PRIVATE_CLS(NSAutoreleasePool), _NS_PRIVATE_SEL(showPools));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
diff --git a/external/metal-cpp/Foundation/NSBundle.hpp b/external/metal-cpp/Foundation/NSBundle.hpp
new file mode 100644
index 0000000..323d93f
--- /dev/null
+++ b/external/metal-cpp/Foundation/NSBundle.hpp
@@ -0,0 +1,374 @@
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+//
+// Foundation/NSBundle.hpp
+//
+// Copyright 2020-2023 Apple Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+#pragma once
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+#include "NSDefines.hpp"
+#include "NSNotification.hpp"
+#include "NSObject.hpp"
+#include "NSTypes.hpp"
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+namespace NS
+{
+_NS_CONST(NotificationName, BundleDidLoadNotification);
+_NS_CONST(NotificationName, BundleResourceRequestLowDiskSpaceNotification);
+
+class String* LocalizedString(const String* pKey, const String*);
+class String* LocalizedStringFromTable(const String* pKey, const String* pTbl, const String*);
+class String* LocalizedStringFromTableInBundle(const String* pKey, const String* pTbl, const class Bundle* pBdle, const String*);
+class String* LocalizedStringWithDefaultValue(const String* pKey, const String* pTbl, const class Bundle* pBdle, const String* pVal, const String*);
+
+class Bundle : public Referencing
+{
+public:
+ static Bundle* mainBundle();
+
+ static Bundle* bundle(const class String* pPath);
+ static Bundle* bundle(const class URL* pURL);
+
+ static Bundle* alloc();
+
+ Bundle* init(const class String* pPath);
+ Bundle* init(const class URL* pURL);
+
+ class Array* allBundles() const;
+ class Array* allFrameworks() const;
+
+ bool load();
+ bool unload();
+
+ bool isLoaded() const;
+
+ bool preflightAndReturnError(class Error** pError) const;
+ bool loadAndReturnError(class Error** pError);
+
+ class URL* bundleURL() const;
+ class URL* resourceURL() const;
+ class URL* executableURL() const;
+ class URL* URLForAuxiliaryExecutable(const class String* pExecutableName) const;
+
+ class URL* privateFrameworksURL() const;
+ class URL* sharedFrameworksURL() const;
+ class URL* sharedSupportURL() const;
+ class URL* builtInPlugInsURL() const;
+ class URL* appStoreReceiptURL() const;
+
+ class String* bundlePath() const;
+ class String* resourcePath() const;
+ class String* executablePath() const;
+ class String* pathForAuxiliaryExecutable(const class String* pExecutableName) const;
+
+ class String* privateFrameworksPath() const;
+ class String* sharedFrameworksPath() const;
+ class String* sharedSupportPath() const;
+ class String* builtInPlugInsPath() const;
+
+ class String* bundleIdentifier() const;
+ class Dictionary* infoDictionary() const;
+ class Dictionary* localizedInfoDictionary() const;
+ class Object* objectForInfoDictionaryKey(const class String* pKey);
+
+ class String* localizedString(const class String* pKey, const class String* pValue = nullptr, const class String* pTableName = nullptr) const;
+};
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_PRIVATE_DEF_CONST(NS::NotificationName, BundleDidLoadNotification);
+_NS_PRIVATE_DEF_CONST(NS::NotificationName, BundleResourceRequestLowDiskSpaceNotification);
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::LocalizedString(const String* pKey, const String*)
+{
+ return Bundle::mainBundle()->localizedString(pKey, nullptr, nullptr);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::LocalizedStringFromTable(const String* pKey, const String* pTbl, const String*)
+{
+ return Bundle::mainBundle()->localizedString(pKey, nullptr, pTbl);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::LocalizedStringFromTableInBundle(const String* pKey, const String* pTbl, const Bundle* pBdl, const String*)
+{
+ return pBdl->localizedString(pKey, nullptr, pTbl);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::LocalizedStringWithDefaultValue(const String* pKey, const String* pTbl, const Bundle* pBdl, const String* pVal, const String*)
+{
+ return pBdl->localizedString(pKey, pVal, pTbl);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Bundle* NS::Bundle::mainBundle()
+{
+ return Object::sendMessage(_NS_PRIVATE_CLS(NSBundle), _NS_PRIVATE_SEL(mainBundle));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Bundle* NS::Bundle::bundle(const class String* pPath)
+{
+ return Object::sendMessage(_NS_PRIVATE_CLS(NSBundle), _NS_PRIVATE_SEL(bundleWithPath_), pPath);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Bundle* NS::Bundle::bundle(const class URL* pURL)
+{
+ return Object::sendMessage(_NS_PRIVATE_CLS(NSBundle), _NS_PRIVATE_SEL(bundleWithURL_), pURL);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Bundle* NS::Bundle::alloc()
+{
+ return Object::sendMessage(_NS_PRIVATE_CLS(NSBundle), _NS_PRIVATE_SEL(alloc));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Bundle* NS::Bundle::init(const String* pPath)
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(initWithPath_), pPath);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Bundle* NS::Bundle::init(const URL* pURL)
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(initWithURL_), pURL);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Array* NS::Bundle::allBundles() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(allBundles));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Array* NS::Bundle::allFrameworks() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(allFrameworks));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE bool NS::Bundle::load()
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(load));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE bool NS::Bundle::unload()
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(unload));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE bool NS::Bundle::isLoaded() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(isLoaded));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE bool NS::Bundle::preflightAndReturnError(Error** pError) const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(preflightAndReturnError_), pError);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE bool NS::Bundle::loadAndReturnError(Error** pError)
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(loadAndReturnError_), pError);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::URL* NS::Bundle::bundleURL() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(bundleURL));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::URL* NS::Bundle::resourceURL() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(resourceURL));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::URL* NS::Bundle::executableURL() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(executableURL));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::URL* NS::Bundle::URLForAuxiliaryExecutable(const String* pExecutableName) const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(URLForAuxiliaryExecutable_), pExecutableName);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::URL* NS::Bundle::privateFrameworksURL() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(privateFrameworksURL));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::URL* NS::Bundle::sharedFrameworksURL() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(sharedFrameworksURL));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::URL* NS::Bundle::sharedSupportURL() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(sharedSupportURL));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::URL* NS::Bundle::builtInPlugInsURL() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(builtInPlugInsURL));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::URL* NS::Bundle::appStoreReceiptURL() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(appStoreReceiptURL));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::Bundle::bundlePath() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(bundlePath));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::Bundle::resourcePath() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(resourcePath));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::Bundle::executablePath() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(executablePath));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::Bundle::pathForAuxiliaryExecutable(const String* pExecutableName) const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(pathForAuxiliaryExecutable_), pExecutableName);
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::Bundle::privateFrameworksPath() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(privateFrameworksPath));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::Bundle::sharedFrameworksPath() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(sharedFrameworksPath));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::Bundle::sharedSupportPath() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(sharedSupportPath));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::Bundle::builtInPlugInsPath() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(builtInPlugInsPath));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::String* NS::Bundle::bundleIdentifier() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(bundleIdentifier));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Dictionary* NS::Bundle::infoDictionary() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(infoDictionary));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Dictionary* NS::Bundle::localizedInfoDictionary() const
+{
+ return Object::sendMessage(this, _NS_PRIVATE_SEL(localizedInfoDictionary));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+_NS_INLINE NS::Object* NS::Bundle::objectForInfoDictionaryKey(const String* pKey)
+{
+ return Object::sendMessage