Lesen Sie die Einführung von der Verlängerung selbst:
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).
Die offensichtlichen Vorteile sind, dass die Umsetzung kann Vollständigkeit/Konsistenzprüfungen zur Laufzeit entfernen, und der Code ist robuster, weil Sie nicht versehentlich ein erstellen falsche Textur
zu erarbeiten: „unveränderlich“ bedeutet hier, dass die Textur Speicher (eine der drei Komponenten einer Textur: Lagerung, Sampling, Parameter) wird einmal zugeordnet und es ist schon komplette. Beachten Sie, dass Speicher nicht die Speicherinhalte bedeutet - sie können jederzeit ändern; es bezieht sich auf den logischen Prozess des Erwerbs von Ressourcen für diese Inhalte (wie ein malloc).
Mit nicht unveränderlichen Texturen, können Sie den Speicher jederzeit ändern, durch glTexImage<N>D
Anrufe. Es gibt viele, viele Möglichkeiten, sich in den Fuß auf diese Weise Schießen:
- Sie Mipmap-unvollständig Texturen erstellen können (wahrscheinlich die häufigste Neuling Fehler mit Texturen, als Texturen standardmäßig 1000 MipMap Ebenen haben, und die Menschen laden Sie nur ein Bild)
- Sie Texturen mit verschiedenen Formaten in verschiedenen MipMap Ebenen (illegalen)
- Sie können Cubemap-unvollständig Cubemaps (illegalen)
- Sie erstellen können Cubemaps mit unterschiedlichen Formaten in verschiedenen Gesichtern (illegal erstellen erstellen können)
Da Sie erlaubt sind glTexImage<N>D
bei nennen jederzeit, muss die Implementierung immer überprüfen, bei Einzeichnungszeit, dass Ihre Textur legal ist. Unveränderlicher Speicher macht immer das Richtige für Sie, indem Sie alles auf einmal zuweisen (alle Mipmap-Ebenen, alle Cubemap-Gesichter usw.) mit dem richtigen Format. Man kann also keine Textur (leicht) mehr vermasseln, und die Implementierung kann einige Überprüfungen entfernen, was die Dinge beschleunigt. Und alle sind glücklich :)
"* Was sind die Nachteile dieser Funktion? *" Die Tatsache, dass es nicht in OpenGL 1.1 war. –
mögliches Duplikat von [Was macht glTexStorage?] (Http://stackoverflow.com/questions/9224300/what-does-gltexstorage-do) –
Es repariert im Grunde Designfehler in OpenGL. Abgesehen von sehr wenigen, wirklich interessanten Features, geht es in den meisten modernen OpenGLs eher um API-Änderungen als um neue Funktionen. Tatsache ist, dass wir jetzt eine genaue Vorstellung von GPU-Fähigkeiten haben (immer noch Platz für neue Sachen, wie XD) und wir brauchen bessere und konsistentere APIs, um den Benutzern Fähigkeiten zu bieten. – GameDeveloper