New modules compiled

This commit is contained in:
2026-04-04 22:26:38 -07:00
parent eec70c21a2
commit 6cf9091c05
29 changed files with 908 additions and 390 deletions

View File

@@ -6,10 +6,12 @@ vintage marine radar.
There will be two scopes. An early A Scope and a PPI scope.
The PPI scope will take up the entire right hand side of the display
(1/2 inch margins on top,bottom, and right hand side) and the A Scope will
(1 inch margins on top,bottom, and right hand side) and the A Scope will
be smaller, located in the center of the left hand
side of the display near the left margin.
Please impliment 1 inch margins around both scopes. I am getting them cut off
Display should be whole screen. An escape, possibly with the escape key
needs to be provided to exit the program and go back to shell.
@@ -153,7 +155,10 @@ A scope:
graticule appear to move up and out and the replacement graticule move
in and down in place. The operator takes them out from a slot above the
scope and inserts the replacement through the same slot. All these graticules
are lighted with incandescent colors.
are lighted with incandescent colors. Graticule should have vertical lines
for each range and a horizontal line at the bottom. Left of the screen you
have the words "SIGNAL STRENGTH" and bottom of the screen you
have the words "RANGE"
Note on screen update vs pulse repetition frequency. We need to be careful
since we have no control of the display update frequency and need
@@ -277,6 +282,9 @@ Order of testing features.
and hold for 5 seconds for each range
4. PPI scope range rings; both active display and persistence display - test
for each range settings; hold for 5 seconds each
5. PPI scope active target operation, as well as persistance. Create
four fake targets, one small, one large and two very large with
blooming. Do random range and bearing with one in earch quadrant.
5. PPI scope cursor - test by slowly changing range and bearing
6. PPI scope weather noise - test by changing noise level slowly
7. PPI scope waves noise - test by changing noise level slowly
@@ -284,9 +292,10 @@ Order of testing features.
========================================================
Generate code for testiong feature 1 and 2 only;
Generate code for testiong feature 1 and 2 and 3 only;
1. General initialization and set up basic boundaries of the two scopes
on the screen. No features on each scope yet.
2. Edge graticule on ppi scope (Bearing ticks and numbers)
3. replaceable graticules for A scope
Do not generate any other code
Generate code the run this and hold for 10 seconds and exit

View File

@@ -24,5 +24,11 @@ target_link_libraries(radar_simulation PRIVATE
Freetype::Freetype
)
file(COPY ${CMAKE_SOURCE_DIR}/shaders DESTINATION ${CMAKE_BINARY_DIR})
add_custom_target(copy_shaders ALL
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/shaders
${CMAKE_BINARY_DIR}/shaders
COMMENT "Copying shaders to build directory"
)
add_dependencies(radar_simulation copy_shaders)

View File

@@ -0,0 +1,2 @@
# Hashes of file build rules.
98892458fd275ab36edb4060d435198d CMakeFiles/copy_shaders

View File

