mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 17:10:47 +00:00
Update renderdoccmd for new remote server code, add daemonise for server
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -31,6 +31,10 @@
|
||||
|
||||
using std::string;
|
||||
|
||||
void Daemonise()
|
||||
{
|
||||
}
|
||||
|
||||
void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay &displayCfg, uint32_t width,
|
||||
uint32_t height)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user