perf(viz): graph_renderer edges via TBO + vertex pulling (issue 0049d)
El buffer de aristas pasa a estatico (16B/arista: source, target, color, flags) y solo se reupload cuando cambia el grafo. Las posiciones de los nodos viven en un Texture Buffer Object (RG32F) actualizado por frame; el vertex shader hace texelFetch con gl_VertexID & 1 para elegir endpoint. Draw call: glDrawArraysInstanced(GL_LINES, 0, 2, edge_count) con divisor=1. Para 100k aristas: el upload de 4.8 MB/frame baja a 0 en regimen estable. edge_alpha pasa a uniform; la pre-multiplicacion en CPU desaparece. GLSL sigue en 330 core (samplerBuffer/texelFetch estan en 1.40+). gl_loader gana glBufferSubData, glVertexAttribIPointer y glTexBuffer (en Linux ya estaban via GL_GLEXT_PROTOTYPES; ahora estan disponibles tambien en MinGW/Windows). Tests: nuevo test_graph_edge_static valida el layout de 16B y el packing RGBA8 del fallback. test_visual sigue verde — render visualmente identico. Bump graph_renderer 1.2.0 -> 1.3.0.
This commit is contained in:
@@ -55,6 +55,10 @@
|
||||
extern PFNGLGENRENDERBUFFERSPROC fn_glGenRenderbuffers;
|
||||
extern PFNGLRENDERBUFFERSTORAGEPROC fn_glRenderbufferStorage;
|
||||
extern PFNGLFRAMEBUFFERTEXTUREPROC fn_glFramebufferTexture; // sin "2D"
|
||||
// Vertex pulling — issue 0049d (TBO de posiciones + sub-data streaming)
|
||||
extern PFNGLBUFFERSUBDATAPROC fn_glBufferSubData;
|
||||
extern PFNGLVERTEXATTRIBIPOINTERPROC fn_glVertexAttribIPointer;
|
||||
extern PFNGLTEXBUFFERPROC fn_glTexBuffer;
|
||||
|
||||
#define glAttachShader fn_glAttachShader
|
||||
#define glBindBuffer fn_glBindBuffer
|
||||
@@ -100,6 +104,9 @@
|
||||
#define glGenRenderbuffers fn_glGenRenderbuffers
|
||||
#define glRenderbufferStorage fn_glRenderbufferStorage
|
||||
#define glFramebufferTexture fn_glFramebufferTexture
|
||||
#define glBufferSubData fn_glBufferSubData
|
||||
#define glVertexAttribIPointer fn_glVertexAttribIPointer
|
||||
#define glTexBuffer fn_glTexBuffer
|
||||
#else
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#include <GL/gl.h>
|
||||
|
||||
Reference in New Issue
Block a user