02b4141cc1
Issue 0049c. Tres optimizaciones internas en graph_renderer.cpp + un
helper puro en graph_force_layout para detectar convergencia. API publica
intacta — solo cambian el layout interno de los buffers, el shader y
los costes por frame.
1. RGBA8 color packing
- El instance buffer de nodos pasa de (x,y,size,r,g,b,a) 28B a
(x,y,size,color_u32) 16B (-43%). Aristas: 24B → 12B/vertex (-50%).
- Shaders desempaquetan con bit shifts (compatible GL 3.30+, no
necesita unpackUnorm4x8 que es 4.20+).
- Helpers expuestos: pack_rgba8 / unpack_rgba8 / modulate_alpha_rgba8
en graph_renderer.h. Los GraphNode.color y la paleta ya tenian el
layout correcto (R en LSB), asi que CPU ahora pasa el uint32 directo
sin convertir a 4 floats por nodo y por frame.
2. Capacity-tracked streaming buffers
- Sustituye el doble glBufferData de antes por:
glBufferData(NULL, capacity, STREAM_DRAW) // orphan + reserva
glBufferSubData(0, used_bytes, data) // solo lo usado
- capacity crece x2 cuando hace falta (inicial 4096 nodos /
8192 vertices de aristas) → reallocaciones en O(log N).
- Staging CPU (NodeInstance* / EdgeVertex*) reusado entre frames con
realloc, no malloc/free per frame.
3. Frustum cull (CPU-side)
- AABB del viewport en world coords con margen 10%.
- Aristas: skip si AABB del segmento no intersecta el viewport.
- Nodos: solo los visibles entran al instance buffer; visible_count
es el N que pasa a glDrawArraysInstanced. Pop-in de borde mitigado
por el margen.
4. graph_force_layout_should_pause(low_frames, min_consecutive)
- Helper puro: el caller mantiene el contador, la funcion solo
decide si parar. Reemplaza la rama inline en demos_graph.cpp.
- Test Catch2 con secuencias artificiales.
Tests: test_graph_pack_rgba8 (16401 asserts, 4 cases — roundtrip exhaustivo
+ alpha modulation + clamp). test_graph_should_pause (3 cases, 14 asserts).
Los 29 tests del cpp/tests/ siguen verdes (incluido test_visual con goldens).
Bump versiones:
- graph_renderer 1.1.0 → 1.2.0
- graph_force_layout 1.0.0 → 1.1.0 (tested: true via should_pause test)
7.9 KiB
7.9 KiB
Issues
| ID | Título | Estado | Prioridad | Tipo | Bloquea |
|---|---|---|---|---|---|
| 0001 | Jupyter create notebook | completado | — | feature | — |
| 0002 | Jupyter discover root dir | completado | — | bugfix | — |
| 0003 | Jupyter tools documentation | completado | — | docs | — |
| 0004 | Jupyter discover multiple instances | completado | — | feature | — |
| 0005 | Jupyter write batch | completado | — | feature | — |
| 0006 | Jupyter exec outputs keyerror | completado | — | bugfix | — |
| 0007a | DAG engine: core (parse, validate, topo sort) | completado | alta | feature | 0007b-e |
| 0007b | DAG engine: process manager (spawn, wait, kill) | completado | alta | feature | 0007e |
| 0007c | DAG engine: execution store (SQLite) | completado | alta | feature | 0007e |
| 0007d | DAG engine: scheduler (cron match) | completado | media | feature | 0007e |
| 0007e | DAG engine: CLI + web app que reemplaza Dagu | completado | alta | feature | — |
| 0008 | SQLite API Web | completado | alta | feature | — |
| 0009 | HTTP Server Foundation | completado | alta | feature | 0010, 0011, 0014, 0016, 0019, 0021, 0022 |
| 0010 | Auth System (JWT, passwords, OAuth2, RBAC) | completado | alta | feature | 0022 |
| 0011 | WebSocket & SSE Server | completado | alta | feature | — |
| 0012 | Email & SMTP | completado | media | feature | — |
| 0013 | Background Job Queue | completado | alta | feature | — |
| 0014 | File Upload & Storage | completado | media | feature | — |
| 0015 | Database Migrations | completado | media | feature | 0021, 0022 |
| 0016 | Rate Limiting | completado | media | feature | — |
| 0017 | Frontend Data Hooks (React) | completado | alta | feature | — |
| 0018 | Config & Env Management | completado | media | feature | — |
| 0019 | Structured Logging Go | completado | media | feature | — |
| 0020 | PDF Generation | completado | media | feature | — |
| 0021 | CRUD Generator | completado | media | feature | — |
| 0022 | Init Pipelines (scaffolding) | completado | alta | feature | — |
| 0023 | Testing Utilities Go | completado | media | feature | — |
| 0024 | auto_metabase: split dashboard YAMLs por tab | completado | alta | mejora | — |
| 0025 | C++ text_editor + file_watcher | completado | alta | feature | — |
| 0026 | C++ gl_texture_load (stb_image → sampler2D) | completado | alta | feature | 0035, 0036 |
| 0027 | C++ gl_compute_shader + gl_pingpong_fbo + DAG Compute | pendiente | alta | feature | — |
| 0028 | C++ ImPlot3D + surface_plot_3d + scatter_3d | completado | media | feature | — |
| 0029 | C++ mesh_viewer + obj loader + orbit_camera | completado | media | feature | — |
| 0030 | C++ audio reactivo (capture + fft + uniform feed + viz) | pendiente | media | feature | — |
| 0031 | C++ animation curves (timeline + bezier_editor + tween) | completado | media | feature | — |
| 0032 | C++ sql_workbench | completado | media | feature | — |
| 0033 | C++ http_inspector + websocket_client | pendiente | baja | feature | — |
| 0034 | C++ scientific viz (treemap, sankey, chord, contour, voronoi) | completado | media | feature | — |
| 0035 | C++ map_tiles (slippy map OSM) | pendiente | baja | feature | — |
| 0036 | C++ image_canvas + webcam_texture | pendiente | baja | feature | — |
| 0037 | IoC regex extractor (IP, email, dominio, hash, wallet, CVE, MAC) | pendiente | alta | feature | — |
| 0038 | GLiNER entity extractor (zero-shot NER multilingue) | pendiente | alta | feature | 0039, 0040 |
| 0039 | GLiREL relation extractor (zero-shot triplets) | pendiente | media | feature | 0040 |
| 0040 | Pipeline hibrido extraccion grafos (regex + GLiNER + GLiREL + LLM fallback) | pendiente | media | feature | — |
| 0041 | C++ app shell estandarizado (PATTERNS.md + AppConfig extendido) | completado | alta | feature | 0043 |
| 0042 | C++ layout_storage publico (extraer de shaders_lab) | completado | alta | feature | 0043 |
| 0043 | Estandarizar shell de las 4 apps C++ | completado | alta | refactor | 0046 |
| 0044 | Auditar 52 funciones C++ huerfanas y poblar uses_functions | completado | media | chore | — |
| 0045 | Extraer logica pura de impuros (sql_workbench, process_runner, file_watcher, shaders_lab compiler) | completado | media | refactor | — |
| 0046 | Reemplazar raw ImGui en apps por primitivos del registry | completado | media | refactor | — |
| 0047 | C++ tests foundation (Catch2 + top-20 primitivos) | completado | alta | feature | 0048 |
| 0048 | Visual tests via primitives_gallery + CI gate tested:true | completado | media | feature | — |
| 0049 | OSINT graph viewer + GPU graph rendering system (multi-issue) | pendiente | alta | feature | — |
| 0049a | Setup proyecto osint_graph + sub-repo graph_explorer | completado | alta | infra | parte de 0049 |
| 0049b | Bump OpenGL 3.3 → 4.3 core en cpp/framework | completado | alta | infra | parte de 0049 |
| 0049c | graph_renderer Tier 1: RGBA8, orphan, frustum cull, auto-pause | completado | alta | perf | parte de 0049 |
| 0049d | Aristas via vertex pulling con TBO | pendiente | alta | perf | parte de 0049 |
| 0049e | graph_types modelo extendido + EntityType/RelationType | pendiente | alta | feature | parte de 0049 |
| 0049f | Renderer extendido: shapes SDF, icon atlas, flechas, edge styles | pendiente | alta | feature | parte de 0049 |
| 0049g | graph_sources: lector operations.db + abstraccion funcional | pendiente | alta | feature | parte de 0049 |
| 0049h | graph_force_layout_gpu: compute shader + spatial hash | pendiente | media-alta | feature | parte de 0049 |
| 0049i | graph_layouts (radial/hierarchical/fixed) + viewport multi-select | pendiente | media | feature | parte de 0049 |
| 0049j | graph_labels: render etiquetas con LabelPolicy | pendiente | media | feature | parte de 0049 |
| 0049k | App graph_explorer (proyecto osint_graph) — integracion final | pendiente | alta | feature | parte de 0049 |