1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 13:57:35 +00:00

LibAccelGfx+WebContent: Add GPU painter support on macOS

With these changes it is now possible to create OpenGL context on macOS
and run GPU-painter. For now only QT client has a CLI param that turns
it on though.
This commit is contained in:
Aliaksandr Kalenik 2023-11-12 14:18:00 +01:00 committed by Alexander Kalenik
parent ffe304e88b
commit 61a2e59d87
5 changed files with 70 additions and 16 deletions

View file

@ -6,6 +6,14 @@
#include <LibAccelGfx/Context.h>
#ifdef AK_OS_MACOS
# define GL_SILENCE_DEPRECATION
# include <OpenGL/CGLRenderers.h>
# include <OpenGL/CGLTypes.h>
# include <OpenGL/OpenGL.h>
# include <OpenGL/gl3.h>
#endif
namespace AccelGfx {
Context& Context::the()
@ -16,7 +24,38 @@ Context& Context::the()
return *s_the;
}
OwnPtr<Context> Context::create()
#ifdef AK_OS_MACOS
static void make_context_cgl()
{
CGLContextObj context = NULL;
CGLPixelFormatAttribute attributes[4] = {
kCGLPFAOpenGLProfile,
(CGLPixelFormatAttribute)kCGLOGLPVersion_3_2_Core,
kCGLPFAAccelerated,
(CGLPixelFormatAttribute)0
};
CGLPixelFormatObj pixelFormat = NULL;
GLint numPixelFormats = 0;
CGLError error = CGLChoosePixelFormat(attributes, &pixelFormat, &numPixelFormats);
if (error) {
VERIFY_NOT_REACHED();
}
error = CGLCreateContext(pixelFormat, NULL, &context);
if (error) {
VERIFY_NOT_REACHED();
}
error = CGLSetCurrentContext(context);
if (error) {
VERIFY_NOT_REACHED();
}
VERIFY(glGetError() == GL_NO_ERROR);
}
#else
static void make_context_egl()
{
EGLDisplay egl_display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
@ -60,8 +99,18 @@ OwnPtr<Context> Context::create()
dbgln("eglMakeCurrent failed");
VERIFY_NOT_REACHED();
}
}
#endif
return make<Context>(egl_display, egl_context, egl_config);
OwnPtr<Context> Context::create()
{
#ifdef AK_OS_MACOS
make_context_cgl();
#else
make_context_egl();
#endif
return make<Context>();
}
}