Atualizando o OpenGL de 3.0 para 3.1

1

Eu preciso atualizar minha versão do OpenGL de 3.0 para 3.1. O StackExchange está cheio de postagens que abordam situações específicas, e foi difícil para mim ver a árvore da madeira, sem mencionar a estimativa do envelhecimento das árvores, por assim dizer.

Portanto, coletei as seguintes informações sobre minha situação, apenas para fazer outra pergunta específica de caso. As perguntas são

  1. Se a atualização é possível
  2. Quais etapas devem / podem ser tomadas para esse fim (por favor, seja o mais específico possível)

A situação é a seguinte:

  • SO: Ubuntu 14.04 LTS
  • Kernel, de uname -vr : 4.4.0-96-generic # 119 ~ 14.04.1-Ubuntu SMP Qua. Set 13 08:40:48 UTC 2017
  • Dispositivo, de lshw -c video : controlador compatível com VGA GT218 [GeForce 210] NVIDIA --- isso suporta OpenGL 3.1 a partir do especificações do fornecedor
  • Driver de lshw -c video : nouveau
  • Informações do Nouveau de dpkg -l | grep nouveau

    ii libdrm-nouveau2:amd64 2.4.67-1ubuntu0.14.04.2 amd64 [...] ii libdrm-nouveau2:i386 2.4.67-1ubuntu0.14.04.2 i386 [...] ii xserver-xorg-video-nouveau-lts-xenial 1:1.0.12-1build2~trusty1 amd64 [...]

  • Informações do OpenGL de glxinfo | grep OpenGL

    OpenGL vendor string: nouveau OpenGL renderer string: Gallium 0.4 on NVA8 OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.0 OpenGL core profile shading language version string: 3.30 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.0 Mesa 11.2.0 OpenGL shading language version string: 1.30 OpenGL context flags: (none) OpenGL extensions:

Informações adicionais disponíveis mediante solicitação. Por exemplo, o synaptic lista 28 pacotes instalados respondendo ao termo de busca 'mesa', mas eu não sabia dizer qual deles é relevante.

    
por XavierStuvw 26.09.2017 / 11:23

2 respostas

1

Resumindo os comentários: o aplicativo provavelmente se comporta mal.

OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.0

Isso significa que você tem o Mesa 11.2 instalado e a versão máxima suportada do OpenGL é 3.3.

Agora, por que o aplicativo diz o contrário? A maneira mais comum de consultar a versão do OpenGL costumava ser uma chamada para glGetString(GL_VERSION) e é isso que o aplicativo usa.

Prova que usa isso? A variável de ambiente MESA_GL_VERSION_OVERRIDE altera a versão relatada para o que você definiu. E defini-lo como 3.1 faz com que o aplicativo pare de reclamar.

Agora, como todas as funções OpenGL, glGetString requer que um contexto OpenGL esteja ativo. No entanto, desde o lançamento do OpenGL 3.2 , para criar um contexto OpenGL, você deve declarar de antemão a versão que você deseja. Isso permite que as versões posteriores permitam compatibilidade quando os programas usam uma versão mais antiga (*) .

O mais divertido está aqui: a versão relatada por glGetString depende de qual versão foi selecionada ao criar o contexto. Isso leva a aplicativos mal implementados e antigos que não selecionam um perfil explicitamente para acreditar que a versão solicitada é a versão máxima suportada. E se o aplicativo não selecionar uma versão, um contexto de compatibilidade será criado automaticamente com uma versão mais antiga. Eu acho que isso é o que você vê nesta linha:

OpenGL version string: 3.0 Mesa 11.2.0

Se este for o problema real, a atualização não alterará nada. Mas você pode manter o truque MESA_GL_VERSION_OVERRIDE=3.1 . Ele deve carregar um perfil 3.1 e deixar o programa feliz enquanto aguarda a correção.

(*) Sobre perfis. Isso é algo novo com o OpenGL 3.2, o conjunto de recursos do OpenGL pode ser selecionado em tempo de execução, permitindo que o programa solicite uma versão do OpenGL, para a qual a implementação do OpenGL será “downgrade”. Isso funciona da versão 3.2 para frente, deixando a questão sobre o que fazer com todas as coisas antigas, especialmente porque o OpenGL3 é uma grande reformulação da API (o glBegin / glVector e outras coisas sumiram). A escolha foi feita para dividir a API em dois perfis: Core e Compatibility. O contexto de compatibilidade retém chamadas antigas e obsoletas enquanto o contexto principal as elimina.

O suporte a um contexto de compatibilidade é completamente opcional e, embora a maioria dos fornecedores ofereça um que corresponda aproximadamente ao tempo da divisão (de 3.0 a 3.2), poucos se incomodam em fazer versões mais recentes do contexto de compatibilidade. Foi o que sugeriu @Ruslan em sua resposta: O Mesa suporta apenas o perfil de compatibilidade do OpengGL 3.0, mas a nVidia também suporta versões superiores. Isso poderia deixar seu programa feliz sem ter que mentir para ele.

    
por 26.09.2017 / 15:45
0

No caso de seu aplicativo exigir suporte de perfil de compatibilidade, você está sem sorte com o Mesa: ele só suporta o perfil do Core e é onde ele mostra o suporte do OpenGL 3.3.

Se você precisar que o aplicativo funcione, talvez queira instalar o driver nvidia proprietário oficial em vez do nouveau. Suporta totalmente os perfis principais e de compatibilidade, bem como muitas extensões específicas da nvidia.

Se você escolher instalar o driver oficial, você vai querer a série 340 dele, empacotada como nvidia-340 no Ubuntu (essa é a versão sugerida pela nvidia.com para a GeForce 210).

    
por 26.09.2017 / 17:47