Add string messages to returned result codes to display to user

* Most of the main entry points that can fail with relevant reasons now has a
  way of specifying a message to return with it. This message can be displayed
  to the user to give more information or context about an error.
This commit is contained in:
baldurk
2022-04-26 16:21:54 +01:00
parent 10dd4c194c
commit 8aa0390948
145 changed files with 2978 additions and 1874 deletions
+36 -32
View File
@@ -259,14 +259,14 @@ public:
bytebuf buf;
ICaptureFile *file = RENDERDOC_OpenCaptureFile();
ReplayStatus st = file->OpenFile(conv(infile), "rdc", NULL);
if(st == ReplayStatus::Succeeded)
ResultDetails st = file->OpenFile(conv(infile), "rdc", NULL);
if(st.OK())
{
buf = file->GetThumbnail(type, maxsize).data;
}
else
{
std::cerr << "Couldn't open '" << infile << "': " << ToStr(st) << std::endl;
std::cerr << "Couldn't open '" << infile << "': " << st.Message() << std::endl;
}
file->Shutdown();
@@ -359,10 +359,10 @@ public:
ExecuteResult res = RENDERDOC_ExecuteAndInject(
conv(executable), conv(workingDir), conv(cmdLine), env, conv(logFile), opts, wait_for_exit);
if(res.status != ReplayStatus::Succeeded)
if(res.result.code != ResultCode::Succeeded)
{
std::cerr << "Failed to create & inject: " << ToStr(res.status) << std::endl;
return (int)res.status;
std::cerr << "Failed to create & inject: " << res.result.Message() << std::endl;
return (int)res.result.code;
}
if(wait_for_exit)
@@ -430,10 +430,10 @@ public:
ExecuteResult res = RENDERDOC_InjectIntoProcess(PID, env, conv(captureFile), opts, wait_for_exit);
if(res.status != ReplayStatus::Succeeded)
if(res.result.code != ResultCode::Succeeded)
{
std::cerr << "Failed to inject: " << ToStr(res.status) << std::endl;
return (int)res.status;
std::cerr << "Failed to inject: " << res.result.Message() << std::endl;
return (int)res.result.code;
}
if(wait_for_exit)
@@ -580,12 +580,12 @@ public:
std::cout << "Replaying '" << filename << "' on " << remote_host << "." << std::endl;
IRemoteServer *remote = NULL;
ReplayStatus status = RENDERDOC_CreateRemoteServerConnection(conv(remote_host), &remote);
ResultDetails result = RENDERDOC_CreateRemoteServerConnection(conv(remote_host), &remote);
if(remote == NULL || status != ReplayStatus::Succeeded)
if(remote == NULL || result.code != ResultCode::Succeeded)
{
std::cerr << "Error: " << ToStr(status) << " - Couldn't connect to " << remote_host << "."
<< std::endl;
std::cerr << "Error: " << result.Message() << " - Couldn't connect to " << remote_host
<< "." << std::endl;
std::cerr << " Have you run renderdoccmd remoteserver on '" << remote_host << "'?"
<< std::endl;
return 1;
@@ -596,9 +596,9 @@ public:
rdcstr remotePath = remote->CopyCaptureToRemote(conv(filename), NULL);
IReplayController *renderer = NULL;
rdctie(status, renderer) = remote->OpenCapture(~0U, remotePath, ReplayOptions(), NULL);
rdctie(result, renderer) = remote->OpenCapture(~0U, remotePath, ReplayOptions(), NULL);
if(status == ReplayStatus::Succeeded)
if(result.OK())
{
DisplayRendererPreview(renderer, width, height, loops);
@@ -606,7 +606,8 @@ public:
}
else
{
std::cerr << "Couldn't load and replay '" << filename << "': " << ToStr(status) << std::endl;
std::cerr << "Couldn't load and replay '" << filename << "': " << result.Message()
<< std::endl;
}
remote->ShutdownConnection();
@@ -617,19 +618,21 @@ public:
ICaptureFile *file = RENDERDOC_OpenCaptureFile();
if(file->OpenFile(conv(filename), "rdc", NULL) != ReplayStatus::Succeeded)
ResultDetails res = file->OpenFile(conv(filename), "rdc", NULL);
if(res.code != ResultCode::Succeeded)
{
std::cerr << "Couldn't load '" << filename << "'." << std::endl;
std::cerr << "Couldn't load '" << filename << "': " << res.Message() << std::endl;
return 1;
}
IReplayController *renderer = NULL;
ReplayStatus status = ReplayStatus::InternalError;
rdctie(status, renderer) = file->OpenCapture(ReplayOptions(), NULL);
ResultDetails result = {};
rdctie(result, renderer) = file->OpenCapture(ReplayOptions(), NULL);
file->Shutdown();
if(status == ReplayStatus::Succeeded)
if(result.OK())
{
DisplayRendererPreview(renderer, width, height, loops);
@@ -637,7 +640,8 @@ public:
}
else
{
std::cerr << "Couldn't load and replay '" << filename << "': " << ToStr(status) << std::endl;
std::cerr << "Couldn't load and replay '" << filename << "': " << result.Message()
<< std::endl;
return 1;
}
}
@@ -804,21 +808,21 @@ public:
ICaptureFile *file = RENDERDOC_OpenCaptureFile();
ReplayStatus st = file->OpenFile(conv(infile), conv(infmt), NULL);
ResultDetails st = file->OpenFile(conv(infile), conv(infmt), NULL);
if(st != ReplayStatus::Succeeded)
if(st.code != ResultCode::Succeeded)
{
std::cerr << "Couldn't load '" << infile << "' as '" << infmt << "': " << ToStr(st)
std::cerr << "Couldn't load '" << infile << "' as '" << infmt << "': " << st.Message()
<< std::endl;
return 1;
}
st = file->Convert(conv(outfile), conv(outfmt), NULL, NULL);
if(st != ReplayStatus::Succeeded)
if(st.code != ResultCode::Succeeded)
{
std::cerr << "Couldn't convert '" << infile << "' to '" << outfile << "' as '" << outfmt
<< "': " << ToStr(st) << std::endl;
<< "': " << st.Message() << std::endl;
return 1;
}
@@ -1014,10 +1018,10 @@ public:
ExecuteResult result = RENDERDOC_InjectIntoProcess(pid, env, conv(capfile), cmdopts, false);
if(result.status == ReplayStatus::Succeeded)
if(result.result.OK())
return result.ident;
return (int)result.status;
return (int)result.result.code;
}
};
@@ -1109,12 +1113,12 @@ public:
ICaptureFile *capfile = RENDERDOC_OpenCaptureFile();
ReplayStatus status = capfile->OpenFile(conv(rdc), "", NULL);
ResultDetails result = capfile->OpenFile(conv(rdc), "", NULL);
if(status != ReplayStatus::Succeeded)
if(result.code != ResultCode::Succeeded)
{
capfile->Shutdown();
std::cerr << "Couldn't load '" << rdc << "': " << ToStr(status) << std::endl;
std::cerr << "Couldn't load '" << rdc << "': " << result.Message() << std::endl;
return 1;
}