Estoy trabajando en una aplicación OpenGL de C++ basada en Linux, que utiliza los controladores Nvidia 290.10 de 64 bits. Estoy tratando de reducir su huella de memoria ya que hace uso de bastantes datos en vivo.uso de pila libGL
He estado usando valgrind/macizo para analizar el uso del montón, y si bien me ayudó a optimizar varias cosas, ahora la mayor parte de la memoria de montón utilizada es asignada por libGL. No importa cómo establezca el umbral, macizo no me permite ver en detalle de dónde provienen esas asignaciones, solo que es libGL. En las horas punta, veo aproximadamente 250 MB asignados por libGL (de un uso total de montón de 900 MB). Tengo una cantidad similar de memoria en la tarjeta gráfica, como VBO y texturas (en su mayoría una gran textura 4096 * 4096).
Parece que una cantidad similar de memoria como la que cargo en la memoria GPU se asigna en el montón por libGL. Las asignaciones de libGL también alcanzan su máximo cuando el volumen de VBO alcanza su máximo. ¿Eso es normal? Pensé que uno de los beneficios de tener una gran cantidad de memoria GPU es que mantiene la memoria RAM libre?
¿qué uso especificó para la VBO en 'glBufferData'? – KillianDS
Para la mayor parte de los VBO, es GL_STATIC_DRAW. En un caso, es GL_STREAM_DRAW, pero el comportamiento es el mismo incluso si esta parte de la aplicación está deshabilitada. – pholz
@KillianDS no importa, porque el uso es solo una pista, no obligatorio. Además, OpenGL debe mantener una copia por varias razones. – datenwolf