forked from AuroraMiddleware/gtk
257fd990d1
This is for adding a EGL-based renderer which is done via the ANGLE project, which translate EGL calls to Direct3D 9/11. This is done as a possible solution to issue #105, especially for cases where the needed full GL extensions to map OpenGL to Direct3D is unavailable or unreliable, or when the OpenGL implementation from the graphics drivers are problematic. To enable this, do the following: -Build ANGLE and ensure the ANGLE libEGL.dll and libGLESv2.dll are available. A sufficiently-recent ANGLE is needed for things to work correctly--note that the copy of ANGLE that is included in qtbase-5.10.1 is sufficient. ANGLE is licensed under a BSD 3-clause license. -Build libepoxy on Windows with EGL support enabled. -Currently, prior to running GTK+ programs, the GDK_DEBUG envvar needs to be set with gl-gles as at least one of the flags. Known issues: -Only OpenGL ES 3 is supported, ANGLE's ES 2 does not support the needed extensions, notably GL_OES_vertex_array_object, but its ES 3 support is sufficient. -There is no autodetection or fallback mechanism to enable using EGL/Angle automatically yet. There are no plans to do this in this commit.
78 lines
2.0 KiB
C
78 lines
2.0 KiB
C
/* GDK - The GIMP Drawing Kit
|
|
*
|
|
* gdkglcontext-win32.h: Private Win32 specific OpenGL wrappers
|
|
*
|
|
* Copyright © 2014 Chun-wei Fan
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __GDK_WIN32_GL_CONTEXT__
|
|
#define __GDK_WIN32_GL_CONTEXT__
|
|
|
|
#include <epoxy/gl.h>
|
|
#include <epoxy/wgl.h>
|
|
|
|
#ifdef GDK_WIN32_ENABLE_EGL
|
|
# include <epoxy/egl.h>
|
|
#endif
|
|
|
|
#include "gdkglcontextprivate.h"
|
|
#include "gdkdisplayprivate.h"
|
|
#include "gdksurface.h"
|
|
#include "gdkinternals.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
struct _GdkWin32GLContext
|
|
{
|
|
GdkGLContext parent_instance;
|
|
|
|
/* WGL Context Items */
|
|
HGLRC hglrc;
|
|
HDC gl_hdc;
|
|
guint need_alpha_bits : 1;
|
|
|
|
/* other items */
|
|
guint is_attached : 1;
|
|
guint do_frame_sync : 1;
|
|
|
|
#ifdef GDK_WIN32_ENABLE_EGL
|
|
/* EGL (Angle) Context Items */
|
|
EGLContext egl_context;
|
|
EGLConfig egl_config;
|
|
#endif
|
|
};
|
|
|
|
struct _GdkWin32GLContextClass
|
|
{
|
|
GdkGLContextClass parent_class;
|
|
};
|
|
|
|
GdkGLContext *
|
|
_gdk_win32_surface_create_gl_context (GdkSurface *window,
|
|
gboolean attached,
|
|
GdkGLContext *share,
|
|
GError **error);
|
|
|
|
gboolean
|
|
_gdk_win32_display_make_gl_context_current (GdkDisplay *display,
|
|
GdkGLContext *context);
|
|
void
|
|
_gdk_win32_surface_invalidate_egl_framebuffer (GdkSurface *surface);
|
|
|
|
G_END_DECLS
|
|
|
|
#endif /* __GDK_WIN32_GL_CONTEXT__ */
|