summaryrefslogtreecommitdiff
path: root/gdk/x11/gdkglcontext-x11.h
Commit message (Collapse)AuthorAgeFilesLines
* GdkWindow -> GdkSurface: File renamesAlexander Larsson2018-03-201-1/+1
| | | | | | | | | | | | | Rename all *window.[ch] source files. This is an automatic operation, done by the following commands: for i in $(git ls-files gdk | grep window); do git mv $i $(echo $i | sed s/window/surface/); git sed -f g $(basename $i) $(basename $i | sed s/window/surface/) ; done git checkout NEWS* po-properties po
* GdkWindow -> GdkSurface initial type renameAlexander Larsson2018-03-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This renames the GdkWindow class and related classes (impl, backend subclasses) to surface. Additionally it renames related types: GdkWindowAttr, GdkWindowPaint, GdkWindowWindowClass, GdkWindowType, GdkWindowTypeHint, GdkWindowHints, GdkWindowState, GdkWindowEdge This is an automatic conversion using the below commands: git sed -f g GdkWindowWindowClass GdkSurfaceSurfaceClass git sed -f g GdkWindow GdkSurface git sed -f g "gdk_window\([ _\(\),;]\|$\)" "gdk_surface\1" # Avoid hitting gdk_windowing git sed -f g "GDK_WINDOW\([ _\(]\|$\)" "GDK_SURFACE\1" # Avoid hitting GDK_WINDOWING git sed "GDK_\([A-Z]*\)IS_WINDOW\([_ (]\|$\)" "GDK_\1IS_SURFACE\2" git sed GDK_TYPE_WINDOW GDK_TYPE_SURFACE git sed -f g GdkPointerWindowInfo GdkPointerSurfaceInfo git sed -f g "BROADWAY_WINDOW" "BROADWAY_SURFACE" git sed -f g "broadway_window" "broadway_surface" git sed -f g "BroadwayWindow" "BroadwaySurface" git sed -f g "WAYLAND_WINDOW" "WAYLAND_SURFACE" git sed -f g "wayland_window" "wayland_surface" git sed -f g "WaylandWindow" "WaylandSurface" git sed -f g "X11_WINDOW" "X11_SURFACE" git sed -f g "x11_window" "x11_surface" git sed -f g "X11Window" "X11Surface" git sed -f g "WIN32_WINDOW" "WIN32_SURFACE" git sed -f g "win32_window" "win32_surface" git sed -f g "Win32Window" "Win32Surface" git sed -f g "QUARTZ_WINDOW" "QUARTZ_SURFACE" git sed -f g "quartz_window" "quartz_surface" git sed -f g "QuartzWindow" "QuartzSurface" git checkout NEWS* po-properties
* x11: Drop GdkX11Visual as public apiMatthias Clasen2017-11-171-1/+1
| | | | | There was no useful functionality left here, so just remove this from the api altogether.
* x11: Stop using GdkScreen altogetherMatthias Clasen2017-11-171-1/+1
| | | | | Derive GdkX11Screen directly from GObject, and remove the last remaining uses of GdkScreen.
* Stop including gdkmain.hMatthias Clasen2017-11-171-1/+0
| | | | It is empty now.
* Drop GdkVisualMatthias Clasen2017-10-311-1/+1
| | | | | This type was unused except for serving as a parent for GdkX11Visual. Just move the fields to that type.
* glcontext: Make begin/end_draw() pairedBenjamin Otte2016-12-051-1/+2
| | | | | | | | | | This way, we can query the GL context's state via gdk_gl_context_is_drawing(). Use this function to make GL contexts as attached and grant them access to the front/backbuffer for rendering. All of this is still unused because GL drawing is still disabled.
* gdk: Large GL refactoringBenjamin Otte2016-12-051-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | No visible changes as GL rendering is disabled at the moment. What was done: 1. Move window->invalidate_for_new_frame to glcontext->begin_frame This moves the code to where it is used (the GLContext) and prepares it for being called where it is used when actually beginning to draw the frame. 2. Get rid of buffer-age usage We want to let the application render directly to the backbuffer. Because of that, we cannot make any assumptions about the contents the application renders outside the clip area. In particular GskGLRenderer renders random stuff there but not actual contents. 3. Pass the actual GL context Previously, we passed the shared context to end_frame, now we pass the actual GL context that the application uses for rendering. This is so that the vfuncs could prepare the actual contexts for rendering (they don't currently). 4. Simplify the code The previous code set up the final drawing method in begin_frame. Instead, we now just ensure the clip area is something we can render and decide on the actual method in end_frame. This is both more robust (we can change the clip area in between if we want to) and less code.
* Remove GdkGLProfileEmmanuele Bassi2015-02-121-1/+0
| | | | | | | | | | | | | | | The existence of OpenGL implementations that do not provide the full core profile compatibility because of reasons beyond the technical, like llvmpipe not implementing floating point buffers, makes the existence of GdkGLProfile and documenting the fact that we use core profiles a bit harder. Since we do not have any existing profile except the default, we can remove the GdkGLProfile and its related API from GDK and GTK+, and sweep the whole thing under the carpet, while we wait for an extension that lets us ask for the most compatible profile possible. https://bugzilla.gnome.org/show_bug.cgi?id=744407
* gl: Drop profile for gdk_window_create_gl_context()Emmanuele Bassi2015-02-121-1/+0
| | | | | | Now that we have a two-stages GL context creation sequence, we can move the profile to a pre-realize option, like the debug and forward compatibility bits, or the GL version to use.
* GdkX11GLContext: Use bitblit for swap if no buffer age supportAlexander Larsson2014-11-061-0/+1
| | | | | | | | | If buffer age is undefined and the updated area is not the whole window then we use bit-blits instead of swap-buffers to end the frame. This allows us to not repaint the entire window unnecessarily if buffer_age is not supported, like e.g. with DRI2.
* GdkGLContext: Change the way we track the current contextAlexander Larsson2014-10-301-3/+1
| | | | | | | To properly support multithreaded use we use a global GPrivate to track the current context. Since we also don't need to track the current context on the display we move gdk_display_destroy_gl_context to GdkGLContext::discard.
* X11: Pick better system and rgba visuals for GLAlexander Larsson2014-10-291-1/+1
| | | | | | | | | | | | | | We want to create windows with the default visuals such that we then have the right visual for GLX when we want to create the paint GL context for the window. For instance, (in bug 738670) the default rgba visual we picked for the NVidia driver had an alpha size of 0 which gave us a BadMatch when later trying to initialize a gl context on it with a alpha FBConfig. Instead of just picking what the Xserver likes for the default, and just picking the first rgba visual we now actually call into GLX to pick an appropriate visual.
* gl: Make gdk_gl_context_make_current() return voidAlexander Larsson2014-10-131-1/+1
| | | | | | | | | | Its not really reasonable to handle failures to make_current, it basically only happens if you pass invalid arguments to it, and thats not something we trap on similar things on the X drawing side. If GL is not supported that should be handled by the context creation failing, and anything going wrong after that is essentially a critical (or an async X error).
* gl: Make all user GdkGLContexts not attached to any windowAlexander Larsson2014-10-131-0/+3
| | | | | | We make user facing gl contexts not attached to a surface if possible, or attached to dummy surfaces. This means nothing can accidentally read/write to the toplevel back buffer.
* gdk: Add support for OpenGLAlexander Larsson2014-10-131-0/+71
This adds the new type GdkGLContext that wraps an OpenGL context for a particular native window. It also adds support for the gdk paint machinery to use OpenGL to draw everything. As soon as anyone creates a GL context for a native window we create a "paint context" for that GdkWindow and switch to using GL for painting it. This commit contains only an implementation for X11 (using GLX). The way painting works is that all client gl contexts draw into offscreen buffers rather than directly to the back buffer, and the way something gets onto the window is by using gdk_cairo_draw_from_gl() to draw part of that buffer onto the draw cairo context. As a fallback (if we're doing redirected drawing or some effect like a cairo_push_group()) we read back the gl buffer into memory and composite using cairo. This means that GL rendering works in all cases, including rendering to a PDF. However, this is not particularly fast. In the *typical* case, where we're drawing directly to the window in the regular paint loop we hit the fast path. The fast path uses opengl to draw the buffer to the window back buffer, either by blitting or texturing. Then we track the region that was drawn, and when the draw ends we paint the normal cairo surface to the window (using texture-from-pixmap in the X11 case, or texture from cairo image otherwise) in the regions where there is no gl painted. There are some complexities wrt layering of gl and cairo areas though: * We track via gdk_window_mark_paint_from_clip() whenever gtk is painting over a region we previously rendered with opengl (flushed_region). This area (needs_blend_region) is blended rather than copied at the end of the frame. * If we're drawing a gl texture with alpha we first copy the current cairo_surface inside the target region to the back buffer before we blend over it. These two operations allow us full stacking of transparent gl and cairo regions.