2013-10-28 8 views
5

In meinem Programm habe ich eine Textur, die mehrmals in verschiedenen Situationen verwendet wird. In jeder Situation muss ich einen bestimmten Parametersatz anwenden.OpenGL: Wiederverwendung der gleichen Textur mit verschiedenen Parametern

Ich möchte vermeiden, einen zusätzlichen Puffer zu erstellen und im Wesentlichen eine Kopie der Textur für jedes Mal zu erstellen, das ich für etwas anderes brauche, also würde ich gerne wissen, ob es einen besseren Weg gibt?

Antwort

7

Dies ist, was sampler objects sind (verfügbar im Kern seit Version 3.3 oder mit ARB_sampler_objects). Sampler-Objekte trennen das Texturbild von seinen Parametern, sodass Sie eine Textur mit mehreren Parametersätzen verwenden können. Diese Funktionalität wurde mit genau Ihrem Problem erstellt.

Zitat aus ARB_sampler_objects Verlängerungs spec:

In unextended OpenGL Texturen betrachtet werden Sätze von Bilddaten (Mip-Ketten, Arrays, quader Karte Flächensätzen, etc.) und Abtastzustand (Abtastmodus zu sein , Mip-Mapping-Status, Koordinatenumhüllungs- und Klemmregeln usw.) zu einem einzigen Objekt kombiniert. Es ist typisch für eine Anwendung, viele Texturen mit einem begrenzten Satz von Abtastzuständen zu verwenden, die zwischen ihnen gleich sind. Um Texturen auf diese Weise verwenden zu können, muss eine Anwendung viele Texturnamen generieren und konfigurieren, was den Overhead sowohl für Anwendungen als auch für Implementierungen erhöht. Sollte eine Anwendung aus einer Textur auf mehrere Arten (z. B. mit und ohne Mip-Mapping) Proben ziehen wollen, muss sie entweder den Zustand der Textur ändern oder zwei Texturen mit jeweils einer Kopie der gleichen Bilddaten erstellen . Dies kann zu Laufzeit und Speicherkosten für die Anwendung führen.

+0

Auch wenn Sie keine Sampler-Objekte zur Verfügung haben, können Sie den Texturparameter jederzeit ändern. Das sind keine einmaligen Einstellungen. – datenwolf