From 07d8074b7bd472c8e393f451d052ee5ce537e875 Mon Sep 17 00:00:00 2001 From: yanorei32 Date: Tue, 18 Aug 2026 18:30:26 +0900 Subject: [PATCH] New color theme idea by yr32 --- renderer/src/frame_context.rs | 7 +++++++ renderer/src/worker/drawer_inset_frame.rs | 2 +- renderer/src/worker/drawer_map.rs | 21 ++++++++++++++++----- renderer/src/worker/mod.rs | 13 +++++++++---- renderer/src/worker/theme.rs | 6 +++--- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/renderer/src/frame_context.rs b/renderer/src/frame_context.rs index 02b2b18..7556050 100644 --- a/renderer/src/frame_context.rs +++ b/renderer/src/frame_context.rs @@ -124,6 +124,13 @@ impl FramePayload { }, } } + + pub fn is_tsunami_payload(&self) -> bool { + match self { + FramePayload::Earthquake(_) => false, + FramePayload::TsunamiFirst(_) | FramePayload::TsunamiSecond(_) => true, + } + } } #[derive(Debug)] diff --git a/renderer/src/worker/drawer_inset_frame.rs b/renderer/src/worker/drawer_inset_frame.rs index ce22910..99d365a 100644 --- a/renderer/src/worker/drawer_inset_frame.rs +++ b/renderer/src/worker/drawer_inset_frame.rs @@ -88,7 +88,7 @@ pub fn draw_background( &frame_context.resources.inset.background_vertex_buffer, NoIndices(PrimitiveType::TriangleStrip), &ShapeUniform { - color: frame_context.theme.inset_background_color, + color: frame_context.theme.tsunami_clear_color, }, frame_context.draw_parameters, ) diff --git a/renderer/src/worker/drawer_map.rs b/renderer/src/worker/drawer_map.rs index 2be2efb..1ef009b 100644 --- a/renderer/src/worker/drawer_map.rs +++ b/renderer/src/worker/drawer_map.rs @@ -10,6 +10,7 @@ pub fn draw( frame_context: &FrameContext, layers: MapLayerConfig, region: Option, + is_tsunami_rendering: bool, ) { let theme = frame_context.theme; let params = frame_context.draw_parameters; @@ -55,6 +56,20 @@ pub fn draw( // lakeと県境線は本土のみに存在するため、Main以外のinset描画時はskip let draws_mainland = region.is_none_or(|region| region == InsetRegion::Main); + let color = if is_tsunami_rendering { + [ + theme.tsunami_clear_color[0], + theme.tsunami_clear_color[1], + theme.tsunami_clear_color[2], + ] + } else { + [ + theme.clear_color[0], + theme.clear_color[1], + theme.clear_color[2], + ] + }; + if draws_mainland { resources .shader @@ -64,11 +79,7 @@ pub fn draw( &resources.lake.vertex, &resources.lake.index, &MapUniform { - color: [ - theme.clear_color[0], - theme.clear_color[1], - theme.clear_color[2], - ], + color, ..map_uniform }, params, diff --git a/renderer/src/worker/mod.rs b/renderer/src/worker/mod.rs index 0d7d85c..66e1d5c 100644 --- a/renderer/src/worker/mod.rs +++ b/renderer/src/worker/mod.rs @@ -309,7 +309,12 @@ fn render_frame( camera, }; - let clear_color = frame_context.theme.clear_color; + let clear_color = if request_frame_context.payload.is_tsunami_payload() { + frame_context.theme.tsunami_clear_color + } else { + frame_context.theme.clear_color + }; + frame_buffer.borrow_mut().clear( None, Some(( @@ -327,7 +332,7 @@ fn render_frame( match &request_frame_context.payload { FramePayload::Earthquake(earthquake) => { - drawer_map::draw(&frame_context, map_layers, None); + drawer_map::draw(&frame_context, map_layers, None, false); drawer_intensity_icon::draw_all(&frame_context, earthquake); drawer_epicenter::draw(&frame_context, earthquake); drawer_overlay::draw(&frame_context, earthquake); @@ -475,7 +480,7 @@ fn draw_tsunami_frame( let epicenter_buffer = drawer_epicenter::create_vertex_buffer(facade, payload.epicenter()); let levels = with_lines.then(|| drawer_tsunami_line::build_levels_texture(facade, payload)); - drawer_map::draw(frame_context, map_layers, Some(InsetRegion::Main)); + drawer_map::draw(frame_context, map_layers, Some(InsetRegion::Main), true); if let Some(levels) = &levels { drawer_tsunami_line::draw(frame_context, InsetRegion::Main, levels); } @@ -529,7 +534,7 @@ fn draw_insets( drawer_inset_frame::draw_stencil_mask(&frame_context, notch); } drawer_inset_frame::draw_background(&frame_context); - drawer_map::draw(&frame_context, layers, Some(inset.region)); + drawer_map::draw(&frame_context, layers, Some(inset.region), true); if let Some(levels) = levels { drawer_tsunami_line::draw(&frame_context, inset.region, levels); } diff --git a/renderer/src/worker/theme.rs b/renderer/src/worker/theme.rs index 772c0c8..0289a38 100644 --- a/renderer/src/worker/theme.rs +++ b/renderer/src/worker/theme.rs @@ -4,6 +4,7 @@ use renderer_macros::{rgb, rgba}; pub struct Theme { pub clear_color: [f32; 4], + pub tsunami_clear_color: [f32; 4], pub ground_color: [f32; 3], pub prefectural_border_color: [f32; 3], pub prefectural_border_width: f32, @@ -13,7 +14,6 @@ pub struct Theme { pub tsunami_width: f32, pub tsunami_legend_color: [f32; 4], pub occurrence_time_color: [f32; 4], - pub inset_background_color: [f32; 4], pub inset_border_color: [f32; 4], pub inset_border_width: f32, pub inset_label_color: [f32; 4], @@ -24,7 +24,8 @@ pub struct Theme { pub const DEFAULT: Theme = Theme { #[allow(clippy::eq_op)] clear_color: rgba!("#82BCFF", 1.0), - ground_color: rgb!("#DEE2E5"), + tsunami_clear_color: rgba!("#777777", 1.0), + ground_color: rgb!("#cbd1d6"), prefectural_border_color: rgb!("#949799"), prefectural_border_width: 2.0, area_border_color: rgb!("#949799"), @@ -38,7 +39,6 @@ pub const DEFAULT: Theme = Theme { tsunami_width: 3.0, tsunami_legend_color: rgba!("#000000", 0.8), occurrence_time_color: rgba!("#000000", 0.63), - inset_background_color: rgba!("#82BCFF", 1.0), inset_border_color: rgba!("#969BA0", 1.0), inset_border_width: 3.0, inset_label_color: rgba!("#000000", 0.8),