From 146283fdde3849025fa12a5fdb6c9c0ca94557bf Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 24 Jul 2018 11:57:59 +0100 Subject: [PATCH] Fix using OpenGL as local proxy for remote replay. Closes #1047 --- renderdoc/driver/gl/gl_common.h | 2 -- renderdoc/driver/gl/gl_replay.cpp | 17 ++++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 78865e6c4..4c9029cf8 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -304,8 +304,6 @@ GLPlatform &GetEGLPlatform(); class RDCFile; class IReplayDriver; -ReplayStatus CreateReplayDevice(RDCFile *rdc, GLPlatform &platform, IReplayDriver **&driver); - // define stubs so other platforms can define these functions, but empty #if DISABLED(RDOC_WIN32) typedef void *HANDLE; diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 5de61ab50..1e4dfec53 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -3196,7 +3196,8 @@ void GLReplay::CloseReplayContext() m_pDriver->m_Platform.DeleteReplayContext(m_ReplayCtx); } -ReplayStatus CreateReplayDevice(RDCFile *rdc, GLPlatform &platform, IReplayDriver **&driver) +ReplayStatus CreateReplayDevice(RDCDriver rdcdriver, RDCFile *rdc, GLPlatform &platform, + IReplayDriver **&driver) { GLInitParams initParams; uint64_t ver = GLInitParams::CurrentVersion; @@ -3243,7 +3244,7 @@ ReplayStatus CreateReplayDevice(RDCFile *rdc, GLPlatform &platform, IReplayDrive GLWindowingData data = {}; - ReplayStatus status = platform.InitialiseAPI(data, rdc->GetDriver()); + ReplayStatus status = platform.InitialiseAPI(data, rdcdriver); // any errors will be already printed, just pass the error up if(status != ReplayStatus::Succeeded) @@ -3283,11 +3284,11 @@ ReplayStatus CreateReplayDevice(RDCFile *rdc, GLPlatform &platform, IReplayDrive } WrappedOpenGL *gldriver = new WrappedOpenGL(platform); - gldriver->SetDriverType(rdc->GetDriver()); + gldriver->SetDriverType(rdcdriver); GL.DriverForEmulation(gldriver); - RDCLOG("Created %s replay device.", ToStr(rdc->GetDriver()).c_str()); + RDCLOG("Created %s replay device.", ToStr(rdcdriver).c_str()); GLReplay *replay = gldriver->GetReplay(); replay->SetProxy(rdc == NULL); @@ -3377,7 +3378,7 @@ ReplayStatus GL_CreateReplayDevice(RDCFile *rdc, IReplayDriver **driver) return ReplayStatus::APIInitFailed; } - return CreateReplayDevice(rdc, GetGLPlatform(), driver); + return CreateReplayDevice(rdc ? rdc->GetDriver() : RDCDriver::OpenGL, rdc, GetGLPlatform(), driver); } static DriverRegistration GLDriverRegistration(RDCDriver::OpenGL, &GL_CreateReplayDevice); @@ -3402,7 +3403,8 @@ ReplayStatus GLES_CreateReplayDevice(RDCFile *rdc, IReplayDriver **driver) return ReplayStatus::APIInitFailed; } - return CreateReplayDevice(rdc, GetEGLPlatform(), driver); + return CreateReplayDevice(rdc ? rdc->GetDriver() : RDCDriver::OpenGLES, rdc, GetEGLPlatform(), + driver); } #if defined(RENDERDOC_SUPPORT_GL) else if(GetGLPlatform().CanCreateGLESContext()) @@ -3417,7 +3419,8 @@ ReplayStatus GLES_CreateReplayDevice(RDCFile *rdc, IReplayDriver **driver) return ReplayStatus::APIInitFailed; } - return CreateReplayDevice(rdc, GetGLPlatform(), driver); + return CreateReplayDevice(rdc ? rdc->GetDriver() : RDCDriver::OpenGLES, rdc, GetGLPlatform(), + driver); } RDCERR(