Selaa lähdekoodia

Merge pull request #1544 from linkmauve/move-glad-init

Move glad initialisation to the frontend
bunnei 10 vuotta sitten
vanhempi
commit
8043a35cf9

+ 7 - 0
src/citra/emu_window/emu_window_sdl2.cpp

@@ -9,6 +9,8 @@
 #define SDL_MAIN_HANDLED
 #define SDL_MAIN_HANDLED
 #include <SDL.h>
 #include <SDL.h>
 
 
+#include <glad/glad.h>
+
 #include "common/key_map.h"
 #include "common/key_map.h"
 #include "common/logging/log.h"
 #include "common/logging/log.h"
 #include "common/scm_rev.h"
 #include "common/scm_rev.h"
@@ -98,6 +100,11 @@ EmuWindow_SDL2::EmuWindow_SDL2() {
         exit(1);
         exit(1);
     }
     }
 
 
+    if (!gladLoadGLLoader(static_cast<GLADloadproc>(SDL_GL_GetProcAddress))) {
+        LOG_CRITICAL(Frontend, "Failed to initialize GL functions! Exiting...");
+        exit(1);
+    }
+
     OnResize();
     OnResize();
     OnMinimalClientAreaChangeRequest(GetActiveConfig().min_client_area_size);
     OnMinimalClientAreaChangeRequest(GetActiveConfig().min_client_area_size);
     SDL_PumpEvents();
     SDL_PumpEvents();

+ 11 - 0
src/citra_qt/main.cpp

@@ -6,6 +6,9 @@
 #include <memory>
 #include <memory>
 #include <thread>
 #include <thread>
 
 
+#include <glad/glad.h>
+
+#define QT_NO_OPENGL
 #include <QDesktopWidget>
 #include <QDesktopWidget>
 #include <QtGui>
 #include <QtGui>
 #include <QFileDialog>
 #include <QFileDialog>
@@ -240,6 +243,14 @@ bool GMainWindow::InitializeSystem() {
     if (emu_thread != nullptr)
     if (emu_thread != nullptr)
         ShutdownGame();
         ShutdownGame();
 
 
+    render_window->MakeCurrent();
+    if (!gladLoadGL()) {
+        QMessageBox::critical(this, tr("Error while starting Citra!"),
+                              tr("Failed to initialize the video core!\n\n"
+                                 "Please ensure that your GPU supports OpenGL 3.3 and that you have the latest graphics driver."));
+        return false;
+    }
+
     // Initialize the core emulation
     // Initialize the core emulation
     System::Result system_result = System::Init(render_window);
     System::Result system_result = System::Init(render_window);
     if (System::Result::Success != system_result) {
     if (System::Result::Success != system_result) {

+ 0 - 6
src/video_core/renderer_opengl/renderer_opengl.cpp

@@ -473,12 +473,6 @@ static void DebugHandler(GLenum source, GLenum type, GLuint id, GLenum severity,
 bool RendererOpenGL::Init() {
 bool RendererOpenGL::Init() {
     render_window->MakeCurrent();
     render_window->MakeCurrent();
 
 
-    // TODO: Make frontends initialize this, so they can use gladLoadGLLoader with their own loaders
-    if (!gladLoadGL()) {
-        LOG_CRITICAL(Render_OpenGL, "Failed to initialize GL functions! Exiting...");
-        exit(-1);
-    }
-
     if (GLAD_GL_KHR_debug) {
     if (GLAD_GL_KHR_debug) {
         glEnable(GL_DEBUG_OUTPUT);
         glEnable(GL_DEBUG_OUTPUT);
         glDebugMessageCallback(DebugHandler, nullptr);
         glDebugMessageCallback(DebugHandler, nullptr);