A Nvidia possui uma extensão para criar buffers de comando no GL moderno .
O motivo da falta de funcionalidade semelhante é que há muito estado envolvido em relação à renderização e a lista de exibição é afetada por muitos estados diferentes. Por exemplo, alterar o estado de mesclagem exige a correção do sombreador de fragmento em algum hardware.
A NVidia resolveu capturando todo o estado e redefinindo para o estado após um despacho:
1) O que motiva o design?
O objetivo principal é poder reutilizar buffers de comando pré-validados. Outras APIs e propostas abordaram isso com várias encarnações de listas de comandos ou objetos de estado, mas um problema recorrente é que as interações entre os vários estágios do pipeline impedem essa prevalência e reutilização. Essas interações geralmente são específicas de hardware (e diferem de fornecedor para fornecedor ou mesmo de geração para geração) e novas interações são introduzidas por novos recursos que não eram imaginados quando o esquema de prevalência foi proposto.
Tentamos resolver isso, tendo um objeto de estado monolítico que abrange (quase) todo o estado do pipeline. Isso deve fornecer informações suficientes para todas as implementações para realizar qualquer validação cruzada necessária. Tentamos criá-los de uma maneira que minimize a nova área de cobertura da API - já que queremos o estado ALL (incluindo qualquer estado adicionado no futuro), apenas a capturamos do estado atual do contexto.
[...]
23) Em que condição o estado permanece, que é modificado por tokens, após a chamada de despacho?
RESOLVIDO: o estado é redefinido.
(a partir do texto da extensão vinculado acima)
No entanto, o verdadeiro sucessor é a funcionalidade do buffer de comando no DX12 e no vulkan. Eles também capturam todo o estado de renderização em um único objeto a ser usado ao criar e preencher o buffer de comando. A extensão NVidia é baseada nessa arquitetura como resultado do envolvimento da NVidia no design do Vulkan.