There is actually no specification what symbols are exported from a
libGL implementation. The (extremely outdated) OpenGL ABI specification
says only GL 1.2 functions are guaranteed. Don't know how relevant that
is now, but different libGL implementations do export different set of
symbols. On Linux we are most likely to be linked with libglvnd, which
has everything we need. But on other platforms this is not necessarily
the case, for example on OpenBSD we are missing glGetQueryObjectui64v.
Use libepoxy so we can outsource this problem and never worry about it
ever again. Plus it also saves us from calling GetProcAddress ourselves.
Changes other than trivial build fixes I have to make:
1. Can't use eglCreatePlatformWindowSurface/eglGetPlatformDisplay.
libepoxy checks for EGL 1.5 when resolving these functions. But
without a current context, libepoxy assumes we only have EGL 1.4.
This creates a chicken and egg problem - we need a display to call
eglGetPlatformDisplay. We have to use the *EXT version instead.
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
In X, background pixmap is tiled (meaning they are repeated to filled
the window) by default. So, in the glx backend, we mimic this behavior
by binding the background pixmap of the root window (aka, the wallpaper)
to texture that repeats.
Fixes#107
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
glStringMarker is usually only available when running under some
kind of GL debugger, and can be used to insert strings into the
GL command string. Writing logs using it can be useful, since it
lets us correspond GL calls with what happens in compton.
More info about the extension can be found here:
https://www.khronos.org/registry/OpenGL/extensions/GREMEDY/GREMEDY_string_marker.txt
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
So that the format arguments will only be evaluated if the log is
enabled by the log level. Allow us to add more expensive logs without
impact performance when they are not enabled.
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>