diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0c665f48..cf7f6019 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -145,7 +145,7 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp
                  include/PICA/dynapica/shader_rec_emitter_x64.hpp include/PICA/pica_hash.hpp include/result/result.hpp
                  include/result/result_common.hpp include/result/result_fs.hpp include/result/result_fnd.hpp
                  include/result/result_gsp.hpp include/result/result_kernel.hpp include/result/result_os.hpp
-                 include/crypto/aes_engine.hpp include/metaprogramming.hpp include/PICA/pica_vertex.hpp include/gl_state.hpp
+                 include/crypto/aes_engine.hpp include/metaprogramming.hpp include/PICA/pica_vertex.hpp
                  include/config.hpp include/services/ir_user.hpp include/httpserver.hpp
 )
 
@@ -186,10 +186,11 @@ if(PANDA3DS_ENABLE_OPENGL)
 	set(RENDERER_GL_INCLUDE_FILES include/opengl.hpp
 		include/renderer_gl/renderer_gl.hpp include/renderer_gl/textures.hpp
 		include/renderer_gl/surfaces.hpp include/renderer_gl/surface_cache.hpp
+		include/renderer_gl/gl_state.hpp
 	)
 	set(RENDERER_GL_SOURCE_FILES src/core/renderer_gl/renderer_gl.cpp
 		src/core/renderer_gl/textures.cpp src/core/renderer_gl/etc1.cpp
-		src/gl_state.cpp
+		src/core/renderer_gl/gl_state.cpp
 	)
 	source_group("Source Files\\Core\\OpenGL Renderer" FILES ${RENDERER_GL_SOURCE_FILES})
 
diff --git a/include/emulator.hpp b/include/emulator.hpp
index 7f5bef0e..034b0034 100644
--- a/include/emulator.hpp
+++ b/include/emulator.hpp
@@ -13,10 +13,6 @@
 #include "io_file.hpp"
 #include "memory.hpp"
 
-#if PANDA3DS_ENABLE_OPENGL
-#include "gl_state.hpp"
-#endif
-
 #ifdef PANDA3DS_ENABLE_HTTP_SERVER
 #include "httpserver.hpp"
 #endif
@@ -35,7 +31,6 @@ class Emulator {
 
 #if PANDA3DS_ENABLE_OPENGL
 	SDL_GLContext glContext;
-	GLStateManager gl;
 #endif
 
 	SDL_GameController* gameController = nullptr;
diff --git a/include/gl_state.hpp b/include/renderer_gl/gl_state.hpp
similarity index 100%
rename from include/gl_state.hpp
rename to include/renderer_gl/gl_state.hpp
diff --git a/include/opengl.hpp b/include/renderer_gl/opengl.hpp
similarity index 100%
rename from include/opengl.hpp
rename to include/renderer_gl/opengl.hpp
diff --git a/src/gl_state.cpp b/src/core/renderer_gl/gl_state.cpp
similarity index 96%
rename from src/gl_state.cpp
rename to src/core/renderer_gl/gl_state.cpp
index 612ae44d..691eb7b6 100644
--- a/src/gl_state.cpp
+++ b/src/core/renderer_gl/gl_state.cpp
@@ -1,4 +1,4 @@
-#include "gl_state.hpp"
+#include "renderer_gl/gl_state.hpp"
 
 void GLStateManager::resetBlend() {
 	blendEnabled = false;
diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp
index 1546761d..bcfb0dc0 100644
--- a/src/core/renderer_gl/renderer_gl.cpp
+++ b/src/core/renderer_gl/renderer_gl.cpp
@@ -607,6 +607,8 @@ void RendererGL::reset() {
 }
 
 void RendererGL::initGraphicsContext() {
+	gl.reset();
+
 	OpenGL::Shader vert(vertexShader, OpenGL::Vertex);
 	OpenGL::Shader frag(fragmentShader, OpenGL::Fragment);
 	triangleProgram.create({vert, frag});
diff --git a/src/emulator.cpp b/src/emulator.cpp
index 6b821d86..0f9c8c54 100644
--- a/src/emulator.cpp
+++ b/src/emulator.cpp
@@ -433,12 +433,7 @@ bool Emulator::loadELF(std::ifstream& file) {
 }
 
 // Reset our graphics context and initialize the GPU's graphics context
-void Emulator::initGraphicsContext() {
-#if PANDA3DS_ENABLE_OPENGL
-	gl.reset();  // TODO (For when we have multiple backends): Only do this if we are using OpenGL
-#endif
-	gpu.initGraphicsContext();
-}
+void Emulator::initGraphicsContext() { gpu.initGraphicsContext(); }
 
 #ifdef PANDA3DS_ENABLE_HTTP_SERVER
 void Emulator::pollHttpServer() {