Basta leggere l'introduzione della proroga stessa:
The texture image specification commands in OpenGL allow each level
to be separately specified with different sizes, formats, types and
so on, and only imposes consistency checks at draw time. This adds
overhead for implementations.
This extension provides a mechanism for specifying the entire
structure of a texture in a single call, allowing certain
consistency checks and memory allocations to be done up front. Once
specified, the format and dimensions of the image array become
immutable, to simplify completeness checks in the implementation.
When using this extension, it is no longer possible to supply texture
data using TexImage*. Instead, data can be uploaded using TexSubImage*,
or produced by other means (such as render-to-texture, mipmap generation,
or rendering to a sibling EGLImage).
This extension has complicated interactions with other extensions.
The goal of most of these interactions is to ensure that a texture
is always mipmap complete (and cube complete for cubemap textures).
gli evidenti vantaggi sono che l'attuazione può rimuovere controlli di completezza/coerenza in fase di esecuzione, e il codice è più robusto, perché non è possibile creare accidentalmente un trama sbagliata.
Elaborare: "immutabile" qui significa che l'archiviazione trama (uno dei tre componenti di una texture: stoccaggio, prelievo, i parametri) viene assegnato volta ed è già completa. Si noti che per archiviazione non si intende il contenuto della memoria - possono essere modificati in qualsiasi momento; si riferisce al processo logico di acquisizione di risorse per quei contenuti (come un malloc).
Con trame non immutabili, è possibile modificare la memoria in qualsiasi momento, mediante chiamate glTexImage<N>D
. Ci sono molti molti modi di sparare in un piede in questo modo:
- è possibile creare mipmap-incompleta texture (probabilmente l'errore newbie più comune con texture, come texture di default hanno 1000 livelli di mipmap, e la gente caricare una sola immagine)
- è possibile creare texture con diversi formati in diversi livelli di mipmap (illegali)
- è possibile creare cubemaps cubemap-incompleti (illegale)
- è possibile creare cubemaps con diversi formati in diverse facce (illegale)
Dal momento che si è permesso di chiamare glTexImage<N>D
in qualsiasi momento, l'attuazione deve sempre controllare, in sorteggio tempo, che la texture è legale. Lo storage immutabile fa sempre la cosa giusta assegnando tutto in una volta (tutti i livelli mipmap, tutte le facce cubemap, ecc.) Con il formato corretto. Quindi non puoi più rovinare una texture (facilmente) e l'implementazione può rimuovere alcuni controlli, il che accelera le cose. E tutti sono felici :)
"* quali sono gli svantaggi di questa funzionalità? *" Il fatto che non fosse in OpenGL 1.1. –
possibile duplicato di [Che cosa fa glTexStorage?] (Http://stackoverflow.com/questions/9224300/what-does-gltexstorage-do) –
Fondamentalmente risolve i difetti di progettazione in OpenGL. A parte pochissime caratteristiche veramente interessanti, la maggior parte della moderna OpenGL riguarda il cambiamento dell'API piuttosto che fornire nuove funzionalità. il fatto è che ora abbiamo un'idea precisa delle funzionalità della GPU (ancora spazio per le nuove cose eh XD) e abbiamo bisogno di API migliori e più coerenti per fornire le capacità agli utenti. – GameDeveloper