mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 17:40:39 +00:00
When switching context, make a remote connection in the render manager
This commit is contained in:
@@ -451,15 +451,7 @@ namespace renderdocui.Code
|
||||
}
|
||||
}
|
||||
|
||||
// loading a local log, no remote replay
|
||||
public void LoadLogfile(string logFile, bool temporary)
|
||||
{
|
||||
LoadLogfile(-1, "", logFile, temporary);
|
||||
}
|
||||
|
||||
// when loading a log while replaying remotely, provide the proxy renderer that will be used
|
||||
// as well as the hostname to replay on.
|
||||
public void LoadLogfile(int proxyRenderer, string replayHost, string logFile, bool temporary)
|
||||
{
|
||||
m_LogFile = logFile;
|
||||
|
||||
@@ -511,7 +503,7 @@ namespace renderdocui.Code
|
||||
thread.Start();
|
||||
|
||||
// this function call will block until the log is either loaded, or there's some failure
|
||||
m_Renderer.Init(proxyRenderer, replayHost, logFile);
|
||||
m_Renderer.Init(logFile);
|
||||
|
||||
// if the renderer isn't running, we hit a failure case so display an error message
|
||||
if (!m_Renderer.Running)
|
||||
@@ -520,13 +512,8 @@ namespace renderdocui.Code
|
||||
if (m_Renderer.InitException.Data.Contains("status"))
|
||||
errmsg = ((ReplayCreateStatus)m_Renderer.InitException.Data["status"]).Str();
|
||||
|
||||
if(proxyRenderer >= 0)
|
||||
MessageBox.Show(String.Format("{0}\nFailed to transfer and replay on remote host {1}: {2}.\n\n" +
|
||||
"Check diagnostic log in Help menu for more details.", logFile, replayHost, errmsg),
|
||||
"Error opening log", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
else
|
||||
MessageBox.Show(String.Format("{0}\nFailed to open file for replay: {1}.\n\n" +
|
||||
"Check diagnostic log in Help menu for more details.", logFile, errmsg),
|
||||
MessageBox.Show(String.Format("{0}\nFailed to open file for replay: {1}.\n\n" +
|
||||
"Check diagnostic log in Help menu for more details.", logFile, errmsg),
|
||||
"Error opening log", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
|
||||
progressThread = false;
|
||||
|
||||
@@ -61,10 +61,9 @@ namespace renderdocui.Code
|
||||
|
||||
private AutoResetEvent m_WakeupEvent = new AutoResetEvent(false);
|
||||
private Thread m_Thread;
|
||||
private int m_ProxyRenderer = -1;
|
||||
private string m_ReplayHost;
|
||||
private string m_Logfile;
|
||||
private bool m_Running;
|
||||
private RemoteServer m_Remote;
|
||||
|
||||
private List<InvokeHandle> m_renderQueue;
|
||||
|
||||
@@ -78,13 +77,11 @@ namespace renderdocui.Code
|
||||
m_renderQueue = new List<InvokeHandle>();
|
||||
}
|
||||
|
||||
public void Init(int proxyRenderer, string replayHost, string logfile)
|
||||
public void Init(string logfile)
|
||||
{
|
||||
if(Running)
|
||||
return;
|
||||
|
||||
m_ProxyRenderer = proxyRenderer;
|
||||
m_ReplayHost = replayHost;
|
||||
m_Logfile = logfile;
|
||||
|
||||
LoadProgress = 0.0f;
|
||||
@@ -104,6 +101,26 @@ namespace renderdocui.Code
|
||||
set { m_Running = value; m_WakeupEvent.Set(); }
|
||||
}
|
||||
|
||||
public void ConnectToRemoteServer(string hostname)
|
||||
{
|
||||
InitException = null;
|
||||
|
||||
try
|
||||
{
|
||||
m_Remote = StaticExports.CreateRemoteServer(hostname, 0);
|
||||
}
|
||||
catch (ApplicationException ex)
|
||||
{
|
||||
InitException = ex;
|
||||
}
|
||||
}
|
||||
|
||||
public void DisconnectFromRemoteServer()
|
||||
{
|
||||
if (m_Remote != null)
|
||||
m_Remote.ShutdownConnection();
|
||||
}
|
||||
|
||||
public ApplicationException InitException = null;
|
||||
|
||||
public void CloseThreadSync()
|
||||
@@ -161,16 +178,27 @@ namespace renderdocui.Code
|
||||
////////////////////////////////////////////
|
||||
// Internals
|
||||
|
||||
private void CreateReplayRenderer(ref ReplayRenderer renderer)
|
||||
private ReplayRenderer CreateReplayRenderer()
|
||||
{
|
||||
renderer = StaticExports.CreateReplayRenderer(m_Logfile, ref LoadProgress);
|
||||
if (m_Remote != null)
|
||||
return m_Remote.OpenCapture(-1, m_Logfile, ref LoadProgress);
|
||||
else
|
||||
return StaticExports.CreateReplayRenderer(m_Logfile, ref LoadProgress);
|
||||
}
|
||||
|
||||
private void DestroyReplayRenderer(ReplayRenderer renderer)
|
||||
{
|
||||
if (m_Remote != null)
|
||||
m_Remote.CloseCapture(renderer);
|
||||
else
|
||||
renderer.Shutdown();
|
||||
}
|
||||
|
||||
private void RunThread()
|
||||
{
|
||||
try
|
||||
{
|
||||
ReplayRenderer renderer = StaticExports.CreateReplayRenderer(m_Logfile, ref LoadProgress);
|
||||
ReplayRenderer renderer = CreateReplayRenderer();
|
||||
if(renderer != null)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine("Renderer created");
|
||||
@@ -223,7 +251,7 @@ namespace renderdocui.Code
|
||||
m_renderQueue.Clear();
|
||||
}
|
||||
|
||||
renderer.Shutdown();
|
||||
DestroyReplayRenderer(renderer);
|
||||
}
|
||||
}
|
||||
catch (ApplicationException ex)
|
||||
|
||||
@@ -257,6 +257,8 @@ namespace renderdocui.Windows
|
||||
|
||||
public void OnLogfileClosed()
|
||||
{
|
||||
contextChooser.Enabled = true;
|
||||
|
||||
statusText.Text = "";
|
||||
statusIcon.Image = null;
|
||||
statusProgress.Visible = false;
|
||||
@@ -342,6 +344,9 @@ namespace renderdocui.Windows
|
||||
|
||||
public void OnLogfileLoaded()
|
||||
{
|
||||
// don't allow changing context while log is open
|
||||
contextChooser.Enabled = false;
|
||||
|
||||
LogHasErrors = (m_Core.DebugMessages.Count > 0);
|
||||
|
||||
m_MessageTick = new System.Threading.Timer(MessageCheck, this as object, 500, System.Threading.Timeout.Infinite);
|
||||
@@ -584,6 +589,9 @@ namespace renderdocui.Windows
|
||||
prefix += " - ";
|
||||
}
|
||||
|
||||
if (m_RemoteHost != null)
|
||||
prefix += String.Format("Remote: {0} - ", m_RemoteHost.Hostname);
|
||||
|
||||
Text = prefix + "RenderDoc ";
|
||||
if(OfficialVersion)
|
||||
Text += VersionString;
|
||||
@@ -910,9 +918,13 @@ namespace renderdocui.Windows
|
||||
contextChooser.Image = global::renderdocui.Properties.Resources.house;
|
||||
contextChooser.Text = "Replay Context: Local";
|
||||
|
||||
m_Core.Renderer.DisconnectFromRemoteServer();
|
||||
|
||||
m_RemoteHost = null;
|
||||
|
||||
statusText.Text = "";
|
||||
|
||||
SetTitle();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -927,6 +939,8 @@ namespace renderdocui.Windows
|
||||
|
||||
m_RemoteHost = host;
|
||||
|
||||
SetTitle();
|
||||
|
||||
statusText.Text = "Checking remote server status...";
|
||||
|
||||
Thread th = Helpers.NewThread(new ThreadStart(() =>
|
||||
@@ -964,6 +978,12 @@ namespace renderdocui.Windows
|
||||
}
|
||||
}
|
||||
|
||||
if (host.ServerRunning)
|
||||
{
|
||||
m_Core.Renderer.DisconnectFromRemoteServer();
|
||||
m_Core.Renderer.ConnectToRemoteServer(host.Hostname);
|
||||
}
|
||||
|
||||
this.BeginInvoke(new Action(() =>
|
||||
{
|
||||
contextChooser.Image = host.ServerRunning
|
||||
|
||||
Reference in New Issue
Block a user