summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEgor <egor.yusov@gmail.com>2019-10-28 00:46:48 +0000
committerEgor <egor.yusov@gmail.com>2019-10-28 00:46:48 +0000
commitcf0268d40bbe5cf9be97d64bc4f90661705ac91f (patch)
tree12bb74169e992a0e4ddaabcdcc0899648392bcc2
parentFixed tabs in UWP app source (diff)
downloadDiligentEngine-cf0268d40bbe5cf9be97d64bc4f90661705ac91f.tar.gz
DiligentEngine-cf0268d40bbe5cf9be97d64bc4f90661705ac91f.zip
LinuxApp: attempting to initialize in OpenGL mode if Vulkan fails
-rw-r--r--Common/NativeApp/include/Linux/LinuxAppBase.h2
-rw-r--r--Common/NativeApp/src/Linux/LinuxMain.cpp13
m---------DiligentSamples0
-rw-r--r--Tests/TestApp/src/Linux/TestAppLinux.cpp3
-rw-r--r--unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp3
5 files changed, 16 insertions, 5 deletions
diff --git a/Common/NativeApp/include/Linux/LinuxAppBase.h b/Common/NativeApp/include/Linux/LinuxAppBase.h
index 83065d1..e4c6a3e 100644
--- a/Common/NativeApp/include/Linux/LinuxAppBase.h
+++ b/Common/NativeApp/include/Linux/LinuxAppBase.h
@@ -54,7 +54,7 @@ public:
virtual int HandleXEvent(XEvent* xev){}
#if VULKAN_SUPPORTED
- virtual void InitVulkan(xcb_connection_t* connection, uint32_t window) = 0;
+ virtual bool InitVulkan(xcb_connection_t* connection, uint32_t window) = 0;
virtual void HandleXCBEvent(xcb_generic_event_t* event){}
#endif
};
diff --git a/Common/NativeApp/src/Linux/LinuxMain.cpp b/Common/NativeApp/src/Linux/LinuxMain.cpp
index 93a3235..fc26c8a 100644
--- a/Common/NativeApp/src/Linux/LinuxMain.cpp
+++ b/Common/NativeApp/src/Linux/LinuxMain.cpp
@@ -214,7 +214,8 @@ int xcb_main()
std::string Title = TheApp->GetAppTitle();
auto xcbInfo = InitXCBConnectionAndWindow(Title);
- TheApp->InitVulkan(xcbInfo.connection, xcbInfo.window);
+ if(!TheApp->InitVulkan(xcbInfo.connection, xcbInfo.window))
+ return -1;
xcb_flush(xcbInfo.connection);
@@ -509,7 +510,15 @@ int main (int argc, char ** argv)
if (UseVulkan)
{
- return xcb_main();
+ auto ret = xcb_main();
+ if (ret >= 0)
+ {
+ return ret;
+ }
+ else
+ {
+ LOG_ERROR_MESSAGE("Failed to initialize the engine in Vulkan mode. Attempting to use OpenGL");
+ }
}
#endif
diff --git a/DiligentSamples b/DiligentSamples
-Subproject b2e2918145f853ea8be092688dcabbeb4f2377d
+Subproject ba5d6e2c4846c88fb5090ac6b4fceabb720cfab
diff --git a/Tests/TestApp/src/Linux/TestAppLinux.cpp b/Tests/TestApp/src/Linux/TestAppLinux.cpp
index 9ce02b9..54abfa8 100644
--- a/Tests/TestApp/src/Linux/TestAppLinux.cpp
+++ b/Tests/TestApp/src/Linux/TestAppLinux.cpp
@@ -41,7 +41,7 @@ public:
}
#if VULKAN_SUPPORTED
- virtual void InitVulkan(xcb_connection_t* connection, uint32_t window)override final
+ virtual bool InitVulkan(xcb_connection_t* connection, uint32_t window)override final
{
m_DeviceType = DeviceType::Vulkan;
struct XCBInfo
@@ -51,6 +51,7 @@ public:
}xcbInfo = {connection, window};
InitializeDiligentEngine(nullptr, &xcbInfo);
InitializeRenderers();
+ return true;
}
#endif
};
diff --git a/unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp b/unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp
index 8176440..83ce859 100644
--- a/unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp
+++ b/unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp
@@ -40,9 +40,10 @@ public:
InitScene();
}
#if VULKAN_SUPPORTED
- virtual void InitVulkan(xcb_connection_t* connection, uint32_t window)override final
+ virtual bool InitVulkan(xcb_connection_t* connection, uint32_t window)override final
{
UNSUPPORTED("Vulkan is not supported for this application");
+ return false;
}
#endif
};