summaryrefslogtreecommitdiff
path: root/.old/AGENTS.md
blob: 0ceee95f04ae8a279f09ae0adc3e28ac674e0c74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# TimePlot display prototype

### Overview

this is a graphical application that displays a number of sub-windows, each displaying a graph that updates in real-time with input data streams. there may be multiple different types of data points that each have different attributes which we want to see with respect to time, such as range, frequency, or speed. these graphs have been referred to as "waterfall" plots before. each graph can be configured to display some set of the attributes of some of the data points. graph legends will be displayed when necessary. 

### Implementation 

we must use vulkan in order to enable multi-threaded GPU operations. this means we'll probably use webgpu. the application will be written in either rust or C++. we will decide after playing with some basic proof-of-concepts. 
there shall be a state management system similar to js react, whereby UI elements will automatically update when any state-derived value shown on it is updated in the global state model. 


#### Modules
    
    - rendering
    - UI layout defining
    - data input
        - file, stdin, message queue, unix socket, network socket
    - user control input
        - keyboard, mouse, gamepad, 
    - service connection management
    - state management


### Data inputs

- {object id, object frequency} vs time
- List<frequency> vs time
- {object id, object position} vs time
- List<distance> vs time
- List<bearing> vs time

### Requirements

- must be able to store up to 1,000,000 different data points in memory at a time
- must be able to process as many data points per unit of time as possible
- efficiently render everything at an acceptable framerate (>= 45 fps)
- be able to display between 1 and 4 graphs at a time each in their own sub-window

### GUI details

- TODO



## Next Steps
- Rust
    - split code into modules
    - fix text label title
    - add plot labels and legends
- C++
    - initial implementation