mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-12 09:09:47 +12:00
Update windows createpbuffer implementation to latest from duckstation
This commit is contained in:
parent
4dd3cd89bf
commit
0793032ece
1 changed files with 29 additions and 2 deletions
31
third_party/duckstation/gl/context_wgl.cpp
vendored
31
third_party/duckstation/gl/context_wgl.cpp
vendored
|
@ -149,8 +149,8 @@ std::unique_ptr<Context> ContextWGL::CreateSharedContext(const WindowInfo& wi)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log_ErrorPrint("PBuffer not implemented");
|
if (!context->CreatePBuffer())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_version.profile == Profile::NoProfile)
|
if (m_version.profile == Profile::NoProfile)
|
||||||
|
@ -305,6 +305,32 @@ bool ContextWGL::CreatePBuffer()
|
||||||
|
|
||||||
static constexpr const int pb_attribs[] = {0, 0};
|
static constexpr const int pb_attribs[] = {0, 0};
|
||||||
|
|
||||||
|
HGLRC temp_rc = nullptr;
|
||||||
|
ScopedGuard temp_rc_guard([&temp_rc, hdc]() {
|
||||||
|
if (temp_rc)
|
||||||
|
{
|
||||||
|
wglMakeCurrent(hdc, nullptr);
|
||||||
|
wglDeleteContext(temp_rc);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!GLAD_WGL_ARB_pbuffer)
|
||||||
|
{
|
||||||
|
// we're probably running completely surfaceless... need a temporary context.
|
||||||
|
temp_rc = wglCreateContext(hdc);
|
||||||
|
if (!temp_rc || !wglMakeCurrent(hdc, temp_rc))
|
||||||
|
{
|
||||||
|
Log_ErrorPrint("Failed to create temporary context to load WGL for pbuffer.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ReloadWGL(hdc) || !GLAD_WGL_ARB_pbuffer)
|
||||||
|
{
|
||||||
|
Log_ErrorPrint("Missing WGL_ARB_pbuffer");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AssertMsg(m_pixel_format.has_value(), "Has pixel format for pbuffer");
|
AssertMsg(m_pixel_format.has_value(), "Has pixel format for pbuffer");
|
||||||
HPBUFFERARB pbuffer = wglCreatePbufferARB(hdc, m_pixel_format.value(), 1, 1, pb_attribs);
|
HPBUFFERARB pbuffer = wglCreatePbufferARB(hdc, m_pixel_format.value(), 1, 1, pb_attribs);
|
||||||
if (!pbuffer)
|
if (!pbuffer)
|
||||||
|
@ -326,6 +352,7 @@ bool ContextWGL::CreatePBuffer()
|
||||||
m_dummy_dc = hdc;
|
m_dummy_dc = hdc;
|
||||||
m_pbuffer = pbuffer;
|
m_pbuffer = pbuffer;
|
||||||
|
|
||||||
|
temp_rc_guard.Run();
|
||||||
pbuffer_guard.Cancel();
|
pbuffer_guard.Cancel();
|
||||||
hdc_guard.Cancel();
|
hdc_guard.Cancel();
|
||||||
hwnd_guard.Cancel();
|
hwnd_guard.Cancel();
|
||||||
|
|
Loading…
Add table
Reference in a new issue