1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:17:45 +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

@ -12,3 +12,8 @@ if (OPENGL_FOUND)
else()
set(HAS_ACCELERATED_GRAPHICS OFF CACHE BOOL "" FORCE)
endif()
if (APPLE)
set(HAS_ACCELERATED_GRAPHICS ON CACHE BOOL "" FORCE)
set(ACCEL_GFX_LIBS "-framework OpenGL" CACHE STRING "" FORCE)
endif()

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>();
}
}

View file

@ -9,10 +9,12 @@
#include <AK/Assertions.h>
#include <AK/OwnPtr.h>
#ifndef AK_OS_MACOS
// Make sure egl.h doesn't give us definitions from X11 headers
#define EGL_NO_X11
#include <EGL/egl.h>
#undef EGL_NO_X11
# define EGL_NO_X11
# include <EGL/egl.h>
# undef EGL_NO_X11
#endif
namespace AccelGfx {
@ -22,17 +24,9 @@ public:
static OwnPtr<Context> create();
Context(EGLDisplay egl_display, EGLContext egl_context, EGLConfig egl_config)
: m_egl_display(egl_display)
, m_egl_context(egl_context)
, m_egl_config(egl_config)
Context()
{
}
private:
EGLDisplay m_egl_display { nullptr };
EGLContext m_egl_context { nullptr };
EGLConfig m_egl_config { nullptr };
};
}

View file

@ -7,7 +7,13 @@
#pragma once
#include <AK/Vector.h>
#include <GL/gl.h>
#ifdef AK_OS_MACOS
# define GL_SILENCE_DEPRECATION
# include <OpenGL/OpenGL.h>
# include <OpenGL/gl3.h>
#else
# include <GL/gl.h>
#endif
#include <LibGfx/Forward.h>
namespace AccelGfx::GL {

View file

@ -75,7 +75,7 @@ in vec2 vTextureCoord;
uniform sampler2D uSampler;
out vec4 fragColor;
void main() {
fragColor = texture2D(uSampler, vTextureCoord) * uColor;
fragColor = texture(uSampler, vTextureCoord) * uColor;
}
)";