Phase 3c: TEXT overlays через FreeType + GTX 1050 (Pascal) compat

Phase 3c — динамический текст через libfreetype6: открывается font
(.ttf/.otf), измеряется bounding box строки, рендерится в RGBA-атлас
с anti-aliased alpha из FT bitmap, заливается в VRAM. На каждом
кадре блитится через cfc_cugrid_blit_rgba_nv12 (kernels уже есть).
Поддержка UTF-8 через простой inline-decoder (1/2/3/4-byte).

cfc_overlay_update_text() переподдерживает re-render atlas (text /
color change) — для Phase 4 ZMQ control plane (динамическое изменение
NO SIGNAL / RECORDING / timestamp'ов).

Адаптация под GTX 1050 (Pascal) в проде:
- CMAKE_CUDA_ARCHITECTURES = 61;75;86;89;120 (Pascal + Turing +
  Ampere + Ada + Blackwell, покрывает все production-кейсы)
- grid_record default снижен с 4K@10Mbps на 1080p@4Mbps. 4K требует
  явных --width 3840 --height 2160 (Pascal NVENC 4K H.264 на грани).
- Ссылка на research-документ + NVENC §Input Buffers рядом со staging
  buffer'ом в nvenc.c с цитатой "the client is required to use buffers
  allocated using the cuMemAlloc family of APIs".

Содержимое Phase 3c:
- overlay.h — cfc_overlay_create_text + update_text + text_size.
- overlay.c — utf8_next decoder, text_measure (ascender/descender),
  text_render (alpha-over blend в RGBA), text_rebuild_atlas (VRAM
  cycle), full FreeType lifecycle.
- CMakeLists.txt — find_package(Freetype REQUIRED) + link
  Freetype::Freetype.
- examples/grid_record — флаг --text font,size,r,g,b,x,y,text.
This commit is contained in:
2026-06-03 05:44:57 +01:00
parent 8cc5a5acfb
commit e02998cea7
6 changed files with 370 additions and 10 deletions
+11 -4
View File
@@ -9,11 +9,15 @@ set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# CUDA архитектуры. RTX 5090 = sm_120 (Blackwell consumer), но также 5090 не
# поддерживает legacy sm_75, поэтому 89 (Ada Lovelace, RTX 4090) для совместимости
# с тестовым окружением + 120 для прода.
# CUDA архитектуры. Покрываем production-сценарии:
# sm_61 = Pascal (GTX 1050/1060/1070/1080) — низкобюджетный prod
# sm_75 = Turing (RTX 2060/Quadro RTX) — частый prod
# sm_86 = Ampere consumer (RTX 3060/3090)
# sm_89 = Ada Lovelace (RTX 4090) — тестовое окружение разработки
# sm_120 = Blackwell (RTX 5090) — текущий dev-хост
# Pascal (sm_61) обязателен — у пользователя в проде GTX 1050.
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
set(CMAKE_CUDA_ARCHITECTURES "89;120")
set(CMAKE_CUDA_ARCHITECTURES "61;75;86;89;120")
endif()
if(NOT CMAKE_BUILD_TYPE)
@@ -38,6 +42,9 @@ find_library(LIBDL_LIBRARY dl REQUIRED)
# PNG — для декода RGBA-иконок overlay'ев (Phase 3b)
find_package(PNG REQUIRED)
# FreeType — для text overlay'ев (Phase 3c)
find_package(Freetype REQUIRED)
# ── Сторонние библиотеки (subomodules в third_party/) ───────────────────
# cuframes — статически линкуем libcuframes. cuframes_static — это static lib