La mejor práctica de Vulkan al enviar commands de dibujo

Al igual que con la mayoría de los proyectos que trabajan en una biblioteca de charts, necesito enviar dinámicamente llamadas al buffers de commands, pero ¿cuál es la mejor manera de hacerlo? Actualmente, para cada cuadro, reconstruyo mis buffers de command, especifico los objects que deseo renderizar y luego destruyo el buffer del command. ¿Lo estoy haciendo de la manera correcta? Pensé que podría haber un command claro para el búfer, pero todavía necesito encontrarlo.

Otra forma en que pensé que podría hacer que funcione es cuando se necesita mostrar / eliminar un object, entonces, y solo entonces, reconstruyo el buffer de command. Pero nuevamente no estoy seguro de cómo manejar esto correctamente.

Cualquier ayuda es muy apreciada.

Una buena forma es mantener varios sets de resources, cada set para un solo cuadro. Cada set debe contener un búfer de command (o más), un cercado y dos semáforos.

Ahora registra un búfer de command (o más), potencialmente con el indicador ONE_TIME_SUBMIT, y lo envía a una queue. Durante el envío, espera el semáforo de "image adquirida" que se proporcionó a la function vkAcquireNextImageKHR (). También proporciona el segundo semáforo y la valla que se debe señalar. Semaphore se usa para la function vkQueuePresentKHR ().

Para el siguiente fotogtwig, toma otro set de los resources anteriores hasta que se quede sin todos los sets. Luego, simplemente toma el set que es el más antiguo (el que se usó less recientemente). Verifica si la cerca de este set ya está señalizada. Si es así, usted graba el búfer de command y realiza todo el trabajo habitual. Si la cerca no está señalada, espere. Pero si tiene 3 o 4 sets de este tipo, existe una pequeña posibilidad de que la valla no esté señalizada.

No puede volver a grabar un búfer de command mientras aún se está procesando, por lo que debe esperar. Pero este enfoque permite minimizar la espera. No es necesario utilizar funciones como vkDeviceWaitIdle () y, por lo tanto, detener la canalización de hardware de charts. También es más fácil equilibrar el consumo de memory, el retraso de input y el performance. Cuantos más juegos, less espera y mejor performance, pero se usa más memory y, potencialmente, puede boost el retraso de input. Típicamente 2, 3, tal vez 4, sets deberían ser suficientes.

El ejemplo de tal enfoque se describe en el Cookbook de Vulkan y se presenta en Github:

Aumentando el performance mediante el aumento de la cantidad de fotogtwigs por separado