2017-09-26 1 views
0

Ich verwende OpenGL 4 für einige Texturmanipulationen in Visual C++. Die Plattform, an der ich arbeite, ist Visual Studio 2015. Nachdem ich die Implementierung von GL_TEXTUREI Textureinheiten betrachtet habe, habe ich herausgefunden, dass die Gesamtzahl auf 0 bis 31 (insgesamt 32) begrenzt ist.Anzahl der Textureinheiten (GL_TEXTUREi) in OpenGL 4-Implementierung in Visual Studio 2015

Bedeutet dies, dass die maximale Anzahl an Texturen, auf die gleichzeitig zugegriffen werden kann, auf 32 begrenzt ist? Diese

ist aus der Umsetzung Quellcode:

#define GL_TEXTURE0 0x84C0 
#define GL_TEXTURE1 0x84C1 
#define GL_TEXTURE2 0x84C2 
#define GL_TEXTURE3 0x84C3 
#define GL_TEXTURE4 0x84C4 
#define GL_TEXTURE5 0x84C5 
#define GL_TEXTURE6 0x84C6 
... 
#define GL_TEXTURE31 0x84DF 
+4

Verwandte/Duplizieren: [Wie viele Texturen können in der Regel I sofort binden?] (https://gamedev.stackexchange.com/questions/30043/how-many-textures-can-usu-ibind-at-once) (Ich kann nicht wirklich als dupieren, weil es von GameDev. SE) – Borgleader

Antwort

5

Die Anzahl von Texturen, die OpenGL gebunden werden kann, ist nicht oder . Es ist nicht das, was Sie mit glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units); bekommen. Diese Funktion ruft die Anzahl der Texturen ab, auf die mit dem Fragment-Shader zugegriffen werden kann.

Siehe, jede shader has its own limit of the number of textures it can use. Es gibt jedoch auch eine Gesamtzahl von Texturen, die verwendet werden können, Punkt. Dies ist (in OpenGL) durch GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS definiert.

Es gibt also zwei Grenzen: die Texturen pro Stufe und die Texturen insgesamt.

OpenGL 3.x definiert die Mindestanzahl für das Limit pro Stufe 16, also darf die Hardware nicht weniger als 16 Texturen pro Stufe haben. Es kann eine höhere Grenze haben, aber Sie wissen, dass Sie mindestens 16 bekommen. 3.x definiert die minimale Anzahl für die Texturen-Gesamtgrenze als 48. AKA: 16 * 3 Stufen. Ähnlich definiert GL 4.x die Zahlen als 16 Texturen pro Stufe und 80 Texturen als total gebunden (dh: 16 * 5 Stufen).

Wieder sind dies die Minimum Nummern. Hardware kann (und geht) variieren.

Um mehr Textureinheiten zu verwenden, als es Aufzählungen definiert sind, nehmen Sie den Wert GL_TEXTURE0 und fügen Sie es an die Textureinheit, die Sie bearbeiten möchten:

glActiveTexture(GL_TEXTURE0 + unit_index);