@@ -15,97 +15,22 @@ set(CMAKE_MAKEFILE_DEPENDS
"/usr/lib/x86_64-linux-gnu/cmake/glfw3/glfw3ConfigVersion.cmake"
"/usr/lib/x86_64-linux-gnu/cmake/glfw3/glfw3Targets-none.cmake"
"/usr/lib/x86_64-linux-gnu/cmake/glfw3/glfw3Targets.cmake"
"/usr/share/cmake-3.31/Modules/CMakeCCompiler.cmake.in"
"/usr/share/cmake-3.31/Modules/CMakeCCompilerABI.c"
"/usr/share/cmake-3.31/Modules/CMakeCInformation.cmake"
"/usr/share/cmake-3.31/Modules/CMakeCXXCompiler.cmake.in"
"/usr/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp"
"/usr/share/cmake-3.31/Modules/CMakeCXXInformation.cmake"
"/usr/share/cmake-3.31/Modules/CMakeCommonLanguageInclude.cmake"
"/usr/share/cmake-3.31/Modules/CMakeCompilerIdDetection.cmake"
"/usr/share/cmake-3.31/Modules/CMakeDetermineCCompiler.cmake"
"/usr/share/cmake-3.31/Modules/CMakeDetermineCXXCompiler.cmake"
"/usr/share/cmake-3.31/Modules/CMakeDetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake"
"/usr/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake"
"/usr/share/cmake-3.31/Modules/CMakeDetermineCompilerSupport.cmake"
"/usr/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake"
"/usr/share/cmake-3.31/Modules/CMakeFindBinUtils.cmake"
"/usr/share/cmake-3.31/Modules/CMakeFindDependencyMacro.cmake"
"/usr/share/cmake-3.31/Modules/CMakeGenericSystem.cmake"
"/usr/share/cmake-3.31/Modules/CMakeInitializeConfigs.cmake"
"/usr/share/cmake-3.31/Modules/CMakeLanguageInformation.cmake"
"/usr/share/cmake-3.31/Modules/CMakeParseImplicitIncludeInfo.cmake"
"/usr/share/cmake-3.31/Modules/CMakeParseImplicitLinkInfo.cmake"
"/usr/share/cmake-3.31/Modules/CMakeParseLibraryArchitecture.cmake"
"/usr/share/cmake-3.31/Modules/CMakeSystem.cmake.in"
"/usr/share/cmake-3.31/Modules/CMakeSystemSpecificInformation.cmake"
"/usr/share/cmake-3.31/Modules/CMakeSystemSpecificInitialize.cmake"
"/usr/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake"
"/usr/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake"
"/usr/share/cmake-3.31/Modules/CMakeTestCompilerCommon.cmake"
"/usr/share/cmake-3.31/Modules/CMakeUnixFindMake.cmake"
"/usr/share/cmake-3.31/Modules/CheckCSourceCompiles.cmake"
"/usr/share/cmake-3.31/Modules/CheckIncludeFile.cmake"
"/usr/share/cmake-3.31/Modules/CheckLibraryExists.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/ADSP-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/ARMCC-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/ARMClang-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/AppleClang-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Borland-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Bruce-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompilerInternal.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Compaq-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Cray-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/CrayClang-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Embarcadero-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Fujitsu-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/GHS-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/GNU-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/GNU-C.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/GNU-CXX.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/GNU-FindBinUtils.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/GNU.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/HP-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/HP-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/IAR-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Intel-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/LCC-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/MSVC-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/NVHPC-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/NVIDIA-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/OrangeC-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/PGI-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/PathScale-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/SCO-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/SDCC-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/SunPro-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/TI-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/TIClang-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Tasking-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/Watcom-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/XL-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/XL-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/XLClang-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/zOS-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.31/Modules/FindFreetype.cmake"
"/usr/share/cmake-3.31/Modules/FindOpenGL.cmake"
"/usr/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake"
@@ -114,9 +39,7 @@ set(CMAKE_MAKEFILE_DEPENDS
"/usr/share/cmake-3.31/Modules/Internal/CMakeCLinkerInformation.cmake"
"/usr/share/cmake-3.31/Modules/Internal/CMakeCXXLinkerInformation.cmake"
"/usr/share/cmake-3.31/Modules/Internal/CMakeCommonLinkerInformation.cmake"
"/usr/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake"
"/usr/share/cmake-3.31/Modules/Internal/CheckSourceCompiles.cmake"
"/usr/share/cmake-3.31/Modules/Internal/FeatureTesting.cmake"
"/usr/share/cmake-3.31/Modules/Linker/GNU-C.cmake"
"/usr/share/cmake-3.31/Modules/Linker/GNU-CXX.cmake"
"/usr/share/cmake-3.31/Modules/Linker/GNU.cmake"
@@ -124,7 +47,6 @@ set(CMAKE_MAKEFILE_DEPENDS
"/usr/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-C.cmake"
"/usr/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-CXX.cmake"
"/usr/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU.cmake"
"/usr/share/cmake-3.31/Modules/Platform/Linux-Determine-CXX.cmake"
"/usr/share/cmake-3.31/Modules/Platform/Linux-GNU-C.cmake"
"/usr/share/cmake-3.31/Modules/Platform/Linux-GNU-CXX.cmake"
"/usr/share/cmake-3.31/Modules/Platform/Linux-GNU.cmake"
@@ -142,15 +64,11 @@ set(CMAKE_MAKEFILE_OUTPUTS
# Byproducts of CMake generate step:
set(CMAKE_MAKEFILE_PRODUCTS
"CMakeFiles/3.31.6/CMakeSystem.cmake"
"CMakeFiles/3.31.6/CMakeCXXCompiler.cmake"
"CMakeFiles/3.31.6/CMakeCCompiler.cmake"
"CMakeFiles/3.31.6/CMakeCXXCompiler.cmake"
"CMakeFiles/3.31.6/CMakeCCompiler.cmake"
"CMakeFiles/CMakeDirectoryInformation.cmake"
)
# Dependency information for all targets:
set(CMAKE_DEPEND_INFO_FILES
"CMakeFiles/radar_simulation.dir/DependInfo.cmake"
"CMakeFiles/copy_shaders.dir/DependInfo.cmake"
)

View File

@@ -64,10 +64,12 @@ CMAKE_BINARY_DIR = /home/maallyn/radar-simulation/build
# The main recursive "all" target.
all: CMakeFiles/radar_simulation.dir/all
all: CMakeFiles/copy_shaders.dir/all
.PHONY : all
# The main recursive "codegen" target.
codegen: CMakeFiles/radar_simulation.dir/codegen
codegen: CMakeFiles/copy_shaders.dir/codegen
.PHONY : codegen
# The main recursive "preinstall" target.
@@ -76,21 +78,22 @@ preinstall:
# The main recursive "clean" target.
clean: CMakeFiles/radar_simulation.dir/clean
clean: CMakeFiles/copy_shaders.dir/clean
.PHONY : clean
#=============================================================================
# Target rules for target CMakeFiles/radar_simulation.dir
# All Build rule for target.
CMakeFiles/radar_simulation.dir/all:
CMakeFiles/radar_simulation.dir/all: CMakeFiles/copy_shaders.dir/all
$(MAKE) $(MAKESILENT) -f CMakeFiles/radar_simulation.dir/build.make CMakeFiles/radar_simulation.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/radar_simulation.dir/build.make CMakeFiles/radar_simulation.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/maallyn/radar-simulation/build/CMakeFiles --progress-num=1,2,3 "Built target radar_simulation"
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/maallyn/radar-simulation/build/CMakeFiles --progress-num=2,3,4 "Built target radar_simulation"
.PHONY : CMakeFiles/radar_simulation.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/radar_simulation.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/maallyn/radar-simulation/build/CMakeFiles 3
$(CMAKE_COMMAND) -E cmake_progress_start /home/maallyn/radar-simulation/build/CMakeFiles 4
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/radar_simulation.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/maallyn/radar-simulation/build/CMakeFiles 0
.PHONY : CMakeFiles/radar_simulation.dir/rule
@@ -100,9 +103,9 @@ radar_simulation: CMakeFiles/radar_simulation.dir/rule
.PHONY : radar_simulation
# codegen rule for target.
CMakeFiles/radar_simulation.dir/codegen:
CMakeFiles/radar_simulation.dir/codegen: CMakeFiles/copy_shaders.dir/all
$(MAKE) $(MAKESILENT) -f CMakeFiles/radar_simulation.dir/build.make CMakeFiles/radar_simulation.dir/codegen
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/maallyn/radar-simulation/build/CMakeFiles --progress-num=1,2,3 "Finished codegen for target radar_simulation"
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/maallyn/radar-simulation/build/CMakeFiles --progress-num=2,3,4 "Finished codegen for target radar_simulation"
.PHONY : CMakeFiles/radar_simulation.dir/codegen
# clean rule for target.
@@ -110,6 +113,38 @@ CMakeFiles/radar_simulation.dir/clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/radar_simulation.dir/build.make CMakeFiles/radar_simulation.dir/clean
.PHONY : CMakeFiles/radar_simulation.dir/clean
#=============================================================================
# Target rules for target CMakeFiles/copy_shaders.dir
# All Build rule for target.
CMakeFiles/copy_shaders.dir/all:
$(MAKE) $(MAKESILENT) -f CMakeFiles/copy_shaders.dir/build.make CMakeFiles/copy_shaders.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/copy_shaders.dir/build.make CMakeFiles/copy_shaders.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/maallyn/radar-simulation/build/CMakeFiles --progress-num=1 "Built target copy_shaders"
.PHONY : CMakeFiles/copy_shaders.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/copy_shaders.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/maallyn/radar-simulation/build/CMakeFiles 1
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/copy_shaders.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/maallyn/radar-simulation/build/CMakeFiles 0
.PHONY : CMakeFiles/copy_shaders.dir/rule
# Convenience name for target.
copy_shaders: CMakeFiles/copy_shaders.dir/rule
.PHONY : copy_shaders
# codegen rule for target.
CMakeFiles/copy_shaders.dir/codegen:
$(MAKE) $(MAKESILENT) -f CMakeFiles/copy_shaders.dir/build.make CMakeFiles/copy_shaders.dir/codegen
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/maallyn/radar-simulation/build/CMakeFiles --progress-num=1 "Finished codegen for target copy_shaders"
.PHONY : CMakeFiles/copy_shaders.dir/codegen
# clean rule for target.
CMakeFiles/copy_shaders.dir/clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/copy_shaders.dir/build.make CMakeFiles/copy_shaders.dir/clean
.PHONY : CMakeFiles/copy_shaders.dir/clean
#=============================================================================
# Special targets to cleanup operation of make.

View File

@@ -1,3 +1,4 @@
/home/maallyn/radar-simulation/build/CMakeFiles/radar_simulation.dir
/home/maallyn/radar-simulation/build/CMakeFiles/copy_shaders.dir
/home/maallyn/radar-simulation/build/CMakeFiles/edit_cache.dir
/home/maallyn/radar-simulation/build/CMakeFiles/rebuild_cache.dir

View File

@@ -0,0 +1,22 @@
# Consider dependencies only in project.
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
# The set of languages for which implicit dependencies are needed:
set(CMAKE_DEPENDS_LANGUAGES
)
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
)
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")

View File

@@ -0,0 +1,91 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.31
# Delete rule output on recipe failure.
.DELETE_ON_ERROR:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/maallyn/radar-simulation
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/maallyn/radar-simulation/build
# Utility rule file for copy_shaders.
# Include any custom commands dependencies for this target.
include CMakeFiles/copy_shaders.dir/compiler_depend.make
# Include the progress variables for this target.
include CMakeFiles/copy_shaders.dir/progress.make
CMakeFiles/copy_shaders:
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/maallyn/radar-simulation/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Copying shaders to build directory"
/usr/bin/cmake -E copy_directory /home/maallyn/radar-simulation/shaders /home/maallyn/radar-simulation/build/shaders
CMakeFiles/copy_shaders.dir/codegen:
.PHONY : CMakeFiles/copy_shaders.dir/codegen
copy_shaders: CMakeFiles/copy_shaders
copy_shaders: CMakeFiles/copy_shaders.dir/build.make
.PHONY : copy_shaders
# Rule to build all files generated by this target.
CMakeFiles/copy_shaders.dir/build: copy_shaders
.PHONY : CMakeFiles/copy_shaders.dir/build
CMakeFiles/copy_shaders.dir/clean:
$(CMAKE_COMMAND) -P CMakeFiles/copy_shaders.dir/cmake_clean.cmake
.PHONY : CMakeFiles/copy_shaders.dir/clean
CMakeFiles/copy_shaders.dir/depend:
cd /home/maallyn/radar-simulation/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/maallyn/radar-simulation /home/maallyn/radar-simulation /home/maallyn/radar-simulation/build /home/maallyn/radar-simulation/build /home/maallyn/radar-simulation/build/CMakeFiles/copy_shaders.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : CMakeFiles/copy_shaders.dir/depend

View File

@@ -0,0 +1,8 @@
file(REMOVE_RECURSE
"CMakeFiles/copy_shaders"
)
# Per-language clean rules from dependency scanning.
foreach(lang )
include(CMakeFiles/copy_shaders.dir/cmake_clean_${lang}.cmake OPTIONAL)
endforeach()

View File

@@ -0,0 +1,2 @@
# Empty custom commands generated dependencies file for copy_shaders.
# This may be replaced when dependencies are built.

View File

@@ -0,0 +1,2 @@
# CMAKE generated file: DO NOT EDIT!
# Timestamp file for custom commands dependencies management for copy_shaders.

View File

@@ -0,0 +1,2 @@
CMAKE_PROGRESS_1 = 1

View File

@@ -1 +1 @@
3
4

View File

@@ -27,21 +27,12 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o
/usr/include/x86_64-linux-gnu/bits/long-double.h
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h
/usr/include/x86_64-linux-gnu/bits/select-decl.h
/usr/include/x86_64-linux-gnu/bits/select.h
/usr/include/x86_64-linux-gnu/bits/select2.h
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h
/usr/include/x86_64-linux-gnu/bits/stdint-least.h
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h
/usr/include/x86_64-linux-gnu/bits/stdio.h
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h
/usr/include/x86_64-linux-gnu/bits/stdio2.h
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h
/usr/include/x86_64-linux-gnu/bits/stdlib.h
/usr/include/x86_64-linux-gnu/bits/string_fortified.h
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h
@@ -104,7 +95,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/bits/basic_string.tcc
/usr/include/c++/15/bits/char_traits.h
/usr/include/c++/15/bits/charconv.h
/usr/include/c++/15/bits/chrono.h
/usr/include/c++/15/bits/codecvt.h
/usr/include/c++/15/bits/concept_check.h
/usr/include/c++/15/bits/cpp_type_traits.h
@@ -133,7 +123,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/bits/ostream.h
/usr/include/c++/15/bits/ostream.tcc
/usr/include/c++/15/bits/ostream_insert.h
/usr/include/c++/15/bits/parse_numbers.h
/usr/include/c++/15/bits/postypes.h
/usr/include/c++/15/bits/predefined_ops.h
/usr/include/c++/15/bits/ptr_traits.h
@@ -168,16 +157,13 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/bits/version.h
/usr/include/c++/15/cctype
/usr/include/c++/15/cerrno
/usr/include/c++/15/chrono
/usr/include/c++/15/clocale
/usr/include/c++/15/cmath
/usr/include/c++/15/concepts
/usr/include/c++/15/cstddef
/usr/include/c++/15/cstdint
/usr/include/c++/15/cstdio
/usr/include/c++/15/cstdlib
/usr/include/c++/15/cstring
/usr/include/c++/15/ctime
/usr/include/c++/15/cwchar
/usr/include/c++/15/cwctype
/usr/include/c++/15/debug/assertions.h
@@ -200,7 +186,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/pstl/execution_defs.h
/usr/include/c++/15/pstl/glue_algorithm_defs.h
/usr/include/c++/15/pstl/pstl_config.h
/usr/include/c++/15/ratio
/usr/include/c++/15/sstream
/usr/include/c++/15/stdexcept
/usr/include/c++/15/stdlib.h
@@ -298,23 +283,13 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h
/usr/include/x86_64-linux-gnu/bits/sched.h
/usr/include/x86_64-linux-gnu/bits/select-decl.h
/usr/include/x86_64-linux-gnu/bits/select.h
/usr/include/x86_64-linux-gnu/bits/select2.h
/usr/include/x86_64-linux-gnu/bits/setjmp.h
/usr/include/x86_64-linux-gnu/bits/setjmp2.h
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h
/usr/include/x86_64-linux-gnu/bits/stdint-least.h
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h
/usr/include/x86_64-linux-gnu/bits/stdio.h
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h
/usr/include/x86_64-linux-gnu/bits/stdio2.h
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h
/usr/include/x86_64-linux-gnu/bits/stdlib.h
/usr/include/x86_64-linux-gnu/bits/string_fortified.h
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h
@@ -353,8 +328,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/x86_64-linux-gnu/bits/waitflags.h
/usr/include/x86_64-linux-gnu/bits/waitstatus.h
/usr/include/x86_64-linux-gnu/bits/wchar.h
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h
/usr/include/x86_64-linux-gnu/bits/wchar2.h
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h
/usr/include/x86_64-linux-gnu/bits/wordsize.h
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h

View File

@@ -26,21 +26,12 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o: /home/maallyn/radar-simulatio
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
@@ -102,7 +93,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: /home/maallyn/radar-simulation/s
/usr/include/c++/15/bits/basic_string.tcc \
/usr/include/c++/15/bits/char_traits.h \
/usr/include/c++/15/bits/charconv.h \
/usr/include/c++/15/bits/chrono.h \
/usr/include/c++/15/bits/codecvt.h \
/usr/include/c++/15/bits/concept_check.h \
/usr/include/c++/15/bits/cpp_type_traits.h \
@@ -131,7 +121,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: /home/maallyn/radar-simulation/s
/usr/include/c++/15/bits/ostream.h \
/usr/include/c++/15/bits/ostream.tcc \
/usr/include/c++/15/bits/ostream_insert.h \
/usr/include/c++/15/bits/parse_numbers.h \
/usr/include/c++/15/bits/postypes.h \
/usr/include/c++/15/bits/predefined_ops.h \
/usr/include/c++/15/bits/ptr_traits.h \
@@ -166,16 +155,13 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: /home/maallyn/radar-simulation/s
/usr/include/c++/15/bits/version.h \
/usr/include/c++/15/cctype \
/usr/include/c++/15/cerrno \
/usr/include/c++/15/chrono \
/usr/include/c++/15/clocale \
/usr/include/c++/15/cmath \
/usr/include/c++/15/concepts \
/usr/include/c++/15/cstddef \
/usr/include/c++/15/cstdint \
/usr/include/c++/15/cstdio \
/usr/include/c++/15/cstdlib \
/usr/include/c++/15/cstring \
/usr/include/c++/15/ctime \
/usr/include/c++/15/cwchar \
/usr/include/c++/15/cwctype \
/usr/include/c++/15/debug/assertions.h \
@@ -198,7 +184,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: /home/maallyn/radar-simulation/s
/usr/include/c++/15/pstl/execution_defs.h \
/usr/include/c++/15/pstl/glue_algorithm_defs.h \
/usr/include/c++/15/pstl/pstl_config.h \
/usr/include/c++/15/ratio \
/usr/include/c++/15/sstream \
/usr/include/c++/15/stdexcept \
/usr/include/c++/15/stdlib.h \
@@ -296,23 +281,13 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: /home/maallyn/radar-simulation/s
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/setjmp2.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
@@ -351,8 +326,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: /home/maallyn/radar-simulation/s
/usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
@@ -430,6 +403,8 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o:
/lib64/ld-linux-x86-64.so.2:
/lib/x86_64-linux-gnu/libpng16.so.16:
/lib/x86_64-linux-gnu/libc.so.6:
/lib/x86_64-linux-gnu/libbz2.so.1.0:
@@ -470,27 +445,25 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o:
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h:
/usr/include/x86_64-linux-gnu/bits/setjmp2.h:
/usr/include/c++/15/bits/stl_algobase.h:
/usr/include/x86_64-linux-gnu/bits/sched.h:
/usr/include/c++/15/clocale:
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h:
/usr/include/c++/15/bits/sstream.tcc:
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
/usr/include/c++/15/bits/locale_facets.h:
/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
/usr/include/c++/15/cstdlib:
/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h:
/usr/include/freetype2/freetype/ftmoderr.h:
/usr/include/x86_64-linux-gnu/bits/mathcalls-macros.h:
/usr/include/c++/15/bits/predefined_ops.h:
/usr/include/x86_64-linux-gnu/bits/iscanonical.h:
/usr/include/c++/15/bits/postypes.h:
/usr/include/x86_64-linux-gnu/bits/wchar2.h:
/usr/include/x86_64-linux-gnu/bits/fp-logb.h:
/usr/include/x86_64-linux-gnu/asm/posix_types.h:
/usr/include/c++/15/bits/ostream.tcc:
@@ -510,44 +483,32 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o:
/usr/include/c++/15/bits/locale_classes.tcc:
/usr/include/x86_64-linux-gnu/bits/iscanonical.h:
/usr/include/c++/15/bits/functional_hash.h:
/usr/include/c++/15/ext/type_traits.h:
/usr/include/c++/15/bits/predefined_ops.h:
/usr/include/c++/15/bits/stl_algo.h:
/usr/include/c++/15/bits/cxxabi_forced.h:
/usr/include/c++/15/bits/chrono.h:
/usr/include/c++/15/bits/nested_exception.h:
/usr/include/linux/sched/types.h:
/usr/include/x86_64-linux-gnu/sys/types.h:
/lib/x86_64-linux-gnu/libm.so.6:
/usr/include/c++/15/bits/char_traits.h:
/usr/include/x86_64-linux-gnu/bits/locale.h:
/usr/include/c++/15/bits/basic_ios.h:
/usr/include/c++/15/tr1/modified_bessel_func.tcc:
/usr/include/linux/limits.h:
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
/usr/include/c++/15/bits/ios_base.h:
/usr/include/c++/15/bits/alloc_traits.h:
/usr/include/x86_64-linux-gnu/bits/math-vector.h:
/usr/include/c++/15/bits/hash_bytes.h:
/usr/include/c++/15/algorithm:
/usr/lib/gcc/x86_64-linux-gnu/15/crtbeginS.o:
/usr/include/c++/15/bits/range_access.h:
@@ -582,55 +543,39 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o:
/usr/include/setjmp.h:
/usr/include/c++/15/bits/std_abs.h:
/usr/include/c++/15/typeinfo:
/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
/usr/include/x86_64-linux-gnu/gnu/stubs.h:
/usr/include/x86_64-linux-gnu/bits/endian.h:
/usr/lib/gcc/x86_64-linux-gnu/15/crtendS.o:
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
/usr/include/c++/15/ext/string_conversions.h:
/usr/include/x86_64-linux-gnu/bits/wordsize.h:
/usr/include/c++/15/pstl/execution_defs.h:
/usr/include/x86_64-linux-gnu/bits/wchar.h:
/usr/include/x86_64-linux-gnu/bits/stdint-least.h:
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h:
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h:
/usr/include/c++/15/bits/ostream_insert.h:
/usr/include/x86_64-linux-gnu/bits/errno.h:
/usr/lib/x86_64-linux-gnu/crtn.o:
/usr/include/x86_64-linux-gnu/bits/waitflags.h:
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h:
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h:
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
/usr/include/stdc-predef.h:
/usr/include/x86_64-linux-gnu/bits/wchar.h:
/usr/include/x86_64-linux-gnu/bits/typesizes.h:
/usr/include/c++/15/system_error:
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h:
/usr/include/x86_64-linux-gnu/bits/stdlib.h:
/usr/include/c++/15/bits/stl_uninitialized.h:
/usr/include/x86_64-linux-gnu/asm/errno.h:
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h:
/lib/x86_64-linux-gnu/libpng16.so.16:
/usr/include/x86_64-linux-gnu/bits/select-decl.h:
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
/usr/include/freetype2/freetype/fttypes.h:
/usr/include/locale.h:
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h:
/usr/include/c++/15/bits/algorithmfwd.h:
@@ -644,14 +589,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o:
/usr/include/x86_64-linux-gnu/bits/endianness.h:
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:
/usr/include/stdint.h:
/usr/include/endian.h:
/usr/include/c++/15/cmath:
/usr/include/c++/15/bits/cpp_type_traits.h:
/usr/include/c++/15/bits/basic_string.h:
@@ -660,10 +597,16 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o:
/usr/include/c++/15/bits/concept_check.h:
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h:
/usr/include/c++/15/bits/version.h:
/usr/include/stdc-predef.h:
/usr/include/x86_64-linux-gnu/bits/typesizes.h:
/usr/include/c++/15/backward/binders.h:
/usr/include/c++/15/bits/specfun.h:
/usr/include/x86_64-linux-gnu/bits/floatn.h:
/usr/include/c++/15/bits/istream.tcc:
@@ -700,15 +643,19 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o:
/usr/include/c++/15/bits/uses_allocator.h:
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h:
/home/maallyn/radar-simulation/glad/src/glad.c:
/usr/include/x86_64-linux-gnu/bits/select2.h:
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h:
/usr/include/c++/15/ext/alloc_traits.h:
/usr/include/string.h:
/usr/include/linux/types.h:
/usr/include/c++/15/bits/stl_function.h:
/usr/include/c++/15/cwchar:
/usr/include/c++/15/bits/requires_hosted.h:
/usr/include/dlfcn.h:
/lib/x86_64-linux-gnu/libmvec.so.1:
@@ -718,12 +665,22 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o:
/usr/include/freetype2/freetype/config/mac-support.h:
/usr/include/c++/15/tr1/gamma.tcc:
/usr/lib/gcc/x86_64-linux-gnu/15/include/stdarg.h:
/usr/include/c++/15/bits/locale_facets.tcc:
/usr/include/ctype.h:
/usr/include/features.h:
/usr/include/x86_64-linux-gnu/bits/types/FILE.h:
/usr/include/x86_64-linux-gnu/bits/timex.h:
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
/usr/include/c++/15/bits/exception_ptr.h:
@@ -738,6 +695,10 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o:
/usr/include/pthread.h:
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h:
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h:
/usr/include/x86_64-linux-gnu/bits/time64.h:
/usr/include/freetype2/freetype/config/ftconfig.h:
@@ -752,6 +713,8 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/bits/invoke.h:
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h:
/usr/include/c++/15/bits/memoryfwd.h:
/usr/include/freetype2/freetype/ftsystem.h:
@@ -764,6 +727,10 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/bits/stringfwd.h:
/usr/include/c++/15/bits/ostream_insert.h:
/usr/include/x86_64-linux-gnu/bits/errno.h:
/usr/include/features-time64.h:
/usr/include/c++/15/bits/uniform_int_dist.h:
@@ -776,41 +743,29 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/bits/codecvt.h:
/usr/include/string.h:
/usr/include/x86_64-linux-gnu/bits/mathcalls-macros.h:
/usr/include/c++/15/bits/stl_function.h:
/usr/include/c++/15/bits/refwrap.h:
/usr/include/c++/15/cwchar:
/usr/include/c++/15/type_traits:
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h:
/usr/include/stdint.h:
/usr/include/x86_64-linux-gnu/bits/stdint-least.h:
/usr/include/endian.h:
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h:
/usr/include/c++/15/cmath:
/usr/include/x86_64-linux-gnu/bits/types/FILE.h:
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:
/usr/include/x86_64-linux-gnu/bits/timex.h:
/usr/include/c++/15/bits/basic_ios.tcc:
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
/usr/include/c++/15/system_error:
/usr/include/c++/15/tr1/gamma.tcc:
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/stdarg.h:
/usr/include/c++/15/bits/stl_uninitialized.h:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:
/usr/include/c++/15/bits/locale_facets.h:
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h:
/usr/include/dlfcn.h:
/usr/include/c++/15/bits/requires_hosted.h:
/usr/include/c++/15/cstdlib:
/usr/include/freetype2/freetype/ftmoderr.h:
/usr/include/x86_64-linux-gnu/asm/errno.h:
/usr/include/stdio.h:
@@ -820,61 +775,27 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/tr1/exp_integral.tcc:
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h:
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h:
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
/usr/lib/gcc/x86_64-linux-gnu/15/crtendS.o:
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
/usr/include/c++/15/ext/string_conversions.h:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:
/usr/include/c++/15/bits/basic_ios.tcc:
/usr/include/c++/15/backward/binders.h:
/usr/include/c++/15/bits/specfun.h:
/usr/include/c++/15/bits/parse_numbers.h:
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h:
/usr/include/x86_64-linux-gnu/bits/byteswap.h:
/usr/include/freetype2/freetype/fterrors.h:
/usr/include/c++/15/concepts:
/usr/include/freetype2/freetype/fterrors.h:
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h:
/usr/include/c++/15/istream:
/usr/include/x86_64-linux-gnu/bits/stdio.h:
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h:
/usr/include/c++/15/bits/postypes.h:
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
/usr/include/x86_64-linux-gnu/asm/posix_types.h:
/usr/include/freetype2/freetype/fttypes.h:
/usr/include/c++/15/bits/refwrap.h:
/usr/include/locale.h:
/usr/include/c++/15/type_traits:
/usr/lib/x86_64-linux-gnu/crtn.o:
/usr/include/c++/15/bits/sstream.tcc:
/usr/include/c++/15/bits/std_abs.h:
/usr/include/c++/15/typeinfo:
/usr/include/c++/15/bits/stl_algo.h:
/usr/include/c++/15/bits/stl_algobase.h:
/usr/include/c++/15/clocale:
/usr/include/x86_64-linux-gnu/bits/waitflags.h:
/usr/include/c++/15/bits/stl_iterator.h:
@@ -898,12 +819,6 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/bits/stl_iterator_base_types.h:
/usr/include/x86_64-linux-gnu/bits/fp-fast.h:
/usr/include/c++/15/bits/stl_bvector.h:
/usr/include/c++/15/bits/stl_pair.h:
/usr/include/c++/15/cctype:
/usr/include/c++/15/bits/stl_tempbuf.h:
@@ -914,10 +829,6 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/bits/stl_vector.h:
/usr/include/x86_64-linux-gnu/asm/types.h:
/usr/include/c++/15/cwctype:
/usr/include/c++/15/bits/basic_string.tcc:
/usr/include/c++/15/bits/streambuf.tcc:
@@ -936,10 +847,6 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/cerrno:
/usr/include/c++/15/chrono:
/usr/include/c++/15/cstdint:
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
/usr/include/c++/15/cstring:
@@ -952,6 +859,10 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/exception:
/usr/include/c++/15/ext/alloc_traits.h:
/usr/include/linux/types.h:
/usr/include/c++/15/ext/numeric_traits.h:
/usr/include/c++/15/ios:
@@ -986,12 +897,8 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/tr1/poly_hermite.tcc:
/usr/include/c++/15/ratio:
/usr/include/c++/15/stdexcept:
/usr/include/c++/15/ctime:
/usr/include/c++/15/stdlib.h:
/usr/include/c++/15/string:
@@ -1006,10 +913,10 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/c++/15/tr1/ell_integral.tcc:
/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h:
/usr/include/c++/15/tr1/legendre_function.tcc:
/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h:
/usr/include/c++/15/bits/charconv.h:
/usr/include/c++/15/pstl/glue_algorithm_defs.h:
@@ -1042,20 +949,16 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/freetype2/freetype/fterrdef.h:
/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h:
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h:
/usr/include/freetype2/ft2build.h:
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h:
/usr/include/linux/posix_types.h:
/usr/include/GLFW/glfw3.h:
/usr/include/x86_64-linux-gnu/bits/flt-eval-method.h:
/usr/include/c++/15/bits/nested_exception.h:
/usr/include/linux/sched/types.h:
/usr/include/c++/15/bits/locale_classes.h:
/usr/include/linux/stddef.h:
@@ -1068,6 +971,40 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/include/time.h:
/usr/include/c++/15/cwctype:
/usr/include/x86_64-linux-gnu/asm/types.h:
/usr/include/x86_64-linux-gnu/asm/posix_types_64.h:
/usr/include/x86_64-linux-gnu/bits/cpu-set.h:
/usr/include/c++/15/bits/stl_bvector.h:
/usr/include/c++/15/bits/stl_pair.h:
/usr/include/x86_64-linux-gnu/bits/fp-fast.h:
/usr/include/x86_64-linux-gnu/bits/fp-logb.h:
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h:
/usr/include/freetype2/ft2build.h:
/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h:
/usr/include/c++/15/bits/basic_ios.h:
/usr/include/x86_64-linux-gnu/bits/locale.h:
/usr/include/c++/15/bits/hash_bytes.h:
/usr/include/c++/15/algorithm:
/usr/include/x86_64-linux-gnu/bits/math-vector.h:
/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
/usr/include/x86_64-linux-gnu/bits/sched.h:

View File

@@ -1,4 +1,4 @@
CMAKE_PROGRESS_1 = 1
CMAKE_PROGRESS_2 = 2
CMAKE_PROGRESS_3 = 3
CMAKE_PROGRESS_1 = 2
CMAKE_PROGRESS_2 = 3
CMAKE_PROGRESS_3 = 4

View File

@@ -233,9 +233,6 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: \
/usr/include/x86_64-linux-gnu/c++/15/bits/c++io.h \
/usr/include/c++/15/bits/fstream.tcc /usr/include/c++/15/sstream \
/usr/include/c++/15/bits/sstream.tcc /usr/include/c++/15/iostream \
/usr/include/c++/15/chrono /usr/include/c++/15/bits/chrono.h \
/usr/include/c++/15/ratio /usr/include/c++/15/cstdint \
/usr/include/c++/15/ctime /usr/include/c++/15/bits/parse_numbers.h \
/usr/include/c++/15/algorithm /usr/include/c++/15/bits/stl_algo.h \
/usr/include/c++/15/bits/algorithmfwd.h \
/usr/include/c++/15/bits/stl_heap.h \

View File

@@ -129,6 +129,19 @@ radar_simulation/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/radar_simulation.dir/build.make CMakeFiles/radar_simulation.dir/build
.PHONY : radar_simulation/fast
#=============================================================================
# Target rules for targets named copy_shaders
# Build rule for target.
copy_shaders: cmake_check_build_system
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 copy_shaders
.PHONY : copy_shaders
# fast build rule for target.
copy_shaders/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/copy_shaders.dir/build.make CMakeFiles/copy_shaders.dir/build
.PHONY : copy_shaders/fast
glad/src/glad.o: glad/src/glad.c.o
.PHONY : glad/src/glad.o
@@ -185,6 +198,7 @@ help:
@echo "... depend"
@echo "... edit_cache"
@echo "... rebuild_cache"
@echo "... copy_shaders"
@echo "... radar_simulation"
@echo "... glad/src/glad.o"
@echo "... glad/src/glad.i"

Binary file not shown.

View File

@@ -0,0 +1,6 @@
#version 330 core
uniform vec3 uColor;
out vec4 FragColor;
void main() {
FragColor = vec4(uColor, 1.0);
}

View File

@@ -0,0 +1,6 @@
#version 330 core
layout(location = 0) in vec2 aPos;
uniform float uYOffset;
void main() {
gl_Position = vec4(aPos.x, aPos.y + uYOffset, 0.0, 1.0);
}

View File

@@ -0,0 +1,9 @@
#version 330 core
in vec2 vUV;
uniform sampler2D uTexture;
uniform vec3 uColor;
out vec4 FragColor;
void main() {
float alpha = texture(uTexture, vUV).r;
FragColor = vec4(uColor, alpha);
}

View File

@@ -0,0 +1,9 @@
#version 330 core
layout(location = 0) in vec2 aPos;
layout(location = 1) in vec2 aUV;
uniform float uYOffset;
out vec2 vUV;
void main() {
gl_Position = vec4(aPos.x, aPos.y + uYOffset, 0.0, 1.0);
vUV = aUV;
}

View File

@@ -0,0 +1,6 @@
#version 330 core
in vec3 vColor;
out vec4 fragColor;
void main() {
fragColor = vec4(vColor, 1.0);
}

View File

@@ -0,0 +1,8 @@
#version 330 core
layout(location = 0) in vec2 aPos;
layout(location = 1) in vec3 aColor;
out vec3 vColor;
void main() {
gl_Position = vec4(aPos, 0.0, 1.0);
vColor = aColor;
}

View File

@@ -0,0 +1,11 @@
#version 330 core
in vec2 vUV; // [-1,1] range — distance from blob centre
out vec4 fragColor;
uniform vec3 uColor;
uniform float uFalloff; // gaussian width: larger = tighter core
void main() {
float d = length(vUV);
if (d > 1.0) discard;
float intensity = exp(-uFalloff * d * d);
fragColor = vec4(uColor * intensity, intensity);
}

View File

@@ -0,0 +1,8 @@
#version 330 core
layout(location = 0) in vec2 aPos;
layout(location = 1) in vec2 aUV;
out vec2 vUV;
void main() {
gl_Position = vec4(aPos, 0.0, 1.0);
vUV = aUV;
}

View File

@@ -1,7 +1,9 @@
// Radar Simulation — Feature Test: 1 & 2
// Radar Simulation — Feature Test: 1, 2 & 3
// Feature 1: Initialize display, draw scope boundaries (PPI circle, A scope box)
// Feature 2: PPI bearing ring with tick marks and degree labels
// Runs for 10 seconds then exits. Press ESC to exit early.
// Feature 3: Replaceable A scope graticule — cycles through 2/5/10/15 mi ranges,
// 5 s hold per range, 0.5 s slide animation between ranges.
// Press ESC to exit.
#include <glad/glad.h>
#include <GLFW/glfw3.h>
@@ -15,7 +17,6 @@
#include <fstream>
#include <sstream>
#include <iostream>
#include <chrono>
#include <algorithm>
#include <cstring>
@@ -24,12 +25,12 @@
static constexpr float PI = 3.14159265358979323846f;
static constexpr int CIRCLE_SEGS = 360;
// Incandescent (warm lamp) — bearing graticule
// Incandescent (warm lamp) — bearing graticule and A scope graticule
static constexpr float INCAN_R = 1.00f;
static constexpr float INCAN_G = 0.78f;
static constexpr float INCAN_B = 0.35f;
// P1 phosphor (green) — A scope
// P1 phosphor (green) — A scope boundary
static constexpr float P1_R = 0.00f;
static constexpr float P1_G = 0.90f;
static constexpr float P1_B = 0.20f;
@@ -38,6 +39,21 @@ static constexpr float P1_B = 0.20f;
static constexpr int GLYPH_FIRST = '0';
static constexpr int GLYPH_COUNT = 10;
// Feature 3 timing
static constexpr float HOLD_SEC = 5.0f;
static constexpr float SLIDE_SEC = 0.5f;
// P7 phosphor — active (blueish white) and persistence (greenish yellow)
static constexpr float P7A_R = 0.85f, P7A_G = 0.92f, P7A_B = 1.00f;
static constexpr float P7P_R = 0.35f, P7P_G = 0.88f, P7P_B = 0.18f;
// Sweep / persistence
static constexpr float SWEEP_DEG_PS = 20.0f * 6.0f; // 20 RPM → 120 °/s
static constexpr float TRAIL_DEG = 50.0f; // lit arc behind sweep (°)
static constexpr float TARG_PERSIST = 5.0f; // target glow lifetime (s)
static constexpr int RING_SEGS = 300;
static constexpr int TRAIL_SEGS = 50;
// ─── NDC helpers ─────────────────────────────────────────────────────────────
static inline float ndcX(float px, float W) { return px / W * 2.0f - 1.0f; }
@@ -114,12 +130,12 @@ static void makeTextVAO(GLuint& vao, GLuint& vbo, const std::vector<float>& v)
// ─── FreeType font atlas ─────────────────────────────────────────────────────
struct GlyphInfo {
int atlasX; // pixel x offset in atlas
int bitmapW; // rendered width
int bitmapH; // rendered height
int bearingX; // horizontal offset from cursor to left of bitmap
int bearingY; // vertical offset from baseline to top of bitmap
int advance; // horizontal advance in pixels
int atlasX;
int bitmapW;
int bitmapH;
int bearingX;
int bearingY;
int advance;
};
struct FontAtlas {
@@ -143,12 +159,11 @@ static bool buildFontAtlas(FontAtlas& fa, const std::string& fontPath, int sizeP
}
FT_Set_Pixel_Sizes(face, 0, sizePx);
// First pass — measure atlas dimensions
int totalW = 0, maxH = 0;
for (int i = 0; i < GLYPH_COUNT; ++i) {
if (FT_Load_Char(face, GLYPH_FIRST + i, FT_LOAD_RENDER)) continue;
FT_GlyphSlot g = face->glyph;
totalW += (int)g->bitmap.width + 2; // 2-pixel padding between glyphs
totalW += (int)g->bitmap.width + 2;
maxH = std::max(maxH, (int)g->bitmap.rows);
}
@@ -156,7 +171,6 @@ static bool buildFontAtlas(FontAtlas& fa, const std::string& fontPath, int sizeP
fa.atlasH = maxH;
std::vector<uint8_t> atlas(fa.atlasW * fa.atlasH, 0);
// Second pass — render each glyph into the atlas
int xOff = 0;
for (int i = 0; i < GLYPH_COUNT; ++i) {
if (FT_Load_Char(face, GLYPH_FIRST + i, FT_LOAD_RENDER)) continue;
@@ -178,7 +192,6 @@ static bool buildFontAtlas(FontAtlas& fa, const std::string& fontPath, int sizeP
xOff += gi.bitmapW + 2;
}
// Upload atlas as single-channel (RED) texture
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &fa.texture);
glBindTexture(GL_TEXTURE_2D, fa.texture);
@@ -188,7 +201,7 @@ static bool buildFontAtlas(FontAtlas& fa, const std::string& fontPath, int sizeP
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 4); // restore default
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
FT_Done_Face(face);
FT_Done_FreeType(ft);
@@ -196,17 +209,16 @@ static bool buildFontAtlas(FontAtlas& fa, const std::string& fontPath, int sizeP
}
// Append NDC quad vertices for string s, visually centered at screen pixel (cx, cy).
// Only digits '0''9' are supported (sufficient for 0..350 degree labels).
// Only digits '0''9' are supported.
static void appendTextQuads(std::vector<float>& verts, const FontAtlas& fa,
const std::string& s, float cx, float cy,
float W, float H)
{
if (s.empty()) return;
// Measure total advance and vertical extent
float totalAdv = 0.0f;
int maxBY = 0; // highest bearingY (top above baseline)
int minBY = 0; // lowest (bearingY - bitmapH), typically <= 0
int maxBY = 0;
int minBY = 0;
for (char c : s) {
int i = (int)c - GLYPH_FIRST;
@@ -217,9 +229,8 @@ static void appendTextQuads(std::vector<float>& verts, const FontAtlas& fa,
minBY = std::min(minBY, g.bearingY - g.bitmapH);
}
// Position baseline so the visual center of the glyphs sits at (cx, cy)
float visualCenterAboveBaseline = (maxBY + minBY) * 0.5f;
float baselineY = cy + visualCenterAboveBaseline; // screen y (y-down)
float baselineY = cy + visualCenterAboveBaseline;
float cursorX = cx - totalAdv * 0.5f;
for (char c : s) {
@@ -227,27 +238,19 @@ static void appendTextQuads(std::vector<float>& verts, const FontAtlas& fa,
if (i < 0 || i >= GLYPH_COUNT) continue;
const GlyphInfo& g = fa.glyphs[i];
// Glyph bounding box in screen pixel space (y increases downward)
float gx0 = cursorX + g.bearingX;
float gy0 = baselineY - g.bearingY; // top edge
float gy0 = baselineY - g.bearingY;
float gx1 = gx0 + g.bitmapW;
float gy1 = gy0 + g.bitmapH; // bottom edge
float gy1 = gy0 + g.bitmapH;
// Atlas UV:
// GL uploads atlas row 0 as texture bottom (t = 0).
// Atlas row 0 is the TOP of the glyph bitmap.
// Screen top vertex (gy0) → t = 0 → samples glyph top ✓
// Screen bottom vertex (gy1) → t = v1 → samples glyph bottom ✓
float u0 = (float) g.atlasX / fa.atlasW;
float u1 = (float)(g.atlasX + g.bitmapW)/ fa.atlasW;
float v0 = 0.0f;
float v1 = (float) g.bitmapH / fa.atlasH;
// Triangle 1: TL, TR, BR
verts.push_back(ndcX(gx0,W)); verts.push_back(ndcY(gy0,H)); verts.push_back(u0); verts.push_back(v0);
verts.push_back(ndcX(gx1,W)); verts.push_back(ndcY(gy0,H)); verts.push_back(u1); verts.push_back(v0);
verts.push_back(ndcX(gx1,W)); verts.push_back(ndcY(gy1,H)); verts.push_back(u1); verts.push_back(v1);
// Triangle 2: TL, BR, BL
verts.push_back(ndcX(gx0,W)); verts.push_back(ndcY(gy0,H)); verts.push_back(u0); verts.push_back(v0);
verts.push_back(ndcX(gx1,W)); verts.push_back(ndcY(gy1,H)); verts.push_back(u1); verts.push_back(v1);
verts.push_back(ndcX(gx0,W)); verts.push_back(ndcY(gy1,H)); verts.push_back(u0); verts.push_back(v1);
@@ -259,22 +262,20 @@ static void appendTextQuads(std::vector<float>& verts, const FontAtlas& fa,
// ─── Layout ──────────────────────────────────────────────────────────────────
struct Layout {
float ppiCX, ppiCY, ppiR; // PPI scope center and radius (pixels)
float asLeft, asTop, asRight, asBot; // A scope rectangle (pixels)
float ppiCX, ppiCY, ppiR;
float asLeft, asTop, asRight, asBot;
};
static Layout computeLayout(float W, float H, float marginPx)
{
Layout L{};
// PPI: right half of screen; margins top/bottom/right = marginPx, left = screen centre
float availW = (W - marginPx) - W * 0.5f;
float availH = (H - marginPx) - marginPx;
L.ppiR = std::min(availW, availH) * 0.5f;
L.ppiCX = W * 0.5f + availW * 0.5f;
L.ppiCY = marginPx + availH * 0.5f;
// A scope: left half, smaller, centred vertically, near left margin
float asW = (W * 0.5f - 2.0f * marginPx) * 0.65f;
float asH = H * 0.22f;
L.asLeft = marginPx;
@@ -298,7 +299,6 @@ static ScopeBounds buildScopeBounds(const Layout& L, float W, float H)
ScopeBounds sb{};
std::vector<float> v;
// PPI circle (LINE_STRIP, CIRCLE_SEGS+1 verts — last = first, closes the loop)
sb.ppiStart = 0;
sb.ppiCount = CIRCLE_SEGS + 1;
for (int i = 0; i <= CIRCLE_SEGS; ++i) {
@@ -307,17 +307,16 @@ static ScopeBounds buildScopeBounds(const Layout& L, float W, float H)
v.push_back(ndcY(L.ppiCY + L.ppiR * std::sin(a), H));
}
// A scope box (4 × GL_LINES = 8 verts)
sb.asStart = sb.ppiStart + sb.ppiCount;
sb.asCount = 8;
auto ln = [&](float x1, float y1, float x2, float y2) {
v.push_back(ndcX(x1,W)); v.push_back(ndcY(y1,H));
v.push_back(ndcX(x2,W)); v.push_back(ndcY(y2,H));
};
ln(L.asLeft, L.asTop, L.asRight, L.asTop); // top edge
ln(L.asRight, L.asTop, L.asRight, L.asBot); // right edge
ln(L.asRight, L.asBot, L.asLeft, L.asBot); // bottom edge
ln(L.asLeft, L.asBot, L.asLeft, L.asTop); // left edge
ln(L.asLeft, L.asTop, L.asRight, L.asTop);
ln(L.asRight, L.asTop, L.asRight, L.asBot);
ln(L.asRight, L.asBot, L.asLeft, L.asBot);
ln(L.asLeft, L.asBot, L.asLeft, L.asTop);
makeLineVAO(sb.vao, sb.vbo, v);
sb.prog = makeProgram("shaders/scope_bounds.vert", "shaders/scope_bounds.frag");
@@ -342,10 +341,8 @@ static BearingGraticule buildBearingGraticule(const Layout& L, const FontAtlas&
BearingGraticule bg{};
const float cx = L.ppiCX, cy = L.ppiCY, R = L.ppiR;
// ── Line geometry (ring + ticks) ──────────────────────────────────────────
std::vector<float> lineV;
// Bearing ring circle (LINE_STRIP, closed)
bg.ringStart = 0;
bg.ringCount = CIRCLE_SEGS + 1;
for (int i = 0; i <= CIRCLE_SEGS; ++i) {
@@ -354,10 +351,6 @@ static BearingGraticule buildBearingGraticule(const Layout& L, const FontAtlas&
lineV.push_back(ndcY(cy + R * std::sin(a), H));
}
// Tick marks: every 1 degree, longer every 10 degrees
// Radar convention: 0° = top (north), increasing clockwise
// screen_x = cx + R * sin(bearing_rad)
// screen_y = cy - R * cos(bearing_rad)
const float majorLen = 0.055f * R;
const float minorLen = 0.025f * R;
bg.tickStart = bg.ringStart + bg.ringCount;
@@ -367,19 +360,16 @@ static BearingGraticule buildBearingGraticule(const Layout& L, const FontAtlas&
float sb = std::sin(brad);
float cb = std::cos(brad);
float len = (b % 10 == 0) ? majorLen : minorLen;
// Outer point (on the ring)
lineV.push_back(ndcX(cx + R * sb, W));
lineV.push_back(ndcY(cy - R * cb, H));
// Inner point
lineV.push_back(ndcX(cx + (R-len) * sb, W));
lineV.push_back(ndcY(cy - (R-len) * cb, H));
}
makeLineVAO(bg.lineVAO, bg.lineVBO, lineV);
// ── Text geometry (degree labels every 10°) ────────────────────────────────
std::vector<float> textV;
const float textR = R * 1.07f; // label-centre radius (just outside the ring)
const float textR = R * 1.07f;
for (int b = 0; b < 360; b += 10) {
float brad = b * PI / 180.0f;
float tx = cx + textR * std::sin(brad);
@@ -396,6 +386,371 @@ static BearingGraticule buildBearingGraticule(const Layout& L, const FontAtlas&
return bg;
}
// ─── Feature 3: A scope replaceable graticule ────────────────────────────────
// One entry per selectable range. The graticule has numMajor labeled ticks
// (full-height vertical lines) and numMinorPerMajor minor ticks between each
// pair of major ticks. Label values are computed as (m * maxMiles / numMajor).
struct RangeConfig {
float maxMiles;
int numMajor;
int numMinorPerMajor;
};
static const RangeConfig RANGE_CONFIGS[4] = {
{ 2.0f, 2, 4 }, // labels: 1, 2 mi
{ 5.0f, 5, 1 }, // labels: 1,2,3,4,5 mi
{ 10.0f, 5, 1 }, // labels: 2,4,6,8,10 mi
{ 15.0f, 5, 2 }, // labels: 3,6,9,12,15 mi
};
static constexpr int RANGE_COUNT = 4;
struct AScopeGraticule {
GLuint lineVAO = 0, lineVBO = 0;
GLuint textVAO = 0, textVBO = 0;
int lineCount = 0;
int textVerts = 0;
};
// Shared shader programs for all A scope graticules (uYOffset drives animation)
struct AScopeGratProg {
GLuint line = 0;
GLuint text = 0;
};
static AScopeGratProg buildAScopeGratPrograms()
{
return {
makeProgram("shaders/ascope_graticule.vert",
"shaders/ascope_graticule.frag"),
makeProgram("shaders/ascope_graticule_text.vert",
"shaders/ascope_graticule_text.frag")
};
}
static AScopeGraticule buildAScopeGraticule(
const Layout& L, const FontAtlas& fa, const RangeConfig& rc,
float W, float H)
{
AScopeGraticule ag{};
const float asH = L.asBot - L.asTop;
const float pad = 4.0f;
const float gx0 = L.asLeft + pad; // signal area left
const float gx1 = L.asRight - pad; // signal area right
const float gy0 = L.asTop + pad; // top of signal area
const float gy1 = L.asTop + asH * 0.80f; // baseline (signal y = 0)
const float sigW = gx1 - gx0;
const float sigH = gy1 - gy0;
std::vector<float> lineV;
auto ln = [&](float x1, float y1, float x2, float y2) {
lineV.push_back(ndcX(x1,W)); lineV.push_back(ndcY(y1,H));
lineV.push_back(ndcX(x2,W)); lineV.push_back(ndcY(y2,H));
};
// Outer frame (the physical glass plate border)
ln(L.asLeft, L.asTop, L.asRight, L.asTop);
ln(L.asRight, L.asTop, L.asRight, L.asBot);
ln(L.asRight, L.asBot, L.asLeft, L.asBot);
ln(L.asLeft, L.asBot, L.asLeft, L.asTop);
// Baseline and top amplitude reference
ln(gx0, gy1, gx1, gy1);
ln(gx0, gy0, gx1, gy0);
// Horizontal amplitude guide lines at 25 %, 50 %, 75 %
for (int i = 1; i <= 3; ++i)
ln(gx0, gy0 + sigH * i * 0.25f, gx1, gy0 + sigH * i * 0.25f);
// Vertical tick marks
const float majorSpan = sigW / rc.numMajor;
const float minorSpan = majorSpan / (rc.numMinorPerMajor + 1);
const float minorTickH = sigH * 0.35f;
for (int m = 0; m < rc.numMajor; ++m) {
// Major tick (full signal height) at right edge of each interval
float xMaj = gx0 + (m + 1) * majorSpan;
ln(xMaj, gy1, xMaj, gy0);
// Minor ticks between this major and the next
float xBase = gx0 + m * majorSpan;
for (int n = 1; n <= rc.numMinorPerMajor; ++n) {
float xMin = xBase + n * minorSpan;
ln(xMin, gy1, xMin, gy1 - minorTickH);
}
}
ag.lineCount = (int)lineV.size() / 2;
makeLineVAO(ag.lineVAO, ag.lineVBO, lineV);
// Range labels at each major tick (whole-number miles, centred in label area)
std::vector<float> textV;
const float labelY = L.asTop + asH * 0.90f;
const float milesPerMajor = rc.maxMiles / rc.numMajor;
for (int m = 1; m <= rc.numMajor; ++m) {
float x = gx0 + m * majorSpan;
int labelMi = (int)std::round(m * milesPerMajor);
appendTextQuads(textV, fa, std::to_string(labelMi), x, labelY, W, H);
}
ag.textVerts = (int)textV.size() / 4;
makeTextVAO(ag.textVAO, ag.textVBO, textV);
return ag;
}
// Draw one graticule with a vertical NDC offset (positive = up on screen).
// glScissor clips to the A scope box so the slide animation looks like the
// graticule is being pulled out / pushed in through a slot at the top.
static void drawAScopeGraticule(
const AScopeGratProg& prog, const AScopeGraticule& ag,
float yOffNDC, const FontAtlas& fa, float W, float H, const Layout& L)
{
glEnable(GL_SCISSOR_TEST);
// OpenGL scissor uses window coords (y=0 at bottom of window)
glScissor((GLint) L.asLeft,
(GLint)(H - L.asBot),
(GLint)(L.asRight - L.asLeft),
(GLint)(L.asBot - L.asTop));
glUseProgram(prog.line);
glUniform3f(glGetUniformLocation(prog.line, "uColor"), INCAN_R, INCAN_G, INCAN_B);
glUniform1f(glGetUniformLocation(prog.line, "uYOffset"), yOffNDC);
glBindVertexArray(ag.lineVAO);
glDrawArrays(GL_LINES, 0, ag.lineCount);
if (ag.textVerts > 0) {
glUseProgram(prog.text);
glUniform3f(glGetUniformLocation(prog.text, "uColor"), INCAN_R, INCAN_G, INCAN_B);
glUniform1f(glGetUniformLocation(prog.text, "uYOffset"), yOffNDC);
glUniform1i(glGetUniformLocation(prog.text, "uTexture"), 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, fa.texture);
glBindVertexArray(ag.textVAO);
glDrawArrays(GL_TRIANGLES, 0, ag.textVerts);
glBindTexture(GL_TEXTURE_2D, 0);
}
glBindVertexArray(0);
glDisable(GL_SCISSOR_TEST);
}
// ─── Polar coordinate helpers (bearing ° CW from N, range fraction) ─────────
static inline float polarPx(const Layout& L, float bearDeg, float frac)
{ return L.ppiCX + frac * L.ppiR * std::sin(bearDeg * (PI/180.0f)); }
static inline float polarPy(const Layout& L, float bearDeg, float frac)
{ return L.ppiCY - frac * L.ppiR * std::cos(bearDeg * (PI/180.0f)); }
// ─── Feature 4: PPI range rings ──────────────────────────────────────────────
// Build vertex data (x,y,r,g,b = 5 floats/vertex):
// 1. Full persistence rings (dim P7 green-yellow)
// 2. Active sweep-trail arc per ring (active → persistence colour gradient)
// 3. Sweep line from centre to edge
static void buildRingVerts(std::vector<float>& v,
const Layout& L, int rangeIdx,
float sweepAngle, float W, float H)
{
const RangeConfig& rc = RANGE_CONFIGS[rangeIdx];
const int nr = rc.numMajor;
auto push = [&](float px, float py, float r, float g, float b) {
v.push_back(ndcX(px,W)); v.push_back(ndcY(py,H));
v.push_back(r); v.push_back(g); v.push_back(b);
};
// Full persistence rings (dim)
for (int ri = 1; ri <= nr; ++ri) {
float frac = (float)ri / nr;
for (int i = 0; i <= RING_SEGS; ++i) {
float a = 2.0f * PI * i / RING_SEGS;
push(L.ppiCX + frac*L.ppiR*std::cos(a),
L.ppiCY + frac*L.ppiR*std::sin(a),
P7P_R*0.45f, P7P_G*0.45f, P7P_B*0.45f);
}
}
// Sweep trail arcs (active at head → persistence at tail)
for (int ri = 1; ri <= nr; ++ri) {
float frac = (float)ri / nr;
for (int i = 0; i <= TRAIL_SEGS; ++i) {
float t = 1.0f - (float)i / TRAIL_SEGS;
float ang = sweepAngle - (float)i * TRAIL_DEG / TRAIL_SEGS;
float r = P7A_R * t + P7P_R * 0.45f * (1.0f - t);
float g2 = P7A_G * t + P7P_G * 0.45f * (1.0f - t);
float b = P7A_B * t + P7P_B * 0.45f * (1.0f - t);
push(polarPx(L,ang,frac), polarPy(L,ang,frac), r, g2, b);
}
}
// Sweep line (centre → edge)
push(L.ppiCX, L.ppiCY, P7A_R, P7A_G, P7A_B);
push(polarPx(L,sweepAngle,1.0f), polarPy(L,sweepAngle,1.0f),
P7A_R, P7A_G, P7A_B);
}
struct RingLayer {
GLuint prog = 0, vao = 0, vbo = 0;
};
static RingLayer buildRingLayer()
{
RingLayer rl{};
glGenVertexArrays(1, &rl.vao); glGenBuffers(1, &rl.vbo);
glBindVertexArray(rl.vao);
glBindBuffer(GL_ARRAY_BUFFER, rl.vbo);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5*sizeof(float), nullptr);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5*sizeof(float),
reinterpret_cast<void*>(2*sizeof(float)));
glEnableVertexAttribArray(1);
glBindVertexArray(0);
rl.prog = makeProgram("shaders/ppi_range_rings.vert",
"shaders/ppi_range_rings.frag");
return rl;
}
static void renderRingLayer(RingLayer& rl, const Layout& L,
int rangeIdx, float sweepAngle, float W, float H)
{
std::vector<float> v;
buildRingVerts(v, L, rangeIdx, sweepAngle, W, H);
glBindBuffer(GL_ARRAY_BUFFER, rl.vbo);
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)(v.size()*sizeof(float)),
v.data(), GL_DYNAMIC_DRAW);
glUseProgram(rl.prog);
glBindVertexArray(rl.vao);
const int nr = RANGE_CONFIGS[rangeIdx].numMajor;
int off = 0;
for (int ri = 0; ri < nr; ++ri) {
glDrawArrays(GL_LINE_STRIP, off, RING_SEGS+1);
off += RING_SEGS+1;
}
for (int ri = 0; ri < nr; ++ri) {
glDrawArrays(GL_LINE_STRIP, off, TRAIL_SEGS+1);
off += TRAIL_SEGS+1;
}
glDrawArrays(GL_LINES, off, 2);
glBindVertexArray(0);
}
// ─── Feature 5: Fake targets ──────────────────────────────────────────────────
struct FakeTarget {
float bearingDeg;
float rangeMiles;
float coreRadPx; // core blob radius (pixels)
float bloomRadPx; // bloom glow radius (pixels); 0 = no bloom
mutable float lastActT; // glfwGetTime() when sweep last lit this target
};
static float angDiff(float a, float b) // unsigned angular separation (°)
{
float d = std::fmod(std::fabs(a - b), 360.0f);
return d > 180.0f ? 360.0f - d : d;
}
// Build one textured quad (x,y,u,v = 4 floats/vertex) centred at screen pixel (px,py).
static void genBlob(std::vector<float>& v,
float px, float py, float radiusPx, float W, float H)
{
float x0=ndcX(px-radiusPx,W), y0=ndcY(py-radiusPx,H);
float x1=ndcX(px+radiusPx,W), y1=ndcY(py+radiusPx,H);
v.push_back(x0);v.push_back(y0);v.push_back(-1.f);v.push_back(-1.f);
v.push_back(x1);v.push_back(y0);v.push_back( 1.f);v.push_back(-1.f);
v.push_back(x1);v.push_back(y1);v.push_back( 1.f);v.push_back( 1.f);
v.push_back(x0);v.push_back(y0);v.push_back(-1.f);v.push_back(-1.f);
v.push_back(x1);v.push_back(y1);v.push_back( 1.f);v.push_back( 1.f);
v.push_back(x0);v.push_back(y1);v.push_back(-1.f);v.push_back( 1.f);
}
struct TargetLayer {
GLuint prog = 0, vao = 0, vbo = 0;
};
static TargetLayer buildTargetLayer()
{
TargetLayer tl{};
glGenVertexArrays(1, &tl.vao); glGenBuffers(1, &tl.vbo);
glBindVertexArray(tl.vao);
glBindBuffer(GL_ARRAY_BUFFER, tl.vbo);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), nullptr);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float),
reinterpret_cast<void*>(2*sizeof(float)));
glEnableVertexAttribArray(1);
glBindVertexArray(0);
tl.prog = makeProgram("shaders/ppi_targets.vert","shaders/ppi_targets.frag");
return tl;
}
static void renderTargets(TargetLayer& tl,
FakeTarget* tgts, int nTgts,
const Layout& L, float maxRangeMi,
float sweepAngle, float curTime, float W, float H)
{
static const float THRESH = 3.5f; // sweep activation threshold (°)
glUseProgram(tl.prog);
glBindVertexArray(tl.vao);
const GLint locCol = glGetUniformLocation(tl.prog, "uColor");
const GLint locFall = glGetUniformLocation(tl.prog, "uFalloff");
for (int i = 0; i < nTgts; ++i) {
FakeTarget& t = tgts[i];
if (angDiff(sweepAngle, t.bearingDeg) < THRESH)
t.lastActT = curTime;
float rangeFrac = t.rangeMiles / maxRangeMi;
if (rangeFrac > 1.0f) continue;
float px = polarPx(L, t.bearingDeg, rangeFrac);
float py = polarPy(L, t.bearingDeg, rangeFrac);
float dt = curTime - t.lastActT;
float fade = (dt < 0.0f) ? 0.0f : std::max(0.0f, 1.0f - dt/TARG_PERSIST);
bool active = angDiff(sweepAngle, t.bearingDeg) < THRESH;
float bright = active ? 1.0f : fade;
if (bright < 0.01f) continue;
float cr, cg, cb;
if (active) { cr=P7A_R; cg=P7A_G; cb=P7A_B; }
else { cr=P7P_R; cg=P7P_G; cb=P7P_B; }
// Core blob
{
std::vector<float> bv;
genBlob(bv, px, py, t.coreRadPx, W, H);
glBindBuffer(GL_ARRAY_BUFFER, tl.vbo);
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)(bv.size()*sizeof(float)),
bv.data(), GL_DYNAMIC_DRAW);
glUniform3f(locCol, cr*bright, cg*bright, cb*bright);
glUniform1f(locFall, 4.5f);
glDrawArrays(GL_TRIANGLES, 0, 6);
}
// Bloom glow (large targets only)
if (t.bloomRadPx > 0.0f && bright > 0.05f) {
std::vector<float> bv;
genBlob(bv, px, py, t.bloomRadPx, W, H);
glBindBuffer(GL_ARRAY_BUFFER, tl.vbo);
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)(bv.size()*sizeof(float)),
bv.data(), GL_DYNAMIC_DRAW);
glUniform3f(locCol, cr*bright*0.35f, cg*bright*0.35f, cb*bright*0.35f);
glUniform1f(locFall, 0.8f);
glDrawArrays(GL_TRIANGLES, 0, 6);
}
}
glBindVertexArray(0);
}
// ─── Key callback ────────────────────────────────────────────────────────────
static void onKey(GLFWwindow* win, int key, int /*scan*/, int action, int /*mods*/)
@@ -419,7 +774,7 @@ int main()
GLFWwindow* win = glfwCreateWindow(
mode->width, mode->height,
"Radar Test — Features 1 & 2",
"Radar Test — Features 15",
nullptr, nullptr);
if (!win) { std::cerr << "Window create failed\n"; glfwTerminate(); return 1; }
@@ -436,7 +791,6 @@ int main()
const float W = static_cast<float>(fbW);
const float H = static_cast<float>(fbH);
// Convert 0.5-inch margin to pixels using monitor physical size
int mmW, mmH;
glfwGetMonitorPhysicalSize(mon, &mmW, &mmH);
const float dpiX = static_cast<float>(mode->width) / (static_cast<float>(mmW) / 25.4f);
@@ -444,7 +798,7 @@ int main()
const Layout layout = computeLayout(W, H, margin);
// Build FreeType font atlas (digits only, ~1.8 % of screen height)
// Font atlas (digits only, ~1.8 % of screen height)
FontAtlas fa{};
const std::string fontPath =
"/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf";
@@ -459,15 +813,65 @@ int main()
// Feature 2 — PPI bearing graticule
BearingGraticule bg = buildBearingGraticule(layout, fa, W, H);
// Feature 3 — A scope replaceable graticules
AScopeGratProg agProg = buildAScopeGratPrograms();
AScopeGraticule graticules[RANGE_COUNT];
for (int i = 0; i < RANGE_COUNT; ++i)
graticules[i] = buildAScopeGraticule(layout, fa, RANGE_CONFIGS[i], W, H);
// Feature 4 — PPI range rings
RingLayer rl = buildRingLayer();
// Feature 5 — Fake targets (one per quadrant: NE small, SE large, SW/NW very large)
const float pR = layout.ppiR;
FakeTarget targets[4] = {
{ 55.0f, 1.3f, pR*0.010f, 0.0f, -999.0f }, // NE small (kayak)
{ 135.0f, 3.8f, pR*0.022f, pR*0.048f, -999.0f }, // SE large, blooming
{ 215.0f, 2.2f, pR*0.032f, pR*0.075f, -999.0f }, // SW very large
{ 310.0f, 9.0f, pR*0.032f, pR*0.075f, -999.0f }, // NW very large
};
TargetLayer tl = buildTargetLayer();
float sweepAngle = 0.0f; // degrees, 0 = north, clockwise
// NDC height of the A scope box — used to compute slide distance
const float scopeNDCH = (layout.asBot - layout.asTop) * 2.0f / H;
// Animation state
int curRange = 0;
int nextRange = 1;
bool sliding = false;
float holdTimer = 0.0f;
float slideTimer = 0.0f;
float prevTime = static_cast<float>(glfwGetTime());
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
const auto t0 = std::chrono::steady_clock::now();
while (!glfwWindowShouldClose(win)) {
const float elapsed = std::chrono::duration<float>(
std::chrono::steady_clock::now() - t0).count();
if (elapsed >= 10.0f) break;
const float now = static_cast<float>(glfwGetTime());
const float dt = now - prevTime;
prevTime = now;
// ── Advance sweep (Features 4 & 5) ───────────────────────────────────
sweepAngle = std::fmod(sweepAngle + SWEEP_DEG_PS * dt, 360.0f);
// ── Advance Feature 3 animation ───────────────────────────────────────
if (!sliding) {
holdTimer += dt;
if (holdTimer >= HOLD_SEC) {
holdTimer = 0.0f;
slideTimer = 0.0f;
nextRange = (curRange + 1) % RANGE_COUNT;
sliding = true;
}
} else {
slideTimer += dt;
if (slideTimer >= SLIDE_SEC) {
curRange = nextRange;
sliding = false;
}
}
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
@@ -477,11 +881,9 @@ int main()
const GLint sbCol = glGetUniformLocation(sb.prog, "uColor");
glBindVertexArray(sb.vao);
// PPI scope boundary — dim blue-white ring
glUniform3f(sbCol, 0.25f, 0.35f, 0.55f);
glDrawArrays(GL_LINE_STRIP, sb.ppiStart, sb.ppiCount);
// A scope boundary — P1 green
glUniform3f(sbCol, P1_R, P1_G, P1_B);
glDrawArrays(GL_LINES, sb.asStart, sb.asCount);
@@ -496,7 +898,6 @@ int main()
glDrawArrays(GL_LINES, bg.tickStart, bg.tickCount);
glBindVertexArray(0);
// ── Feature 2: degree labels ──────────────────────────────────────────
glUseProgram(bg.textProg);
glUniform3f(glGetUniformLocation(bg.textProg, "uColor"),
INCAN_R, INCAN_G, INCAN_B);
@@ -508,6 +909,28 @@ int main()
glBindVertexArray(0);
glBindTexture(GL_TEXTURE_2D, 0);
// ── Feature 3: A scope graticule (with slide animation) ───────────────
if (!sliding) {
drawAScopeGraticule(agProg, graticules[curRange],
0.0f, fa, W, H, layout);
} else {
float t = std::min(slideTimer / SLIDE_SEC, 1.0f);
// Old graticule slides UP (+NDC Y = up) and out through the top slot
drawAScopeGraticule(agProg, graticules[curRange],
t * scopeNDCH, fa, W, H, layout);
// New graticule descends from above into position
drawAScopeGraticule(agProg, graticules[nextRange],
(1.0f - t) * scopeNDCH, fa, W, H, layout);
}
// ── Feature 4: PPI range rings ────────────────────────────────────────
renderRingLayer(rl, layout, curRange, sweepAngle, W, H);
// ── Feature 5: Active targets + persistence ───────────────────────────
renderTargets(tl, targets, 4, layout,
RANGE_CONFIGS[curRange].maxMiles,
sweepAngle, now, W, H);
glfwSwapBuffers(win);
glfwPollEvents();
}
@@ -521,6 +944,19 @@ int main()
glDeleteProgram(bg.lineProg);
glDeleteProgram(bg.textProg);
for (int i = 0; i < RANGE_COUNT; ++i) {
glDeleteVertexArrays(1, &graticules[i].lineVAO);
glDeleteBuffers(1, &graticules[i].lineVBO);
glDeleteVertexArrays(1, &graticules[i].textVAO);
glDeleteBuffers(1, &graticules[i].textVBO);
}
glDeleteProgram(agProg.line);
glDeleteProgram(agProg.text);
glDeleteVertexArrays(1, &rl.vao); glDeleteBuffers(1, &rl.vbo);
glDeleteProgram(rl.prog);
glDeleteVertexArrays(1, &tl.vao); glDeleteBuffers(1, &tl.vbo);
glDeleteProgram(tl.prog);
glfwDestroyWindow(win);
glfwTerminate();
return 0;