mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 09:35:09 +02:00
77045b89ad
LibretroGLCoreContext is the backend for RETRO_HW_CONTEXT_OPENGL_CORE, so the frontend hands us a desktop GL Core profile context. But CreateDrawContext() never told GLFeatures about it — useCoreContext stayed at its default false and gl_extensions.IsCoreContext stayed false, so the macOS Core-profile workaround at GLFeatures.cpp:532 (which force-enables ARB_framebuffer_object because Apple's Core driver doesn't list it as an extension) never fired. Every glBindFramebuffer(GL_FRAMEBUFFER, g_defaultFBO) in GLQueueRunner::fbo_unbind then fell through both branches and silently no-op'd, so the BackBuffer present pass rendered into nothing and GL_INVALID_OPERATION accumulated. End result: black screen on macOS, audio and game logic still working. One-line fix: call SetGLCoreContext(true) before CheckGLExtensions().
47 lines
1.4 KiB
C++
47 lines
1.4 KiB
C++
#include "ppsspp_config.h"
|
|
#include "Common/Log.h"
|
|
#include "Core/Config.h"
|
|
#include "Core/ConfigValues.h"
|
|
#include "Core/System.h"
|
|
#include "Common/GPU/OpenGL/GLFeatures.h"
|
|
|
|
#include "libretro/LibretroGLCoreContext.h"
|
|
|
|
bool LibretroGLCoreContext::Init() {
|
|
if (!LibretroHWRenderContext::Init(false))
|
|
return false;
|
|
|
|
g_Config.iGPUBackend = (int)GPUBackend::OPENGL;
|
|
return true;
|
|
}
|
|
|
|
void LibretroGLCoreContext::CreateDrawContext() {
|
|
if (!glewInitDone) {
|
|
#if !PPSSPP_PLATFORM(IOS) && !defined(USING_GLES2)
|
|
if (glewInit() != GLEW_OK) {
|
|
ERROR_LOG(Log::G3D, "glewInit() failed.\n");
|
|
return;
|
|
}
|
|
#endif
|
|
glewInitDone = true;
|
|
// We requested RETRO_HW_CONTEXT_OPENGL_CORE; tell GLFeatures so the
|
|
// Core-profile workaround in CheckGLExtensions (which force-enables
|
|
// ARB_framebuffer_object / ARB_vertex_array_object) fires. Apple's
|
|
// Core driver doesn't list these as extensions, so without this both
|
|
// stay false and glBindFramebuffer(default) silently no-ops in
|
|
// GLQueueRunner::fbo_unbind on macOS → black screen.
|
|
SetGLCoreContext(true);
|
|
CheckGLExtensions();
|
|
}
|
|
draw_ = Draw::T3DCreateGLContext(false);
|
|
renderManager_ = (GLRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER);
|
|
renderManager_->SetInflightFrames(g_Config.iInflightFrames);
|
|
SetGPUBackend(GPUBackend::OPENGL);
|
|
draw_->CreatePresets();
|
|
}
|
|
|
|
void LibretroGLCoreContext::DestroyDrawContext() {
|
|
LibretroHWRenderContext::DestroyDrawContext();
|
|
renderManager_ = nullptr;
|
|
}
|