Domanda

So che per salvare / ripristino dello stato matrice si utilizza standard push / pop operazioni. Non sono stato in grado di trovare una convenzione decente per il salvataggio / ripristino dello stato come quando si usa glLineWidth () o glColor4ub ().

Non sembra davvero necessario fino a quando si imposta la larghezza della linea o il colore in modo corretto ogni volta che si vuole disegnare qualsiasi cosa, ma posso vedere un esempio di dove siete nella vostra funzione di disegno, chiamare una funzione di disegno separato che cambia il larghezza della linea su di voi senza la vostra conoscenza, e poi quando si va a continuare a disegnare farlo uscire non è come previsto.

Per correzione che si può reimpostare la larghezza della linea dopo la chiamata di qualsiasi funzione che non si sa quello che fa, ma che sembra poco elegante e sento che ci dovrebbe essere già essere una soluzione a questo, ma che ho perso in qualche modo.

Per il mio proprio codice che ho fatto questo all'inizio di ogni funzione di disegno:

GLfloat savedLineWidth = 1.0f;
glGetFloatv(GL_LINE_WIDTH, &savedLineWidth);
glLineWidth(lineWidth);

E poi ripristinando lo stato alla fine della funzione di disegno in questo modo:

glLineWidth(savedLineWidth);

che in realtà non mi aiuta però a meno che io presumo che ogni funzione di disegno che non so l'interno di è bello e ripristina lo stato da solo.

Devo fare questo presupposto? O mi sto perdendo qualcosa?

È stato utile?

Soluzione

Se questo era evidente OpenGL (non ES variante) allora si potrebbe spingere l'attributo come:

glPushAttrib(GL_LINE_WIDTH);
glLineWidth(2.0f);
... etc ...
glPopAttrib();

Purtroppo, in OpenGL ES questo non è disponibile. Il tuo approccio di ottenere e l'impostazione è quanto di meglio si possa ottenere.

Basta provare a ridurre il numero di volte in cui si fa un get come questo è un processo molto tempo. A differenza di invio, ottenendo non è tamponata.

Forse il vostro approccio dovrebbe essere quello di non solo preoccupazione. Ogni volta che si desidera impostare la linea di larghezza poi basta impostarlo. Spessore linea non dovrebbe influire troppo.

chiamata dura. Dipende da cosa queste altre funzioni di disegno sono. Avete il codice? Forse si poteva guardare?

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