mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-23 16:21:33 +11:00
Move the palettes to a single constant rather than being repeated
This commit is contained in:
parent
a5c86e8ce8
commit
1e759dbeca
|
@ -20,7 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
- Many of the places that originally disabled IRQs now use the `sync` module, reducing the chance of missed interrupts.
|
||||
- HashMap iterators now implement `size_hint` which should result in slightly better generation of code using those iterators.
|
||||
- Transparency of backgrounds is now set once in the toml file rather than once for every image.
|
||||
- Palette generation now takes into account every single background a toml definition rather than one at a time.
|
||||
- Palette generation now takes into account every single background a toml definition rather than one at a time, you can now find it in the PALETTES constant rather than in every individual image.
|
||||
|
||||
### Fixed
|
||||
- Fixed the fast magnitude function in agb_fixnum. This is also used in fast_normalise. Previously only worked for positive (x, y).
|
||||
|
|
|
@ -127,10 +127,15 @@ pub fn include_gfx(input: TokenStream) -> TokenStream {
|
|||
));
|
||||
}
|
||||
|
||||
let palette_code =
|
||||
rust_generator::generate_palette_code(&optimisation_results, &config.crate_prefix());
|
||||
|
||||
let module = quote! {
|
||||
mod #module_name {
|
||||
const _: &[u8] = include_bytes!(#include_path);
|
||||
|
||||
#palette_code
|
||||
|
||||
#(#image_code)*
|
||||
}
|
||||
};
|
||||
|
|
|
@ -7,19 +7,13 @@ use quote::{format_ident, quote};
|
|||
|
||||
use std::iter;
|
||||
|
||||
pub(crate) fn generate_code(
|
||||
output_variable_name: &str,
|
||||
pub(crate) fn generate_palette_code(
|
||||
results: &Palette16OptimisationResults,
|
||||
image: &Image,
|
||||
image_filename: &str,
|
||||
tile_size: TileSize,
|
||||
crate_prefix: String,
|
||||
assignment_offset: Option<usize>,
|
||||
crate_prefix: &str,
|
||||
) -> TokenStream {
|
||||
let crate_prefix = format_ident!("{}", crate_prefix);
|
||||
let output_variable_name = format_ident!("{}", output_variable_name);
|
||||
|
||||
let palette_data = results.optimised_palettes.iter().map(|palette| {
|
||||
let palettes = results.optimised_palettes.iter().map(|palette| {
|
||||
let colours = palette
|
||||
.clone()
|
||||
.into_iter()
|
||||
|
@ -35,6 +29,23 @@ pub(crate) fn generate_code(
|
|||
}
|
||||
});
|
||||
|
||||
quote! {
|
||||
pub const PALETTES: &[#crate_prefix::display::palette16::Palette16] = &[#(#palettes),*];
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn generate_code(
|
||||
output_variable_name: &str,
|
||||
results: &Palette16OptimisationResults,
|
||||
image: &Image,
|
||||
image_filename: &str,
|
||||
tile_size: TileSize,
|
||||
crate_prefix: String,
|
||||
assignment_offset: Option<usize>,
|
||||
) -> TokenStream {
|
||||
let crate_prefix = format_ident!("{}", crate_prefix);
|
||||
let output_variable_name = format_ident!("{}", output_variable_name);
|
||||
|
||||
let (tile_data, assignments) = if let Some(assignment_offset) = assignment_offset {
|
||||
let mut tile_data = Vec::new();
|
||||
|
||||
|
@ -68,17 +79,13 @@ pub(crate) fn generate_code(
|
|||
pub const #output_variable_name: #crate_prefix::display::tile_data::TileData = {
|
||||
const _: &[u8] = include_bytes!(#image_filename);
|
||||
|
||||
const PALETTE_DATA: &[#crate_prefix::display::palette16::Palette16] = &[
|
||||
#(#palette_data),*
|
||||
];
|
||||
|
||||
const TILE_DATA: &[u8] = #data;
|
||||
|
||||
const PALETTE_ASSIGNMENT: &[u8] = &[
|
||||
#(#assignments),*
|
||||
];
|
||||
|
||||
#crate_prefix::display::tile_data::TileData::new(PALETTE_DATA, TILE_DATA, PALETTE_ASSIGNMENT)
|
||||
#crate_prefix::display::tile_data::TileData::new(TILE_DATA, PALETTE_ASSIGNMENT)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ fn main(mut gba: agb::Gba) -> ! {
|
|||
|
||||
let tileset = TileSet::new(affine_tiles::water_tiles.tiles, TileFormat::EightBpp);
|
||||
|
||||
vram.set_background_palettes(affine_tiles::water_tiles.palettes);
|
||||
vram.set_background_palettes(affine_tiles::PALETTES);
|
||||
|
||||
let mut bg = gfx.background(Priority::P0, AffineBackgroundSize::Background32x32);
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ fn main(mut gba: agb::Gba) -> ! {
|
|||
|
||||
let tileset = TileSet::new(water_tiles::water_tiles.tiles, TileFormat::FourBpp);
|
||||
|
||||
vram.set_background_palettes(water_tiles::water_tiles.palettes);
|
||||
vram.set_background_palettes(water_tiles::PALETTES);
|
||||
|
||||
let mut bg = gfx.background(Priority::P0, RegularBackgroundSize::Background32x32);
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ use super::tiled::{RegularMap, TileFormat, TileSet, TileSetting, TiledMap, VRamM
|
|||
crate::include_gfx!("gfx/agb_logo.toml");
|
||||
|
||||
pub fn display_logo(map: &mut RegularMap, vram: &mut VRamManager) {
|
||||
vram.set_background_palettes(agb_logo::test_logo.palettes);
|
||||
vram.set_background_palettes(agb_logo::PALETTES);
|
||||
|
||||
let background_tilemap = TileSet::new(agb_logo::test_logo.tiles, TileFormat::FourBpp);
|
||||
|
||||
|
|
|
@ -1,20 +1,13 @@
|
|||
use crate::display::palette16::Palette16;
|
||||
|
||||
#[non_exhaustive]
|
||||
pub struct TileData {
|
||||
pub palettes: &'static [Palette16],
|
||||
pub tiles: &'static [u8],
|
||||
pub palette_assignments: &'static [u8],
|
||||
}
|
||||
|
||||
impl TileData {
|
||||
#[must_use]
|
||||
pub const fn new(
|
||||
palettes: &'static [Palette16],
|
||||
tiles: &'static [u8],
|
||||
palette_assignments: &'static [u8],
|
||||
) -> Self {
|
||||
pub const fn new(tiles: &'static [u8], palette_assignments: &'static [u8]) -> Self {
|
||||
TileData {
|
||||
palettes,
|
||||
tiles,
|
||||
palette_assignments,
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ use crate::sfx::Sfx;
|
|||
include_gfx!("gfx/backgrounds.toml");
|
||||
|
||||
pub fn load_palettes(vram: &mut VRamManager) {
|
||||
vram.set_background_palettes(backgrounds::stars.palettes);
|
||||
vram.set_background_palettes(backgrounds::PALETTES);
|
||||
}
|
||||
|
||||
pub(crate) fn load_help_text(
|
||||
|
@ -101,7 +101,7 @@ fn create_background_map(map: &mut RegularMap, vram: &mut VRamManager, stars_til
|
|||
|
||||
pub fn show_title_screen(background: &mut RegularMap, vram: &mut VRamManager, sfx: &mut Sfx) {
|
||||
background.set_scroll_pos((0i16, 0).into());
|
||||
vram.set_background_palettes(backgrounds::title.palettes);
|
||||
vram.set_background_palettes(backgrounds::PALETTES);
|
||||
let tile_set = TileSet::new(
|
||||
backgrounds::title.tiles,
|
||||
agb::display::tiled::TileFormat::FourBpp,
|
||||
|
|
|
@ -785,7 +785,7 @@ fn agb_main(mut gba: agb::Gba) -> ! {
|
|||
|
||||
pub fn main(mut agb: agb::Gba) -> ! {
|
||||
let (tiled, mut vram) = agb.display.video.tiled0();
|
||||
vram.set_background_palettes(tile_sheet::background.palettes);
|
||||
vram.set_background_palettes(tile_sheet::PALETTES);
|
||||
let mut splash_screen = tiled.background(Priority::P0, RegularBackgroundSize::Background32x32);
|
||||
let mut world_display = tiled.background(Priority::P0, RegularBackgroundSize::Background32x32);
|
||||
|
||||
|
@ -817,7 +817,7 @@ pub fn main(mut agb: agb::Gba) -> ! {
|
|||
world_display.commit(&mut vram);
|
||||
world_display.show();
|
||||
|
||||
vram.set_background_palettes(tile_sheet::background.palettes);
|
||||
vram.set_background_palettes(tile_sheet::PALETTES);
|
||||
|
||||
let object = agb.display.object.get();
|
||||
let mut mixer = agb.mixer.mixer();
|
||||
|
|
|
@ -19,20 +19,13 @@ pub fn show_splash_screen(
|
|||
vram: &mut VRamManager,
|
||||
) {
|
||||
map.set_scroll_pos((0i16, 0i16).into());
|
||||
let (tileset, palette) = match which {
|
||||
SplashScreen::Start => {
|
||||
let tileset = TileSet::new(splash_screens::splash.tiles, TileFormat::FourBpp);
|
||||
let tileset = match which {
|
||||
SplashScreen::Start => TileSet::new(splash_screens::splash.tiles, TileFormat::FourBpp),
|
||||
|
||||
(tileset, splash_screens::splash.palettes)
|
||||
}
|
||||
SplashScreen::End => {
|
||||
let tileset = TileSet::new(
|
||||
SplashScreen::End => TileSet::new(
|
||||
splash_screens::thanks_for_playing.tiles,
|
||||
TileFormat::FourBpp,
|
||||
);
|
||||
|
||||
(tileset, splash_screens::thanks_for_playing.palettes)
|
||||
}
|
||||
),
|
||||
};
|
||||
|
||||
let vblank = agb::interrupt::VBlank::get();
|
||||
|
@ -77,7 +70,7 @@ pub fn show_splash_screen(
|
|||
}
|
||||
|
||||
map.commit(vram);
|
||||
vram.set_background_palettes(palette);
|
||||
vram.set_background_palettes(splash_screens::PALETTES);
|
||||
map.show();
|
||||
|
||||
loop {
|
||||
|
|
|
@ -2146,7 +2146,7 @@ impl<'a> Game<'a> {
|
|||
}
|
||||
|
||||
fn update_sunrise(vram: &mut VRamManager, time: u16) {
|
||||
let mut modified_palette = background::background.palettes[0].clone();
|
||||
let mut modified_palette = background::PALETTES[0].clone();
|
||||
|
||||
let a = modified_palette.colour(0);
|
||||
let b = modified_palette.colour(1);
|
||||
|
@ -2160,7 +2160,7 @@ impl<'a> Game<'a> {
|
|||
}
|
||||
|
||||
fn update_fade_out(vram: &mut VRamManager, time: u16) {
|
||||
let mut modified_palette = background::background.palettes[0].clone();
|
||||
let mut modified_palette = background::PALETTES[0].clone();
|
||||
|
||||
let c = modified_palette.colour(2);
|
||||
|
||||
|
@ -2216,7 +2216,7 @@ fn game_with_level(gba: &mut agb::Gba) {
|
|||
loop {
|
||||
let (background, mut vram) = gba.display.video.tiled0();
|
||||
|
||||
vram.set_background_palettes(background::background.palettes);
|
||||
vram.set_background_palettes(background::PALETTES);
|
||||
|
||||
let tileset = TileSet::new(background::background.tiles, TileFormat::FourBpp);
|
||||
|
||||
|
|
Loading…
Reference in a new issue