diff --git a/libretro/LibretroGLContext.cpp b/libretro/LibretroGLContext.cpp index c8260650cb..e915068692 100644 --- a/libretro/LibretroGLContext.cpp +++ b/libretro/LibretroGLContext.cpp @@ -16,18 +16,26 @@ bool LibretroGLContext::Init() { } void LibretroGLContext::CreateDrawContext() { - if (!glewInitDone) { -#if !defined(IOS) && !defined(USING_GLES2) - if (glewInit() != GLEW_OK) { - ERROR_LOG(G3D, "glewInit() failed.\n"); - return; - } + +#ifndef USING_GLES2 + // Some core profile drivers elide certain extensions from GL_EXTENSIONS/etc. + // glewExperimental allows us to force GLEW to search for the pointers anyway. + if (gl_extensions.IsCoreContext) + glewExperimental = true; + if (GLEW_OK != glewInit()) { + printf("Failed to initialize glew!\n"); + } + // Unfortunately, glew will generate an invalid enum error, ignore. + if (gl_extensions.IsCoreContext) + glGetError(); #endif - glewInitDone = true; - CheckGLExtensions(); - } - draw_ = Draw::T3DCreateGLContext(); - renderManager_ = (GLRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER); + + CheckGLExtensions(); + draw_ = Draw::T3DCreateGLContext(); + renderManager_ = (GLRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER); + renderManager_->SetInflightFrames(g_Config.iInflightFrames); + SetGPUBackend(GPUBackend::OPENGL); + draw_->CreatePresets(); } void LibretroGLContext::DestroyDrawContext() {