2017-07-02 4 views
0

Die glTexImage2D Funktion übernimmt unter anderem die so genannte „innere Basis-Formate“ unten aufgeführt:Wie funktionieren interne Basisformate?

GL_DEPTH_COMPONENT 
GL_DEPTH_STENCIL 
GL_RED 
GL_RG 
GL_RGB 
GL_RGB 

Diese erscheinen für jede Art und Größe Informationen fehlen. Zitieren der Dokumentation:

Wenn eine Anwendung die Textur in einer bestimmten Auflösung oder in einem bestimmten Format speichern möchte, kann sie die Auflösung und das Format mit InternalFormat anfordern. Der GL wählt eine interne Repräsentation, die der von internalFormat angeforderten entspricht, aber möglicherweise nicht genau übereinstimmt. (Die Darstellungen von GL_RED angegeben, GL_RG, GL_RGB und GL_RGBA müssen genau übereinstimmen.)

Diese Formate sind nicht für glTexStorage2D in der Dokumentation aufgeführt sind, und ich kann nichts genauer über sie finden. Ich habe anscheinend GL_RGBA Arbeit durch dummes Glück gemacht, aber ich würde gerne besser verstehen, was ich hier mache.

Was passiert genau, wenn ich ein internes Basisformat verwende?
Wie werden Art, Größe und Layout des Speichers ausgewählt?
Muss ich das gewählte Format anschließend abfragen und den Rest meines Programms anpassen, zB GLSL-Sampler-Typen?

Antwort

1

Der Grund glTexStorage* erlaubt nicht "interne Basisformate" ist, weil Sie nicht verwenden sollten. Es unterstützt nur interne Formate mit klar definiertem Verhalten.

Was passiert genau, wenn ich ein internes Basisformat verwende?

Sie erhalten ein Bildformat, das innerhalb der unten aufgeführten Grenzen für den gewünschten Treiber verfügbar ist.

Wie werden Art, Größe und Layout des Speichers ausgewählt?

Der "Typ" wird für solche Texturen immer vorzeichenlose, normalisierte ganze Zahlen sein. Es wird mindestens die Kanäle im internen Basisformat haben.

Alles andere liegt ganz bei dem Fahrer. Wenn der Treiber mehr Kanäle hinzufügen möchte, als Sie angegeben haben, kann er dies tun. Wenn der Treiber Ihnen ein 16-Bit-pro-Kanal-Format geben möchte, kann es dies tun.

Muss ich das gewählte Format anschließend abfragen und den Rest meines Programms anpassen, zum Beispiel GLSL-Sampler-Typen?

Es gibt nichts abzufragen, da sie immer vorzeichenlose, normalisierte Bilder sind. Sie verwenden also sampler*, nicht usampler* oder isampler* in Shadern.

+0

Danke! Nur um klar zu sein, ich bin besser dran, ständig von diesen Formaten weg zu bleiben, richtig? – Quentin