diff --git a/qrenderdoc/CMakeLists.txt b/qrenderdoc/CMakeLists.txt index 7ff4a0b7d..c53c62b20 100644 --- a/qrenderdoc/CMakeLists.txt +++ b/qrenderdoc/CMakeLists.txt @@ -20,6 +20,18 @@ if(QRENDERDOC_NO_CXX11_REGEX) set(QMAKE_CXXFLAGS "-DNO_CXX11_REGEX=1") endif() +if(ENABLE_GL) + set(QMAKE_CXXFLAGS "${QMAKE_CXXFLAGS} -DRENDERDOC_SUPPORT_GL") +endif() + +if(ENABLE_GLES) + set(QMAKE_CXXFLAGS "${QMAKE_CXXFLAGS} -DRENDERDOC_SUPPORT_GLES") +endif() + +if(ENABLE_VULKAN) + set(QMAKE_CXXFLAGS "${QMAKE_CXXFLAGS} -DRENDERDOC_SUPPORT_VULKAN") +endif() + if(APPLE) add_custom_command(OUTPUT RenderDoc.icns COMMAND echo Creating OS X Icon diff --git a/qrenderdoc/Code/qrenderdoc.cpp b/qrenderdoc/Code/qrenderdoc.cpp index f8a2e03c9..e591e266a 100644 --- a/qrenderdoc/Code/qrenderdoc.cpp +++ b/qrenderdoc/Code/qrenderdoc.cpp @@ -33,6 +33,52 @@ #include "Code/Resources.h" #include "Windows/MainWindow.h" +#if defined(Q_OS_LINUX) + +#if defined(RENDERDOC_SUPPORT_GL) + +// symbol defined in libGL but not librenderdoc. +// Forces link of libGL after renderdoc (otherwise all symbols would +// be resolved and libGL wouldn't link, meaning dlsym(RTLD_NEXT) would fai +extern "C" void glXWaitX(); + +#endif + +#if defined(RENDERDOC_SUPPORT_GLES) + +// symbol defined in libEGL but not in librenderdoc. +// Forces link of libEGL. +extern "C" int eglWaitGL(void); + +#endif + +void linuxlibGLhack() +{ + volatile bool never_run = false; + +#if defined(RENDERDOC_SUPPORT_GL) + + if(never_run) + glXWaitX(); + +#endif + +#if defined(RENDERDOC_SUPPORT_GLES) + + if(never_run) + eglWaitGL(); + +#endif +} + +#else + +void linuxlibGLhack() +{ +} + +#endif + void sharedLogOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) { LogMessageType logtype = eLogType_Comment; @@ -53,6 +99,8 @@ int main(int argc, char *argv[]) { qInstallMessageHandler(sharedLogOutput); + linuxlibGLhack(); + qInfo() << "QRenderDoc initialising."; QString filename = ""; diff --git a/qrenderdoc/qrenderdoc.pro b/qrenderdoc/qrenderdoc.pro index 42fc989a7..52324bd04 100644 --- a/qrenderdoc/qrenderdoc.pro +++ b/qrenderdoc/qrenderdoc.pro @@ -96,6 +96,16 @@ win32 { } else { QT += x11extras DEFINES += RENDERDOC_PLATFORM_POSIX RENDERDOC_PLATFORM_LINUX RENDERDOC_WINDOWING_XLIB RENDERDOC_WINDOWING_XCB + + contains(QMAKE_CXXFLAGS, "-DRENDERDOC_SUPPORT_GL") { + # Link against GL + LIBS += -lGL + } + + contains(QMAKE_CXXFLAGS, "-DRENDERDOC_SUPPORT_GLES") { + # Link against EGL + LIBS += -lEGL + } } }