2012-07-30 10 views
5

Sono di fronte a problemi con il wrapping della trama. che sta causando artefatti. Poiché il mio codebase è diventato enorme, l'unico modo che posso immaginare è di eseguire alcuni controlli per vedere se certe trame rientrano nella categoria che sta causando artefatti e cambiano i parametri prima di disegnare sul renderbuffer.È brutto impostare glTexParameteri() durante il tempo di rendering?

Quindi è generalmente ok? per impostare parametri come

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); 

dopo glBindTexture durante il ciclo di rendering? o avrebbe effetto FPS in quanto aumenterebbe le operazioni durante ogni frame di rendering?

risposta

8

La modifica dei parametri di trama di solito non ha un impatto troppo grave sulle prestazioni, poiché lascia cache intatte e modifica solo il modello di accesso.

Tuttavia nelle versioni successive di OpenGL per questo scenario di utilizzo molto specifico sono stati introdotti "Oggetti Sampler". Penso che potresti volerli dare un'occhiata.

+0

Grazie mille :) – Gamer

+3

Ho trovato [Arcsintesi capitolo 14] (http://www.arcsynthesis.org/gltut/Texturing/Tutorial%2014.html) su trame/campionamento utile in relazione a questo. – FriendlyGuy

3

La regola generale è questa: non modificare nessuno stato che non sia necessario.

Se una trama ha una proprietà intrinseca che consente di utilizzare una modalità di avvolgimento a ripetizione speculare, è necessario che contenga sempre la proprietà. Pertanto, la trama avrebbe dovuto essere originariamente impostata con quella modalità di avvolgimento.

Se è qualcosa che è necessario fare in fase di rendering, quindi sì, è possibile farlo. Se influisce negativamente sulle tue prestazioni dipende interamente dal modo in cui la CPU ha associato il tuo codice di rendering.

Nota:

Poiché il mio codice di base è cresciuto enorme

Questo è mai una buona ragione per fare qualsiasi cosa . Se non riesci a trovare un modo per far sì che il tuo codice lo faccia nel modo giusto, probabilmente qualcosa di brutto è accaduto nella tua base di codice. E devi correggere che prima di provare ad affrontare questo problema di texture.

+0

Mentre sono d'accordo, che normalmente i parametri di campionamento delle texture sono legati al contenuto della trama, ci sono alcuni casi in cui una singola trama può essere sensibilmente usata con diversi parametri di campionamento. Ad esempio potresti avere qualche LUT che può essere usato sia ciclicamente, sia ciclicamente, a seconda dell'uso. Ad esempio, la stessa trama delle bande può essere utilizzata in uno shader di marmo (ciclo a specchio) e uno shader di legno (ciclo avvolto) con diversi metodi di generazione di texcoord. – datenwolf

+0

Grazie per tutte le giustificazioni valide. Adesso è completamente sicuro :-) – Gamer

Problemi correlati