Merge branch 'development' into Atom/jromnoa/fix-asset-path-calls-to-use-new-asset-test-class
This commit is contained in:
@@ -548,7 +548,6 @@ public:
|
||||
{ "BatchMode", m_bConsoleMode },
|
||||
{ "NullRenderer", m_bNullRenderer },
|
||||
{ "devmode", m_bDeveloperMode },
|
||||
{ "VTUNE", dummy },
|
||||
{ "runpython", m_bRunPythonScript },
|
||||
{ "runpythontest", m_bRunPythonTestScript },
|
||||
{ "version", m_bShowVersionInfo },
|
||||
|
||||
@@ -60,15 +60,6 @@
|
||||
#include <LmbrCentral/Audio/AudioSystemComponentBus.h>
|
||||
#include <LmbrCentral/Rendering/EditorLightComponentBus.h> // for LmbrCentral::EditorLightComponentRequestBus
|
||||
|
||||
//#define PROFILE_LOADING_WITH_VTUNE
|
||||
|
||||
// profilers api.
|
||||
//#include "pure.h"
|
||||
#ifdef PROFILE_LOADING_WITH_VTUNE
|
||||
#include "C:\Program Files\Intel\Vtune\Analyzer\Include\VTuneApi.h"
|
||||
#pragma comment(lib,"C:\\Program Files\\Intel\\Vtune\\Analyzer\\Lib\\VTuneApi.lib")
|
||||
#endif
|
||||
|
||||
static const char* kAutoBackupFolder = "_autobackup";
|
||||
static const char* kHoldFolder = "$tmp_hold"; // conform to the ignored file types $tmp[0-9]*_ regex
|
||||
static const char* kSaveBackupFolder = "_savebackup";
|
||||
@@ -408,9 +399,6 @@ void CCryEditDoc::Load(TDocMultiArchive& arrXmlAr, const QString& szFilename)
|
||||
|
||||
int t0 = GetTickCount();
|
||||
|
||||
#ifdef PROFILE_LOADING_WITH_VTUNE
|
||||
VTResume();
|
||||
#endif
|
||||
// Load level-specific audio data.
|
||||
AZStd::string levelFileName{ fileName.toUtf8().constData() };
|
||||
AZStd::to_lower(levelFileName.begin(), levelFileName.end());
|
||||
@@ -484,10 +472,6 @@ void CCryEditDoc::Load(TDocMultiArchive& arrXmlAr, const QString& szFilename)
|
||||
|
||||
CSurfaceTypeValidator().Validate();
|
||||
|
||||
#ifdef PROFILE_LOADING_WITH_VTUNE
|
||||
VTPause();
|
||||
#endif
|
||||
|
||||
LogLoadTime(GetTickCount() - t0);
|
||||
// Loaded with success, remove event from log file
|
||||
GetIEditor()->GetSettingsManager()->UnregisterEvent(loadEvent);
|
||||
|
||||
+19
-13
@@ -10,6 +10,8 @@
|
||||
#include <AzCore/IO/SystemFile.h>
|
||||
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
||||
|
||||
#include <AzFramework/Process/ProcessWatcher.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -24,14 +26,20 @@ namespace AzFramework::AssetSystem::Platform
|
||||
AZ::IO::FixedMaxPath assetProcessorPath{ executableDirectory };
|
||||
// In Mac the Editor and game is within a bundle, so the path to the sibling app
|
||||
// has to go up from the Contents/MacOS folder the binary is in
|
||||
assetProcessorPath /= "../../../AssetProcessor.app";
|
||||
assetProcessorPath /= "../../../AssetProcessor.app/Contents/MacOS/AssetProcessor";
|
||||
assetProcessorPath = assetProcessorPath.LexicallyNormal();
|
||||
|
||||
if (!AZ::IO::SystemFile::Exists(assetProcessorPath.c_str()))
|
||||
{
|
||||
// Check for existence of one under a "bin" directory, i.e. engineRoot is an SDK structure.
|
||||
assetProcessorPath =
|
||||
AZ::IO::FixedMaxPath{engineRoot} / "bin" / AZ_TRAIT_OS_PLATFORM_NAME / AZ_BUILD_CONFIGURATION_TYPE / "AssetProcessor.app";
|
||||
if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
|
||||
{
|
||||
if (AZ::IO::FixedMaxPath installedBinariesPath;
|
||||
settingsRegistry->Get(installedBinariesPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_InstalledBinaryFolder))
|
||||
{
|
||||
// Check for existence of one under a "bin" directory, i.e. engineRoot is an SDK structure.
|
||||
assetProcessorPath = AZ::IO::FixedMaxPath{ engineRoot } / installedBinariesPath / "AssetProcessor.app/Contents/MacOS/AssetProcessor";
|
||||
}
|
||||
}
|
||||
|
||||
if (!AZ::IO::SystemFile::Exists(assetProcessorPath.c_str()))
|
||||
{
|
||||
@@ -39,23 +47,21 @@ namespace AzFramework::AssetSystem::Platform
|
||||
}
|
||||
}
|
||||
|
||||
auto fullLaunchCommand = AZ::IO::FixedMaxPathString::format(R"(open -g "%s" --args --start-hidden)", assetProcessorPath.c_str());
|
||||
AZStd::string commandLineParams;
|
||||
// Add the engine path to the launch command if not empty
|
||||
if (!engineRoot.empty())
|
||||
{
|
||||
fullLaunchCommand += R"( --engine-path=")";
|
||||
fullLaunchCommand += engineRoot;
|
||||
fullLaunchCommand += '"';
|
||||
commandLineParams += AZStd::string::format("\"--engine-path=\"%s\"\"", engineRoot.data());
|
||||
}
|
||||
|
||||
// Add the active project path to the launch command if not empty
|
||||
if (!projectPath.empty())
|
||||
{
|
||||
fullLaunchCommand += R"( --project-path=")";
|
||||
fullLaunchCommand += projectPath;
|
||||
fullLaunchCommand += '"';
|
||||
commandLineParams += AZStd::string::format(" \"--regset=/Amazon/AzCore/Bootstrap/project_path=\"%s\"\"", projectPath.data());
|
||||
}
|
||||
|
||||
return system(fullLaunchCommand.c_str()) == 0;
|
||||
AzFramework::ProcessLauncher::ProcessLaunchInfo processLaunchInfo;
|
||||
processLaunchInfo.m_processExecutableString = AZStd::move(assetProcessorPath.Native());
|
||||
processLaunchInfo.m_commandlineParameters = commandLineParams;
|
||||
return AzFramework::ProcessLauncher::LaunchUnwatchedProcess(processLaunchInfo);
|
||||
}
|
||||
}
|
||||
|
||||
+23
@@ -54,6 +54,7 @@ namespace AzFramework
|
||||
RECT m_windowRectToRestoreOnFullScreenExit; //!< The position and size of the window to restore when exiting full screen.
|
||||
UINT m_windowStyleToRestoreOnFullScreenExit; //!< The style(s) of the window to restore when exiting full screen.
|
||||
bool m_isInBorderlessWindowFullScreenState = false; //!< Was a borderless window used to enter full screen state?
|
||||
bool m_shouldEnterFullScreenStateOnActivate = false; //!< Should we enter full screen state when the window is activated?
|
||||
|
||||
using GetDpiForWindowType = UINT(HWND hwnd);
|
||||
GetDpiForWindowType* m_getDpiFunction = nullptr;
|
||||
@@ -249,6 +250,28 @@ namespace AzFramework
|
||||
AzFramework::RawInputNotificationBusWindows::Broadcast(&AzFramework::RawInputNotificationsWindows::OnRawInputCodeUnitUTF16Event, codeUnitUTF16);
|
||||
break;
|
||||
}
|
||||
case WM_ACTIVATE:
|
||||
{
|
||||
// Alt-tabbing out of the app while it is in a full screen state does not
|
||||
// work unless we explicitly exit the full screen state upon deactivation,
|
||||
// in which case we want to enter full screen state again upon activation.
|
||||
const bool windowIsNowInactive = (LOWORD(wParam) == WA_INACTIVE);
|
||||
const bool windowFullScreenState = nativeWindowImpl->GetFullScreenState();
|
||||
if (windowIsNowInactive &&
|
||||
windowFullScreenState)
|
||||
{
|
||||
nativeWindowImpl->m_shouldEnterFullScreenStateOnActivate = true;
|
||||
nativeWindowImpl->SetFullScreenState(false);
|
||||
}
|
||||
else if (!windowIsNowInactive &&
|
||||
!windowFullScreenState &&
|
||||
nativeWindowImpl->m_shouldEnterFullScreenStateOnActivate)
|
||||
{
|
||||
nativeWindowImpl->m_shouldEnterFullScreenStateOnActivate = false;
|
||||
nativeWindowImpl->SetFullScreenState(true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_SYSKEYDOWN:
|
||||
{
|
||||
// Handle ALT+ENTER to toggle full screen unless exclsuive full screen
|
||||
|
||||
@@ -739,24 +739,6 @@ public:
|
||||
#undef GetUserName
|
||||
#endif
|
||||
|
||||
|
||||
struct IProfilingSystem
|
||||
{
|
||||
// <interfuscator:shuffle>
|
||||
virtual ~IProfilingSystem() {}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// VTune Profiling interface.
|
||||
|
||||
// Summary:
|
||||
// Resumes vtune data collection.
|
||||
virtual void VTuneResume() = 0;
|
||||
// Summary:
|
||||
// Pauses vtune data collection.
|
||||
virtual void VTunePause() = 0;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// </interfuscator:shuffle>
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Description:
|
||||
@@ -851,7 +833,6 @@ struct ISystem
|
||||
virtual IMovieSystem* GetIMovieSystem() = 0;
|
||||
virtual ::IConsole* GetIConsole() = 0;
|
||||
virtual IRemoteConsole* GetIRemoteConsole() = 0;
|
||||
virtual IProfilingSystem* GetIProfilingSystem() = 0;
|
||||
virtual ISystemEventDispatcher* GetISystemEventDispatcher() = 0;
|
||||
|
||||
virtual ITimer* GetITimer() = 0;
|
||||
|
||||
@@ -76,8 +76,6 @@ public:
|
||||
::IConsole * ());
|
||||
MOCK_METHOD0(GetIRemoteConsole,
|
||||
IRemoteConsole * ());
|
||||
MOCK_METHOD0(GetIProfilingSystem,
|
||||
IProfilingSystem * ());
|
||||
MOCK_METHOD0(GetISystemEventDispatcher,
|
||||
ISystemEventDispatcher * ());
|
||||
MOCK_METHOD0(GetITimer,
|
||||
|
||||
@@ -96,47 +96,6 @@ unsigned countElements (const std::vector<T>& arrT, const T& x)
|
||||
*/
|
||||
namespace stl
|
||||
{
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Compare member of class/struct.
|
||||
//
|
||||
// e.g. Sort Vec3s by x component
|
||||
//
|
||||
// std::sort(vec3s.begin(), vec3s.end(), stl::member_compare<Vec3, float, &Vec3::x>());
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <typename OWNER_TYPE, typename MEMBER_TYPE, MEMBER_TYPE OWNER_TYPE::* MEMBER_PTR, typename EQUALITY = std::less<MEMBER_TYPE> >
|
||||
struct member_compare
|
||||
{
|
||||
inline bool operator () (const OWNER_TYPE& lhs, const OWNER_TYPE& rhs) const
|
||||
{
|
||||
return EQUALITY()(lhs.*MEMBER_PTR, rhs.*MEMBER_PTR);
|
||||
}
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Compare member of class/struct against parameter.
|
||||
//
|
||||
// e.g. Find Vec3 with x component less than 1.0
|
||||
//
|
||||
// std::find_if(vec3s.begin(), vec3s.end(), stl::member_compare_param<Vec3, float, &Vec3::x>(1.0f));
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <typename OWNER_TYPE, typename MEMBER_TYPE, MEMBER_TYPE OWNER_TYPE::* MEMBER_PTR, typename EQUALITY = std::less<MEMBER_TYPE> >
|
||||
struct member_compare_param
|
||||
{
|
||||
inline member_compare_param(const MEMBER_TYPE& _value)
|
||||
: value(_value)
|
||||
{
|
||||
}
|
||||
|
||||
inline bool operator () (const OWNER_TYPE& rhs) const
|
||||
{
|
||||
return EQUALITY()(rhs.*MEMBER_PTR, value);
|
||||
}
|
||||
|
||||
const MEMBER_TYPE& value;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Searches the given entry in the map by key, and if there is none, returns the default value
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
@@ -154,48 +113,6 @@ namespace stl
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Inserts and returns a reference to the given value in the map, or returns the current one if it's already there.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
template <typename Map>
|
||||
inline typename Map::mapped_type& map_insert_or_get(Map& mapKeyToValue, const typename Map::key_type& key, const typename Map::mapped_type& defValue = typename Map::mapped_type())
|
||||
{
|
||||
auto&& iresult = mapKeyToValue.insert(typename Map::value_type(key, defValue));
|
||||
return iresult.first->second;
|
||||
}
|
||||
|
||||
// searches the given entry in the map by key, and if there is none, returns the default value
|
||||
// The values are taken/returned in REFERENCEs rather than values
|
||||
template <typename Key, typename mapped_type, typename Traits, typename Allocator>
|
||||
inline mapped_type& find_in_map_ref(std::map<Key, mapped_type, Traits, Allocator>& mapKeyToValue, const Key& key, mapped_type& valueDefault)
|
||||
{
|
||||
typedef std::map<Key, mapped_type, Traits, Allocator> Map;
|
||||
typename Map::iterator it = mapKeyToValue.find (key);
|
||||
if (it == mapKeyToValue.end())
|
||||
{
|
||||
return valueDefault;
|
||||
}
|
||||
else
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename Key, typename mapped_type, typename Traits, typename Allocator>
|
||||
inline const mapped_type& find_in_map_ref(const std::map<Key, mapped_type, Traits, Allocator>& mapKeyToValue, const Key& key, const mapped_type& valueDefault)
|
||||
{
|
||||
typedef std::map<Key, mapped_type, Traits, Allocator> Map;
|
||||
typename Map::const_iterator it = mapKeyToValue.find (key);
|
||||
if (it == mapKeyToValue.end())
|
||||
{
|
||||
return valueDefault;
|
||||
}
|
||||
else
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Fills vector with contents of map.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
@@ -210,20 +127,6 @@ namespace stl
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Fills vector with contents of set.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
template <class Set, class Vector>
|
||||
inline void set_to_vector(const Set& theSet, Vector& array)
|
||||
{
|
||||
array.resize(0);
|
||||
array.reserve(theSet.size());
|
||||
for (typename Set::const_iterator it = theSet.begin(); it != theSet.end(); ++it)
|
||||
{
|
||||
array.push_back(*it);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Find and erase element from container.
|
||||
// @return true if item was find and erased, false if item not found.
|
||||
@@ -312,48 +215,6 @@ namespace stl
|
||||
return false;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Push back to container unique element.
|
||||
// @return true if item added, false overwise.
|
||||
template <class CONTAINER, class PREDICATE, typename VALUE>
|
||||
inline bool push_back_unique_if(CONTAINER& container, const PREDICATE& predicate, const VALUE& value)
|
||||
{
|
||||
typename CONTAINER::iterator end = container.end();
|
||||
|
||||
if (AZStd::find_if(container.begin(), end, predicate) == end)
|
||||
{
|
||||
container.push_back(value);
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Push back to container contents of another container
|
||||
template <class Container, class Iter>
|
||||
inline void push_back_range(Container& container, Iter begin, Iter end)
|
||||
{
|
||||
for (Iter it = begin; it != end; ++it)
|
||||
{
|
||||
container.push_back(*it);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Push back to container contents of another container, if not already present
|
||||
template <class Container, class Iter>
|
||||
inline void push_back_range_unique(Container& container, Iter begin, Iter end)
|
||||
{
|
||||
for (Iter it = begin; it != end; ++it)
|
||||
{
|
||||
push_back_unique(container, *it);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Find element in container.
|
||||
// @return true if item found.
|
||||
@@ -373,107 +234,6 @@ namespace stl
|
||||
return (it == last || value != *it) ? last : it;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Find element in a sorted container using binary search with logarithmic efficiency.
|
||||
// @return true if item was inserted.
|
||||
template <class Container, class Value>
|
||||
inline bool binary_insert_unique(Container& container, const Value& value)
|
||||
{
|
||||
typename Container::iterator it = std::lower_bound(container.begin(), container.end(), value);
|
||||
if (it != container.end())
|
||||
{
|
||||
if (*it == value)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
container.insert(it, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
container.insert(container.end(), value);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Find element in a sorted container using binary search with logarithmic efficiency.
|
||||
// and erases if element found.
|
||||
// @return true if item was erased.
|
||||
template <class Container, class Value>
|
||||
inline bool binary_erase(Container& container, const Value& value)
|
||||
{
|
||||
typename Container::iterator it = std::lower_bound(container.begin(), container.end(), value);
|
||||
if (it != container.end() && *it == value)
|
||||
{
|
||||
container.erase(it);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename ItT, typename Func>
|
||||
ItT remove_from_heap(ItT begin, ItT end, ItT at, Func order)
|
||||
{
|
||||
using std::swap;
|
||||
|
||||
--end;
|
||||
if (at == end)
|
||||
{
|
||||
return at;
|
||||
}
|
||||
|
||||
size_t idx = std::distance(begin, at);
|
||||
swap(*end, *at);
|
||||
|
||||
size_t length = std::distance(begin, end);
|
||||
size_t parent, child;
|
||||
|
||||
if (idx > 0 && order(*(begin + idx / 2), *(begin + idx)))
|
||||
{
|
||||
do
|
||||
{
|
||||
parent = idx / 2;
|
||||
swap(*(begin + idx), *(begin + parent));
|
||||
idx = parent;
|
||||
|
||||
if (idx == 0 || order(*(begin + idx), *(begin + idx / 2)))
|
||||
{
|
||||
return end;
|
||||
}
|
||||
}
|
||||
while (true);
|
||||
}
|
||||
else
|
||||
{
|
||||
do
|
||||
{
|
||||
child = idx * 2 + 1;
|
||||
if (child >= length)
|
||||
{
|
||||
return end;
|
||||
}
|
||||
|
||||
ItT left = begin + child;
|
||||
ItT right = begin + child + 1;
|
||||
|
||||
if (right < end && order(*left, *right))
|
||||
{
|
||||
++child;
|
||||
}
|
||||
|
||||
if (order(*(begin + child), *(begin + idx)))
|
||||
{
|
||||
return end;
|
||||
}
|
||||
|
||||
swap(*(begin + child), *(begin + idx));
|
||||
idx = child;
|
||||
}
|
||||
while (true);
|
||||
}
|
||||
|
||||
return end;
|
||||
}
|
||||
|
||||
struct container_object_deleter
|
||||
{
|
||||
template<typename T>
|
||||
@@ -506,18 +266,6 @@ namespace stl
|
||||
return type.c_str();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Case sensetive less key for any type convertable to const char*.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
template <class Type>
|
||||
struct less_strcmp
|
||||
{
|
||||
bool operator()(const Type& left, const Type& right) const
|
||||
{
|
||||
return strcmp(constchar_cast(left), constchar_cast(right)) < 0;
|
||||
}
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Case insensetive less key for any type convertable to const char*.
|
||||
template <class Type>
|
||||
@@ -690,89 +438,4 @@ namespace stl
|
||||
stl::free_container(container);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T, size_t Length, typename Func>
|
||||
inline void for_each_array(T (&buffer)[Length], Func func)
|
||||
{
|
||||
std::for_each(&buffer[0], &buffer[Length], func);
|
||||
}
|
||||
|
||||
template <typename T, typename D, size_t Length, typename Func>
|
||||
inline void for_each_array(StaticInstance<T, D>(&buffer)[Length], Func func)
|
||||
{
|
||||
for (size_t idx = 0; idx < Length; ++idx)
|
||||
{
|
||||
func(*buffer[idx]);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline void destruct(T* p)
|
||||
{
|
||||
p->~T();
|
||||
}
|
||||
}
|
||||
|
||||
#define DEFINE_INTRUSIVE_LINKED_LIST(Class) \
|
||||
template<> \
|
||||
Class * stl::intrusive_linked_list_node<Class>::m_root_intrusive = nullptr;
|
||||
|
||||
// define the maplikestruct, used to approximate the memory requirements for a map node
|
||||
namespace stl
|
||||
{
|
||||
struct MapLikeStruct
|
||||
{
|
||||
bool color;
|
||||
void* parent;
|
||||
void* left;
|
||||
void* right;
|
||||
};
|
||||
}
|
||||
template <class Map>
|
||||
unsigned sizeOfMap(Map& map)
|
||||
{
|
||||
unsigned size = 0;
|
||||
for (typename Map::iterator it = map.begin(); it != map.end(); it++)
|
||||
{
|
||||
typename Map::mapped_type& T = it->second;
|
||||
size += T.Size();
|
||||
}
|
||||
size += map.size() * sizeof(stl::MapLikeStruct);
|
||||
return size;
|
||||
}
|
||||
template <class Map>
|
||||
unsigned sizeOfMapStr(Map& map)
|
||||
{
|
||||
unsigned size = 0;
|
||||
for (typename Map::iterator it = map.begin(); it != map.end(); it++)
|
||||
{
|
||||
typename Map::mapped_type& T = it->second;
|
||||
size += T.capacity();
|
||||
}
|
||||
size += map.size() * sizeof(stl::MapLikeStruct);
|
||||
return size;
|
||||
}
|
||||
template <class Map>
|
||||
unsigned sizeOfMapP(Map& map)
|
||||
{
|
||||
unsigned size = 0;
|
||||
for (typename Map::iterator it = map.begin(); it != map.end(); it++)
|
||||
{
|
||||
typename Map::mapped_type& T = it->second;
|
||||
size += T->Size();
|
||||
}
|
||||
size += map.size() * sizeof(stl::MapLikeStruct);
|
||||
return size;
|
||||
}
|
||||
template <class Map>
|
||||
unsigned sizeOfMapS(Map& map)
|
||||
{
|
||||
unsigned size = 0;
|
||||
for (typename Map::iterator it = map.begin(); it != map.end(); it++)
|
||||
{
|
||||
typename Map::mapped_type& T = it->second;
|
||||
size += sizeof(T);
|
||||
}
|
||||
size += map.size() * sizeof(stl::MapLikeStruct);
|
||||
return size;
|
||||
}
|
||||
|
||||
@@ -143,9 +143,6 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
#include <AzFramework/Input/Buses/Notifications/RawInputNotificationBus_Platform.h>
|
||||
|
||||
// To enable profiling with vtune (https://software.intel.com/en-us/intel-vtune-amplifier-xe), make sure the line below is not commented out
|
||||
//#define PROFILE_WITH_VTUNE
|
||||
|
||||
#include <process.h>
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
@@ -154,10 +151,6 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
#include <AzFramework/IO/LocalFileIO.h>
|
||||
|
||||
// profilers api.
|
||||
VTuneFunction VTResume = NULL;
|
||||
VTuneFunction VTPause = NULL;
|
||||
|
||||
// Define global cvars.
|
||||
SSystemCVars g_cvars;
|
||||
|
||||
@@ -516,8 +509,6 @@ void CSystem::ShutDown()
|
||||
|
||||
ShutdownFileSystem();
|
||||
|
||||
ShutdownModuleLibraries();
|
||||
|
||||
EBUS_EVENT(CrySystemEventBus, OnCrySystemPostShutdown);
|
||||
}
|
||||
|
||||
@@ -697,31 +688,6 @@ bool CSystem::UpdatePreTickBus(int updateFlags, int nPauseMode)
|
||||
m_bPaused = false;
|
||||
}
|
||||
|
||||
#ifdef PROFILE_WITH_VTUNE
|
||||
if (m_bInDevMode)
|
||||
{
|
||||
if (VTPause != NULL && VTResume != NULL)
|
||||
{
|
||||
static bool bVtunePaused = true;
|
||||
|
||||
const AzFramework::InputChannel* inputChannelScrollLock = AzFramework::InputChannelRequests::FindInputChannel(AzFramework::InputDeviceKeyboard::Key::WindowsSystemScrollLock);
|
||||
const bool bPaused = (inputChannelScrollLock ? inputChannelScrollLock->IsActive() : false);
|
||||
|
||||
{
|
||||
if (bVtunePaused && !bPaused)
|
||||
{
|
||||
GetIProfilingSystem()->VTuneResume();
|
||||
}
|
||||
if (!bVtunePaused && bPaused)
|
||||
{
|
||||
GetIProfilingSystem()->VTunePause();
|
||||
}
|
||||
bVtunePaused = bPaused;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif //PROFILE_WITH_VTUNE
|
||||
|
||||
#ifndef EXCLUDE_UPDATE_ON_CONSOLE
|
||||
if (m_bIgnoreUpdates)
|
||||
{
|
||||
@@ -1255,30 +1221,6 @@ CPNoise3* CSystem::GetNoiseGen()
|
||||
return &m_pNoiseGen;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CProfilingSystem::VTuneResume()
|
||||
{
|
||||
#ifdef PROFILE_WITH_VTUNE
|
||||
if (VTResume)
|
||||
{
|
||||
CryLogAlways("VTune Resume");
|
||||
VTResume();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CProfilingSystem::VTunePause()
|
||||
{
|
||||
#ifdef PROFILE_WITH_VTUNE
|
||||
if (VTPause)
|
||||
{
|
||||
VTPause();
|
||||
CryLogAlways("VTune Pause");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void CSystem::OnLanguageCVarChanged(ICVar* language)
|
||||
{
|
||||
|
||||
@@ -105,10 +105,6 @@ struct IDataProbe;
|
||||
|
||||
#define PHSYICS_OBJECT_ENTITY 0
|
||||
|
||||
using VTuneFunction = void (__cdecl *)(void);
|
||||
extern VTuneFunction VTResume;
|
||||
extern VTuneFunction VTPause;
|
||||
|
||||
#define MAX_STREAMING_POOL_INDEX 6
|
||||
#define MAX_THREAD_POOL_INDEX 6
|
||||
|
||||
@@ -139,7 +135,6 @@ struct SSystemCVars
|
||||
int sys_ai;
|
||||
int sys_entitysystem;
|
||||
int sys_trackview;
|
||||
int sys_vtune;
|
||||
float sys_update_profile_time;
|
||||
int sys_limit_phys_thread_count;
|
||||
int sys_MaxFPS;
|
||||
@@ -169,21 +164,6 @@ extern SSystemCVars g_cvars;
|
||||
|
||||
class CSystem;
|
||||
|
||||
struct CProfilingSystem
|
||||
: public IProfilingSystem
|
||||
{
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// VTune Profiling interface.
|
||||
|
||||
// Summary:
|
||||
// Resumes vtune data collection.
|
||||
void VTuneResume() override;
|
||||
// Summary:
|
||||
// Pauses vtune data collection.
|
||||
void VTunePause() override;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
};
|
||||
|
||||
class AssetSystem;
|
||||
|
||||
/*
|
||||
@@ -262,7 +242,6 @@ public:
|
||||
IViewSystem* GetIViewSystem() override;
|
||||
ILevelSystem* GetILevelSystem() override;
|
||||
ISystemEventDispatcher* GetISystemEventDispatcher() override { return m_pSystemEventDispatcher; }
|
||||
IProfilingSystem* GetIProfilingSystem() override { return &m_ProfilingSystem; }
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// retrieves the perlin noise singleton instance
|
||||
CPNoise3* GetNoiseGen() override;
|
||||
@@ -324,8 +303,6 @@ public:
|
||||
void SetVersionInfo(const char* const szVersion);
|
||||
#endif
|
||||
|
||||
void ShutdownModuleLibraries();
|
||||
|
||||
#if defined(WIN32)
|
||||
friend LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
#endif
|
||||
@@ -344,8 +321,6 @@ private:
|
||||
// Release all resources.
|
||||
void ShutDown();
|
||||
|
||||
bool LoadEngineDLLs();
|
||||
|
||||
//! @name Initialization routines
|
||||
//@{
|
||||
bool InitConsole();
|
||||
@@ -361,11 +336,8 @@ private:
|
||||
void CreateSystemVars();
|
||||
void CreateAudioVars();
|
||||
|
||||
AZStd::unique_ptr<AZ::DynamicModuleHandle> LoadDLL(const char* dllName);
|
||||
|
||||
void FreeLib(AZStd::unique_ptr<AZ::DynamicModuleHandle>& hLibModule);
|
||||
|
||||
bool UnloadDLL(const char* dllName);
|
||||
void QueryVersionInfo();
|
||||
void LogVersion();
|
||||
void LogBuildInfo();
|
||||
@@ -380,8 +352,6 @@ private:
|
||||
|
||||
void AddCVarGroupDirectory(const AZStd::string& sPath) override;
|
||||
|
||||
AZStd::unique_ptr<AZ::DynamicModuleHandle> LoadDynamiclibrary(const char* dllName) const;
|
||||
|
||||
#if defined(AZ_RESTRICTED_PLATFORM)
|
||||
#define AZ_RESTRICTED_SECTION SYSTEM_H_SECTION_3
|
||||
#include AZ_RESTRICTED_FILE(System_h)
|
||||
@@ -437,9 +407,6 @@ private: // ------------------------------------------------------
|
||||
bool m_bDrawConsole; //!< Set to true if OK to draw the console.
|
||||
bool m_bDrawUI; //!< Set to true if OK to draw UI.
|
||||
|
||||
|
||||
std::map<AZ::Crc32, AZStd::unique_ptr<AZ::DynamicModuleHandle> > m_moduleDLLHandles;
|
||||
|
||||
//! current active process
|
||||
IProcess* m_pProcess;
|
||||
|
||||
@@ -564,8 +531,6 @@ private: // ------------------------------------------------------
|
||||
ESystemConfigSpec m_nMaxConfigSpec;
|
||||
ESystemConfigPlatform m_ConfigPlatform;
|
||||
|
||||
CProfilingSystem m_ProfilingSystem;
|
||||
|
||||
// Pause mode.
|
||||
bool m_bPaused;
|
||||
bool m_bNoUpdate;
|
||||
@@ -588,8 +553,6 @@ public:
|
||||
const SFileVersion& GetProductVersion() override;
|
||||
const SFileVersion& GetBuildVersion() override;
|
||||
|
||||
bool InitVTuneProfiler();
|
||||
|
||||
void OpenPlatformPaks();
|
||||
void OpenLanguagePak(const char* sLanguage);
|
||||
void OpenLanguageAudioPak(const char* sLanguage);
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
#if defined(AZ_RESTRICTED_PLATFORM) || defined(AZ_TOOLS_EXPAND_FOR_RESTRICTED_PLATFORMS)
|
||||
#undef AZ_RESTRICTED_SECTION
|
||||
#define SYSTEMINIT_CPP_SECTION_1 1
|
||||
#define SYSTEMINIT_CPP_SECTION_2 2
|
||||
#define SYSTEMINIT_CPP_SECTION_3 3
|
||||
#define SYSTEMINIT_CPP_SECTION_4 4
|
||||
@@ -70,9 +69,6 @@
|
||||
#include "windows.h"
|
||||
#include <float.h>
|
||||
|
||||
// To enable profiling with vtune (https://software.intel.com/en-us/intel-vtune-amplifier-xe), make sure the line below is not commented out
|
||||
//#define PROFILE_WITH_VTUNE
|
||||
|
||||
#endif //WIN32
|
||||
|
||||
#include <IRenderer.h>
|
||||
@@ -171,30 +167,6 @@ void CryEngineSignalHandler(int signal)
|
||||
|
||||
#define LOCALIZATION_TRANSLATIONS_LIST_FILE_NAME "Libs/Localization/localization.xml"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
#if defined(WIN32) || defined(LINUX) || defined(APPLE)
|
||||
# define DLL_INITFUNC_RENDERER "PackageRenderConstructor"
|
||||
# define DLL_INITFUNC_SOUND "CreateSoundSystem"
|
||||
# define DLL_INITFUNC_FONT "CreateCryFontInterface"
|
||||
# define DLL_INITFUNC_3DENGINE "CreateCry3DEngine"
|
||||
# define DLL_INITFUNC_UI "CreateLyShineInterface"
|
||||
#define AZ_RESTRICTED_SECTION_IMPLEMENTED
|
||||
#elif defined(AZ_RESTRICTED_PLATFORM)
|
||||
#define AZ_RESTRICTED_SECTION SYSTEMINIT_CPP_SECTION_1
|
||||
#include AZ_RESTRICTED_FILE(SystemInit_cpp)
|
||||
#endif
|
||||
#if defined(AZ_RESTRICTED_SECTION_IMPLEMENTED)
|
||||
#undef AZ_RESTRICTED_SECTION_IMPLEMENTED
|
||||
#else
|
||||
# define DLL_INITFUNC_RENDERER (LPCSTR)1
|
||||
# define DLL_INITFUNC_RENDERER (LPCSTR)1
|
||||
# define DLL_INITFUNC_SOUND (LPCSTR)1
|
||||
# define DLL_INITFUNC_PHYSIC (LPCSTR)1
|
||||
# define DLL_INITFUNC_FONT (LPCSTR)1
|
||||
# define DLL_INITFUNC_3DENGINE (LPCSTR)1
|
||||
# define DLL_INITFUNC_UI (LPCSTR)1
|
||||
#endif
|
||||
|
||||
#define AZ_TRACE_SYSTEM_WINDOW AZ::Debug::Trace::GetDefaultSystemWindow()
|
||||
|
||||
#ifdef WIN32
|
||||
@@ -288,96 +260,6 @@ static void CmdCrashTest(IConsoleCmdArgs* pArgs)
|
||||
}
|
||||
AZ_POP_DISABLE_WARNING
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
struct SysSpecOverrideSink
|
||||
: public ILoadConfigurationEntrySink
|
||||
{
|
||||
virtual void OnLoadConfigurationEntry(const char* szKey, const char* szValue, const char* szGroup)
|
||||
{
|
||||
ICVar* pCvar = gEnv->pConsole->GetCVar(szKey);
|
||||
|
||||
if (pCvar)
|
||||
{
|
||||
const bool wasNotInConfig = ((pCvar->GetFlags() & VF_WASINCONFIG) == 0);
|
||||
bool applyCvar = wasNotInConfig;
|
||||
if (applyCvar == false)
|
||||
{
|
||||
// Special handling for sys_spec_full
|
||||
if (azstricmp(szKey, "sys_spec_full") == 0)
|
||||
{
|
||||
// If it is set to 0 then ignore this request to set to something else
|
||||
// If it is set to 0 then the user wants to changes system spec settings in system.cfg
|
||||
if (pCvar->GetIVal() != 0)
|
||||
{
|
||||
applyCvar = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// This could bypass the restricted cvar checks that exist elsewhere depending on
|
||||
// the calling code so we also need check here before setting.
|
||||
bool isConst = pCvar->IsConstCVar();
|
||||
bool isCheat = ((pCvar->GetFlags() & (VF_CHEAT | VF_CHEAT_NOCHECK | VF_CHEAT_ALWAYS_CHECK)) != 0);
|
||||
bool isReadOnly = ((pCvar->GetFlags() & VF_READONLY) != 0);
|
||||
bool isDeprecated = ((pCvar->GetFlags() & VF_DEPRECATED) != 0);
|
||||
bool allowApplyCvar = true;
|
||||
|
||||
if ((isConst || isCheat || isReadOnly) || isDeprecated)
|
||||
{
|
||||
allowApplyCvar = !isDeprecated && (gEnv->pSystem->IsDevMode()) || (gEnv->IsEditor());
|
||||
}
|
||||
|
||||
if ((allowApplyCvar) || ALLOW_CONST_CVAR_MODIFICATIONS)
|
||||
{
|
||||
applyCvar = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (applyCvar)
|
||||
{
|
||||
pCvar->Set(szValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
CryLogAlways("NOT VF_WASINCONFIG Ignoring cvar '%s' new value '%s' old value '%s' group '%s'", szKey, szValue, pCvar->GetString(), szGroup);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CryLogAlways("Can't find cvar '%s' value '%s' group '%s'", szKey, szValue, szGroup);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#if !defined(CONSOLE)
|
||||
struct SysSpecOverrideSinkConsole
|
||||
: public ILoadConfigurationEntrySink
|
||||
{
|
||||
virtual void OnLoadConfigurationEntry(const char* szKey, const char* szValue, const char* szGroup)
|
||||
{
|
||||
// Ignore platform-specific cvars that should just be executed on the console
|
||||
if (azstricmp(szGroup, "Platform") == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ICVar* pCvar = gEnv->pConsole->GetCVar(szKey);
|
||||
if (pCvar)
|
||||
{
|
||||
pCvar->Set(szValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the cvar doesn't exist, calling this function only saves the value in case it's registered later where
|
||||
// at that point it will be set from the stored value. This is required because otherwise registering the
|
||||
// cvar bypasses any callbacks and uses values directly from the cvar group files.
|
||||
gEnv->pConsole->LoadConfigVar(szKey, szValue);
|
||||
}
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
static ESystemConfigPlatform GetDevicePlatform()
|
||||
{
|
||||
#if defined(AZ_PLATFORM_WINDOWS) || defined(AZ_PLATFORM_LINUX)
|
||||
@@ -401,98 +283,6 @@ static ESystemConfigPlatform GetDevicePlatform()
|
||||
#endif
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
#if !defined(AZ_MONOLITHIC_BUILD)
|
||||
|
||||
AZStd::unique_ptr<AZ::DynamicModuleHandle> CSystem::LoadDynamiclibrary(const char* dllName) const
|
||||
{
|
||||
AZStd::unique_ptr<AZ::DynamicModuleHandle> handle = AZ::DynamicModuleHandle::Create(dllName);
|
||||
|
||||
bool libraryLoaded = handle->Load(false);
|
||||
// We need to inject the environment first thing so that allocators are available immediately
|
||||
InjectEnvironmentFunction injectEnv = handle->GetFunction<InjectEnvironmentFunction>(INJECT_ENVIRONMENT_FUNCTION);
|
||||
if (injectEnv)
|
||||
{
|
||||
auto env = AZ::Environment::GetInstance();
|
||||
injectEnv(env);
|
||||
}
|
||||
|
||||
if (!libraryLoaded)
|
||||
{
|
||||
handle.release();
|
||||
}
|
||||
return handle;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
AZStd::unique_ptr<AZ::DynamicModuleHandle> CSystem::LoadDLL(const char* dllName)
|
||||
{
|
||||
AZ_TracePrintf(AZ_TRACE_SYSTEM_WINDOW, "Loading DLL: %s", dllName);
|
||||
|
||||
AZStd::unique_ptr<AZ::DynamicModuleHandle> handle = LoadDynamiclibrary(dllName);
|
||||
|
||||
if (!handle)
|
||||
{
|
||||
#if defined(LINUX) || defined(APPLE)
|
||||
AZ_Assert(false, "Error loading dylib: %s, error : %s\n", dllName, dlerror());
|
||||
#else
|
||||
AZ_Assert(false, "Error loading dll: %s, error code %d", dllName, GetLastError());
|
||||
#endif
|
||||
return handle;
|
||||
}
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
// TODO:DLL #endif //#if defined(AZ_HAS_DLL_SUPPORT) && !defined(AZ_MONOLITHIC_BUILD)
|
||||
#endif //if !defined(AZ_MONOLITHIC_BUILD)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool CSystem::LoadEngineDLLs()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool CSystem::UnloadDLL(const char* dllName)
|
||||
{
|
||||
bool isSuccess = false;
|
||||
|
||||
AZ::Crc32 key(dllName);
|
||||
AZStd::unique_ptr<AZ::DynamicModuleHandle> empty;
|
||||
AZStd::unique_ptr<AZ::DynamicModuleHandle>& hModule = stl::find_in_map_ref(m_moduleDLLHandles, key, empty);
|
||||
if ((hModule) && (hModule->IsLoaded()))
|
||||
{
|
||||
DetachEnvironmentFunction detachEnv = hModule->GetFunction<DetachEnvironmentFunction>(DETACH_ENVIRONMENT_FUNCTION);
|
||||
if (detachEnv)
|
||||
{
|
||||
detachEnv();
|
||||
}
|
||||
|
||||
isSuccess = hModule->Unload();
|
||||
hModule.release();
|
||||
}
|
||||
|
||||
return isSuccess;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSystem::ShutdownModuleLibraries()
|
||||
{
|
||||
#if !defined(AZ_MONOLITHIC_BUILD)
|
||||
for (auto iterator = m_moduleDLLHandles.begin(); iterator != m_moduleDLLHandles.end(); ++iterator)
|
||||
{
|
||||
if (iterator->second->IsLoaded())
|
||||
{
|
||||
iterator->second->Unload();
|
||||
}
|
||||
iterator->second.release();
|
||||
}
|
||||
|
||||
m_moduleDLLHandles.clear();
|
||||
|
||||
#endif // !defined(AZ_MONOLITHIC_BUILD)
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
bool CSystem::InitConsole()
|
||||
@@ -681,33 +471,6 @@ bool CSystem::InitAudioSystem(const SSystemInitParams& initParams)
|
||||
return result;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool CSystem::InitVTuneProfiler()
|
||||
{
|
||||
#ifdef PROFILE_WITH_VTUNE
|
||||
|
||||
WIN_HMODULE hModule = LoadDLL("VTuneApi.dll");
|
||||
if (!hModule)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
VTPause = (VTuneFunction) CryGetProcAddress(hModule, "VTPause");
|
||||
VTResume = (VTuneFunction) CryGetProcAddress(hModule, "VTResume");
|
||||
if (!VTPause || !VTResume)
|
||||
{
|
||||
AZ_Assert(false, "VTune did not initialize correctly.")
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
AZ_TracePrintf(AZ_TRACE_SYSTEM_WINDOW, "VTune API Initialized");
|
||||
}
|
||||
#endif //PROFILE_WITH_VTUNE
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSystem::InitLocalization()
|
||||
{
|
||||
@@ -1682,8 +1445,6 @@ void CSystem::CreateSystemVars()
|
||||
m_sys_memory_debug = REGISTER_INT("sys_memory_debug", 0, VF_CHEAT,
|
||||
"Enables to activate low memory situation is specific places in the code (argument defines which place), 0=off");
|
||||
|
||||
REGISTER_CVAR2("sys_vtune", &g_cvars.sys_vtune, 0, VF_NULL, "");
|
||||
|
||||
#if defined(AZ_RESTRICTED_PLATFORM)
|
||||
#define AZ_RESTRICTED_SECTION SYSTEMINIT_CPP_SECTION_17
|
||||
#include AZ_RESTRICTED_FILE(SystemInit_cpp)
|
||||
|
||||
@@ -49,6 +49,12 @@ int main(int argc, char* argv[])
|
||||
AZStd::unique_ptr<AzFramework::ProcessWatcher> shellProcess(AzFramework::ProcessWatcher::LaunchProcess(shellProcessLaunch, AzFramework::ProcessCommunicationType::COMMUNICATOR_TYPE_NONE));
|
||||
shellProcess->WaitForProcessToExit(120);
|
||||
shellProcess.reset();
|
||||
|
||||
parameters = AZStd::string::format("-c \"%s/scripts/o3de.sh register --this-engine\"", enginePath.c_str());
|
||||
shellProcessLaunch.m_commandlineParameters = parameters;
|
||||
shellProcess.reset(AzFramework::ProcessWatcher::LaunchProcess(shellProcessLaunch, AzFramework::ProcessCommunicationType::COMMUNICATOR_TYPE_NONE));
|
||||
shellProcess->WaitForProcessToExit(120);
|
||||
shellProcess.reset();
|
||||
|
||||
AZ::IO::FixedMaxPath projectManagerPath = installedBinariesFolder/"o3de.app"/"Contents"/"MacOS"/"o3de";
|
||||
AzFramework::ProcessLauncher::ProcessLaunchInfo processLaunchInfo;
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
#include <QProcessEnvironment>
|
||||
#include <QDir>
|
||||
|
||||
#include <AzCore/Utils/Utils.h>
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
namespace ProjectUtils
|
||||
@@ -94,5 +96,10 @@ namespace O3DE::ProjectManager
|
||||
QProcessEnvironment::systemEnvironment(),
|
||||
QObject::tr("Running get_python script..."));
|
||||
}
|
||||
|
||||
AZ::IO::FixedMaxPath GetEditorDirectory()
|
||||
{
|
||||
return AZ::Utils::GetExecutableDirectory();
|
||||
}
|
||||
} // namespace ProjectUtils
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
#include <QStandardPaths>
|
||||
#include <QDir>
|
||||
|
||||
#include <AzCore/Utils/Utils.h>
|
||||
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
namespace ProjectUtils
|
||||
@@ -104,5 +107,35 @@ namespace O3DE::ProjectManager
|
||||
QProcessEnvironment::systemEnvironment(),
|
||||
QObject::tr("Running get_python script..."));
|
||||
}
|
||||
|
||||
AZ::IO::FixedMaxPath GetEditorDirectory()
|
||||
{
|
||||
AZ::IO::FixedMaxPath executableDirectory = AZ::Utils::GetExecutableDirectory();
|
||||
AZ::IO::FixedMaxPath editorPath{ executableDirectory };
|
||||
editorPath /= "../../../Editor.app/Contents/MacOS";
|
||||
editorPath = editorPath.LexicallyNormal();
|
||||
if (!AZ::IO::SystemFile::IsDirectory(editorPath.c_str()))
|
||||
{
|
||||
if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
|
||||
{
|
||||
if (AZ::IO::FixedMaxPath installedBinariesPath;
|
||||
settingsRegistry->Get(installedBinariesPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_InstalledBinaryFolder))
|
||||
{
|
||||
if (AZ::IO::FixedMaxPath engineRootFolder;
|
||||
settingsRegistry->Get(engineRootFolder.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder))
|
||||
{
|
||||
editorPath = engineRootFolder / installedBinariesPath / "Editor.app/Contents/MacOS";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!AZ::IO::SystemFile::IsDirectory(editorPath.c_str()))
|
||||
{
|
||||
AZ_Error("ProjectManager", false, "Unable to find the Editor app bundle!");
|
||||
}
|
||||
}
|
||||
|
||||
return editorPath;
|
||||
}
|
||||
} // namespace ProjectUtils
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
#include <QProcess>
|
||||
#include <QProcessEnvironment>
|
||||
|
||||
#include <AzCore/Utils/Utils.h>
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
namespace ProjectUtils
|
||||
@@ -139,5 +141,10 @@ namespace O3DE::ProjectManager
|
||||
QProcessEnvironment::systemEnvironment(),
|
||||
QObject::tr("Running get_python script..."));
|
||||
}
|
||||
|
||||
AZ::IO::FixedMaxPath GetEditorDirectory()
|
||||
{
|
||||
return AZ::Utils::GetExecutableDirectory();
|
||||
}
|
||||
} // namespace ProjectUtils
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <QWidget>
|
||||
#include <QProcessEnvironment>
|
||||
|
||||
#include <AzCore/IO/Path/Path_fwd.h>
|
||||
#include <AzCore/Outcome/Outcome.h>
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
@@ -67,7 +68,8 @@ namespace O3DE::ProjectManager
|
||||
AZ::Outcome<QString, QString> GetProjectBuildPath(const QString& projectPath);
|
||||
AZ::Outcome<void, QString> OpenCMakeGUI(const QString& projectPath);
|
||||
AZ::Outcome<QString, QString> RunGetPythonScript(const QString& enginePath);
|
||||
|
||||
|
||||
AZ::IO::FixedMaxPath GetEditorDirectory();
|
||||
|
||||
} // namespace ProjectUtils
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -392,11 +392,11 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
if (!WarnIfInBuildQueue(projectPath))
|
||||
{
|
||||
AZ::IO::FixedMaxPath executableDirectory = AZ::Utils::GetExecutableDirectory();
|
||||
AZ::IO::FixedMaxPath executableDirectory = ProjectUtils::GetEditorDirectory();
|
||||
AZStd::string executableFilename = "Editor";
|
||||
AZ::IO::FixedMaxPath editorExecutablePath = executableDirectory / (executableFilename + AZ_TRAIT_OS_EXECUTABLE_EXTENSION);
|
||||
auto cmdPath = AZ::IO::FixedMaxPathString::format(
|
||||
"%s -regset=\"/Amazon/AzCore/Bootstrap/project_path=%s\"", editorExecutablePath.c_str(),
|
||||
"%s --regset=\"/Amazon/AzCore/Bootstrap/project_path=%s\"", editorExecutablePath.c_str(),
|
||||
projectPath.toStdString().c_str());
|
||||
|
||||
AzFramework::ProcessLauncher::ProcessLaunchInfo processLaunchInfo;
|
||||
|
||||
@@ -82,9 +82,6 @@ namespace AZ
|
||||
// ALT+ENTER fullscreen switching using IDXGIFactory::MakeWindowAssociation (see also implementation of SwapChain::PresentInternal).
|
||||
// You must call the MakeWindowAssociation method after the creation of the swap chain, and on the factory object associated with the
|
||||
// target HWND swap chain, which you can guarantee by calling the IDXGIObject::GetParent method on the swap chain to locate the factory.
|
||||
//
|
||||
// ToDo: ATOM-14673 We should handle ALT+ENTER in the windows message loop and call AzFramework::NativeWindow::ToggleFullScreenState in
|
||||
// response, but that will have to wait until the WndProc function moves out of CrySystem (ideally into AzFramework::ApplicationWindows).
|
||||
IDXGIFactoryX* parentFactory = nullptr;
|
||||
m_swapChain->GetParent(__uuidof(IDXGIFactoryX), (void **)&parentFactory);
|
||||
DX12::AssertSuccess(parentFactory->MakeWindowAssociation(reinterpret_cast<HWND>(window), DXGI_MWA_NO_ALT_ENTER));
|
||||
|
||||
+1
-1
@@ -89,7 +89,7 @@ namespace GraphCanvas
|
||||
explicit AssetEditorMainWindow(AssetEditorWindowConfig* config, QWidget* parent = nullptr);
|
||||
virtual ~AssetEditorMainWindow();
|
||||
|
||||
virtual void SetupUI();
|
||||
void SetupUI();
|
||||
void SetDropAreaText(AZStd::string_view text);
|
||||
|
||||
const EditorId& GetEditorId() const;
|
||||
|
||||
Reference in New Issue
Block a user