1
0
Fork 0
mirror of https://github.com/doukutsu-rs/doukutsu-rs synced 2025-02-11 11:53:01 +00:00

texture_set: streamed image loading

This commit is contained in:
Alula 2020-08-28 05:44:33 +02:00
parent 31b149d135
commit 647e5c73cd
No known key found for this signature in database
GPG key ID: 3E00485503A1D8BA
3 changed files with 16 additions and 5 deletions

View file

@ -29,6 +29,7 @@
use std::env;
use std::fmt;
use std::io;
use std::io::SeekFrom;
use std::path;
use crate::ggez::{Context, GameError, GameResult};
@ -87,6 +88,14 @@ impl io::Write for File {
}
}
impl io::Seek for File {
fn seek(&mut self, pos: SeekFrom) -> io::Result<u64> {
match *self {
File::VfsFile(ref mut f) => f.seek(pos),
}
}
}
impl Filesystem {
/// Create a new `Filesystem` instance, using the given `id` and (on
/// some platforms) the `author` as a portion of the user

View file

@ -13,7 +13,7 @@
use std::collections::VecDeque;
use std::fmt::{self, Debug};
use std::fs;
use std::io::{Read, Seek, Write};
use std::io::{Read, Seek, Write, BufRead};
use std::path::{self, Path, PathBuf};
use crate::ggez::error::{GameError, GameResult};

View file

@ -1,5 +1,5 @@
use std::collections::HashMap;
use std::io::Read;
use std::io::{Read, BufReader, Seek, SeekFrom};
use crate::ggez::{Context, GameError, GameResult};
use crate::ggez::filesystem;
@ -97,10 +97,12 @@ impl TextureSet {
fn load_image(&self, ctx: &mut Context, path: &str) -> GameResult<Image> {
let img = {
let mut buf = Vec::new();
let mut buf = [0u8; 8];
let mut reader = filesystem::open(ctx, path)?;
let _ = reader.read_to_end(&mut buf)?;
let image = image::load_from_memory(&buf)?;
reader.read_exact(&mut buf)?;
reader.seek(SeekFrom::Start(0))?;
let image = image::load(BufReader::new(reader), image::guess_format(&buf)?)?;
let mut rgba = image.to_rgba();
if image.color().channel_count() != 4 {