Renderização pura do software OpenGL

8

Para treinar um algoritmo de aprendizado de máquina, precisamos renderizar alguma geometria no OpenGL sem qualquer suporte de renderização de hardware (sem placa gráfica). Estávamos pensando em renderizar em software puro e já vimos o Mesa. Parece que ele é capaz de renderizar em software puro, mas até agora só obtemos o OpenGL 2.x, enquanto precisamos do OpenGL 3.3.

Alguém sabe se isso é possível? e se sim, como? Parece que nos deparamos com obstáculos o tempo todo.

(Antecedentes, por que queremos fazer isso: para treinar o algoritmo de aprendizado, precisamos executar várias execuções de nosso software em um cluster de PC, o que não permite a renderização em hardware.)

Quaisquer dicas, idéias e ponteiros serão apreciados.

Gabriel
fonte
O Mesa nem suporta o OpenGL 3.3 acelerado por hardware em alguns sistemas (como o meu laptop).
Coronel Trinta e Dois
relacionada gamedev.stackexchange.com/questions/17571/...
Ciro Santilli冠状病毒审查六四事件法轮功

Respostas:

6

Estou confuso com suas necessidades. Você está executando o código em um PC ou sistema incorporado? Se você estiver executando em algo que remotamente se pareça com um PC, "qualquer suporte à renderização de hardware" simplesmente não é verdade. No mínimo, você tem algumas coisas integradas da Intel. Ainda não vi um sistema decapitado que fisicamente não possuía um chip de vídeo.

Em um sistema sem cabeça, você pode renderizar sem uma janela. Como fazer isso com o GLX, você pode ver detalhes no OpenGL sem janelas . De qualquer forma, mesmo o hardware mais ruim será mais eficiente que um renderizador de software.

Se você realmente está preocupado e absolutamente não possui hardware gráfico, pode usar algo como o VirtualGL .

Mas se você está sintetizando imagens em software usando o OpenGL, é um pouco atrás. O OpenGL foi desenvolvido de acordo com as severas restrições do hardware gráfico. O resultado é que há restrições significativas de construção que podem ser ignoradas voluntariamente ao renderizar em software. Além disso, o algoritmo raster não é muito eficiente ao usar o hardware atual. Um traçado de raios de primeira ordem pode ser mais eficiente e paralisa facilmente vários núcleos. Talvez você possa procurar algo como o PovRay .

rioki
fonte
11
Existem alguns chips de vídeo intel de baixa qualidade fabricados até hoje, que suportam apenas OpenGL 1.4 + ARB assembly de fragmentos + conjunto de vértices implementados por software ARB. Estes não serão mais eficientes do que renderizador de software para qualquer aplicativo que requer OpenGL 3.
Ruslan
Muito obrigado. Sim, é parecido com um PC. Primeiro, um PC simples em um cluster de PCs, no qual efetuamos login via ssh. Posteriormente, serão nós do PC em um sistema HPC. O problema é: não importa o que façamos, sempre temos o OpenGL 2.1. Nosso aplicativo é baseado no Qt, mas na versão sem janelas, todo o código do Qt está inativo, exceto o que cria o contexto do OpenGL. E, sim, configuramos DISPLAY para: 0,0 na máquina remota.
Gabriel
Mas, novamente, o OpenGL 2.1 não é tão ruim. Eu usei isso extensivamente com bons resultados.
Rioki
3

Parece que apenas o OpenGL 2.x é totalmente suportado pelo renderizador de software no Mesa.

No entanto, esta resposta sugere que a maioria das funcionalidades do OpenGL 3.x é suportada por extensões. Então, você pode tentar.

kolrabi
fonte