Eigentümliches Verhalten in OpenGL über Vertex-Shader und Eingabe Vertices auf dem Kernprofil 330

StackOverflow https://stackoverflow.com/questions/3614630

  •  26-09-2019
  •  | 
  •  

Frage

mit '#version 330 core' auf NVIDIA,

Durch die Verwendung von glBindAttribLocation (Programm, 0, "in_Vertex"); der Eingang Vertex arbeitet mit einem "in vec4 in_Vertex;". Aber ich ohne den OGL Funktionsaufruf in der Client-Anwendung bemerkt hat, es funktioniert immer noch. Es scheint, ‚die Standard erste Eingangsgröße‘ zu sein. Warum? Sollte es weggelassen werden oder explizit es über glBindAttribLocation angeschlossen werden? [Was ist die ideale nach dem Standard?] Auch „in vec4 gl_Vertex;“ arbeitet, während die spec Anrufe es veraltet und der Compiler von Shadern geben keine Warnung. Warum? Ich hätte es zu erwarten zumindest zu warnen. Ich denke, die letzten um einen Fehler in dem Compiler (GLSL-Compiler) sein kann, aber die erste Ausgabe ist besonders rätselhaft.

War es hilfreich?

Lösung

  1. Wenn Sie an einen Ort nicht binden Attribute tun, wird der GL es für Sie tun. Welche Standorte verwendet es ist nicht spezifiziert, aber sie zufällig den gleichen Wert haben.

    • Sie können die GL fragen, welche Position sie gewählt hat mit glGetAttribLocation
    • Auch wenn es nicht angegeben ist, habe ich wählen gesehen Implementierungen zu binden Standorte in der Reihenfolge des Shader. Zunächst ist 0, die zweite 1, ...
  2. Die Standard-Blätter diese zwei Optionen geöffnet werden, da es gültige Anwendungsfälle für jeweils.

  3. Wie bei deprecation, nvidia klar gesagt, dass sie Sache deprecation die falsche Entscheidung war. Am Ende hat jemand den Code zu schreiben, um die Warnung zu emittieren ... es ist also nicht so überraschend, sie würden nicht warnen, auch wenn sie sollten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top