2013-09-30 26 views
7

Perché non sono un esperto, per favore non considerare questa domanda sciocca. Ho letto diversi tutorial in cui sono stati impostati i parametri di texture usando glTexParameter. Sto parlando di GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_R ecc. All'improvviso mi imbatto in un tutorial che ora usa glSamplerParameter per impostare questi parametri.Qual è la differenza tra glTexParameter e glSamplerParameter

Vedo che ci sono alcuni parametri comuni tra glTexParameter e glSamplerParameter come (GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_R, GL_TEXTURE_MIN_LOD ecc), e ci sono alcuni che sono applicabili solo a glTexParameter (GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_SWIZZLE_R ecc). Capisco perfettamente quelli non comuni perché, dopo tutto, il glTexParameter agisce sull'immagine, e questi parametri stanno specificando gli attributi dell'immagine di per sé.

Ma non capisco perché ci sono alcuni parametri che sono comuni tra queste 2 chiamate GL. Quale dovrebbe essere usato quando? A mio avviso, i parametri di campionamento come (GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_R, ecc.) Dovrebbero essere applicabili solo al campionatore (glSamplerParameter) e non a glTexParameter.

Per favore aiutami a capire la differenza tra due.

risposta

10

glSamplerParameter è relativamente nuovo. Il modo in cui una trama viene campionata è in realtà una proprietà della cosa che esegue il campionamento, non della trama stessa - non solo in termini semantici ma su hardware reale e reale.

Oltre al desiderio di rappresentare le cose come effettivamente funzionano sull'hardware, il collegamento di due elementi non correlati può costare in termini di prestazioni. Se fai il modo in cui qualcosa viene campionato una proprietà del campionatore, ad es. puoi campionare la stessa texture in due modi diversi all'interno dello stesso shader. Se è una proprietà della texture, dovrai caricare la stessa texture due volte o scrivere uno shader multi-pass.

Quindi le due cose vengono ora separate.

+0

suona come utilizza glSamplerParameter è migliore in molti modi. Puoi indicare i casi in cui l'utilizzo di glTexParameter ha i suoi vantaggi? – viktorzeid

+3

@kvikram: Non ce ne sono veramente = P Gli oggetti Sampler sono come avrebbe dovuto sempre funzionare e come funzionava già da anni con D3D. Avere uno stato di campionamento separato dall'oggetto texture è un'enorme spinta, è possibile cambiare la modalità filtro semplicemente associando un campionatore diverso a una TMU. Sono una funzionalità OpenGL 3.3, ma ampiamente supportata. –

+0

Grazie a tutti e due. – viktorzeid

2

Guardate qui per un reference about Sampler Objects E here from geeks3d

E 'stato aggiunto al core OpenGL in versione 3.3 (quindi dovrebbe essere abbastanza bene adattato oggi).

In generale separa il campionamento dalle trame dai dati di trama. In precedenza era compito di Texture Object (che era piuttosto inefficiente e problematico). Ora la nuova soluzione offre molta flessibilità.

I parametri sono gli stessi che per oggetti texture, ma si riferisce solo al campionamento: GL_TEXTURE_WRAP_S​, GL_TEXTURE_WRAP_T​, GL_TEXTURE_WRAP_R​, GL_TEXTURE_MIN_FILTER​, GL_TEXTURE_MAG_FILTER​, GL_TEXTURE_BORDER_COLOR​, GL_TEXTURE_MIN_LOD​, GL_TEXTURE_MAX_LOD​, GL_TEXTURE_LOD_BIAS​, GL_TEXTURE_COMPARE_MODE​, or GL_TEXTURE_COMPARE_FUNC​