pinnacle_api/
render.rs

1//! Rendering management.
2
3use pinnacle_api_defs::pinnacle::render::{
4    self,
5    v1::{SetDownscaleFilterRequest, SetUpscaleFilterRequest},
6};
7
8use crate::{client::Client, BlockOnTokio};
9
10/// What filter to use when scaling.
11pub enum ScalingFilter {
12    /// Use a bilinear filter.
13    ///
14    /// This will make up- and downscaling blurry.
15    Bilinear,
16    /// Use a nearest neighbor filter.
17    ///
18    /// This will cause scaling to look pixelated.
19    NearestNeighbor,
20}
21
22impl From<ScalingFilter> for render::v1::Filter {
23    fn from(value: ScalingFilter) -> Self {
24        match value {
25            ScalingFilter::Bilinear => render::v1::Filter::Bilinear,
26            ScalingFilter::NearestNeighbor => render::v1::Filter::NearestNeighbor,
27        }
28    }
29}
30
31/// Sets the upscaling filter that will be used for rendering.
32///
33/// # Examples
34///
35/// ```no_run
36/// # use pinnacle_api::render;
37/// # use pinnacle_api::render::ScalingFilter;
38/// render::set_upscale_filter(ScalingFilter::NearestNeighbor);
39/// ```
40pub fn set_upscale_filter(filter: ScalingFilter) {
41    Client::render()
42        .set_upscale_filter(SetUpscaleFilterRequest {
43            filter: render::v1::Filter::from(filter).into(),
44        })
45        .block_on_tokio()
46        .unwrap();
47}
48
49/// Sets the downscaling filter that will be used for rendering.
50///
51/// # Examples
52///
53/// ```no_run
54/// # use pinnacle_api::render;
55/// # use pinnacle_api::render::ScalingFilter;
56/// render::set_downscale_filter(ScalingFilter::NearestNeighbor);
57/// ```
58pub fn set_downscale_filter(filter: ScalingFilter) {
59    Client::render()
60        .set_downscale_filter(SetDownscaleFilterRequest {
61            filter: render::v1::Filter::from(filter).into(),
62        })
63        .block_on_tokio()
64        .unwrap();
65}