Domanda

Ho un progetto che utilizza shader GLSL.

Questo progetto è progettato per non stampare nulla su stdout a meno che qualcosa non vada storto o non si attivi esplicitamente un output di debug aggiuntivo.

Quando la compilazione di uno shader fallisce, la lunghezza del registro fornita da glGetProgramInfoLog è > 0, e talvolta quando ha successo il suo > 0, e dà invece compilazione avvisi . Quando hai uno shader che compila perfettamente la lunghezza del registro è & Lt; 1 ... ecco come funziona sulla mia scheda NVidia sulla mia macchina di sviluppo.

Per i miei peccati, faccio anche qualche sviluppo su un laptop con una scheda grafica integrata Intel. Il codice funziona bene, ma ogni volta che compilo uno shader il registro contiene:

" shader è stato compilato con successo per essere eseguito su hardware "

Il che è molto fastidioso, dato che ora non ho modo di decidere se stampare la stringa, a parte una sorta di analisi delle stringhe, ad esempio:

strstr("successfully",log)

Speriamo che sia ovvio il motivo per cui è indesiderabile. Come posso sapere se vale la pena stampare un messaggio usando l'API OpenGL?

EDIT:

Se uso glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err); non visualizzo avvisi di compilazione, ma solo errori.

È stato utile?

Soluzione

Ecco qua:

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

Questo è l'unico stato di compilazione che ottieni; non ho trovato alcun modo portatile per determinare se hai degli avvisi. (Il registro di compilazione può essere pieno di tutto ciò che l'implementazione desidera inserire, compresa la notifica del successo.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top