Nicer test logo (#707)

With the new examples page on the website, I thought it was probably
time to update the logo we use there to a nicer one.

I've also added a basic one to make the background colour change example
nicer, and sometimes you might want the less busy one.

- [x] Changelog updated

![image](https://github.com/agbrs/agb/assets/460842/062bb473-1b2f-4db0-a712-6d264240be9a)
This commit is contained in:
Gwilym Inzani 2024-05-25 21:19:04 +01:00 committed by GitHub
commit a243bf4078
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 39 additions and 10 deletions

View file

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Added
- Added `find_colour_index_16` and `find_colour_index_256` to the `VRamManager` to find where a colour is in a palette.
## [0.20.2] - 2024/05/25 ## [0.20.2] - 2024/05/25
### Fixed ### Fixed

View file

@ -25,24 +25,25 @@ fn main(mut gba: agb::Gba) -> ! {
let dma = gba.dma.dma().dma0; let dma = gba.dma.dma().dma0;
example_logo::display_logo(&mut map, &mut vram); example_logo::display_logo_basic(&mut map, &mut vram);
let vblank = VBlank::get(); let vblank = VBlank::get();
let colours: Box<[_]> = (0..160).map(|i| ((i * 0xffff) / 160) as u16).collect(); let colours: Box<[_]> = (0..160).map(|i| ((i * 0xffff) / 160) as u16).collect();
let mut frame = 0; let background_colour = 0x732b; // generated using `https://agbrs.dev/colour`
let background_colour_index = vram
.find_colour_index_16(0, background_colour)
.expect("Should contain colour 0x732b");
loop { loop {
// hardcoding palette index 2 here which you wouldn't want to do in a real example (instead, look for let _background_color_transfer = unsafe {
// the colour you want to replace) dma.hblank_transfer(
let _background_color_transfer = &vram.background_palette_colour_dma(0, background_colour_index),
unsafe { dma.hblank_transfer(&vram.background_palette_colour_dma(0, 2), &colours) }; &colours,
)
};
vblank.wait_for_vblank(); vblank.wait_for_vblank();
frame += 1;
if frame > 160 {
frame = 0;
}
} }
} }

BIN
agb/gfx/test_logo.aseprite Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
agb/gfx/test_logo_basic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,6 +1,7 @@
use super::tiled::{RegularMap, TiledMap, VRamManager}; use super::tiled::{RegularMap, TiledMap, VRamManager};
crate::include_background_gfx!(crate, agb_logo, test_logo => deduplicate "gfx/test_logo.png"); crate::include_background_gfx!(crate, agb_logo, test_logo => deduplicate "gfx/test_logo.png");
crate::include_background_gfx!(crate, agb_logo_basic, test_logo => deduplicate "gfx/test_logo_basic.png");
pub fn display_logo(map: &mut RegularMap, vram: &mut VRamManager) { pub fn display_logo(map: &mut RegularMap, vram: &mut VRamManager) {
vram.set_background_palettes(agb_logo::PALETTES); vram.set_background_palettes(agb_logo::PALETTES);
@ -11,6 +12,15 @@ pub fn display_logo(map: &mut RegularMap, vram: &mut VRamManager) {
map.set_visible(true); map.set_visible(true);
} }
pub fn display_logo_basic(map: &mut RegularMap, vram: &mut VRamManager) {
vram.set_background_palettes(agb_logo_basic::PALETTES);
map.fill_with(vram, &agb_logo_basic::test_logo);
map.commit(vram);
map.set_visible(true);
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::display::{tiled::RegularBackgroundSize, Priority}; use crate::display::{tiled::RegularBackgroundSize, Priority};

View file

@ -461,4 +461,18 @@ impl VRamManager {
self.set_background_palette(palette_index as u8, entry); self.set_background_palette(palette_index as u8, entry);
} }
} }
/// Gets the index of the colour for a given background palette, or None if it doesn't exist
#[must_use]
pub fn find_colour_index_16(&self, palette_index: usize, colour: u16) -> Option<usize> {
assert!(palette_index < 16);
(0..16).find(|i| PALETTE_BACKGROUND.get(palette_index * 16 + i) == colour)
}
/// Gets the index of the colour in the entire background palette, or None if it doesn't exist
#[must_use]
pub fn find_colour_index_256(&self, colour: u16) -> Option<usize> {
(0..256).find(|&i| PALETTE_BACKGROUND.get(i) == colour)
}
} }