mirror of
https://github.com/maplibre/maplibre-rs.git
synced 2025-12-08 19:05:57 +00:00
Make writing rendered images to disk optional, and disable for bench (#214)
This commit is contained in:
parent
9496ef0e71
commit
5b084f033e
@ -12,7 +12,7 @@ fn headless_render(c: &mut Criterion) {
|
||||
let (mut map, tile) = run_multithreaded(async {
|
||||
let (kernel, renderer) = create_headless_renderer(1000, None).await;
|
||||
let style = Style::default();
|
||||
let map = HeadlessMap::new(style, renderer, kernel).unwrap();
|
||||
let map = HeadlessMap::new(style, renderer, kernel, false).unwrap();
|
||||
|
||||
let tile = map
|
||||
.fetch_tile(
|
||||
|
||||
@ -17,7 +17,7 @@ pub async fn run_headless(tile_size: u32, min: LatLon, max: LatLon) {
|
||||
.map(|layer| layer.source_layer.as_ref().unwrap().clone())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let mut map = HeadlessMap::new(style, renderer, kernel).unwrap();
|
||||
let mut map = HeadlessMap::new(style, renderer, kernel, true).unwrap();
|
||||
|
||||
let tile_limits = google_mercator().tile_limits(
|
||||
extent_wgs84_to_merc(&Extent {
|
||||
|
||||
@ -36,6 +36,7 @@ impl HeadlessMap {
|
||||
style: Style,
|
||||
renderer: Renderer,
|
||||
kernel: Kernel<HeadlessEnvironment>,
|
||||
write_to_disk: bool,
|
||||
) -> Result<Self, Error> {
|
||||
let window_size = renderer.state().surface().size();
|
||||
|
||||
@ -59,7 +60,7 @@ impl HeadlessMap {
|
||||
register_default_render_stages(graph, &mut schedule);
|
||||
schedule.add_stage(
|
||||
RenderStageLabel::Cleanup,
|
||||
WriteSurfaceBufferStage::default(),
|
||||
WriteSurfaceBufferStage::new(write_to_disk),
|
||||
);
|
||||
|
||||
Ok(Self {
|
||||
|
||||
@ -13,9 +13,18 @@ use crate::{
|
||||
|
||||
/// Stage which writes the current contents of the GPU/CPU buffer in [`BufferedTextureHead`]
|
||||
/// to disk as PNG.
|
||||
#[derive(Default)]
|
||||
pub struct WriteSurfaceBufferStage {
|
||||
frame: u64,
|
||||
write_to_disk: bool,
|
||||
}
|
||||
|
||||
impl WriteSurfaceBufferStage {
|
||||
pub fn new(write_to_disk: bool) -> Self {
|
||||
Self {
|
||||
frame: 0,
|
||||
write_to_disk,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Stage for WriteSurfaceBufferStage {
|
||||
@ -35,13 +44,18 @@ impl Stage for WriteSurfaceBufferStage {
|
||||
let device = device.clone();
|
||||
let current_frame = self.frame;
|
||||
|
||||
task::block_in_place(|| {
|
||||
Handle::current().block_on(async {
|
||||
buffered_texture
|
||||
.create_png(&device, format!("frame_{}.png", current_frame).as_str())
|
||||
.await;
|
||||
})
|
||||
});
|
||||
if self.write_to_disk {
|
||||
task::block_in_place(|| {
|
||||
Handle::current().block_on(async {
|
||||
buffered_texture
|
||||
.create_png(
|
||||
&device,
|
||||
format!("frame_{}.png", current_frame).as_str(),
|
||||
)
|
||||
.await;
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
self.frame += 1;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user