Akzeptieren alle „genType“-OpenGL-/GLSL-Funktionen sowohl Float-Konstanten als auch Vektoren als Eingabe-/AusgabedatentyC++

Programme in C++. Entwicklerforum
Guest
 Akzeptieren alle „genType“-OpenGL-/GLSL-Funktionen sowohl Float-Konstanten als auch Vektoren als Eingabe-/Ausgabedatenty

Post by Guest »

Durch Lesen der OpenGL Shanding Language Specification in Kapitel 8:

Wenn die integrierten Funktionen unten angegeben sind, wo die Eingabeargumente (und entsprechende Ausgabe)
kann float, vec2, vec3 oder vec4 sein, genType wird als Argument verwendet. Wo die Eingabeargumente (und
die entsprechende Ausgabe) int, ivec2, ivec3 oder ivec4 sein können, wird genIType als Argument verwendet [...]

Und aus dieser Antwort kann man mit Sicherheit sagen, dass genType der generische Typ für Floats ist. Das heißt, Funktionen, die genType-Argumente akzeptieren, können diese Datentypen empfangen: float, vec2, vec3 und vec4.

Durch Lesen Ein paar Seiten unterhalb von Kapitel 8 gibt es Funktionen wie: atan, pow und mod, die zwei genType-Argumente annehmen. Hier ist meine Frage: Wie funktioniert es, wenn diese Funktionen einen Vektor als Eingabeparameter verwenden? Sollten sie eine Operation durchführen und sie zurückgeben? Oder wird es als undefiniertes Verhalten angesehen?
Ich meine, es sollte offensichtlich sein, dass diese Funktionen keine Vektoren als Eingabeparameter verwenden sollten, da selbst die Beschreibungen der Spezifikation die meisten dieser Parameter als Float-Konstanten behandeln , obwohl sie nicht ausdrücklich sagen, dass es sich um eine Float-Konstante handeln muss. Soweit ich das beurteilen kann, ist es nicht falsch, beispielsweise eine dieser Funktionen auf einem vec3 aufzurufen und ein Ergebnis zu erwarten, wenn sie nichts dagegen sagen.
Wenn Sie einen Blick auf Kapitel 8.5 der Spezifikation werfen, werden beispielsweise Funktionen wie: Länge, Abstand und Kreuz explizit angegeben Datentypen als Eingabeargumente und Rückgabewerte, z B. als: vec3 oder float, nicht nur genTypes, was den Eindruck erweckt, dass es für einige Funktionen tatsächlich zwingend erforderlich ist, mit einem engen Bereich zu arbeiten von Datentypen, und dass ein Fehler/Absturz ausgelöst wird, wenn der Benutzer versucht, ihn zu umgehen.
Wie man im c glm ~ vec2.h-Repository sehen kann, vec2 hat kein pow- oder mod-Implementierung, weder vec3 noch vec4. Stattdessen gibt es in c glm ~ utils.h nur einen pow mit dem Datentyp float als Eingabeparameter.
Aber auf jeder C++-glm-API Referenz wird beschrieben, dass Funktionen wie pow und mod gemäß der GLSL-Spezifikation vec< L, T, Q > als Eingabeparameter und Ausgabewerte akzeptieren. Wie ist das also möglich?

Als Randbemerkung: Mir ist bewusst, dass sowohl C als auch C++ unterschiedliche Sprachen sind und dass C und C++ glm Von Modulen wird erwartet, dass sie unterschiedliche Implementierungen haben, da C OOP fehlt. Aber unabhängig davon sollten beide glm-Implementierungen auf der OpenGL-Spezifikation basieren, weshalb ich beide hier in diesem Beitrag verlinkt habe.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post