Add shoreline facility

This commit is contained in:
2026-04-07 21:26:37 -07:00
parent 7db6259b06
commit 5a7350dbae
20 changed files with 2022 additions and 240 deletions

View File

@@ -18,9 +18,9 @@ needs to be provided to exit the program and go back to shell.
We have to simulate everything as we are not allowed to have an actual radar at
our location because we are not on the water.
The proposed location of the radar antenna is at the dock of the Community
boating center in Bellingham, Washington.
Location is 48.72° N Latitude and -122.51° W Longitude
The proposed location of the radar antenna is in the middle of Bellingham
Bay on a 100 foot platform.
Location is 48.74361448950435 latitude, -122.56466911663048 longitude
Zero degrees on Radar Scope is True North.

View File

@@ -7,6 +7,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
find_package(Freetype REQUIRED)
find_package(GDAL REQUIRED)
add_executable(radar_simulation
src/main.cpp
@@ -16,12 +17,18 @@ add_executable(radar_simulation
target_include_directories(radar_simulation PRIVATE
${CMAKE_SOURCE_DIR}/include
${FREETYPE_INCLUDE_DIRS}
${GDAL_INCLUDE_DIRS}
)
target_compile_definitions(radar_simulation PRIVATE
MAP_DIR="${CMAKE_SOURCE_DIR}/map"
)
target_link_libraries(radar_simulation PRIVATE
OpenGL::GL
glfw
Freetype::Freetype
${GDAL_LIBRARIES}
)
add_custom_target(copy_shaders ALL

View File

@@ -227,6 +227,15 @@ FREETYPE_LIBRARY_DEBUG:FILEPATH=FREETYPE_LIBRARY_DEBUG-NOTFOUND
//Path to a library.
FREETYPE_LIBRARY_RELEASE:FILEPATH=/usr/lib/x86_64-linux-gnu/libfreetype.so
//Path to the gdal-config tool
GDAL_CONFIG:FILEPATH=/usr/bin/gdal-config
//Path to the GDAL include directory
GDAL_INCLUDE_DIR:PATH=/usr/include/gdal
//Path to the GDAL library
GDAL_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libgdal.so
//Path to a file.
OPENGL_EGL_INCLUDE_DIR:PATH=/usr/include
@@ -434,6 +443,8 @@ CMAKE_UNAME:INTERNAL=/usr/bin/uname
CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
//Details about finding Freetype
FIND_PACKAGE_MESSAGE_DETAILS_Freetype:INTERNAL=[/usr/lib/x86_64-linux-gnu/libfreetype.so][/usr/include/freetype2][v2.13.3()]
//Details about finding GDAL
FIND_PACKAGE_MESSAGE_DETAILS_GDAL:INTERNAL=[/usr/lib/x86_64-linux-gnu/libgdal.so][/usr/include/gdal][v3.10.3()]
//Details about finding OpenGL
FIND_PACKAGE_MESSAGE_DETAILS_OpenGL:INTERNAL=[/usr/lib/x86_64-linux-gnu/libOpenGL.so][/usr/lib/x86_64-linux-gnu/libGLX.so][/usr/include][c ][v()]
//Details about finding Threads
@@ -446,6 +457,12 @@ FREETYPE_INCLUDE_DIR_ft2build-ADVANCED:INTERNAL=1
FREETYPE_LIBRARY_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: FREETYPE_LIBRARY_RELEASE
FREETYPE_LIBRARY_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: GDAL_CONFIG
GDAL_CONFIG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: GDAL_INCLUDE_DIR
GDAL_INCLUDE_DIR-ADVANCED:INTERNAL=1
//ADVANCED property for variable: GDAL_LIBRARY
GDAL_LIBRARY-ADVANCED:INTERNAL=1
//ADVANCED property for variable: OPENGL_EGL_INCLUDE_DIR
OPENGL_EGL_INCLUDE_DIR-ADVANCED:INTERNAL=1
//ADVANCED property for variable: OPENGL_GLES2_INCLUDE_DIR

View File

@@ -32,6 +32,7 @@ set(CMAKE_MAKEFILE_DEPENDS
"/usr/share/cmake-3.31/Modules/Compiler/GNU-CXX.cmake"
"/usr/share/cmake-3.31/Modules/Compiler/GNU.cmake"
"/usr/share/cmake-3.31/Modules/FindFreetype.cmake"
"/usr/share/cmake-3.31/Modules/FindGDAL.cmake"
"/usr/share/cmake-3.31/Modules/FindOpenGL.cmake"
"/usr/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake"
"/usr/share/cmake-3.31/Modules/FindPackageMessage.cmake"

View File

@@ -114,6 +114,7 @@ radar_simulation: CMakeFiles/radar_simulation.dir/build.make
radar_simulation: CMakeFiles/radar_simulation.dir/compiler_depend.ts
radar_simulation: /usr/lib/x86_64-linux-gnu/libglfw.so.3.4
radar_simulation: /usr/lib/x86_64-linux-gnu/libfreetype.so
radar_simulation: /usr/lib/x86_64-linux-gnu/libgdal.so
radar_simulation: /usr/lib/x86_64-linux-gnu/libGLX.so
radar_simulation: /usr/lib/x86_64-linux-gnu/libOpenGL.so
radar_simulation: CMakeFiles/radar_simulation.dir/link.txt

View File

@@ -93,11 +93,16 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/asm-generic/posix_types.h
/usr/include/asm-generic/types.h
/usr/include/c++/15/algorithm
/usr/include/c++/15/backward/auto_ptr.h
/usr/include/c++/15/backward/binders.h
/usr/include/c++/15/bit
/usr/include/c++/15/bits/algorithmfwd.h
/usr/include/c++/15/bits/align.h
/usr/include/c++/15/bits/alloc_traits.h
/usr/include/c++/15/bits/allocated_ptr.h
/usr/include/c++/15/bits/allocator.h
/usr/include/c++/15/bits/atomic_base.h
/usr/include/c++/15/bits/atomic_lockfree_defines.h
/usr/include/c++/15/bits/basic_ios.h
/usr/include/c++/15/bits/basic_ios.tcc
/usr/include/c++/15/bits/basic_string.h
@@ -109,6 +114,8 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/bits/cpp_type_traits.h
/usr/include/c++/15/bits/cxxabi_forced.h
/usr/include/c++/15/bits/cxxabi_init_exception.h
/usr/include/c++/15/bits/deque.tcc
/usr/include/c++/15/bits/erase_if.h
/usr/include/c++/15/bits/exception.h
/usr/include/c++/15/bits/exception_defines.h
/usr/include/c++/15/bits/exception_ptr.h
@@ -129,6 +136,7 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/bits/move.h
/usr/include/c++/15/bits/nested_exception.h
/usr/include/c++/15/bits/new_allocator.h
/usr/include/c++/15/bits/node_handle.h
/usr/include/c++/15/bits/ostream.h
/usr/include/c++/15/bits/ostream.tcc
/usr/include/c++/15/bits/ostream_insert.h
@@ -138,6 +146,9 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/bits/range_access.h
/usr/include/c++/15/bits/refwrap.h
/usr/include/c++/15/bits/requires_hosted.h
/usr/include/c++/15/bits/shared_ptr.h
/usr/include/c++/15/bits/shared_ptr_atomic.h
/usr/include/c++/15/bits/shared_ptr_base.h
/usr/include/c++/15/bits/specfun.h
/usr/include/c++/15/bits/sstream.tcc
/usr/include/c++/15/bits/std_abs.h
@@ -145,20 +156,29 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/bits/stl_algobase.h
/usr/include/c++/15/bits/stl_bvector.h
/usr/include/c++/15/bits/stl_construct.h
/usr/include/c++/15/bits/stl_deque.h
/usr/include/c++/15/bits/stl_function.h
/usr/include/c++/15/bits/stl_heap.h
/usr/include/c++/15/bits/stl_iterator.h
/usr/include/c++/15/bits/stl_iterator_base_funcs.h
/usr/include/c++/15/bits/stl_iterator_base_types.h
/usr/include/c++/15/bits/stl_map.h
/usr/include/c++/15/bits/stl_multimap.h
/usr/include/c++/15/bits/stl_multiset.h
/usr/include/c++/15/bits/stl_pair.h
/usr/include/c++/15/bits/stl_raw_storage_iter.h
/usr/include/c++/15/bits/stl_set.h
/usr/include/c++/15/bits/stl_tempbuf.h
/usr/include/c++/15/bits/stl_tree.h
/usr/include/c++/15/bits/stl_uninitialized.h
/usr/include/c++/15/bits/stl_vector.h
/usr/include/c++/15/bits/stream_iterator.h
/usr/include/c++/15/bits/streambuf.tcc
/usr/include/c++/15/bits/streambuf_iterator.h
/usr/include/c++/15/bits/string_view.tcc
/usr/include/c++/15/bits/stringfwd.h
/usr/include/c++/15/bits/uniform_int_dist.h
/usr/include/c++/15/bits/unique_ptr.h
/usr/include/c++/15/bits/uses_allocator.h
/usr/include/c++/15/bits/uses_allocator_args.h
/usr/include/c++/15/bits/utility.h
@@ -166,10 +186,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/climits
/usr/include/c++/15/clocale
/usr/include/c++/15/cmath
/usr/include/c++/15/complex
/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
@@ -177,9 +200,12 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/cwctype
/usr/include/c++/15/debug/assertions.h
/usr/include/c++/15/debug/debug.h
/usr/include/c++/15/deque
/usr/include/c++/15/exception
/usr/include/c++/15/ext/aligned_buffer.h
/usr/include/c++/15/ext/alloc_traits.h
/usr/include/c++/15/ext/atomicity.h
/usr/include/c++/15/ext/concurrence.h
/usr/include/c++/15/ext/numeric_traits.h
/usr/include/c++/15/ext/string_conversions.h
/usr/include/c++/15/ext/type_traits.h
@@ -189,12 +215,18 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/c++/15/iosfwd
/usr/include/c++/15/iostream
/usr/include/c++/15/istream
/usr/include/c++/15/iterator
/usr/include/c++/15/limits
/usr/include/c++/15/map
/usr/include/c++/15/math.h
/usr/include/c++/15/memory
/usr/include/c++/15/new
/usr/include/c++/15/ostream
/usr/include/c++/15/pstl/execution_defs.h
/usr/include/c++/15/pstl/glue_algorithm_defs.h
/usr/include/c++/15/pstl/glue_memory_defs.h
/usr/include/c++/15/pstl/pstl_config.h
/usr/include/c++/15/set
/usr/include/c++/15/sstream
/usr/include/c++/15/stdexcept
/usr/include/c++/15/stdlib.h
@@ -238,11 +270,39 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/freetype2/freetype/ftsystem.h
/usr/include/freetype2/freetype/fttypes.h
/usr/include/freetype2/ft2build.h
/usr/include/gdal/cpl_atomic_ops.h
/usr/include/gdal/cpl_config.h
/usr/include/gdal/cpl_conv.h
/usr/include/gdal/cpl_error.h
/usr/include/gdal/cpl_json.h
/usr/include/gdal/cpl_minixml.h
/usr/include/gdal/cpl_multiproc.h
/usr/include/gdal/cpl_port.h
/usr/include/gdal/cpl_progress.h
/usr/include/gdal/cpl_string.h
/usr/include/gdal/cpl_virtualmem.h
/usr/include/gdal/cpl_vsi.h
/usr/include/gdal/gdal.h
/usr/include/gdal/gdal_frmts.h
/usr/include/gdal/gdal_priv.h
/usr/include/gdal/gdal_version.h
/usr/include/gdal/gdalsubdatasetinfo.h
/usr/include/gdal/ogr_api.h
/usr/include/gdal/ogr_core.h
/usr/include/gdal/ogr_feature.h
/usr/include/gdal/ogr_featurestyle.h
/usr/include/gdal/ogr_geomcoordinateprecision.h
/usr/include/gdal/ogr_geometry.h
/usr/include/gdal/ogr_spatialref.h
/usr/include/gdal/ogr_srs_api.h
/usr/include/gdal/ogrsf_frmts.h
/usr/include/limits.h
/usr/include/linux/close_range.h
/usr/include/linux/errno.h
/usr/include/linux/limits.h
/usr/include/linux/posix_types.h
/usr/include/linux/sched/types.h
/usr/include/linux/stat.h
/usr/include/linux/stddef.h
/usr/include/linux/types.h
/usr/include/locale.h
@@ -257,6 +317,7 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/string.h
/usr/include/strings.h
/usr/include/time.h
/usr/include/unistd.h
/usr/include/wchar.h
/usr/include/wctype.h
/usr/include/x86_64-linux-gnu/asm/bitsperlong.h
@@ -266,15 +327,19 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/x86_64-linux-gnu/asm/types.h
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h
/usr/include/x86_64-linux-gnu/bits/byteswap.h
/usr/include/x86_64-linux-gnu/bits/confname.h
/usr/include/x86_64-linux-gnu/bits/cpu-set.h
/usr/include/x86_64-linux-gnu/bits/endian.h
/usr/include/x86_64-linux-gnu/bits/endianness.h
/usr/include/x86_64-linux-gnu/bits/environments.h
/usr/include/x86_64-linux-gnu/bits/errno.h
/usr/include/x86_64-linux-gnu/bits/floatn-common.h
/usr/include/x86_64-linux-gnu/bits/floatn.h
/usr/include/x86_64-linux-gnu/bits/flt-eval-method.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/getopt_core.h
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h
/usr/include/x86_64-linux-gnu/bits/iscanonical.h
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h
/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h
@@ -288,6 +353,7 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/x86_64-linux-gnu/bits/mathcalls.h
/usr/include/x86_64-linux-gnu/bits/posix1_lim.h
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h
/usr/include/x86_64-linux-gnu/bits/posix_opt.h
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h
@@ -297,6 +363,9 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/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/stat.h
/usr/include/x86_64-linux-gnu/bits/statx-generic.h
/usr/include/x86_64-linux-gnu/bits/statx.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
@@ -311,6 +380,7 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/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/struct_stat.h
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h
/usr/include/x86_64-linux-gnu/bits/time.h
/usr/include/x86_64-linux-gnu/bits/time64.h
@@ -335,6 +405,8 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h
/usr/include/x86_64-linux-gnu/bits/types/struct_statx.h
/usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h
@@ -344,6 +416,9 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/x86_64-linux-gnu/bits/typesizes.h
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h
/usr/include/x86_64-linux-gnu/bits/uio_lim.h
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h
/usr/include/x86_64-linux-gnu/bits/unistd.h
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h
/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
@@ -370,22 +445,151 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o
/usr/include/x86_64-linux-gnu/sys/cdefs.h
/usr/include/x86_64-linux-gnu/sys/select.h
/usr/include/x86_64-linux-gnu/sys/single_threaded.h
/usr/include/x86_64-linux-gnu/sys/stat.h
/usr/include/x86_64-linux-gnu/sys/types.h
/usr/lib/gcc/x86_64-linux-gnu/15/include/limits.h
/usr/lib/gcc/x86_64-linux-gnu/15/include/stdarg.h
/usr/lib/gcc/x86_64-linux-gnu/15/include/stdbool.h
/usr/lib/gcc/x86_64-linux-gnu/15/include/stddef.h
/usr/lib/gcc/x86_64-linux-gnu/15/include/stdint.h
/usr/lib/gcc/x86_64-linux-gnu/15/include/syslimits.h
radar_simulation
/lib/libarmadillo.so.14
/lib/x86_64-linux-gnu/libLerc.so.4
/lib/x86_64-linux-gnu/libSvtAv1Enc.so.2
/lib/x86_64-linux-gnu/libabsl_base.so.20240722
/lib/x86_64-linux-gnu/libabsl_debugging_internal.so.20240722
/lib/x86_64-linux-gnu/libabsl_decode_rust_punycode.so.20240722
/lib/x86_64-linux-gnu/libabsl_demangle_internal.so.20240722
/lib/x86_64-linux-gnu/libabsl_demangle_rust.so.20240722
/lib/x86_64-linux-gnu/libabsl_graphcycles_internal.so.20240722
/lib/x86_64-linux-gnu/libabsl_kernel_timeout_internal.so.20240722
/lib/x86_64-linux-gnu/libabsl_malloc_internal.so.20240722
/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.so.20240722
/lib/x86_64-linux-gnu/libabsl_spinlock_wait.so.20240722
/lib/x86_64-linux-gnu/libabsl_stacktrace.so.20240722
/lib/x86_64-linux-gnu/libabsl_string_view.so.20240722
/lib/x86_64-linux-gnu/libabsl_strings.so.20240722
/lib/x86_64-linux-gnu/libabsl_strings_internal.so.20240722
/lib/x86_64-linux-gnu/libabsl_symbolize.so.20240722
/lib/x86_64-linux-gnu/libabsl_synchronization.so.20240722
/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722
/lib/x86_64-linux-gnu/libabsl_time.so.20240722
/lib/x86_64-linux-gnu/libabsl_time_zone.so.20240722
/lib/x86_64-linux-gnu/libabsl_utf8_for_code_point.so.20240722
/lib/x86_64-linux-gnu/libaec.so.0
/lib/x86_64-linux-gnu/libaom.so.3
/lib/x86_64-linux-gnu/libarpack.so.2
/lib/x86_64-linux-gnu/libassuan.so.9
/lib/x86_64-linux-gnu/libavif.so.16
/lib/x86_64-linux-gnu/libblas.so.3
/lib/x86_64-linux-gnu/libblosc.so.1
/lib/x86_64-linux-gnu/libbrotlicommon.so.1
/lib/x86_64-linux-gnu/libbrotlidec.so.1
/lib/x86_64-linux-gnu/libbz2.so.1.0
/lib/x86_64-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libcfitsio.so.10
/lib/x86_64-linux-gnu/libcom_err.so.2
/lib/x86_64-linux-gnu/libcrypto.so.3
/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
/lib/x86_64-linux-gnu/libcurl.so.4
/lib/x86_64-linux-gnu/libdav1d.so.7
/lib/x86_64-linux-gnu/libdeflate.so.0
/lib/x86_64-linux-gnu/libdfalt.so.0
/lib/x86_64-linux-gnu/libexpat.so.1
/lib/x86_64-linux-gnu/libffi.so.8
/lib/x86_64-linux-gnu/libfontconfig.so.1
/lib/x86_64-linux-gnu/libfreexl.so.1
/lib/x86_64-linux-gnu/libfyba.so.0
/lib/x86_64-linux-gnu/libfygm.so.0
/lib/x86_64-linux-gnu/libfyut.so.0
/lib/x86_64-linux-gnu/libgav1.so.1
/lib/x86_64-linux-gnu/libgeos.so.3.13.1
/lib/x86_64-linux-gnu/libgeos_c.so.1
/lib/x86_64-linux-gnu/libgeotiff.so.5
/lib/x86_64-linux-gnu/libgfortran.so.5
/lib/x86_64-linux-gnu/libgif.so.7
/lib/x86_64-linux-gnu/libgmp.so.10
/lib/x86_64-linux-gnu/libgnutls.so.30
/lib/x86_64-linux-gnu/libgpg-error.so.0
/lib/x86_64-linux-gnu/libgpgme.so.11
/lib/x86_64-linux-gnu/libgpgmepp.so.6
/lib/x86_64-linux-gnu/libgssapi_krb5.so.2
/lib/x86_64-linux-gnu/libhdf5_serial.so.310
/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.310
/lib/x86_64-linux-gnu/libheif.so.1
/lib/x86_64-linux-gnu/libhogweed.so.6
/lib/x86_64-linux-gnu/libicudata.so.76
/lib/x86_64-linux-gnu/libicuuc.so.76
/lib/x86_64-linux-gnu/libidn2.so.0
/lib/x86_64-linux-gnu/libjbig.so.0
/lib/x86_64-linux-gnu/libjpeg.so.8
/lib/x86_64-linux-gnu/libjson-c.so.5
/lib/x86_64-linux-gnu/libk5crypto.so.3
/lib/x86_64-linux-gnu/libkeyutils.so.1
/lib/x86_64-linux-gnu/libkmlbase.so.1
/lib/x86_64-linux-gnu/libkmldom.so.1
/lib/x86_64-linux-gnu/libkmlengine.so.1
/lib/x86_64-linux-gnu/libkrb5.so.3
/lib/x86_64-linux-gnu/libkrb5support.so.0
/lib/x86_64-linux-gnu/liblapack.so.3
/lib/x86_64-linux-gnu/liblber.so.2
/lib/x86_64-linux-gnu/liblcms2.so.2
/lib/x86_64-linux-gnu/libldap.so.2
/lib/x86_64-linux-gnu/libltdl.so.7
/lib/x86_64-linux-gnu/liblz4.so.1
/lib/x86_64-linux-gnu/liblzma.so.5
/lib/x86_64-linux-gnu/libm.so.6
/lib/x86_64-linux-gnu/libmfhdfalt.so.0
/lib/x86_64-linux-gnu/libminizip.so.1
/lib/x86_64-linux-gnu/libmvec.so.1
/lib/x86_64-linux-gnu/libmysqlclient.so.24
/lib/x86_64-linux-gnu/libnetcdf.so.22
/lib/x86_64-linux-gnu/libnettle.so.8
/lib/x86_64-linux-gnu/libnghttp2.so.14
/lib/x86_64-linux-gnu/libnspr4.so
/lib/x86_64-linux-gnu/libnss3.so
/lib/x86_64-linux-gnu/libnssutil3.so
/lib/x86_64-linux-gnu/libodbc.so.2
/lib/x86_64-linux-gnu/libodbcinst.so.2
/lib/x86_64-linux-gnu/libogdi.so.4.1
/lib/x86_64-linux-gnu/libopenjp2.so.7
/lib/x86_64-linux-gnu/libp11-kit.so.0
/lib/x86_64-linux-gnu/libpcre2-8.so.0
/lib/x86_64-linux-gnu/libplc4.so
/lib/x86_64-linux-gnu/libplds4.so
/lib/x86_64-linux-gnu/libpng16.so.16
/lib/x86_64-linux-gnu/libpoppler.so.147
/lib/x86_64-linux-gnu/libpq.so.5
/lib/x86_64-linux-gnu/libproj.so.25
/lib/x86_64-linux-gnu/libpsl.so.5
/lib/x86_64-linux-gnu/libqhull_r.so.8.0
/lib/x86_64-linux-gnu/librav1e.so.0.7
/lib/x86_64-linux-gnu/libresolv.so.2
/lib/x86_64-linux-gnu/librtmp.so.1
/lib/x86_64-linux-gnu/librttopo.so.1
/lib/x86_64-linux-gnu/libsasl2.so.2
/lib/x86_64-linux-gnu/libsharpyuv.so.0
/lib/x86_64-linux-gnu/libsmime3.so
/lib/x86_64-linux-gnu/libsnappy.so.1
/lib/x86_64-linux-gnu/libspatialite.so.8
/lib/x86_64-linux-gnu/libsqlite3.so.0
/lib/x86_64-linux-gnu/libssh2.so.1
/lib/x86_64-linux-gnu/libssl.so.3
/lib/x86_64-linux-gnu/libsz.so.2
/lib/x86_64-linux-gnu/libtasn1.so.6
/lib/x86_64-linux-gnu/libtiff.so.6
/lib/x86_64-linux-gnu/libtirpc.so.3
/lib/x86_64-linux-gnu/libunistring.so.5
/lib/x86_64-linux-gnu/liburiparser.so.1
/lib/x86_64-linux-gnu/libwebp.so.7
/lib/x86_64-linux-gnu/libxerces-c-3.2.so
/lib/x86_64-linux-gnu/libxml2.so.16
/lib/x86_64-linux-gnu/libxxhash.so.0
/lib/x86_64-linux-gnu/libyuv.so.0
/lib/x86_64-linux-gnu/libz.so.1
/lib/x86_64-linux-gnu/libzstd.so.1
/lib64/ld-linux-x86-64.so.2
/usr/lib/x86_64-linux-gnu/Scrt1.o
/usr/lib/x86_64-linux-gnu/crti.o
@@ -400,8 +604,10 @@ radar_simulation
/usr/lib/gcc/x86_64-linux-gnu/15/libstdc++.so
/usr/lib/x86_64-linux-gnu/libGLX.so
/usr/lib/x86_64-linux-gnu/libOpenGL.so
/usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722
/usr/lib/x86_64-linux-gnu/libc_nonshared.a
/usr/lib/x86_64-linux-gnu/libfreetype.so
/usr/lib/x86_64-linux-gnu/libgdal.so
/usr/lib/x86_64-linux-gnu/libglfw.so.3.4
/home/maallyn/radar-simulation/build/CMakeFiles/radar_simulation.dir/glad/src/glad.c.o
/home/maallyn/radar-simulation/build/CMakeFiles/radar_simulation.dir/src/main.cpp.o

File diff suppressed because it is too large Load Diff

View File

@@ -3,15 +3,15 @@
# compile C with /usr/bin/cc
# compile CXX with /usr/bin/c++
C_DEFINES =
C_DEFINES = -DMAP_DIR=\"/home/maallyn/radar-simulation/map\"
C_INCLUDES = -I/home/maallyn/radar-simulation/include -isystem /usr/include/freetype2
C_INCLUDES = -I/home/maallyn/radar-simulation/include -I/usr/include/gdal -isystem /usr/include/freetype2
C_FLAGS = -O3 -DNDEBUG
CXX_DEFINES =
CXX_DEFINES = -DMAP_DIR=\"/home/maallyn/radar-simulation/map\"
CXX_INCLUDES = -I/home/maallyn/radar-simulation/include -isystem /usr/include/freetype2
CXX_INCLUDES = -I/home/maallyn/radar-simulation/include -I/usr/include/gdal -isystem /usr/include/freetype2
CXX_FLAGS = -O3 -DNDEBUG -std=gnu++17

View File

@@ -6,6 +6,7 @@ radar_simulation: \
CMakeFiles/radar_simulation.dir/glad/src/glad.c.o \
/usr/lib/x86_64-linux-gnu/libglfw.so.3.4 \
/usr/lib/x86_64-linux-gnu/libfreetype.so \
/usr/lib/x86_64-linux-gnu/libgdal.so \
/usr/lib/x86_64-linux-gnu/libGLX.so \
/usr/lib/x86_64-linux-gnu/libOpenGL.so \
/usr/lib/gcc/x86_64-linux-gnu/15/libstdc++.so \
@@ -38,8 +39,141 @@ radar_simulation: \
/lib/x86_64-linux-gnu/libbz2.so.1.0 \
/lib/x86_64-linux-gnu/libpng16.so.16 \
/lib/x86_64-linux-gnu/libbrotlidec.so.1 \
/lib/x86_64-linux-gnu/libcurl-gnutls.so.4 \
/lib/x86_64-linux-gnu/libodbc.so.2 \
/lib/x86_64-linux-gnu/libodbcinst.so.2 \
/lib/x86_64-linux-gnu/libxml2.so.16 \
/lib/x86_64-linux-gnu/libcrypto.so.3 \
/lib/x86_64-linux-gnu/liblzma.so.5 \
/lib/x86_64-linux-gnu/libdeflate.so.0 \
/lib/x86_64-linux-gnu/liblz4.so.1 \
/lib/x86_64-linux-gnu/libblosc.so.1 \
/lib/libarmadillo.so.14 \
/lib/x86_64-linux-gnu/libqhull_r.so.8.0 \
/lib/x86_64-linux-gnu/libxerces-c-3.2.so \
/lib/x86_64-linux-gnu/libjpeg.so.8 \
/lib/x86_64-linux-gnu/libtiff.so.6 \
/lib/x86_64-linux-gnu/libgeotiff.so.5 \
/lib/x86_64-linux-gnu/libavif.so.16 \
/lib/x86_64-linux-gnu/libheif.so.1 \
/lib/x86_64-linux-gnu/libzstd.so.1 \
/lib/x86_64-linux-gnu/libaec.so.0 \
/lib/x86_64-linux-gnu/libpoppler.so.147 \
/lib/x86_64-linux-gnu/libgif.so.7 \
/lib/x86_64-linux-gnu/libnetcdf.so.22 \
/lib/x86_64-linux-gnu/libcfitsio.so.10 \
/lib/x86_64-linux-gnu/libhdf5_serial.so.310 \
/lib/x86_64-linux-gnu/libwebp.so.7 \
/lib/x86_64-linux-gnu/libsqlite3.so.0 \
/lib/x86_64-linux-gnu/libpq.so.5 \
/lib/x86_64-linux-gnu/libopenjp2.so.7 \
/lib/x86_64-linux-gnu/libkmlbase.so.1 \
/lib/x86_64-linux-gnu/libkmldom.so.1 \
/lib/x86_64-linux-gnu/libkmlengine.so.1 \
/lib/x86_64-linux-gnu/libfyba.so.0 \
/lib/x86_64-linux-gnu/libpcre2-8.so.0 \
/lib/x86_64-linux-gnu/libspatialite.so.8 \
/lib/x86_64-linux-gnu/libmysqlclient.so.24 \
/lib/x86_64-linux-gnu/libfreexl.so.1 \
/lib/x86_64-linux-gnu/libogdi.so.4.1 \
/lib/x86_64-linux-gnu/libexpat.so.1 \
/lib/x86_64-linux-gnu/libgeos_c.so.1 \
/lib/x86_64-linux-gnu/libproj.so.25 \
/lib/x86_64-linux-gnu/libjson-c.so.5 \
/lib/x86_64-linux-gnu/libdfalt.so.0 \
/lib/x86_64-linux-gnu/libmfhdfalt.so.0 \
/lib64/ld-linux-x86-64.so.2 \
/lib/x86_64-linux-gnu/libbrotlicommon.so.1
/lib/x86_64-linux-gnu/libbrotlicommon.so.1 \
/lib/x86_64-linux-gnu/libnghttp2.so.14 \
/lib/x86_64-linux-gnu/libidn2.so.0 \
/lib/x86_64-linux-gnu/librtmp.so.1 \
/lib/x86_64-linux-gnu/libssh2.so.1 \
/lib/x86_64-linux-gnu/libpsl.so.5 \
/lib/x86_64-linux-gnu/libnettle.so.8 \
/lib/x86_64-linux-gnu/libgnutls.so.30 \
/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 \
/lib/x86_64-linux-gnu/libldap.so.2 \
/lib/x86_64-linux-gnu/liblber.so.2 \
/lib/x86_64-linux-gnu/libltdl.so.7 \
/lib/x86_64-linux-gnu/libxxhash.so.0 \
/lib/x86_64-linux-gnu/libsnappy.so.1 \
/lib/x86_64-linux-gnu/libblas.so.3 \
/lib/x86_64-linux-gnu/liblapack.so.3 \
/lib/x86_64-linux-gnu/libarpack.so.2 \
/lib/x86_64-linux-gnu/libicuuc.so.76 \
/lib/x86_64-linux-gnu/libLerc.so.4 \
/lib/x86_64-linux-gnu/libjbig.so.0 \
/lib/x86_64-linux-gnu/libyuv.so.0 \
/lib/x86_64-linux-gnu/libdav1d.so.7 \
/lib/x86_64-linux-gnu/libgav1.so.1 \
/lib/x86_64-linux-gnu/librav1e.so.0.7 \
/lib/x86_64-linux-gnu/libSvtAv1Enc.so.2 \
/lib/x86_64-linux-gnu/libaom.so.3 \
/lib/x86_64-linux-gnu/libsharpyuv.so.0 \
/lib/x86_64-linux-gnu/libfontconfig.so.1 \
/lib/x86_64-linux-gnu/libgpgmepp.so.6 \
/lib/x86_64-linux-gnu/liblcms2.so.2 \
/lib/x86_64-linux-gnu/libnss3.so \
/lib/x86_64-linux-gnu/libsmime3.so \
/lib/x86_64-linux-gnu/libplc4.so \
/lib/x86_64-linux-gnu/libnspr4.so \
/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.310 \
/lib/x86_64-linux-gnu/libcurl.so.4 \
/lib/x86_64-linux-gnu/libsz.so.2 \
/lib/x86_64-linux-gnu/libssl.so.3 \
/lib/x86_64-linux-gnu/libminizip.so.1 \
/lib/x86_64-linux-gnu/liburiparser.so.1 \
/lib/x86_64-linux-gnu/libfyut.so.0 \
/lib/x86_64-linux-gnu/libfygm.so.0 \
/lib/x86_64-linux-gnu/librttopo.so.1 \
/lib/x86_64-linux-gnu/libresolv.so.2 \
/lib/x86_64-linux-gnu/libtirpc.so.3 \
/lib/x86_64-linux-gnu/libgeos.so.3.13.1 \
/lib/x86_64-linux-gnu/libunistring.so.5 \
/lib/x86_64-linux-gnu/libhogweed.so.6 \
/lib/x86_64-linux-gnu/libgmp.so.10 \
/lib/x86_64-linux-gnu/libp11-kit.so.0 \
/lib/x86_64-linux-gnu/libtasn1.so.6 \
/lib/x86_64-linux-gnu/libkrb5.so.3 \
/lib/x86_64-linux-gnu/libk5crypto.so.3 \
/lib/x86_64-linux-gnu/libcom_err.so.2 \
/lib/x86_64-linux-gnu/libkrb5support.so.0 \
/lib/x86_64-linux-gnu/libsasl2.so.2 \
/lib/x86_64-linux-gnu/libgfortran.so.5 \
/lib/x86_64-linux-gnu/libmvec.so.1 \
/lib/x86_64-linux-gnu/libicudata.so.76 \
/lib/x86_64-linux-gnu/libabsl_synchronization.so.20240722 \
/lib/x86_64-linux-gnu/libgpgme.so.11 \
/lib/x86_64-linux-gnu/libnssutil3.so \
/lib/x86_64-linux-gnu/libplds4.so \
/lib/x86_64-linux-gnu/libffi.so.8 \
/lib/x86_64-linux-gnu/libkeyutils.so.1 \
/lib/x86_64-linux-gnu/libabsl_graphcycles_internal.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_kernel_timeout_internal.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_stacktrace.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_symbolize.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_time.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_malloc_internal.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_base.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_spinlock_wait.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.so.20240722 \
/lib/x86_64-linux-gnu/libassuan.so.9 \
/lib/x86_64-linux-gnu/libgpg-error.so.0 \
/lib/x86_64-linux-gnu/libabsl_debugging_internal.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_demangle_internal.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_strings.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_time_zone.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_demangle_rust.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_strings_internal.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_string_view.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722 \
/usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722 \
/usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_decode_rust_punycode.so.20240722 \
/lib/x86_64-linux-gnu/libabsl_utf8_for_code_point.so.20240722
/usr/lib/gcc/x86_64-linux-gnu/15/../../../x86_64-linux-gnu/Scrt1.o:
@@ -55,6 +189,8 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/usr/lib/x86_64-linux-gnu/libfreetype.so:
/usr/lib/x86_64-linux-gnu/libgdal.so:
/usr/lib/x86_64-linux-gnu/libGLX.so:
/usr/lib/x86_64-linux-gnu/libOpenGL.so:
@@ -119,6 +255,272 @@ CMakeFiles/radar_simulation.dir/glad/src/glad.c.o:
/lib/x86_64-linux-gnu/libbrotlidec.so.1:
/lib/x86_64-linux-gnu/libcurl-gnutls.so.4:
/lib/x86_64-linux-gnu/libodbc.so.2:
/lib/x86_64-linux-gnu/libodbcinst.so.2:
/lib/x86_64-linux-gnu/libxml2.so.16:
/lib/x86_64-linux-gnu/libcrypto.so.3:
/lib/x86_64-linux-gnu/liblzma.so.5:
/lib/x86_64-linux-gnu/libdeflate.so.0:
/lib/x86_64-linux-gnu/liblz4.so.1:
/lib/x86_64-linux-gnu/libblosc.so.1:
/lib/libarmadillo.so.14:
/lib/x86_64-linux-gnu/libqhull_r.so.8.0:
/lib/x86_64-linux-gnu/libxerces-c-3.2.so:
/lib/x86_64-linux-gnu/libjpeg.so.8:
/lib/x86_64-linux-gnu/libtiff.so.6:
/lib/x86_64-linux-gnu/libgeotiff.so.5:
/lib/x86_64-linux-gnu/libavif.so.16:
/lib/x86_64-linux-gnu/libheif.so.1:
/lib/x86_64-linux-gnu/libzstd.so.1:
/lib/x86_64-linux-gnu/libaec.so.0:
/lib/x86_64-linux-gnu/libpoppler.so.147:
/lib/x86_64-linux-gnu/libgif.so.7:
/lib/x86_64-linux-gnu/libnetcdf.so.22:
/lib/x86_64-linux-gnu/libcfitsio.so.10:
/lib/x86_64-linux-gnu/libhdf5_serial.so.310:
/lib/x86_64-linux-gnu/libwebp.so.7:
/lib/x86_64-linux-gnu/libsqlite3.so.0:
/lib/x86_64-linux-gnu/libpq.so.5:
/lib/x86_64-linux-gnu/libopenjp2.so.7:
/lib/x86_64-linux-gnu/libkmlbase.so.1:
/lib/x86_64-linux-gnu/libkmldom.so.1:
/lib/x86_64-linux-gnu/libkmlengine.so.1:
/lib/x86_64-linux-gnu/libfyba.so.0:
/lib/x86_64-linux-gnu/libpcre2-8.so.0:
/lib/x86_64-linux-gnu/libspatialite.so.8:
/lib/x86_64-linux-gnu/libmysqlclient.so.24:
/lib/x86_64-linux-gnu/libfreexl.so.1:
/lib/x86_64-linux-gnu/libogdi.so.4.1:
/lib/x86_64-linux-gnu/libexpat.so.1:
/lib/x86_64-linux-gnu/libgeos_c.so.1:
/lib/x86_64-linux-gnu/libproj.so.25:
/lib/x86_64-linux-gnu/libjson-c.so.5:
/lib/x86_64-linux-gnu/libdfalt.so.0:
/lib/x86_64-linux-gnu/libmfhdfalt.so.0:
/lib64/ld-linux-x86-64.so.2:
/lib/x86_64-linux-gnu/libbrotlicommon.so.1:
/lib/x86_64-linux-gnu/libnghttp2.so.14:
/lib/x86_64-linux-gnu/libidn2.so.0:
/lib/x86_64-linux-gnu/librtmp.so.1:
/lib/x86_64-linux-gnu/libssh2.so.1:
/lib/x86_64-linux-gnu/libpsl.so.5:
/lib/x86_64-linux-gnu/libnettle.so.8:
/lib/x86_64-linux-gnu/libgnutls.so.30:
/lib/x86_64-linux-gnu/libgssapi_krb5.so.2:
/lib/x86_64-linux-gnu/libldap.so.2:
/lib/x86_64-linux-gnu/liblber.so.2:
/lib/x86_64-linux-gnu/libltdl.so.7:
/lib/x86_64-linux-gnu/libxxhash.so.0:
/lib/x86_64-linux-gnu/libsnappy.so.1:
/lib/x86_64-linux-gnu/libblas.so.3:
/lib/x86_64-linux-gnu/liblapack.so.3:
/lib/x86_64-linux-gnu/libarpack.so.2:
/lib/x86_64-linux-gnu/libicuuc.so.76:
/lib/x86_64-linux-gnu/libLerc.so.4:
/lib/x86_64-linux-gnu/libjbig.so.0:
/lib/x86_64-linux-gnu/libyuv.so.0:
/lib/x86_64-linux-gnu/libdav1d.so.7:
/lib/x86_64-linux-gnu/libgav1.so.1:
/lib/x86_64-linux-gnu/librav1e.so.0.7:
/lib/x86_64-linux-gnu/libSvtAv1Enc.so.2:
/lib/x86_64-linux-gnu/libaom.so.3:
/lib/x86_64-linux-gnu/libsharpyuv.so.0:
/lib/x86_64-linux-gnu/libfontconfig.so.1:
/lib/x86_64-linux-gnu/libgpgmepp.so.6:
/lib/x86_64-linux-gnu/liblcms2.so.2:
/lib/x86_64-linux-gnu/libnss3.so:
/lib/x86_64-linux-gnu/libsmime3.so:
/lib/x86_64-linux-gnu/libplc4.so:
/lib/x86_64-linux-gnu/libnspr4.so:
/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.310:
/lib/x86_64-linux-gnu/libcurl.so.4:
/lib/x86_64-linux-gnu/libsz.so.2:
/lib/x86_64-linux-gnu/libssl.so.3:
/lib/x86_64-linux-gnu/libminizip.so.1:
/lib/x86_64-linux-gnu/liburiparser.so.1:
/lib/x86_64-linux-gnu/libfyut.so.0:
/lib/x86_64-linux-gnu/libfygm.so.0:
/lib/x86_64-linux-gnu/librttopo.so.1:
/lib/x86_64-linux-gnu/libresolv.so.2:
/lib/x86_64-linux-gnu/libtirpc.so.3:
/lib/x86_64-linux-gnu/libgeos.so.3.13.1:
/lib/x86_64-linux-gnu/libunistring.so.5:
/lib/x86_64-linux-gnu/libhogweed.so.6:
/lib/x86_64-linux-gnu/libgmp.so.10:
/lib/x86_64-linux-gnu/libp11-kit.so.0:
/lib/x86_64-linux-gnu/libtasn1.so.6:
/lib/x86_64-linux-gnu/libkrb5.so.3:
/lib/x86_64-linux-gnu/libk5crypto.so.3:
/lib/x86_64-linux-gnu/libcom_err.so.2:
/lib/x86_64-linux-gnu/libkrb5support.so.0:
/lib/x86_64-linux-gnu/libsasl2.so.2:
/lib/x86_64-linux-gnu/libgfortran.so.5:
/lib/x86_64-linux-gnu/libmvec.so.1:
/lib/x86_64-linux-gnu/libicudata.so.76:
/lib/x86_64-linux-gnu/libabsl_synchronization.so.20240722:
/lib/x86_64-linux-gnu/libgpgme.so.11:
/lib/x86_64-linux-gnu/libnssutil3.so:
/lib/x86_64-linux-gnu/libplds4.so:
/lib/x86_64-linux-gnu/libffi.so.8:
/lib/x86_64-linux-gnu/libkeyutils.so.1:
/lib/x86_64-linux-gnu/libabsl_graphcycles_internal.so.20240722:
/lib/x86_64-linux-gnu/libabsl_kernel_timeout_internal.so.20240722:
/lib/x86_64-linux-gnu/libabsl_stacktrace.so.20240722:
/lib/x86_64-linux-gnu/libabsl_symbolize.so.20240722:
/lib/x86_64-linux-gnu/libabsl_time.so.20240722:
/lib/x86_64-linux-gnu/libabsl_malloc_internal.so.20240722:
/lib/x86_64-linux-gnu/libabsl_base.so.20240722:
/lib/x86_64-linux-gnu/libabsl_spinlock_wait.so.20240722:
/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.so.20240722:
/lib/x86_64-linux-gnu/libassuan.so.9:
/lib/x86_64-linux-gnu/libgpg-error.so.0:
/lib/x86_64-linux-gnu/libabsl_debugging_internal.so.20240722:
/lib/x86_64-linux-gnu/libabsl_demangle_internal.so.20240722:
/lib/x86_64-linux-gnu/libabsl_strings.so.20240722:
/lib/x86_64-linux-gnu/libabsl_time_zone.so.20240722:
/lib/x86_64-linux-gnu/libabsl_demangle_rust.so.20240722:
/lib/x86_64-linux-gnu/libabsl_strings_internal.so.20240722:
/lib/x86_64-linux-gnu/libabsl_string_view.so.20240722:
/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722:
/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722:
/usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722:
/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722:
/usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722:
/lib/x86_64-linux-gnu/libabsl_throw_delegate.so.20240722:
/lib/x86_64-linux-gnu/libabsl_decode_rust_punycode.so.20240722:
/lib/x86_64-linux-gnu/libabsl_utf8_for_code_point.so.20240722:

View File

@@ -1 +1 @@
/usr/bin/c++ -O3 -DNDEBUG -Wl,--dependency-file=CMakeFiles/radar_simulation.dir/link.d CMakeFiles/radar_simulation.dir/src/main.cpp.o CMakeFiles/radar_simulation.dir/glad/src/glad.c.o -o radar_simulation /usr/lib/x86_64-linux-gnu/libglfw.so.3.4 /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so
/usr/bin/c++ -O3 -DNDEBUG -Wl,--dependency-file=CMakeFiles/radar_simulation.dir/link.d CMakeFiles/radar_simulation.dir/src/main.cpp.o CMakeFiles/radar_simulation.dir/glad/src/glad.c.o -o radar_simulation /usr/lib/x86_64-linux-gnu/libglfw.so.3.4 /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/x86_64-linux-gnu/libgdal.so /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so

View File

@@ -99,7 +99,10 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: \
/usr/include/freetype2/freetype/ftimage.h \
/usr/include/freetype2/freetype/fterrors.h \
/usr/include/freetype2/freetype/ftmoderr.h \
/usr/include/freetype2/freetype/fterrdef.h /usr/include/c++/15/cmath \
/usr/include/freetype2/freetype/fterrdef.h /usr/include/gdal/gdal_priv.h \
/usr/include/gdal/gdal.h /usr/include/gdal/gdal_version.h \
/usr/include/gdal/cpl_port.h /usr/include/gdal/cpl_config.h \
/usr/include/c++/15/math.h /usr/include/c++/15/cmath \
/usr/include/c++/15/bits/requires_hosted.h \
/usr/include/c++/15/bits/cpp_type_traits.h \
/usr/include/c++/15/bits/version.h /usr/include/c++/15/type_traits \
@@ -140,58 +143,47 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: \
/usr/include/c++/15/tr1/modified_bessel_func.tcc \
/usr/include/c++/15/tr1/poly_hermite.tcc \
/usr/include/c++/15/tr1/poly_laguerre.tcc \
/usr/include/c++/15/tr1/riemann_zeta.tcc /usr/include/c++/15/vector \
/usr/include/c++/15/tr1/riemann_zeta.tcc /usr/include/ctype.h \
/usr/include/time.h /usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/gdal/cpl_error.h /usr/include/c++/15/memory \
/usr/include/c++/15/bits/memoryfwd.h \
/usr/include/c++/15/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/c++allocator.h \
/usr/include/c++/15/bits/new_allocator.h /usr/include/c++/15/new \
/usr/include/c++/15/bits/exception.h \
/usr/include/c++/15/bits/memoryfwd.h \
/usr/include/c++/15/bits/stl_tempbuf.h \
/usr/include/c++/15/bits/stl_construct.h \
/usr/include/c++/15/bits/stl_uninitialized.h \
/usr/include/c++/15/ext/alloc_traits.h \
/usr/include/c++/15/bits/alloc_traits.h \
/usr/include/c++/15/bits/stl_vector.h \
/usr/include/c++/15/initializer_list \
/usr/include/c++/15/bits/stl_bvector.h \
/usr/include/c++/15/bits/functional_hash.h \
/usr/include/c++/15/bits/hash_bytes.h /usr/include/c++/15/bits/refwrap.h \
/usr/include/c++/15/bits/stl_raw_storage_iter.h \
/usr/include/c++/15/bits/align.h \
/usr/include/c++/15/bits/uses_allocator.h \
/usr/include/c++/15/bits/unique_ptr.h /usr/include/c++/15/tuple \
/usr/include/c++/15/bits/invoke.h \
/usr/include/c++/15/bits/stl_function.h \
/usr/include/c++/15/backward/binders.h \
/usr/include/c++/15/bits/range_access.h \
/usr/include/c++/15/bits/vector.tcc \
/usr/include/c++/15/bits/memory_resource.h /usr/include/c++/15/cstddef \
/usr/include/c++/15/bits/uses_allocator.h \
/usr/include/c++/15/bits/uses_allocator_args.h /usr/include/c++/15/tuple \
/usr/include/c++/15/string /usr/include/c++/15/bits/stringfwd.h \
/usr/include/c++/15/bits/char_traits.h \
/usr/include/c++/15/bits/postypes.h /usr/include/c++/15/cwchar \
/usr/include/wchar.h /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/c++/15/bits/functional_hash.h \
/usr/include/c++/15/bits/hash_bytes.h \
/usr/include/c++/15/bits/shared_ptr.h /usr/include/c++/15/iosfwd \
/usr/include/c++/15/bits/stringfwd.h /usr/include/c++/15/bits/postypes.h \
/usr/include/c++/15/cwchar /usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/15/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/c++locale.h \
/usr/include/c++/15/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/15/iosfwd \
/usr/include/c++/15/cctype /usr/include/ctype.h \
/usr/include/c++/15/bits/ostream_insert.h \
/usr/include/c++/15/bits/cxxabi_forced.h \
/usr/include/c++/15/bits/basic_string.h /usr/include/c++/15/string_view \
/usr/include/c++/15/bits/string_view.tcc \
/usr/include/c++/15/ext/string_conversions.h /usr/include/c++/15/cstdio \
/usr/include/c++/15/cerrno /usr/include/errno.h \
/usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
/usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/15/bits/charconv.h \
/usr/include/c++/15/bits/basic_string.tcc /usr/include/c++/15/fstream \
/usr/include/c++/15/istream /usr/include/c++/15/ios \
/usr/include/c++/15/exception /usr/include/c++/15/bits/exception_ptr.h \
/usr/include/c++/15/bits/cxxabi_init_exception.h \
/usr/include/c++/15/typeinfo /usr/include/c++/15/bits/nested_exception.h \
/usr/include/c++/15/bits/ios_base.h /usr/include/c++/15/ext/atomicity.h \
/usr/include/c++/15/bits/shared_ptr_base.h /usr/include/c++/15/typeinfo \
/usr/include/c++/15/bits/allocated_ptr.h \
/usr/include/c++/15/bits/refwrap.h \
/usr/include/c++/15/ext/aligned_buffer.h \
/usr/include/c++/15/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
@@ -206,13 +198,64 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: \
/usr/include/x86_64-linux-gnu/asm/posix_types_64.h \
/usr/include/asm-generic/posix_types.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/15/ext/concurrence.h /usr/include/c++/15/exception \
/usr/include/c++/15/bits/exception_ptr.h \
/usr/include/c++/15/bits/cxxabi_init_exception.h \
/usr/include/c++/15/bits/nested_exception.h \
/usr/include/c++/15/bits/shared_ptr_atomic.h \
/usr/include/c++/15/bits/atomic_base.h \
/usr/include/c++/15/bits/atomic_lockfree_defines.h \
/usr/include/c++/15/backward/auto_ptr.h \
/usr/include/c++/15/pstl/glue_memory_defs.h \
/usr/include/c++/15/pstl/execution_defs.h /usr/include/c++/15/string \
/usr/include/c++/15/bits/char_traits.h \
/usr/include/c++/15/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/c++locale.h \
/usr/include/c++/15/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/15/cctype \
/usr/include/c++/15/bits/ostream_insert.h \
/usr/include/c++/15/bits/cxxabi_forced.h \
/usr/include/c++/15/bits/range_access.h \
/usr/include/c++/15/initializer_list \
/usr/include/c++/15/bits/basic_string.h /usr/include/c++/15/string_view \
/usr/include/c++/15/bits/string_view.tcc \
/usr/include/c++/15/ext/string_conversions.h /usr/include/c++/15/cstdio \
/usr/include/c++/15/cerrno /usr/include/c++/15/bits/charconv.h \
/usr/include/c++/15/bits/basic_string.tcc \
/usr/include/c++/15/bits/memory_resource.h /usr/include/c++/15/cstddef \
/usr/include/c++/15/bits/uses_allocator_args.h \
/usr/include/gdal/cpl_progress.h /usr/include/gdal/cpl_virtualmem.h \
/usr/include/gdal/cpl_vsi.h \
/usr/lib/gcc/x86_64-linux-gnu/15/include/stdbool.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd.h \
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h \
/usr/include/linux/close_range.h \
/usr/include/x86_64-linux-gnu/sys/stat.h \
/usr/include/x86_64-linux-gnu/bits/stat.h \
/usr/include/x86_64-linux-gnu/bits/struct_stat.h \
/usr/include/x86_64-linux-gnu/bits/statx.h /usr/include/linux/stat.h \
/usr/include/x86_64-linux-gnu/bits/statx-generic.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \
/usr/include/gdal/cpl_minixml.h /usr/include/gdal/ogr_api.h \
/usr/include/gdal/ogr_core.h /usr/include/gdal/gdal_frmts.h \
/usr/include/gdal/gdalsubdatasetinfo.h /usr/include/gdal/cpl_conv.h \
/usr/include/gdal/cpl_string.h /usr/include/c++/15/vector \
/usr/include/c++/15/bits/stl_vector.h \
/usr/include/c++/15/bits/stl_bvector.h \
/usr/include/c++/15/bits/vector.tcc /usr/include/gdal/cpl_multiproc.h \
/usr/include/gdal/cpl_atomic_ops.h /usr/include/c++/15/complex \
/usr/include/c++/15/sstream /usr/include/c++/15/istream \
/usr/include/c++/15/ios /usr/include/c++/15/bits/ios_base.h \
/usr/include/c++/15/bits/locale_classes.h \
/usr/include/c++/15/bits/locale_classes.tcc \
/usr/include/c++/15/system_error \
@@ -228,15 +271,31 @@ CMakeFiles/radar_simulation.dir/src/main.cpp.o: \
/usr/include/c++/15/bits/locale_facets.tcc \
/usr/include/c++/15/bits/basic_ios.tcc /usr/include/c++/15/ostream \
/usr/include/c++/15/bits/ostream.h /usr/include/c++/15/bits/ostream.tcc \
/usr/include/c++/15/bits/istream.tcc /usr/include/c++/15/bits/codecvt.h \
/usr/include/c++/15/bits/istream.tcc \
/usr/include/c++/15/bits/sstream.tcc /usr/include/c++/15/cstdint \
/usr/include/c++/15/iterator /usr/include/c++/15/bits/stream_iterator.h \
/usr/include/c++/15/map /usr/include/c++/15/bits/stl_tree.h \
/usr/include/c++/15/bits/node_handle.h \
/usr/include/c++/15/bits/stl_map.h \
/usr/include/c++/15/bits/stl_multimap.h \
/usr/include/c++/15/bits/erase_if.h /usr/include/c++/15/set \
/usr/include/c++/15/bits/stl_set.h \
/usr/include/c++/15/bits/stl_multiset.h /usr/include/gdal/ogr_feature.h \
/usr/include/gdal/ogr_featurestyle.h /usr/include/gdal/ogr_geometry.h \
/usr/include/gdal/cpl_json.h \
/usr/include/gdal/ogr_geomcoordinateprecision.h \
/usr/include/gdal/ogr_spatialref.h /usr/include/gdal/ogr_srs_api.h \
/usr/include/c++/15/climits /usr/include/gdal/ogrsf_frmts.h \
/usr/include/gdal/gdal_priv.h /usr/include/c++/15/deque \
/usr/include/c++/15/bits/stl_deque.h /usr/include/c++/15/bits/deque.tcc \
/usr/include/gdal/cpl_conv.h /usr/include/c++/15/fstream \
/usr/include/c++/15/bits/codecvt.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/basic_file.h \
/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/bits/fstream.tcc /usr/include/c++/15/iostream \
/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 \
/usr/include/c++/15/bits/uniform_int_dist.h \
/usr/include/c++/15/bits/stl_tempbuf.h \
/usr/include/c++/15/pstl/glue_algorithm_defs.h \
/usr/include/c++/15/pstl/execution_defs.h /usr/include/c++/15/cstring
/usr/include/c++/15/cstring

Binary file not shown.

View File

@@ -0,0 +1,20 @@
#version 330 core
// Feature 9: PPI Shoreline / Terrain — fragment stage
// Active points render in P7 blue; fading points render in P7 greenish-yellow
// with brightness proportional to vFade.
in float vFade;
in float vActive;
uniform vec3 uActiveColor; // P7A blue
uniform vec3 uPersistColor; // P7P greenish yellow
out vec4 fragColor;
void main()
{
if (vFade <= 0.01) discard;
vec3 col = (vActive > 0.5)
? uActiveColor
: uPersistColor * vFade;
fragColor = vec4(col, vFade);
}

View File

@@ -0,0 +1,49 @@
#version 330 core
// Feature 9: PPI Shoreline / Terrain
// Each vertex encodes (bearingDeg, rangeMiles) in polar radar coordinates.
// The vertex shader converts to NDC and computes sweep-based fade on the GPU,
// so the geometry buffer is static — only uniforms change each frame.
layout(location = 0) in vec2 aBearingRange; // x = bearing °CW-from-N, y = range miles
uniform vec2 uCenter; // NDC centre of PPI scope
uniform float uPpiRx; // ppiR * 2.0 / W (one full-radius in NDC, x axis)
uniform float uPpiRy; // ppiR * 2.0 / H (one full-radius in NDC, y axis)
uniform float uMaxRange; // current max range (miles)
uniform float uSweepAngle; // current sweep angle (degrees CW from N)
uniform float uSweepDegPS; // sweep speed (degrees / second)
uniform float uPersist; // phosphor persistence duration (seconds)
out float vFade; // 0..1 brightness multiplier
out float vActive; // 1.0 when sweep head is over this point
const float PI = 3.14159265358979;
const float THRESH = 3.5; // degrees — active window around sweep head
void main()
{
float bearDeg = aBearingRange.x;
float rangeMi = aBearingRange.y;
float rangeFrac = rangeMi / uMaxRange;
// Push out-of-range points outside the NDC clip volume
if (rangeFrac > 1.0) {
gl_Position = vec4(2.0, 2.0, 2.0, 1.0);
vFade = 0.0;
vActive = 0.0;
return;
}
// Convert polar radar coords → NDC
// North (0°) = +Y in NDC; East (90°) = +X in NDC
float bearRad = bearDeg * PI / 180.0;
float nx = uCenter.x + rangeFrac * uPpiRx * sin(bearRad);
float ny = uCenter.y + rangeFrac * uPpiRy * cos(bearRad);
gl_Position = vec4(nx, ny, 0.0, 1.0);
gl_PointSize = 2.0;
// Degrees the sweep has travelled past this point since last illumination
float angBehind = mod(uSweepAngle - bearDeg + 360.0, 360.0);
float timeSinceLit = angBehind / uSweepDegPS;
vFade = clamp(1.0 - timeSinceLit / uPersist, 0.0, 1.0);
vActive = (angBehind < THRESH) ? 1.0 : 0.0;
}

BIN
map/US5WA45M.000 Executable file

Binary file not shown.

BIN
map/n48_w123_1arc_v3.tif Executable file

Binary file not shown.

View File

@@ -0,0 +1,20 @@
#version 330 core
// Feature 9: PPI Shoreline / Terrain — fragment stage
// Active points render in P7 blue; fading points render in P7 greenish-yellow
// with brightness proportional to vFade.
in float vFade;
in float vActive;
uniform vec3 uActiveColor; // P7A blue
uniform vec3 uPersistColor; // P7P greenish yellow
out vec4 fragColor;
void main()
{
if (vFade <= 0.01) discard;
vec3 col = (vActive > 0.5)
? uActiveColor
: uPersistColor * vFade;
fragColor = vec4(col, vFade);
}

View File

@@ -0,0 +1,49 @@
#version 330 core
// Feature 9: PPI Shoreline / Terrain
// Each vertex encodes (bearingDeg, rangeMiles) in polar radar coordinates.
// The vertex shader converts to NDC and computes sweep-based fade on the GPU,
// so the geometry buffer is static — only uniforms change each frame.
layout(location = 0) in vec2 aBearingRange; // x = bearing °CW-from-N, y = range miles
uniform vec2 uCenter; // NDC centre of PPI scope
uniform float uPpiRx; // ppiR * 2.0 / W (one full-radius in NDC, x axis)
uniform float uPpiRy; // ppiR * 2.0 / H (one full-radius in NDC, y axis)
uniform float uMaxRange; // current max range (miles)
uniform float uSweepAngle; // current sweep angle (degrees CW from N)
uniform float uSweepDegPS; // sweep speed (degrees / second)
uniform float uPersist; // phosphor persistence duration (seconds)
out float vFade; // 0..1 brightness multiplier
out float vActive; // 1.0 when sweep head is over this point
const float PI = 3.14159265358979;
const float THRESH = 3.5; // degrees — active window around sweep head
void main()
{
float bearDeg = aBearingRange.x;
float rangeMi = aBearingRange.y;
float rangeFrac = rangeMi / uMaxRange;
// Push out-of-range points outside the NDC clip volume
if (rangeFrac > 1.0) {
gl_Position = vec4(2.0, 2.0, 2.0, 1.0);
vFade = 0.0;
vActive = 0.0;
return;
}
// Convert polar radar coords → NDC
// North (0°) = +Y in NDC; East (90°) = +X in NDC
float bearRad = bearDeg * PI / 180.0;
float nx = uCenter.x + rangeFrac * uPpiRx * sin(bearRad);
float ny = uCenter.y + rangeFrac * uPpiRy * cos(bearRad);
gl_Position = vec4(nx, ny, 0.0, 1.0);
gl_PointSize = 2.0;
// Degrees the sweep has travelled past this point since last illumination
float angBehind = mod(uSweepAngle - bearDeg + 360.0, 360.0);
float timeSinceLit = angBehind / uSweepDegPS;
vFade = clamp(1.0 - timeSinceLit / uPersist, 0.0, 1.0);
vActive = (angBehind < THRESH) ? 1.0 : 0.0;
}

View File

@@ -1,4 +1,4 @@
// Radar Simulation — Feature Test: 16
// Radar Simulation — Feature Test: 16, 9
// Feature 1: Initialize display, draw scope boundaries (PPI circle, A scope box)
// Feature 2: PPI bearing ring with tick marks, degree labels, and outer label ring
// Feature 3: Replaceable A scope graticule — cycles through 2/5/10/15 mi ranges,
@@ -15,6 +15,11 @@
#include <ft2build.h>
#include FT_FREETYPE_H
// GDAL / OGR — for ENC S-57 shoreline and DEM terrain loading
#include <gdal_priv.h>
#include <ogrsf_frmts.h>
#include <cpl_conv.h>
#include <cmath>
#include <vector>
#include <string>
@@ -69,6 +74,12 @@ static constexpr int TRAIL_SEGS = 50;
// Feature 5 — target glow lifetime (s) after sweep passes
static constexpr float TARG_PERSIST = 5.0f;
// ─── Radar location (WGS84, latitude first) ──────────────────────────────────
// Middle of Bellingham Bay, 100-foot platform
static constexpr double RADAR_LAT = 48.74361448950435;
static constexpr double RADAR_LON = -122.56466911663048;
static constexpr float MAX_RANGE_MILES = 6.0f;
// ─── NDC helpers ─────────────────────────────────────────────────────────────
static inline float ndcX(float px, float W) { return px / W * 2.0f - 1.0f; }
@@ -450,17 +461,25 @@ static BearingGraticule buildBearingGraticule(const Layout& L, const FontAtlas&
struct RangeConfig {
float maxMiles;
int numMajor;
int numMinorPerMajor;
int numRings;
float rings[8]; // explicit ring positions in miles (up to 8)
};
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
// PPI scope range ring configs (selectable by operator): 2, 4, 6 miles
static const RangeConfig RANGE_CONFIGS[3] = {
{ 2.0f, 2, { 1.0f, 2.0f } },
{ 4.0f, 2, { 2.0f, 4.0f } },
{ 6.0f, 4, { 1.0f, 2.0f, 4.0f, 6.0f } },
};
static constexpr int RANGE_COUNT = 4;
static constexpr int RANGE_COUNT = 3;
// A scope graticule configs — independent from PPI: 2, 4, 6 miles
static const RangeConfig ASCOPE_RANGE_CONFIGS[3] = {
{ 2.0f, 2, { 1.0f, 2.0f } },
{ 4.0f, 2, { 2.0f, 4.0f } },
{ 6.0f, 4, { 1.0f, 2.0f, 4.0f, 6.0f } },
};
static constexpr int ASCOPE_RANGE_COUNT = 3;
// ─── Feature 3: A scope replaceable graticule ────────────────────────────────
@@ -521,32 +540,21 @@ static AScopeGraticule buildAScopeGraticule(
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) {
float xMaj = gx0 + (m + 1) * majorSpan;
// Vertical tick marks at each explicit ring position
for (int ri = 0; ri < rc.numRings; ++ri) {
float xMaj = gx0 + (rc.rings[ri] / rc.maxMiles) * sigW;
ln(xMaj, gy1, xMaj, gy0);
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
// Range labels at each ring tick
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);
for (int ri = 0; ri < rc.numRings; ++ri) {
float x = gx0 + (rc.rings[ri] / rc.maxMiles) * sigW;
int labelMi = (int)std::round(rc.rings[ri]);
appendTextQuads(textV, fa, std::to_string(labelMi), x, labelY, W, H);
}
ag.textVerts = (int)textV.size() / 4;
@@ -595,16 +603,16 @@ static void buildRingVerts(std::vector<float>& v,
float sweepAngle, float W, float H)
{
const RangeConfig& rc = RANGE_CONFIGS[rangeIdx];
const int nr = rc.numMajor;
const int nr = rc.numRings;
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 greenish yellow)
for (int ri = 1; ri <= nr; ++ri) {
float frac = (float)ri / nr;
// Full persistence rings (dim greenish yellow) at explicit ring positions
for (int ri = 0; ri < nr; ++ri) {
float frac = rc.rings[ri] / rc.maxMiles;
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),
@@ -613,9 +621,9 @@ static void buildRingVerts(std::vector<float>& v,
}
}
// Sweep trail arcs: gradient from active blue at head to dim persistence at tail
for (int ri = 1; ri <= nr; ++ri) {
float frac = (float)ri / nr;
// Sweep trail arcs at each ring
for (int ri = 0; ri < nr; ++ri) {
float frac = rc.rings[ri] / rc.maxMiles;
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;
@@ -690,7 +698,8 @@ static void renderRingLayer(RingLayer& rl, const Layout& L,
glUseProgram(rl.prog);
glBindVertexArray(rl.vao);
const int nr = RANGE_CONFIGS[rangeIdx].numMajor;
const RangeConfig& rcDraw = RANGE_CONFIGS[rangeIdx];
const int nr = rcDraw.numRings;
int off = 0;
for (int ri = 0; ri < nr; ++ri) {
glDrawArrays(GL_LINE_STRIP, off, RING_SEGS+1);
@@ -723,11 +732,11 @@ static void renderRingLayer(RingLayer& rl, const Layout& L,
if (lr + lg + lb > 0.01f) {
std::vector<float> tv;
for (int ri = 1; ri <= nr; ++ri) {
float frac = (float)ri / nr;
for (int ri = 0; ri < nr; ++ri) {
float frac = rcDraw.rings[ri] / rcDraw.maxMiles;
float px = L.ppiCX;
float py = L.ppiCY + frac * L.ppiR + LABEL_OFFSET_PX;
int lmi = (int)std::round(RANGE_CONFIGS[rangeIdx].maxMiles * frac);
int lmi = (int)std::round(rcDraw.rings[ri]);
appendTextQuads(tv, fa, std::to_string(lmi), px, py, W, H);
}
if (!tv.empty()) {
@@ -1217,6 +1226,318 @@ static void renderGratNotifyWindow(GratNotifyWindow& gn, const Layout& L,
glDisable(GL_SCISSOR_TEST);
}
// ─── Feature 9: Shoreline & Terrain ──────────────────────────────────────────
//
// Two data sources are combined into one GL_POINTS buffer:
//
// 1. NOAA ENC S-57 (COALNE layer) — precise nautical coastline.
// Line-string vertices are densified with intermediate points every
// ~40 m so the coastline appears continuous on-screen.
//
// 2. USGS 3DEP 1/3-arc-second DEM (GeoTIFF) — terrain elevation grid.
// All land pixels (elevation > 0 m) within the 15-mile radius are
// sampled at ~150 m intervals and added as terrain-return points.
// (Full line-of-sight shadow calculation is deferred to a later
// feature iteration.)
//
// The vertex shader holds the geometry fixed; sweep-based phosphor fade is
// computed entirely on the GPU from a small set of uniforms each frame.
// Convert WGS84 lat/lon to radar-local bearing (° CW from N) and range (miles).
// Uses flat-earth approximation — accurate to <0.01% at 15-mile range.
static void latLonToRadar(double lat, double lon,
float& bearDeg, float& rangeMi)
{
constexpr double MI_PER_DEG_LAT = 69.11;
double cosLat = std::cos(RADAR_LAT * M_PI / 180.0);
double dy = (lat - RADAR_LAT) * MI_PER_DEG_LAT; // + = north
double dx = (lon - RADAR_LON) * MI_PER_DEG_LAT * cosLat; // + = east
rangeMi = static_cast<float>(std::sqrt(dx*dx + dy*dy));
bearDeg = static_cast<float>(std::atan2(dx, dy) * 180.0 / M_PI);
if (bearDeg < 0.0f) bearDeg += 360.0f;
}
// Vertex: (bearingDeg, rangeMiles)
struct ShorelineVert { float bearDeg; float rangeMi; };
// ── ENC coastline loading ─────────────────────────────────────────────────────
// Recursively extract line-string geometry points, densifying at stepMiles.
static void appendENCGeomPts(OGRGeometry* geom, float maxRange,
float stepMiles,
std::vector<ShorelineVert>& pts)
{
if (!geom) return;
OGRwkbGeometryType gtype = wkbFlatten(geom->getGeometryType());
if (gtype == wkbLineString || gtype == wkbLinearRing) {
OGRLineString* ls = geom->toLineString();
int n = ls->getNumPoints();
if (n < 1) return;
constexpr double MI_PER_DEG_LAT = 69.11;
double cosLat = std::cos(RADAR_LAT * M_PI / 180.0);
for (int i = 0; i < n - 1; ++i) {
double lon0 = ls->getX(i), lat0 = ls->getY(i);
double lon1 = ls->getX(i+1),lat1 = ls->getY(i+1);
// Segment length in miles
double dlat = (lat1 - lat0) * MI_PER_DEG_LAT;
double dlon = (lon1 - lon0) * MI_PER_DEG_LAT * cosLat;
float segMi = static_cast<float>(std::sqrt(dlat*dlat + dlon*dlon));
int nSteps = std::max(1, static_cast<int>(segMi / stepMiles));
for (int j = 0; j <= nSteps; ++j) {
double t = static_cast<double>(j) / nSteps;
double lat = lat0 + t * (lat1 - lat0);
double lon = lon0 + t * (lon1 - lon0);
float bear, range;
latLonToRadar(lat, lon, bear, range);
if (range <= maxRange)
pts.push_back({bear, range});
}
}
// Last point
{
float bear, range;
latLonToRadar(ls->getY(n-1), ls->getX(n-1), bear, range);
if (range <= maxRange) pts.push_back({bear, range});
}
}
else if (gtype == wkbPolygon) {
OGRPolygon* poly = geom->toPolygon();
OGRLinearRing* ring = poly->getExteriorRing();
if (ring) appendENCGeomPts(ring, maxRange, stepMiles, pts);
}
else if (gtype == wkbMultiLineString || gtype == wkbMultiPolygon ||
gtype == wkbGeometryCollection) {
OGRGeometryCollection* gc = geom->toGeometryCollection();
for (int i = 0; i < gc->getNumGeometries(); ++i)
appendENCGeomPts(gc->getGeometryRef(i), maxRange, stepMiles, pts);
}
}
// Load COALNE coastline from an S-57 ENC file.
// Points are densified at ~40 m intervals so they appear continuous.
static std::vector<ShorelineVert> loadENCCoastline(const std::string& encPath)
{
GDALAllRegister();
GDALDataset* ds = static_cast<GDALDataset*>(
GDALOpenEx(encPath.c_str(), GDAL_OF_VECTOR | GDAL_OF_READONLY,
nullptr, nullptr, nullptr));
if (!ds) {
std::cerr << "Feature 9: cannot open ENC: " << encPath << "\n";
return {};
}
std::vector<ShorelineVert> pts;
// COALNE = coastline (primary); SLCONS = shoreline construction (piers etc.)
const char* layerNames[] = { "COALNE", "SLCONS" };
for (const char* lname : layerNames) {
OGRLayer* layer = ds->GetLayerByName(lname);
if (!layer) continue;
OGRFeature* feat;
layer->ResetReading();
while ((feat = layer->GetNextFeature()) != nullptr) {
OGRGeometry* geom = feat->GetGeometryRef();
// densify: one point every ~0.025 miles (~40 m)
appendENCGeomPts(geom, MAX_RANGE_MILES, 0.025f, pts);
OGRFeature::DestroyFeature(feat);
}
}
GDALClose(ds);
std::cerr << "Feature 9 ENC: " << pts.size() << " coastline points\n";
return pts;
}
// ── DEM terrain loading with line-of-sight (radar shadow) ────────────────────
//
// For each azimuth (0.05° steps), march outward from the radar. Track the
// maximum elevation angle seen so far. A terrain point is visible — and
// generates a radar return — only when its elevation angle equals or exceeds
// the current maximum. Everything behind that horizon is in radar shadow.
// This correctly shows the faces of hills toward the radar and hides valleys
// and reverse slopes behind them.
static constexpr float RADAR_HEIGHT_M = 30.48f; // 100-foot platform
static std::vector<ShorelineVert> loadDEMTerrainWithLOS(const std::string& demPath)
{
GDALAllRegister();
GDALDataset* ds = static_cast<GDALDataset*>(
GDALOpen(demPath.c_str(), GA_ReadOnly));
if (!ds) {
std::cerr << "Feature 9: cannot open DEM: " << demPath << "\n";
return {};
}
GDALRasterBand* band = ds->GetRasterBand(1);
if (!band) {
std::cerr << "Feature 9: DEM has no band 1\n";
GDALClose(ds); return {};
}
double gt[6];
ds->GetGeoTransform(gt);
int rasterW = ds->GetRasterXSize();
int rasterH = ds->GetRasterYSize();
// Bounding box with 2% margin
constexpr double M_PER_DEG_LAT = 111320.0;
double cosLat = std::cos(RADAR_LAT * M_PI / 180.0);
double mPerDegLon = M_PER_DEG_LAT * cosLat;
double maxRangeM = MAX_RANGE_MILES * 1609.344;
double dLat = maxRangeM / M_PER_DEG_LAT * 1.02;
double dLon = maxRangeM / mPerDegLon * 1.02;
int px0 = std::max(0, static_cast<int>((RADAR_LON - dLon - gt[0]) / gt[1]));
int px1 = std::min(rasterW-1,static_cast<int>((RADAR_LON + dLon - gt[0]) / gt[1]) + 1);
int py0 = std::max(0, static_cast<int>((RADAR_LAT + dLat - gt[3]) / gt[5]));
int py1 = std::min(rasterH-1,static_cast<int>((RADAR_LAT - dLat - gt[3]) / gt[5]) + 1);
int readW = px1 - px0 + 1;
int readH = py1 - py0 + 1;
if (readW <= 0 || readH <= 0) {
std::cerr << "Feature 9: DEM bounding box empty\n";
GDALClose(ds); return {};
}
// Bulk-read elevation tile into memory (float32, metres)
std::vector<float> elevGrid(readW * readH, 0.0f);
if (band->RasterIO(GF_Read, px0, py0, readW, readH,
elevGrid.data(), readW, readH, GDT_Float32, 0, 0) != CE_None) {
std::cerr << "Feature 9: DEM RasterIO failed\n";
GDALClose(ds); return {};
}
GDALClose(ds);
// ── Ray-march LOS ─────────────────────────────────────────────────────────
// 7200 rays (0.05° apart) × 20 m steps out to maxRange
const int NUM_AZIMUTHS = 7200;
const float STEP_M = 20.0f;
const int NUM_STEPS = static_cast<int>(maxRangeM / STEP_M) + 1;
std::vector<ShorelineVert> pts;
pts.reserve(60000);
for (int ai = 0; ai < NUM_AZIMUTHS; ++ai) {
float bearDeg = ai * 360.0f / NUM_AZIMUTHS;
float bearRad = bearDeg * static_cast<float>(M_PI) / 180.0f;
float sinB = std::sin(bearRad); // east component
float cosB = std::cos(bearRad); // north component
float maxElevAngle = -static_cast<float>(M_PI) / 2.0f; // horizon starts at -90°
for (int step = 1; step < NUM_STEPS; ++step) {
float rangeM = step * STEP_M;
float rangeMi = rangeM / 1609.344f;
// Geographic position of this ray step
double lat = RADAR_LAT + cosB * rangeM / M_PER_DEG_LAT;
double lon = RADAR_LON + sinB * rangeM / mPerDegLon;
// DEM pixel lookup (nearest-neighbour)
int pxg = static_cast<int>((lon - gt[0]) / gt[1]);
int pyg = static_cast<int>((lat - gt[3]) / gt[5]);
int pxl = pxg - px0;
int pyl = pyg - py0;
if (pxl < 0 || pxl >= readW || pyl < 0 || pyl >= readH) continue;
float elev = elevGrid[pyl * readW + pxl];
// Elevation angle from radar platform to this terrain point
float elevAngle = std::atan2(elev - RADAR_HEIGHT_M, rangeM);
if (elevAngle >= maxElevAngle) {
if (elev > 0.0f) // land (not ocean)
pts.push_back({bearDeg, rangeMi});
maxElevAngle = elevAngle; // raise the horizon
}
}
}
std::cerr << "Feature 9 DEM LOS: " << pts.size() << " visible terrain points\n";
return pts;
}
// ── ShorelineLayer GL object ──────────────────────────────────────────────────
struct ShorelineLayer {
GLuint prog = 0;
GLuint vao = 0;
GLuint vbo = 0;
int count = 0; // number of GL_POINTS vertices
};
static ShorelineLayer buildShorelineLayer()
{
const std::string encPath = MAP_DIR "/US5WA45M.000";
const std::string demPath = MAP_DIR "/n48_w123_1arc_v3.tif";
auto encPts = loadENCCoastline(encPath);
auto demPts = loadDEMTerrainWithLOS(demPath);
// Pack both into a single interleaved buffer: (bearDeg, rangeMi) per vertex
std::vector<float> verts;
verts.reserve((encPts.size() + demPts.size()) * 2);
for (auto& p : encPts) { verts.push_back(p.bearDeg); verts.push_back(p.rangeMi); }
for (auto& p : demPts) { verts.push_back(p.bearDeg); verts.push_back(p.rangeMi); }
ShorelineLayer sl{};
sl.count = static_cast<int>(verts.size() / 2);
glGenVertexArrays(1, &sl.vao);
glGenBuffers(1, &sl.vbo);
glBindVertexArray(sl.vao);
glBindBuffer(GL_ARRAY_BUFFER, sl.vbo);
glBufferData(GL_ARRAY_BUFFER,
static_cast<GLsizeiptr>(verts.size() * sizeof(float)),
verts.data(), GL_STATIC_DRAW);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), nullptr);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
sl.prog = makeProgram("shaders/ppi_shoreline.vert", "shaders/ppi_shoreline.frag");
std::cerr << "Feature 9: " << sl.count << " total shoreline+terrain points\n";
return sl;
}
static void renderShorelineLayer(const ShorelineLayer& sl, const Layout& L,
int rangeIdx, float sweepAngle, float W, float H)
{
if (sl.count == 0 || sl.prog == 0) return;
const float maxRange = RANGE_CONFIGS[rangeIdx].maxMiles;
// NDC centre and per-axis NDC radius
float cx = L.ppiCX / W * 2.0f - 1.0f;
float cy = 1.0f - L.ppiCY / H * 2.0f;
float rx = L.ppiR / W * 2.0f;
float ry = L.ppiR / H * 2.0f;
glUseProgram(sl.prog);
glUniform2f(glGetUniformLocation(sl.prog, "uCenter"), cx, cy);
glUniform1f(glGetUniformLocation(sl.prog, "uPpiRx"), rx);
glUniform1f(glGetUniformLocation(sl.prog, "uPpiRy"), ry);
glUniform1f(glGetUniformLocation(sl.prog, "uMaxRange"), maxRange);
glUniform1f(glGetUniformLocation(sl.prog, "uSweepAngle"), sweepAngle);
glUniform1f(glGetUniformLocation(sl.prog, "uSweepDegPS"), SWEEP_DEG_PS);
glUniform1f(glGetUniformLocation(sl.prog, "uPersist"), TARG_PERSIST);
glUniform3f(glGetUniformLocation(sl.prog, "uActiveColor"),
P7A_R, P7A_G, P7A_B);
glUniform3f(glGetUniformLocation(sl.prog, "uPersistColor"),
P7P_R, P7P_G, P7P_B);
glEnable(GL_PROGRAM_POINT_SIZE);
glBindVertexArray(sl.vao);
glDrawArrays(GL_POINTS, 0, sl.count);
glBindVertexArray(0);
glDisable(GL_PROGRAM_POINT_SIZE);
}
// ─── Key callback ─────────────────────────────────────────────────────────────
static void onKey(GLFWwindow* win, int key, int /*scan*/, int action, int /*mods*/)
@@ -1279,11 +1600,11 @@ int main()
// Feature 2 — PPI bearing graticule
BearingGraticule bg = buildBearingGraticule(layout, fa, W, H);
// Feature 3 — A scope replaceable graticules
// Feature 3 — A scope replaceable graticules (uses its own 4-step config)
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);
AScopeGraticule graticules[ASCOPE_RANGE_COUNT];
for (int i = 0; i < ASCOPE_RANGE_COUNT; ++i)
graticules[i] = buildAScopeGraticule(layout, fa, ASCOPE_RANGE_CONFIGS[i], W, H);
// Feature 4 — PPI range rings
RingLayer rl = buildRingLayer(fa);
@@ -1307,6 +1628,9 @@ int main()
// Feature 6 — PPI cursor
CursorLayer cl = buildCursorLayer();
// Feature 9 — Shoreline + terrain (loads ENC + DEM at startup)
ShorelineLayer sl = buildShorelineLayer();
// Bearing display window (new suggestion #3)
// Reuse scope_bounds program for the box, text program for label
BearingDisplay bd = buildBearingDisplay(layout, W, H);
@@ -1320,9 +1644,12 @@ int main()
const float scopeNDCH = (layout.asBot - layout.asTop) * 2.0f / H;
// Feature 3 animation state — 4 phases per range cycle
// PPI and A scope cycle independently but share the same phase timer
enum class GratPhase { HOLD, SLIDE_OUT, WAIT, SLIDE_IN };
int curRange = 0;
int nextRange = 1;
int curAScopeRange = 0;
int nextAScopeRange = 1;
GratPhase gratPhase = GratPhase::HOLD;
float phaseTimer = 0.0f;
@@ -1351,6 +1678,7 @@ int main()
case GratPhase::HOLD:
if (phaseTimer >= HOLD_SEC) {
nextRange = (curRange + 1) % RANGE_COUNT;
nextAScopeRange = (curAScopeRange + 1) % ASCOPE_RANGE_COUNT;
gratPhase = GratPhase::SLIDE_OUT;
phaseTimer = 0.0f;
}
@@ -1364,6 +1692,7 @@ int main()
case GratPhase::WAIT:
if (phaseTimer >= WAIT_SEC) {
curRange = nextRange;
curAScopeRange = nextAScopeRange;
gratPhase = GratPhase::SLIDE_IN;
phaseTimer = 0.0f;
}
@@ -1416,12 +1745,12 @@ int main()
// ── Feature 3: A scope graticule (4-phase slide animation) ──────────
switch (gratPhase) {
case GratPhase::HOLD:
drawAScopeGraticule(agProg, graticules[curRange],
drawAScopeGraticule(agProg, graticules[curAScopeRange],
0.0f, fa, W, H, layout);
break;
case GratPhase::SLIDE_OUT: {
float t = std::min(phaseTimer / SLIDE_OUT_SEC, 1.0f);
drawAScopeGraticule(agProg, graticules[curRange],
drawAScopeGraticule(agProg, graticules[curAScopeRange],
t * scopeNDCH, fa, W, H, layout);
break;
}
@@ -1430,8 +1759,7 @@ int main()
break;
case GratPhase::SLIDE_IN: {
float t = std::min(phaseTimer / SLIDE_IN_SEC, 1.0f);
// new graticule slides down from above (starts at +scopeNDCH → 0)
drawAScopeGraticule(agProg, graticules[curRange],
drawAScopeGraticule(agProg, graticules[curAScopeRange],
(1.0f - t) * scopeNDCH, fa, W, H, layout);
break;
}
@@ -1443,7 +1771,7 @@ int main()
// ── A scope signal trace ──────────────────────────────────────────────
renderAScopeTrace(at, layout, targets, 4,
RANGE_CONFIGS[curRange].maxMiles, ascopeBearingDeg,
ASCOPE_RANGE_CONFIGS[curAScopeRange].maxMiles, ascopeBearingDeg,
W, H);
// ── Feature 4: PPI range rings ────────────────────────────────────────
@@ -1454,6 +1782,9 @@ int main()
RANGE_CONFIGS[curRange].maxMiles, ppiR,
sweepAngle, now, W, H);
// ── Feature 9: Shoreline + terrain ───────────────────────────────────
renderShorelineLayer(sl, layout, curRange, sweepAngle, W, H);
// ── Feature 6: PPI cursor locked to targets[2] (east, 6 mi) ──────────
// New suggestion #5: cursor follows one target; not free-roaming.
// Only draw when the target is within the current range setting.
@@ -1469,7 +1800,7 @@ int main()
renderBearingDisplay(bd, layout,
sb.prog, bg.textProg,
fa, ascopeBearingDeg,
RANGE_CONFIGS[curRange].maxMiles, W, H);
ASCOPE_RANGE_CONFIGS[curAScopeRange].maxMiles, W, H);
glfwSwapBuffers(win);
glfwPollEvents();
@@ -1484,7 +1815,7 @@ int main()
glDeleteProgram(bg.lineProg);
glDeleteProgram(bg.textProg);
for (int i = 0; i < RANGE_COUNT; ++i) {
for (int i = 0; i < ASCOPE_RANGE_COUNT; ++i) {
glDeleteVertexArrays(1, &graticules[i].lineVAO);
glDeleteBuffers(1, &graticules[i].lineVBO);
glDeleteVertexArrays(1, &graticules[i].textVAO);
@@ -1506,6 +1837,8 @@ int main()
glDeleteVertexArrays(1, &bd.textVAO); glDeleteBuffers(1, &bd.textVBO);
glDeleteVertexArrays(1, &gn.boxVAO); glDeleteBuffers(1, &gn.boxVBO);
glDeleteVertexArrays(1, &gn.textVAO); glDeleteBuffers(1, &gn.textVBO);
glDeleteVertexArrays(1, &sl.vao); glDeleteBuffers(1, &sl.vbo);
glDeleteProgram(sl.prog);
glfwDestroyWindow(win);
glfwTerminate();