This commit is contained in:
tsuki 2024-11-16 13:12:52 +08:00
parent 92cea44839
commit b83e6d3a0f
9 changed files with 74 additions and 33 deletions

2
Cargo.lock generated
View File

@ -1697,8 +1697,10 @@ dependencies = [
"log", "log",
"makepad-widgets", "makepad-widgets",
"mp_core", "mp_core",
"mp_elements",
"native-dialog", "native-dialog",
"once_cell", "once_cell",
"tokio",
"tracing", "tracing",
"tracing-subscriber", "tracing-subscriber",
] ]

View File

@ -13,3 +13,5 @@ native-dialog = "0.7.0"
once_cell = "1.20.2" once_cell = "1.20.2"
tracing = "0.1.40" tracing = "0.1.40"
tracing-subscriber = "0.3.18" tracing-subscriber = "0.3.18"
mp_elements = { path = "../mp_elements", version = "*" }
tokio = { version = "1.41.1", features = ["full"] }

View File

@ -1,7 +1,8 @@
use makepad_widgets::makepad_micro_serde::*; use makepad_widgets::makepad_micro_serde::*;
use makepad_widgets::*; use makepad_widgets::*;
use mp_elements::elements::Element;
use crate::{DATAPOOL, PLUGIN_MANAGER}; use crate::{DATAPOOL, GIAPP, PLUGIN_MANAGER};
live_design! { live_design! {
import makepad_widgets::base::*; import makepad_widgets::base::*;

View File

@ -1,3 +1,5 @@
use mp_elements;
use tokio::runtime::Runtime;
pub mod app; pub mod app;
pub use makepad_widgets; pub use makepad_widgets;
pub use makepad_widgets::makepad_draw; pub use makepad_widgets::makepad_draw;
@ -11,6 +13,7 @@ use mp_core::{config::Setting, datapool::DataPool, plugin_system::PluginManager}
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use std::env; use std::env;
pub static RUNTIME: Lazy<Runtime> = Lazy::new(|| Runtime::new().unwrap());
pub static CONFIG: Lazy<Setting> = Lazy::new(|| Setting::new()); pub static CONFIG: Lazy<Setting> = Lazy::new(|| Setting::new());
pub static PLUGIN_MANAGER: Lazy<PluginManager> = Lazy::new(|| { pub static PLUGIN_MANAGER: Lazy<PluginManager> = Lazy::new(|| {
PluginManager::new( PluginManager::new(
@ -23,3 +26,10 @@ pub static PLUGIN_MANAGER: Lazy<PluginManager> = Lazy::new(|| {
.unwrap() .unwrap()
}); });
pub static DATAPOOL: Lazy<DataPool> = Lazy::new(|| DataPool::new(&PLUGIN_MANAGER, 10)); pub static DATAPOOL: Lazy<DataPool> = Lazy::new(|| DataPool::new(&PLUGIN_MANAGER, 10));
pub static GIAPP: Lazy<mp_elements::App> = Lazy::new(|| {
RUNTIME.block_on(async {
let mut app = mp_elements::App::instant().await;
app.init().await;
app
})
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

@ -36,10 +36,11 @@ fn vertex(
var out: VertexOutput; var out: VertexOutput;
// Transform position // Transform position
// out.position = common_tools.proj_matrix * common_tools.view_matrix * common_tools.model_matrix * vec4f(position, 1.0); out.position = common_tools.proj_matrix * common_tools.view_matrix * common_tools.model_matrix * vec4f(position, 1.0);
out.position = vec4(position.xyz, 1.0); // out.position = vec4(position.xyz, 1.0);
out.r_range = r_range; out.r_range = r_range;
out.idx = 0u; let idx = u32(position.w);
out.idx = idx;
return out; return out;
} }
@ -57,9 +58,10 @@ fn fragment(input: VertexOutput) -> @location(0) vec4f {
let value = data[input.idx]; let value = data[input.idx];
let ear = polar_forward(input.position.xyz); let ear = polar_forward(input.position.xyz);
// var color = linear_colormap(value); // var color = linear_colormap(value);
var color = vec4(1.0, 1.0, 1.0, 1.0);
let r = ear.z; var color = clamp(value / 75.0, 0.0, 1.0);
// let r = ear.x;
// Valid range // Valid range
// let r_range = input.r_range; // let r_range = input.r_range;
@ -68,6 +70,7 @@ fn fragment(input: VertexOutput) -> @location(0) vec4f {
// let is_outside = outside_lower_bound + outside_upper_bound; // let is_outside = outside_lower_bound + outside_upper_bound;
// color.a *= 1.0 - is_outside; // color.a *= 1.0 - is_outside;
return vec4(r,r,r,r);
return vec4(color,color,color, 1.0);
} }

View File

@ -1,4 +1,4 @@
use quick_cache::unsync::Cache; use quick_cache::sync::Cache;
use wgpu::util::DeviceExt; use wgpu::util::DeviceExt;
use crate::elements::{Element, ElementAttach, ElementsRef}; use crate::elements::{Element, ElementAttach, ElementsRef};
@ -7,7 +7,7 @@ use wgpu::{Backends, Instance};
use encase; use encase;
type DB = std::rc::Rc<wgpu::Buffer>; type DB = std::sync::Arc<wgpu::Buffer>;
const BACKENDS_DEFAULT: u32 = Backends::DX12.bits() const BACKENDS_DEFAULT: u32 = Backends::DX12.bits()
| Backends::METAL.bits() | Backends::METAL.bits()
@ -46,10 +46,13 @@ impl App {
// Request a device and a queue from the adapter. The device is the handle to the GPU, and the queue is used to submit commands to the GPU. // Request a device and a queue from the adapter. The device is the handle to the GPU, and the queue is used to submit commands to the GPU.
let (device, queue) = adapter let (device, queue) = adapter
.request_device(&wgpu::DeviceDescriptor{ .request_device(
required_features: wgpu::Features::POLYGON_MODE_LINE, &wgpu::DeviceDescriptor {
..Default::default() required_features: wgpu::Features::POLYGON_MODE_LINE,
}, None) ..Default::default()
},
None,
)
.await .await
.unwrap(); .unwrap();
@ -295,14 +298,14 @@ impl DataBufferPool {
} }
} }
pub fn get_or_create_buffer<F>(&mut self, key: BufferKey, f: F) -> Option<&DB> pub fn get_or_create_buffer<F>(&mut self, key: BufferKey, f: F) -> DB
where where
F: FnOnce() -> wgpu::Buffer, F: FnOnce() -> wgpu::Buffer,
{ {
let buffer = self let buffer = self
.buffers .buffers
.get_or_insert_with(&key, || { .get_or_insert_with(&key, || {
Ok::<std::rc::Rc<wgpu::Buffer>, ()>(std::rc::Rc::new(f())) Ok::<std::sync::Arc<wgpu::Buffer>, ()>(std::sync::Arc::new(f()))
}) })
.unwrap(); .unwrap();
buffer buffer
@ -409,8 +412,9 @@ mod test {
fn test_app() { fn test_app() {
let plugin_manager = PluginManager::new( let plugin_manager = PluginManager::new(
// r#"/Users/tsuki/projects/mp/loaders"# // r#"/Users/tsuki/projects/mp/loaders"#
r#"C:\Users\qwin7\projects\radarmp\loaders"# r#"C:\Users\qwin7\projects\radarmp\loaders"#,
).unwrap(); )
.unwrap();
let data = plugin_manager.try_load_data( let data = plugin_manager.try_load_data(
// "/Users/tsuki/Desktop/Z_RADR_I_X5775_20230726180000_O_DOR-XPD-CAP-FMT.BIN.zip", // "/Users/tsuki/Desktop/Z_RADR_I_X5775_20230726180000_O_DOR-XPD-CAP-FMT.BIN.zip",

View File

@ -135,7 +135,7 @@ impl Element for PPI {
strip_index_format: None, strip_index_format: None,
front_face: wgpu::FrontFace::Ccw, front_face: wgpu::FrontFace::Ccw,
cull_mode: None, cull_mode: None,
polygon_mode: wgpu::PolygonMode::Line, polygon_mode: wgpu::PolygonMode::Fill,
unclipped_depth: false, unclipped_depth: false,
conservative: false, conservative: false,
}, },
@ -190,6 +190,7 @@ impl Element for PPI {
) -> ElementAttach { ) -> ElementAttach {
let (vertex, index) = self.bake(data); let (vertex, index) = self.bake(data);
println!("index: {:?}", &(index.as_ref()).unwrap()[0..24]); println!("index: {:?}", &(index.as_ref()).unwrap()[0..24]);
println!("vertex: {:?}", &vertex[0..4]);
let device = &ctx.device; let device = &ctx.device;
let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
@ -220,14 +221,13 @@ impl Element for PPI {
let data_array_f32 = data_array.cast_to::<f32>(); let data_array_f32 = data_array.cast_to::<f32>();
let key = self.generate_key(data); let key = self.generate_key(data);
let buffer = buffer_pool.get_or_create_buffer(key.clone(), || { let data_buffer = buffer_pool.get_or_create_buffer(key.clone(), || {
device.create_buffer_init(&wgpu::util::BufferInitDescriptor { device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
label: Some("PPI Texture Buffer"), label: Some("PPI Texture Buffer"),
contents: bytemuck::cast_slice(data_array_f32.as_slice().unwrap()), contents: bytemuck::cast_slice(data_array_f32.as_slice().unwrap()),
usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::STORAGE, usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::STORAGE,
}) })
}); });
let data_buffer = buffer.unwrap();
// Bind Group // Bind Group
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
@ -259,7 +259,8 @@ impl Element for PPI {
impl PPI { impl PPI {
fn init_shader(device: &wgpu::Device) -> wgpu::ShaderModule { fn init_shader(device: &wgpu::Device) -> wgpu::ShaderModule {
// let shader_str = merge_shader(r#"/Users/tsuki/projects/mp/mp_elements/shaders/ppi.wgsl"#); // let shader_str = merge_shader(r#"/Users/tsuki/projects/mp/mp_elements/shaders/ppi.wgsl"#);
let shader_str = merge_shader(r#"C:\Users\qwin7\projects\radarmp\mp_elements\shaders\ppi.wgsl"#); let shader_str =
merge_shader(r#"C:\Users\qwin7\projects\radarmp\mp_elements\shaders\ppi.wgsl"#);
let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
label: Some("PPI Shader Module"), label: Some("PPI Shader Module"),
source: wgpu::ShaderSource::Wgsl(shader_str.into()), source: wgpu::ShaderSource::Wgsl(shader_str.into()),
@ -291,35 +292,51 @@ impl PPI {
let mut vertexs = Vec::with_capacity(a.len() * r.len() * 4); let mut vertexs = Vec::with_capacity(a.len() * r.len() * 4);
for (a_idx, _a) in sorted_azimuth.into_iter().enumerate() { for (a_idx, _a) in sorted_azimuth.into_iter().enumerate() {
for (r_idx, _r) in r.iter().enumerate() { for (r_idx, _r) in r.iter().enumerate() {
let cr = *_r as f32 / r_max; let cr = *_r as f32 / r_max;
let r_ranges = [cr - r_step_f32, cr + r_step_f32, 0.0, 0.0]; let r_ranges = [cr - r_step_f32, cr + r_step_f32, 0.0, 0.0];
let idx = (a_idx * r.len() + r_idx) as u32; let idx = (a_idx * r.len() + r_idx) as f32;
// Left Top // Left Top
let lt = polar_to_cartesian(cr + r_step_f32, (_a - azi_step) as f32, e); let lt = polar_to_cartesian(
cr + r_step_f32,
(_a - azi_step).to_radians() as f32,
e.to_radians(),
);
vertexs.push(PPIVertex { vertexs.push(PPIVertex {
position: Vec4::new(lt.0, lt.1, lt.2,0.0), position: Vec4::new(lt.0, lt.1, lt.2, idx),
r_ranges, r_ranges,
// idx, // idx,
}); });
// Left Bot // Left Bot
let lb = polar_to_cartesian(cr - r_step_f32, (_a - azi_step) as f32, e); let lb = polar_to_cartesian(
cr - r_step_f32,
(_a - azi_step).to_radians() as f32,
e.to_radians(),
);
vertexs.push(PPIVertex { vertexs.push(PPIVertex {
position: Vec4::new(lb.0, lb.1, lb.2,0.0), position: Vec4::new(lb.0, lb.1, lb.2, idx),
r_ranges, r_ranges,
// idx, // idx,
}); });
// Right Top // Right Top
let rt = polar_to_cartesian(cr + r_step_f32, (_a + azi_step) as f32, e); let rt = polar_to_cartesian(
cr + r_step_f32,
(_a + azi_step).to_radians() as f32,
e.to_radians(),
);
vertexs.push(PPIVertex { vertexs.push(PPIVertex {
position: Vec4::new(rt.0, rt.1, rt.2,0.0), position: Vec4::new(rt.0, rt.1, rt.2, idx),
r_ranges, r_ranges,
// idx, // idx,
}); });
// Right Bot // Right Bot
let rb = polar_to_cartesian(cr - r_step_f32, (_a + azi_step) as f32, e); let rb = polar_to_cartesian(
cr - r_step_f32,
(_a + azi_step).to_radians() as f32,
e.to_radians(),
);
vertexs.push(PPIVertex { vertexs.push(PPIVertex {
position: Vec4::new(rb.0, rb.1, rb.2,0.0), position: Vec4::new(rb.0, rb.1, rb.2, idx),
r_ranges, r_ranges,
// idx, // idx,
}); });
@ -330,7 +347,7 @@ impl PPI {
let mut indice_buffer = Vec::with_capacity(a.len() * r.len() * 6); let mut indice_buffer = Vec::with_capacity(a.len() * r.len() * 6);
for i in 0..a.len() * r.len() { for i in 0..a.len() * r.len() {
let start = (i * 2) as u32; let start = (i * 4) as u32;
indice_buffer.push(start); indice_buffer.push(start);
indice_buffer.push(start + 1); indice_buffer.push(start + 1);
indice_buffer.push(start + 2); indice_buffer.push(start + 2);
@ -382,5 +399,5 @@ fn polar_to_cartesian(r: f32, azimuth: f32, elevation: f32) -> (f32, f32, f32) {
let x = r * azimuth.cos() * elevation.cos(); let x = r * azimuth.cos() * elevation.cos();
let y = r * azimuth.sin() * elevation.cos(); let y = r * azimuth.sin() * elevation.cos();
let z = r * elevation.sin(); let z = r * elevation.sin();
(x, y, z ) (x, y, z)
} }

View File

@ -3,3 +3,5 @@ pub mod elements;
pub mod elementvec; pub mod elementvec;
pub mod renderer; pub mod renderer;
mod utils; mod utils;
pub use app::App;