sdl2-demo: fix compilation errors

This commit is contained in:
Mikolaj Wielgus 2024-05-10 23:01:42 +02:00
parent a5dcacdd69
commit 452bcaf09d
2 changed files with 40 additions and 33 deletions

View File

@ -207,8 +207,8 @@ impl eframe::App for App {
{ {
let mut shared_data = shared_data_arc_mutex.lock().unwrap(); let mut shared_data = shared_data_arc_mutex.lock().unwrap();
shared_data.from = Some(from_to.0); shared_data.from = dbg!(Some(from_to.0));
shared_data.to = Some(from_to.1); shared_data.to = dbg!(Some(from_to.1));
shared_data.navmesh = Some(autoroute.navmesh().clone()); shared_data.navmesh = Some(autoroute.navmesh().clone());
} }

View File

@ -12,19 +12,22 @@ macro_rules! dbg_dot {
use geo::point; use geo::point;
use painter::Painter; use painter::Painter;
use petgraph::visit::{EdgeRef, IntoEdgeReferences}; use petgraph::visit::{EdgeRef, IntoEdgeReferences};
use topola::draw::DrawException;
use topola::drawing::dot::FixedDotWeight; use topola::drawing::dot::FixedDotWeight;
use topola::drawing::graph::{MakePrimitive, PrimitiveIndex}; use topola::drawing::graph::{MakePrimitive, PrimitiveIndex};
use topola::drawing::primitive::MakePrimitiveShape; use topola::drawing::primitive::MakePrimitiveShape;
use topola::drawing::rules::{Conditions, RulesTrait}; use topola::drawing::rules::{Conditions, RulesTrait};
use topola::drawing::seg::FixedSegWeight; use topola::drawing::seg::FixedSegWeight;
use topola::drawing::zone::MakePolygon; use topola::drawing::{Infringement, LayoutException};
use topola::drawing::{Infringement, Layout, LayoutException};
use topola::dsn::design::DsnDesign; use topola::dsn::design::DsnDesign;
use topola::dsn::rules::DsnRules;
use topola::geometry::primitive::{PrimitiveShape, PrimitiveShapeTrait}; use topola::geometry::primitive::{PrimitiveShape, PrimitiveShapeTrait};
use topola::geometry::shape::ShapeTrait;
use topola::layout::connectivity::BandIndex; use topola::layout::connectivity::BandIndex;
use topola::layout::zone::MakePolyShape;
use topola::layout::Layout; use topola::layout::Layout;
use topola::navmesh::{Navmesh, NavmeshEdgeReference, VertexIndex}; use topola::router::draw::DrawException;
use topola::router::navmesh::{Navmesh, NavmeshEdgeReference, VertexIndex};
use topola::router::tracer::{Trace, Tracer};
use topola::router::RouterObserverTrait; use topola::router::RouterObserverTrait;
use sdl2::event::Event; use sdl2::event::Event;
@ -43,8 +46,8 @@ use pathfinder_renderer::options::BuildOptions;
use pathfinder_resources::embedded::EmbeddedResourceLoader; use pathfinder_resources::embedded::EmbeddedResourceLoader;
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use std::time::Duration; use std::time::Duration;
use topola::tracer::{Trace, Tracer};
use topola::math::Circle; use topola::math::Circle;
use topola::router::Router; use topola::router::Router;
@ -79,8 +82,8 @@ impl RulesTrait for SimpleRules {
// Clunky enum to work around borrow checker. // Clunky enum to work around borrow checker.
enum RouterOrLayout<'a, R: RulesTrait> { enum RouterOrLayout<'a, R: RulesTrait> {
Router(&'a mut Router<R>), Router(&'a mut Router<'a, R>),
Layout(&'a Layout<R>), Layout(Arc<Mutex<Layout<R>>>),
} }
struct EmptyRouterObserver; struct EmptyRouterObserver;
@ -105,6 +108,7 @@ struct DebugRouterObserver<'a> {
renderer: &'a mut Renderer<GLDevice>, renderer: &'a mut Renderer<GLDevice>,
font_context: &'a CanvasFontContext, font_context: &'a CanvasFontContext,
view: &'a mut View, view: &'a mut View,
navmesh: Option<Navmesh>,
} }
impl<'a> DebugRouterObserver<'a> { impl<'a> DebugRouterObserver<'a> {
@ -114,6 +118,7 @@ impl<'a> DebugRouterObserver<'a> {
renderer: &'a mut Renderer<GLDevice>, renderer: &'a mut Renderer<GLDevice>,
font_context: &'a CanvasFontContext, font_context: &'a CanvasFontContext,
view: &'a mut View, view: &'a mut View,
navmesh: Option<Navmesh>,
) -> Self { ) -> Self {
Self { Self {
event_pump, event_pump,
@ -121,6 +126,7 @@ impl<'a> DebugRouterObserver<'a> {
renderer, renderer,
font_context, font_context,
view, view,
navmesh,
} }
} }
} }
@ -133,9 +139,9 @@ impl<'a, R: RulesTrait> RouterObserverTrait<R> for DebugRouterObserver<'a> {
self.renderer, self.renderer,
self.font_context, self.font_context,
self.view, self.view,
RouterOrLayout::Layout(tracer.layout.drawing()), RouterOrLayout::Layout(tracer.layout.clone()),
None, None,
Some(tracer.navmesh.clone()), self.navmesh.clone(),
&trace.path, &trace.path,
&[], &[],
&[], &[],
@ -152,9 +158,9 @@ impl<'a, R: RulesTrait> RouterObserverTrait<R> for DebugRouterObserver<'a> {
self.renderer, self.renderer,
self.font_context, self.font_context,
self.view, self.view,
RouterOrLayout::Layout(tracer.layout.drawing()), RouterOrLayout::Layout(tracer.layout.clone()),
None, None,
Some(tracer.navmesh.clone()), self.navmesh.clone(),
&path, &path,
&[], &[],
&[], &[],
@ -184,9 +190,9 @@ impl<'a, R: RulesTrait> RouterObserverTrait<R> for DebugRouterObserver<'a> {
self.renderer, self.renderer,
self.font_context, self.font_context,
self.view, self.view,
RouterOrLayout::Layout(tracer.layout.drawing()), RouterOrLayout::Layout(tracer.layout.clone()),
None, None,
Some(tracer.navmesh.clone()), self.navmesh.clone(),
&trace.path, &trace.path,
&ghosts, &ghosts,
&highlighteds, &highlighteds,
@ -260,9 +266,8 @@ fn main() -> Result<(), anyhow::Error> {
)?; )?;
//let design = DsnDesign::load_from_file("tests/data/test/test.dsn")?; //let design = DsnDesign::load_from_file("tests/data/test/test.dsn")?;
//dbg!(&design); //dbg!(&design);
let drawing = design.make_layout(); let layout = Arc::new(Mutex::new(design.make_layout()));
let layout = Layout::new(drawing); //let mut router = Router::new(layout);
let mut router = Router::new(layout);
let mut view = View { let mut view = View {
pan: vec2f(-80000.0, -60000.0), pan: vec2f(-80000.0, -60000.0),
@ -275,7 +280,7 @@ fn main() -> Result<(), anyhow::Error> {
&mut renderer, &mut renderer,
&font_context, &font_context,
&mut view, &mut view,
RouterOrLayout::Layout(router.layout.drawing()), RouterOrLayout::Layout(layout.clone()),
None, None,
None, None,
&[], &[],
@ -299,7 +304,7 @@ fn main() -> Result<(), anyhow::Error> {
&mut renderer, &mut renderer,
&font_context, &font_context,
&mut view, &mut view,
RouterOrLayout::Layout(router.layout.drawing()), RouterOrLayout::Layout(layout.clone()),
None, None,
None, None,
&[], &[],
@ -370,7 +375,7 @@ fn render_times(
let mut painter = Painter::new(&mut canvas); let mut painter = Painter::new(&mut canvas);
let drawing = match router_or_layout { let layout_arc_mutex = match router_or_layout {
RouterOrLayout::Router(ref mut router) => { RouterOrLayout::Router(ref mut router) => {
let state = event_pump.mouse_state(); let state = event_pump.mouse_state();
@ -386,51 +391,53 @@ fn render_times(
renderer, renderer,
font_context, font_context,
view, view,
maybe_navmesh,
), ),
) )
.ok(); .ok();
maybe_navmesh = None; maybe_navmesh = None;
} }
router.layout().drawing() router.layout().clone()
} }
RouterOrLayout::Layout(layout) => layout, RouterOrLayout::Layout(ref layout) => layout.clone(),
}; };
let layout = layout_arc_mutex.lock().unwrap();
//let result = panic::catch_unwind(|| { //let result = panic::catch_unwind(|| {
for node in drawing.layer_primitive_nodes(1) { for node in layout.drawing().layer_primitive_nodes(1) {
let color = if highlighteds.contains(&node) { let color = if highlighteds.contains(&node) {
ColorU::new(100, 100, 255, 255) ColorU::new(100, 100, 255, 255)
} else { } else {
ColorU::new(52, 52, 200, 255) ColorU::new(52, 52, 200, 255)
}; };
let shape = node.primitive(drawing).shape(); let shape = node.primitive(layout.drawing()).shape();
painter.paint_primitive(&shape, color, view.zoom); painter.paint_primitive(&shape, color, view.zoom);
} }
for zone in drawing.layer_zones(1) { for zone in layout.layer_zone_nodes(1) {
painter.paint_polygon( painter.paint_polygon(
&zone.polygon(&drawing), &layout.zone(zone).shape().polygon,
ColorU::new(52, 52, 200, 255), ColorU::new(52, 52, 200, 255),
view.zoom, view.zoom,
); );
} }
for node in drawing.layer_primitive_nodes(0) { for node in layout.drawing().layer_primitive_nodes(0) {
let color = if highlighteds.contains(&node) { let color = if highlighteds.contains(&node) {
ColorU::new(255, 100, 100, 255) ColorU::new(255, 100, 100, 255)
} else { } else {
ColorU::new(200, 52, 52, 255) ColorU::new(200, 52, 52, 255)
}; };
let shape = node.primitive(drawing).shape(); let shape = node.primitive(layout.drawing()).shape();
painter.paint_primitive(&shape, color, view.zoom); painter.paint_primitive(&shape, color, view.zoom);
} }
for zone in drawing.layer_zones(0) { for zone in layout.layer_zone_nodes(0) {
painter.paint_polygon( painter.paint_polygon(
&zone.polygon(&drawing), &layout.zone(zone).shape().polygon,
ColorU::new(200, 52, 52, 255), ColorU::new(200, 52, 52, 255),
view.zoom, view.zoom,
); );
@ -442,8 +449,8 @@ fn render_times(
if let Some(ref navmesh) = maybe_navmesh { if let Some(ref navmesh) = maybe_navmesh {
for edge in navmesh.edge_references() { for edge in navmesh.edge_references() {
let from = edge.source().primitive(drawing).shape().center(); let from = edge.source().primitive(layout.drawing()).shape().center();
let to = edge.target().primitive(drawing).shape().center(); let to = edge.target().primitive(layout.drawing()).shape().center();
let color = 'blk: { let color = 'blk: {
if let (Some(source_pos), Some(target_pos)) = ( if let (Some(source_pos), Some(target_pos)) = (