diff --git a/renderdoc/CMakeLists.txt b/renderdoc/CMakeLists.txt index 80dc1efd9..d12f28ce4 100644 --- a/renderdoc/CMakeLists.txt +++ b/renderdoc/CMakeLists.txt @@ -71,6 +71,7 @@ set(sources common/timing.h common/wrapped_pool.h core/core.cpp + core/image_viewer.cpp core/core.h core/crash_handler.h core/target_control.cpp diff --git a/renderdoc/core/core.cpp b/renderdoc/core/core.cpp index cd86bfc9d..ffb686b19 100644 --- a/renderdoc/core/core.cpp +++ b/renderdoc/core/core.cpp @@ -35,6 +35,9 @@ #include "stb/stb_image.h" #include "crash_handler.h" +// from image_viewer.cpp +ReplayCreateStatus IMG_CreateReplayDevice(const char *logfile, IReplayDriver **driver); + // not provided by tinyexr, just do by hand bool is_exr_file(FILE *f) { @@ -719,6 +722,10 @@ ReplayCreateStatus RenderDoc::FillInitParams(const char *logFile, RDCDriver &dri bool RenderDoc::HasReplayDriver(RDCDriver driver) const { + // Image driver is handled specially and isn't registered in the map + if(driver == RDC_Image) + return true; + return m_ReplayDriverProviders.find(driver) != m_ReplayDriverProviders.end(); } @@ -767,6 +774,10 @@ ReplayCreateStatus RenderDoc::CreateReplayDriver(RDCDriver driverType, const cha if(driverType == RDC_Unknown && logfile == NULL && !m_ReplayDriverProviders.empty()) return m_ReplayDriverProviders.begin()->second(logfile, driver); + // image support is special, handle it here + if(driverType == RDC_Image && logfile != NULL) + return IMG_CreateReplayDevice(logfile, driver); + if(m_ReplayDriverProviders.find(driverType) != m_ReplayDriverProviders.end()) return m_ReplayDriverProviders[driverType](logfile, driver); diff --git a/renderdoc/core/image_viewer.cpp b/renderdoc/core/image_viewer.cpp index 0a2f970da..212c575ce 100644 --- a/renderdoc/core/image_viewer.cpp +++ b/renderdoc/core/image_viewer.cpp @@ -356,7 +356,7 @@ ReplayCreateStatus IMG_CreateReplayDevice(const char *logfile, IReplayDriver **d // just in case (we shouldn't have come in here if this weren't true), make sure // the format is supported - if(ret == 0 || width == 0 || width == ~0U || height == 0 || height == ~0U) + if(ret == 0 || width <= 0 || width >= 65536 || height <= 0 || height >= 65536) { FileIO::fclose(f); return eReplayCreate_ImageUnsupported; @@ -644,5 +644,3 @@ void ImageViewer::RefreshFile() FileIO::fclose(f); } - -static DriverRegistration IMGDriverRegistration(RDC_Image, "Image", &IMG_CreateReplayDevice);