2008-10-24 14 views
5

Ich habe eine undefinierte Anzahl von Display-Kontext und jeder wird eine Textur anzeigen. Wenn ich glGenTextures anrufe, wird derselbe Name über alle Anzeigekontexte zurückgegeben. Ob das funktioniert? Obwohl sie denselben Namen haben, werden sie immer noch verschiedene Texturen speichern und anzeigen? Wenn nicht, was sollte man tun, um dies zu umgehen?OpenGL-Texturen mit mehreren Anzeigekontexten

Antwort

2

Den gleichen Namen von glGenTexture zu bekommen und die gleiche Textur angezeigt zu bekommen ist nicht das Gleiche.

Texturnamen sind nur ganze Zahlen im Kontext eines Kontextes, normalerweise beginnend mit 1 und inkrementierend mit jedem glGenTexture, aber nicht notwendigerweise so. Eine Implementierung ist nicht erforderlich, um so zu arbeiten (obwohl die meisten dies tun). Man könnte theoretisch aber auch eine mehr oder weniger "zufällige" Zahl erhalten, wie zum Beispiel eine Ganzzahl, die für jede Art von Objekt inkrementiert (also nicht nur Texturen, sondern auch Puffer und Shader), oder sogar eine 32-Bit-Pointer-Adresse in der Adressraum des Fahrers oder eine andere esotherische Sache. Es ist nicht erforderlich, dass ein Name etwas Spezifisches sein muss.

In Legacy OpenGL könnten Sie sogar Ihre eigenen Namen erstellen, anstatt glGenTexture zu verwenden, aber das ist jetzt nicht mehr legal. Ich bin nicht sicher, was sie dachten, wenn das erlaubt war, aber trotzdem ... :)

Die gleiche Nummer (Name) in einem anderen Kontext wird normalerweise eine andere Textur sein, oder möglicherweise überhaupt keine Textur. Wenn Sie also die gleiche Textur in einem anderen Kontext mit demselben Texturnamen sehen, haben Sie entweder gemeinsame Kontexte oder der Treiber ist fehlerhaft.

Beachten Sie, dass wenn Sie wglCreateContextAttribsARB verwenden, der zweite Parameter das Handle eines bereits vorhandenen Kontexts (oder Null) ist. Wenn Sie hier ein Kontext-Handle angeben, haben Sie sogar ohne freigegebene Kontexte, die glShareLists explizit aufrufen. Vielleicht ist das zufällig passiert.

2

Texturen werden (standardmäßig) nicht über Kontexte hinweg gemeinsam genutzt - Sie müssen dies explizit aktivieren, aber wie Sie dies tun, ist plattformspezifisch.

Auf Win32 ist es wglShareLists, und auf den meisten anderen Plattformen wird es angegeben, wenn Sie den Kontext erstellen (zB mit dem share Parameter zu aglCreateContext auf OS-X).

1

Meiner Kenntnis nach habe ich keine Textur-Freigabe aktiviert. Die gleiche Textur wird jedoch in allen Anzeigekontexten angezeigt.

+0

Wie erstellen Sie den Grafikkontext? Was ist deine Plattform? – Menkboy

+0

Ich habe genau das gleiche Problem. Ich benutze PyQt5. Plattform: Linux (Ubuntu16), Intel-Grafik. –