#piston #graphics #image #render-target #game

graphics_buffer

A buffer which can be used as a render target for Piston's graphics library. This buffer can be loaded from and/or saved to a file on disk. This allows for things like screenshots in games.

32 releases

0.7.7 Sep 22, 2021
0.7.6 Mar 27, 2021
0.7.5 Sep 30, 2020
0.7.3 Feb 24, 2020
0.4.3 Nov 19, 2018

#136 in Rendering

40 downloads per month
Used in 2 crates

MIT license

135KB
395 lines

Description

This library provides a buffer type, RenderBuffer, which can be used as a render target for Piston's graphics library. This buffer can be loaded from and/or saved to a file on disk. This allows for things like screenshots in games.

There is also an optional feature for RenderBuffer that allows it to be converted into a G2dTexture so that it can be rendered with piston_window. To enable this, add features = ["piston_window_texture"] to the graphics_buffer dependency in your cargo.toml.

API Documentation

Usage

Add this to your cargo.toml :

graphics_buffer = "0.6.0"
piston2d-graphics = "0.30.0"

or, if you want to be able to draw the texture to a window using piston_window :

graphics_buffer = { version = "0.6.0", features = ["piston_window_texture"] }
piston2d-graphics = "0.30.0"
piston_window = "0.89.0"

Here is a simple example that draws three circles and saves the image to a file:

use graphics::ellipse;
use graphics_buffer::*;

fn main() {
    // Create a new RenderBuffer
    let mut buffer = RenderBuffer::new(100, 100);
    buffer.clear([0.0, 0.0, 0.0, 0.0]);

    // Big red circle
    ellipse(
        [1.0, 0.0, 0.0, 0.7],
        [0.0, 0.0, 100.0, 100.0],
        IDENTITY,
        &mut buffer,
    );
    // Small blue circle
    ellipse(
        [0.0, 0.0, 1.0, 0.7],
        [0.0, 0.0, 50.0, 50.0],
        IDENTITY,
        &mut buffer,
    );
    // Small green circle
    ellipse(
        [0.0, 1.0, 0.0, 0.7],
        [50.0, 50.0, 50.0, 50.0],
        IDENTITY,
        &mut buffer,
    );

    // Save the buffer
    buffer.save("circles.png").unwrap();
}

Contributing

Feel free to open an issue or PR if you want to contribute. There are definitely places for improvement, especially in the rendering code.

Dependencies

~7–15MB
~158K SLoC