mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-12-22 18:09:49 +01:00
render: split render pass API into separate header
Keeps the main wlr_renderer.h a tad more tidy.
This commit is contained in:
parent
568b1943b9
commit
d3d3e19ffd
2 changed files with 124 additions and 103 deletions
123
include/wlr/render/pass.h
Normal file
123
include/wlr/render/pass.h
Normal file
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* This an unstable interface of wlroots. No guarantees are made regarding the
|
||||
* future consistency of this API.
|
||||
*/
|
||||
#ifndef WLR_USE_UNSTABLE
|
||||
#error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features"
|
||||
#endif
|
||||
|
||||
#ifndef WLR_RENDER_PASS_H
|
||||
#define WLR_RENDER_PASS_H
|
||||
|
||||
#include <pixman.h>
|
||||
#include <stdint.h>
|
||||
#include <wayland-server-core.h>
|
||||
#include <wlr/util/box.h>
|
||||
|
||||
struct wlr_renderer;
|
||||
struct wlr_buffer;
|
||||
|
||||
/**
|
||||
* A render pass accumulates drawing operations until submitted to the GPU.
|
||||
*/
|
||||
struct wlr_render_pass;
|
||||
|
||||
/**
|
||||
* An object that can be queried after a render to get the duration of the render.
|
||||
*/
|
||||
struct wlr_render_timer;
|
||||
|
||||
struct wlr_buffer_pass_options {
|
||||
/* Timer to measure the duration of the render pass */
|
||||
struct wlr_render_timer *timer;
|
||||
};
|
||||
|
||||
/**
|
||||
* Begin a new render pass with the supplied destination buffer.
|
||||
*
|
||||
* Callers must call wlr_render_pass_submit() once they are done with the
|
||||
* render pass.
|
||||
*/
|
||||
struct wlr_render_pass *wlr_renderer_begin_buffer_pass(struct wlr_renderer *renderer,
|
||||
struct wlr_buffer *buffer, const struct wlr_buffer_pass_options *options);
|
||||
|
||||
/**
|
||||
* Submit the render pass.
|
||||
*
|
||||
* The render pass cannot be used after this function is called.
|
||||
*/
|
||||
bool wlr_render_pass_submit(struct wlr_render_pass *render_pass);
|
||||
|
||||
/**
|
||||
* Blend modes.
|
||||
*/
|
||||
enum wlr_render_blend_mode {
|
||||
/* Pre-multiplied alpha (default) */
|
||||
WLR_RENDER_BLEND_MODE_PREMULTIPLIED,
|
||||
/* Blending is disabled */
|
||||
WLR_RENDER_BLEND_MODE_NONE,
|
||||
};
|
||||
|
||||
/**
|
||||
* Filter modes.
|
||||
*/
|
||||
enum wlr_scale_filter_mode {
|
||||
/* bilinear texture filtering (default) */
|
||||
WLR_SCALE_FILTER_BILINEAR,
|
||||
/* nearest texture filtering */
|
||||
WLR_SCALE_FILTER_NEAREST,
|
||||
};
|
||||
|
||||
struct wlr_render_texture_options {
|
||||
/* Source texture */
|
||||
struct wlr_texture *texture;
|
||||
/* Source coordinates, leave empty to render the whole texture */
|
||||
struct wlr_fbox src_box;
|
||||
/* Destination coordinates, width/height default to the texture size */
|
||||
struct wlr_box dst_box;
|
||||
/* Opacity between 0 (transparent) and 1 (opaque), leave NULL for opaque */
|
||||
const float *alpha;
|
||||
/* Clip region, leave NULL to disable clipping */
|
||||
const pixman_region32_t *clip;
|
||||
/* Transform applied to the source texture */
|
||||
enum wl_output_transform transform;
|
||||
/* Filtering */
|
||||
enum wlr_scale_filter_mode filter_mode;
|
||||
/* Blend mode */
|
||||
enum wlr_render_blend_mode blend_mode;
|
||||
};
|
||||
|
||||
/**
|
||||
* Render a texture.
|
||||
*/
|
||||
void wlr_render_pass_add_texture(struct wlr_render_pass *render_pass,
|
||||
const struct wlr_render_texture_options *options);
|
||||
|
||||
/**
|
||||
* A color value.
|
||||
*
|
||||
* Each channel has values between 0 and 1 inclusive. The R, G, B
|
||||
* channels need to be pre-multiplied by A.
|
||||
*/
|
||||
struct wlr_render_color {
|
||||
float r, g, b, a;
|
||||
};
|
||||
|
||||
struct wlr_render_rect_options {
|
||||
/* Rectangle coordinates */
|
||||
struct wlr_box box;
|
||||
/* Source color */
|
||||
struct wlr_render_color color;
|
||||
/* Clip region, leave NULL to disable clipping */
|
||||
const pixman_region32_t *clip;
|
||||
/* Blend mode */
|
||||
enum wlr_render_blend_mode blend_mode;
|
||||
};
|
||||
|
||||
/**
|
||||
* Render a rectangle.
|
||||
*/
|
||||
void wlr_render_pass_add_rect(struct wlr_render_pass *render_pass,
|
||||
const struct wlr_render_rect_options *options);
|
||||
|
||||
#endif
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <wayland-server-core.h>
|
||||
#include <wlr/render/pass.h>
|
||||
#include <wlr/render/wlr_texture.h>
|
||||
#include <wlr/util/box.h>
|
||||
|
||||
|
@ -156,109 +157,6 @@ int wlr_renderer_get_drm_fd(struct wlr_renderer *r);
|
|||
*/
|
||||
void wlr_renderer_destroy(struct wlr_renderer *renderer);
|
||||
|
||||
/**
|
||||
* A render pass accumulates drawing operations until submitted to the GPU.
|
||||
*/
|
||||
struct wlr_render_pass;
|
||||
|
||||
/**
|
||||
* An object that can be queried after a render to get the duration of the render.
|
||||
*/
|
||||
struct wlr_render_timer;
|
||||
|
||||
struct wlr_buffer_pass_options {
|
||||
/* Timer to measure the duration of the render pass */
|
||||
struct wlr_render_timer *timer;
|
||||
};
|
||||
|
||||
/**
|
||||
* Begin a new render pass with the supplied destination buffer.
|
||||
*
|
||||
* Callers must call wlr_render_pass_submit() once they are done with the
|
||||
* render pass.
|
||||
*/
|
||||
struct wlr_render_pass *wlr_renderer_begin_buffer_pass(struct wlr_renderer *renderer,
|
||||
struct wlr_buffer *buffer, const struct wlr_buffer_pass_options *options);
|
||||
|
||||
/**
|
||||
* Submit the render pass.
|
||||
*
|
||||
* The render pass cannot be used after this function is called.
|
||||
*/
|
||||
bool wlr_render_pass_submit(struct wlr_render_pass *render_pass);
|
||||
|
||||
/**
|
||||
* Blend modes.
|
||||
*/
|
||||
enum wlr_render_blend_mode {
|
||||
/* Pre-multiplied alpha (default) */
|
||||
WLR_RENDER_BLEND_MODE_PREMULTIPLIED,
|
||||
/* Blending is disabled */
|
||||
WLR_RENDER_BLEND_MODE_NONE,
|
||||
};
|
||||
|
||||
/**
|
||||
* Filter modes.
|
||||
*/
|
||||
enum wlr_scale_filter_mode {
|
||||
/* bilinear texture filtering (default) */
|
||||
WLR_SCALE_FILTER_BILINEAR,
|
||||
/* nearest texture filtering */
|
||||
WLR_SCALE_FILTER_NEAREST,
|
||||
};
|
||||
|
||||
struct wlr_render_texture_options {
|
||||
/* Source texture */
|
||||
struct wlr_texture *texture;
|
||||
/* Source coordinates, leave empty to render the whole texture */
|
||||
struct wlr_fbox src_box;
|
||||
/* Destination coordinates, width/height default to the texture size */
|
||||
struct wlr_box dst_box;
|
||||
/* Opacity between 0 (transparent) and 1 (opaque), leave NULL for opaque */
|
||||
const float *alpha;
|
||||
/* Clip region, leave NULL to disable clipping */
|
||||
const pixman_region32_t *clip;
|
||||
/* Transform applied to the source texture */
|
||||
enum wl_output_transform transform;
|
||||
/* Filtering */
|
||||
enum wlr_scale_filter_mode filter_mode;
|
||||
/* Blend mode */
|
||||
enum wlr_render_blend_mode blend_mode;
|
||||
};
|
||||
|
||||
/**
|
||||
* Render a texture.
|
||||
*/
|
||||
void wlr_render_pass_add_texture(struct wlr_render_pass *render_pass,
|
||||
const struct wlr_render_texture_options *options);
|
||||
|
||||
/**
|
||||
* A color value.
|
||||
*
|
||||
* Each channel has values between 0 and 1 inclusive. The R, G, B
|
||||
* channels need to be pre-multiplied by A.
|
||||
*/
|
||||
struct wlr_render_color {
|
||||
float r, g, b, a;
|
||||
};
|
||||
|
||||
struct wlr_render_rect_options {
|
||||
/* Rectangle coordinates */
|
||||
struct wlr_box box;
|
||||
/* Source color */
|
||||
struct wlr_render_color color;
|
||||
/* Clip region, leave NULL to disable clipping */
|
||||
const pixman_region32_t *clip;
|
||||
/* Blend mode */
|
||||
enum wlr_render_blend_mode blend_mode;
|
||||
};
|
||||
|
||||
/**
|
||||
* Render a rectangle.
|
||||
*/
|
||||
void wlr_render_pass_add_rect(struct wlr_render_pass *render_pass,
|
||||
const struct wlr_render_rect_options *options);
|
||||
|
||||
/**
|
||||
* Allocate and initialise a new render timer.
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue