Pergunta

Eu tenho um projeto que shaders usos GLSL.

Este projeto é projetado para não imprimir nada na saída padrão a menos que algo está errado ou você explicitamente ligar alguns saída de depuração extra.

Quando uma compilação shader falhar o comprimento log dada pelo glGetProgramInfoLog é> 0, e às vezes quando ele consegue seu> 0, e dá compilação avisos em seu lugar. Quando você tem um shader que compila perfeitamente o comprimento log é <1 ... é assim que funciona no meu cartão NVidia na minha máquina dev.

Para meus pecados, eu também fazer alguma dev em um laptop com uma placa gráfica integrada Intel. O código funciona muito bem, mas sempre que eu faço uma shader compilação do log contém:

"shader foi compilado com sucesso para rodar em hardware"

O que é muito chato, como eu agora não tenho nenhuma maneira de decidir se eu deve imprimir a corda para fora, para além de algum tipo de análise de corda, por exemplo:

strstr("successfully",log)

Esperamos que seu óbvio por que isso é indesejável. Como, se em tudo, posso saber se uma mensagem vale a impressão usando a API OpenGL?

EDIT:

Se eu usar glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err); então eu não receber avisos de compilação, somente os erros.

Foi útil?

Solução

Aqui vai:

glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }

Este é o status somente compilação você começa; não há nenhuma maneira portátil que eu encontrei para determinar se você tem avisos. (O log de compilação pode ser cheio de quaisquer que sejam os cuidados de implementação para colocar nele, incluindo a notificação de sucesso.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top