Background: To bind a Xorg window content to a OpenGL FBConfig, which has to match the color format the Xorg window is using. Previously, compton just find a FBConfig that has the same depth. This led to chjj/compton#477, which has been fixed by a ugly hack. The commit refactor the lookup mechanism to take as much into consideration as we reasonably can. Hopefully preventing similar breakages in the future. Also, some code sharing between the old and new glx backend. Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
// SPDX-License-Identifier: MPL-2.0
|
|
// Copyright (c) Yuxuan Shui <yshuiv7@gmail.com>
|
|
#pragma once
|
|
|
|
#include <xcb/xcb.h>
|
|
#include <xcb/render.h>
|
|
#include <stdbool.h>
|
|
#ifdef CONFIG_OPENGL
|
|
#include <GL/glx.h>
|
|
#include "backend/gl/glx.h"
|
|
#endif
|
|
#include "region.h"
|
|
|
|
typedef struct _glx_texture glx_texture_t;
|
|
typedef struct glx_prog_main glx_prog_main_t;
|
|
typedef struct win win;
|
|
typedef struct session session_t;
|
|
|
|
typedef struct paint {
|
|
xcb_pixmap_t pixmap;
|
|
xcb_render_picture_t pict;
|
|
glx_texture_t *ptex;
|
|
#ifdef CONFIG_OPENGL
|
|
struct glx_fbconfig_info *fbcfg;
|
|
#endif
|
|
} paint_t;
|
|
|
|
void
|
|
render(session_t *ps, int x, int y, int dx, int dy, int wid, int hei,
|
|
double opacity, bool argb, bool neg,
|
|
xcb_render_picture_t pict, glx_texture_t *ptex,
|
|
const region_t *reg_paint, const glx_prog_main_t *pprogram);
|
|
void
|
|
paint_one(session_t *ps, win *w, const region_t *reg_paint);
|
|
|
|
void
|
|
paint_all(session_t *ps, win * const t, bool ignore_damage);
|
|
|
|
void free_picture(xcb_connection_t *c, xcb_render_picture_t *p);
|
|
|
|
void free_paint(session_t *ps, paint_t *ppaint);
|
|
void free_root_tile(session_t *ps);
|
|
|
|
bool init_render(session_t *ps);
|
|
void deinit_render(session_t *ps);
|