This commit is contained in:
Branimir Karadžić
2017-06-29 22:23:18 -07:00
parent 7440bed0b8
commit 917385f79e
42 changed files with 181 additions and 140 deletions

View File

@@ -22,7 +22,7 @@
#define RMT_ENABLED ENTRY_CONFIG_PROFILER
#include <remotery/lib/Remotery.h>
extern "C" int _main_(int _argc, char** _argv);
extern "C" int32_t _main_(int32_t _argc, char** _argv);
namespace entry
{
@@ -277,10 +277,10 @@ BX_PRAGMA_DIAGNOSTIC_POP();
if (_argc > 1)
{
inputSetMouseLock(_argc > 1 ? bx::toBool(_argv[1]) : !inputIsMouseLocked() );
return 0;
return bx::kExitSuccess;
}
return 1;
return bx::kExitFailure;
}
int cmdGraphics(CmdContext* /*_context*/, void* /*_userData*/, int _argc, char const* const* _argv)
@@ -299,7 +299,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|| setOrToggle(s_reset, "depthclamp", BGFX_RESET_DEPTH_CLAMP, 1, _argc, _argv)
)
{
return 0;
return bx::kExitSuccess;
}
else if (setOrToggle(s_debug, "stats", BGFX_DEBUG_STATS, 1, _argc, _argv)
|| setOrToggle(s_debug, "ifh", BGFX_DEBUG_IFH, 1, _argc, _argv)
@@ -307,7 +307,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|| setOrToggle(s_debug, "wireframe", BGFX_DEBUG_WIREFRAME, 1, _argc, _argv) )
{
bgfx::setDebug(s_debug);
return 0;
return bx::kExitSuccess;
}
else if (0 == bx::strCmp(_argv[1], "screenshot") )
{
@@ -327,23 +327,23 @@ BX_PRAGMA_DIAGNOSTIC_POP();
bgfx::requestScreenShot(fbh, filePath);
}
return 0;
return bx::kExitSuccess;
}
else if (0 == bx::strCmp(_argv[1], "fullscreen") )
{
WindowHandle window = { 0 };
toggleFullscreen(window);
return 0;
return bx::kExitSuccess;
}
}
return 1;
return bx::kExitFailure;
}
int cmdExit(CmdContext* /*_context*/, void* /*_userData*/, int /*_argc*/, char const* const* /*_argv*/)
{
s_exit = true;
return 0;
return bx::kExitSuccess;
}
static const InputBinding s_bindings[] =
@@ -379,9 +379,47 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
#endif // BX_PLATFORM_EMSCRIPTEN
static AppI* s_apps = NULL;
static uint32_t s_numApps = 0;
static char s_restartArgs[1024] = { '\0' };
static AppI* s_currentApp = NULL;
static AppI* s_apps = NULL;
static uint32_t s_numApps = 0;
static char s_restartArgs[1024] = { '\0' };
int cmdApp(CmdContext* /*_context*/, void* /*_userData*/, int _argc, char const* const* _argv)
{
if (0 == bx::strCmp(_argv[1], "restart")
&& NULL != s_currentApp)
{
if (1 == _argc)
{
bx::strCopy(s_restartArgs, BX_COUNTOF(s_restartArgs), s_currentApp->getName() );
return bx::kExitSuccess;
}
if (0 == bx::strCmp(_argv[2], "next") )
{
AppI* next = s_currentApp->getNext();
if (NULL == next)
{
next = getFirstApp();
}
bx::strCopy(s_restartArgs, BX_COUNTOF(s_restartArgs), next->getName() );
return bx::kExitSuccess;
}
for (AppI* app = getFirstApp(); NULL != app; app = app->getNext() )
{
if (0 == bx::strCmp(_argv[2], app->getName() ) )
{
bx::strCopy(s_restartArgs, BX_COUNTOF(s_restartArgs), app->getName() );
return bx::kExitSuccess;
}
}
}
return bx::kExitFailure;
}
AppI::AppI(const char* _name, const char* _description)
{
@@ -418,14 +456,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
return s_numApps;
}
void setRestartArgs(const char* _args)
int runApp(AppI* _app, int _argc, const char* const* _argv)
{
bx::strCopy(s_restartArgs, BX_COUNTOF(s_restartArgs), _args);
}
int runApp(AppI* _app, int _argc, char** _argv)
{
_app->init(_argc, _argv);
_app->init(_argc, _argv, ENTRY_DEFAULT_WIDTH, ENTRY_DEFAULT_HEIGHT);
bgfx::frame();
WindowHandle defaultWindow = { 0 };
@@ -435,7 +468,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
s_app = _app;
emscripten_set_main_loop(&updateApp, -1, 1);
#else
while (_app->update() );
while (_app->update() )
{
if (0 != bx::strLen(s_restartArgs) )
{
break;
}
}
#endif // BX_PLATFORM_EMSCRIPTEN
return _app->shutdown();
@@ -476,7 +515,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
BX_FREE(g_allocator, apps);
}
int main(int _argc, char** _argv)
int main(int _argc, const char* const* _argv)
{
//DBG(BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME);
@@ -510,6 +549,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
cmdAdd("mouselock", cmdMouseLock);
cmdAdd("graphics", cmdGraphics );
cmdAdd("exit", cmdExit );
cmdAdd("app", cmdApp );
inputInit();
inputAddBindings("bindings", s_bindings);
@@ -549,11 +589,12 @@ restart:
s_restartArgs[0] = '\0';
if (0 == s_numApps)
{
result = ::_main_(_argc, _argv);
result = ::_main_(_argc, (char**)_argv);
}
else
{
result = runApp(NULL == selected ? getFirstApp() : selected, _argc, _argv);
s_currentApp = NULL == selected ? getFirstApp() : selected;
result = runApp(s_currentApp, _argc, _argv);
}
if (0 != bx::strLen(s_restartArgs) )