Update renderdoccmd for new remote server code, add daemonise for server

This commit is contained in:
baldurk
2016-08-03 16:29:34 +02:00
parent 4fde9b065f
commit f8b3fd3e1e
6 changed files with 48 additions and 12 deletions
+27 -12
View File
@@ -390,6 +390,7 @@ struct RemoteServerCommand : public Command
{
virtual void AddOptions(cmdline::parser &parser)
{
parser.add("daemon", 'd', "Go into the background.");
parser.add<string>(
"host", 'h', "The interface to listen on. By default listens on all interfaces", false, "");
parser.add<uint32_t>("port", 'p', "The port to listen on.", false,
@@ -409,6 +410,12 @@ struct RemoteServerCommand : public Command
std::cerr << "Spawning a replay host listening on " << (host.empty() ? "*" : host) << ":"
<< port << "..." << std::endl;
if(parser.exist("daemon"))
{
std::cerr << "Detaching." << std::endl;
Daemonise();
}
usingKillSignal = true;
RENDERDOC_BecomeRemoteServer(host.empty() ? NULL : host.c_str(), port, &killSignal);
@@ -449,44 +456,52 @@ struct ReplayCommand : public Command
string filename = parser.rest()[0];
float progress = 0.0f;
RemoteRenderer *remote = NULL;
ReplayRenderer *renderer = NULL;
if(parser.exist("remote-host"))
{
std::cout << "Replaying '" << filename << "' on " << parser.get<string>("remote-host") << ":"
<< parser.get<uint32_t>("remote-port") << "." << std::endl;
ReplayCreateStatus status = RENDERDOC_CreateRemoteReplayConnection(
RemoteServer *remote = NULL;
ReplayCreateStatus status = RENDERDOC_CreateRemoteServerConnection(
parser.get<string>("remote-host").c_str(), parser.get<uint32_t>("remote-port"), &remote);
if(remote == NULL || status != eReplayCreate_Success)
{
std::cerr << "Error: Couldn't connect to " << parser.get<string>("remote-host") << ":"
<< parser.get<uint32_t>("remote-port") << "." << std::endl;
std::cerr << " Have you run renderdoccmd replayhost ?" << std::endl;
std::cerr << " Have you run renderdoccmd remoteserver on '"
<< parser.get<string>("remote-host") << "'?" << std::endl;
return 1;
}
std::cerr << "Copying capture file to remote server" << std::endl;
float progress = 0.0f;
rdctype::str remotePath = remote->CopyCapture(filename.c_str(), &progress);
ReplayRenderer *renderer = NULL;
status = RemoteRenderer_CreateProxyRenderer(remote, 0, filename.c_str(), &progress, &renderer);
status = remote->OpenCapture(~0U, remotePath.elems, &progress, &renderer);
if(status == eReplayCreate_Success)
{
DisplayRendererPreview(renderer, parser.get<uint32_t>("width"),
parser.get<uint32_t>("height"));
else
std::cerr << "Couldn't load and replay '" << filename << "'." << std::endl;
ReplayRenderer_Shutdown(renderer);
remote->Shutdown();
remote->CloseCapture(renderer);
}
else
{
std::cerr << "Couldn't load and replay '" << filename << "'." << std::endl;
}
remote->ShutdownConnection();
}
else
{
std::cout << "Replaying '" << filename << "' locally.." << std::endl;
float progress = 0.0f;
ReplayRenderer *renderer = NULL;
ReplayCreateStatus status =
RENDERDOC_CreateReplayRenderer(filename.c_str(), &progress, &renderer);
@@ -496,7 +511,7 @@ struct ReplayCommand : public Command
else
std::cerr << "Couldn't load and replay '" << filename << "'." << std::endl;
ReplayRenderer_Shutdown(renderer);
renderer->Shutdown();
}
return 0;
}
+1
View File
@@ -61,3 +61,4 @@ void readCapOpts(const std::string &str, CaptureOptions *opts);
// these must be defined in platform .cpps
void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay &displayCfg, uint32_t width,
uint32_t height);
void Daemonise();
+4
View File
@@ -42,6 +42,10 @@ using std::string;
struct android_app *android_state;
void Daemonise()
{
}
void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay &displayCfg, uint32_t width,
uint32_t height)
{
+4
View File
@@ -31,6 +31,10 @@
using std::string;
void Daemonise()
{
}
void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay &displayCfg, uint32_t width,
uint32_t height)
{
+7
View File
@@ -38,6 +38,12 @@
using std::string;
void Daemonise()
{
// don't change dir, but close stdin/stdou
daemon(1, 0);
}
void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay &displayCfg, uint32_t width,
uint32_t height)
{
@@ -214,6 +220,7 @@ int main(int argc, char *argv[])
glXWaitGL();
signal(SIGINT, sig_handler);
signal(SIGTERM, sig_handler);
// do any linux-specific setup here
+5
View File
@@ -228,6 +228,11 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
return DefWindowProc(hwnd, msg, wParam, lParam);
}
void Daemonise()
{
// nothing really to do, windows version of renderdoccmd is already 'detached'
}
void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay &displayCfg, uint32_t width,
uint32_t height)
{