Ihre erste Überprüfung ist wahrscheinlich ein LoadLibrary
Aufruf (oder ein gleichwertiger für Ihre Plattform) für die Vulkan-DLL:
HMODULE vulkanDll = LoadLibrary("vulkan-1.dll");
Dann möchten Sie den Zeiger auf erwerben vkCreateInstance
.
PFN_vkCreateInstance vkCreateInstance;
// ...
vkCreateInstance = GetProcAddress(vulkanDll, "vkCreateInstance");
Dann möchten Sie die entsprechenden Parameter ausfüllen und aufrufen vkCreateInstance
. Dies kann beteiligt sein, lesen Sie die Dokumentation. vkCreateInstance
gibt einen Ergebniscode zurück, der möglicherweise darauf hinweist, dass das Laden fehlgeschlagen ist. Wenn dies fehlschlägt oder einer der vorherigen Schritte fehlschlägt (mit einem Fehler, der nicht "Sie haben die Funktion als falsch bezeichnet" oder ähnlich ist), ist Vulkan nicht verfügbar, greifen Sie auf OpenGL zurück.
Das Obige ist ein eher bibliotheksunabhängiger (aber nicht betriebssystemunabhängiger) Ansatz auf niedriger Ebene. Wenn Sie zusätzliche Frameworks verwenden, können diese einen Teil dieser Arbeit für Sie abstrahieren. Zum Beispiel bietet GLFW anscheinend eine Funktion, mit der Sie feststellen können, ob Vulkan verfügbar ist .
Für OpenGL ist für so ziemlich alles bereits die DLL oder eine gleichwertige Version verfügbar, aber Sie können dieselben LoadLibrary
Schritte usw. anwenden, wenn Sie möchten. Das Initialisieren von OpenGL ist eine plattformspezifischere Aufgabe, die für diese Frage nicht in Frage kommt, aber fehlschlagen kann: Wenn sie fehlschlägt, ist OpenGL aus irgendeinem Grund nicht verfügbar.
Die Chancen stehen gut, dass es gelingt, aber Sie sind möglicherweise auf eine Version von OpenGL zurückgefallen, die Sie nicht wollten oder die für Ihr Spiel zu primitiv ist. Sie können anrufen glGetString
mit GL_VERSION
der aktuellen Version von OpenGL , um zu bestimmen Sie laden konnten. Andere Werte wie GL_VENDOR
oder GL_RENDERER
können Ihnen Informationen über den Treiber geben, an dem Sie interessiert sind. Auf dieser Grundlage können Sie anhand Ihrer eigenen Metriken feststellen, ob Ihre OpenGL-Gesamtlast "erfolgreich" war, und dies entsprechend behandeln (in Ihrem Fall abstürzen).