Em OpenGL as funções tampão de objectos ( glBufferData
, glBufferSubData
, e provavelmente alguns outros) têm um parâmetro usage
, descrito pela documentação como uma sugestão da utilização pretendida, provavelmente destina-se a ajudar a execução de rendimento melhor desempenho.
uso
Especifica o padrão de uso esperado do armazenamento de dados. A constante simbólica deve ser
GL_STREAM_DRAW
,GL_STREAM_READ
,GL_STREAM_COPY
,GL_STATIC_DRAW
,GL_STATIC_READ
,GL_STATIC_COPY
,GL_DYNAMIC_DRAW
,GL_DYNAMIC_READ
, ouGL_DYNAMIC_COPY
.
[...] o
uso é uma dica para a implementação do GL de como o armazenamento de dados de um objeto de buffer será acessado. Isso permite que a implementação do GL tome decisões mais inteligentes que possam afetar significativamente o desempenho do objeto de buffer. No entanto, não restringe o uso real do armazenamento de dados.
O wiki é igualmente vago:
Essas são apenas dicas, afinal. É um código OpenGL perfeitamente legal modificar um buffer STATIC depois que ele foi criado ou nunca modificar um buffer STREAM.
[...]
Essas são perguntas que só podem ser respondidas com um perfil cuidadoso. E mesmo assim, a resposta será precisa apenas para essa versão específica do driver daquele fornecedor de hardware específico.
Em suma, qual é a relevância desse parâmetro, se é que existe? Os motoristas realmente levam isso em consideração e, se o fazem, em sua experiência, quanto isso afeta o desempenho na prática? Você tem dados para compartilhar?
Eu escrevi uma camada fina de abstração de API de elementos gráficos que deve ser implementada como uma das APIs existentes, e é tentador ignorar completamente esse parâmetro e ocultá-lo da abstração exposta.