2011-01-11 14 views
2

Ich schreibe eine App, die von Drittanbietern erstellte Plugins verwendet, um alle Arten von 3D-Tricks zu rendern.App mit 3D & 3rd-Party Plugins - Vorwärtskompatibel OpenGL oder Direct3D?

Meine Hauptanwendung ist das Erstellen des Context/Render-Objekts und eines Renderer/Framebuffer-Objekts. Die 3rd-Party-Plugins werden ihre originellen Sachen dazu rendern, also benötigen sie Zugriff auf dieses Kontext-/Renderobjekt, um ihre 3d render-bezogenen Aufrufe auszuführen.

Ich kann wählen, dies entweder mit OpenGL oder Direct3D zu implementieren. Meine Entscheidung wird wahrscheinlich auf meinem Verständnis des nächsten Problems basieren:

Offensichtlich werden neue Versionen von OpenGL/Direct3D herauskommen, und es wäre schön, wenn neu erstellte Plugins von neueren Versionen von DX/profitieren könnten OGL als das Hauptprogramm wurde mit kompiliert. (, wenn der Computer die Anwendung ausgeführt wird unterstützt, dass neuere Version)

Mit OpenGL (mit OpenTK) Ich verstand es möglich ist, eine zukunfts kompatibel Kontext zu schaffen, wie es in „Gib mir die meisten up-to-date- Version, die abwärtskompatibel zur Version X ist ". Wenn also nach einem 3.2-Kontext gefragt wird, wenn 4.0 verfügbar ist, würde es einen 4.0-Kontext zurückgeben.

Für DirectX sehe ich nichts dergleichen, was bedeuten würde, dass, wenn ich mein Hauptprogramm mit DirectX 11 zum Beispiel erstellen würde, Drittanbieter-Plugins niemals neuere Versionen verwenden könnten, wenn sie verfügbar sind?

Erhalte ich das richtig?

Kann OpenGL Plugin-Schreiber von Drittanbietern aktivieren, um Plugins für neuere OpenGL-Versionen zu erstellen, während DirectX mir nicht erlaubt, so etwas zu tun?

Antwort

1

Ich wäre erstaunt, wenn DirectX jemals die Art von Kompatibilität unterstützt, über die Sie in einer Anwendung sprechen. Jede Version der Direct3D APIs war im Grunde eine unabhängige (COM) Objekthierarchie mit absolut keiner Bestätigung, dass andere Generationen des Systems existieren könnten, in der Vergangenheit oder in der Zukunft. (Rückwärtskompatibilität auf Plattformebene war im Allgemeinen natürlich hervorragend, aber Sie sind auf der Suche nach etwas ganz anderem).

Also entweder mit OpenGL gehen (die Unterstützung, die Sie erwähnen, hört sich zumindest nach Hoffnung an), oder vielleicht sogar eine höhere API-Ebene für Plugins, die sich irgendwie zur Laufzeit auf die eigentliche Zielplattform "anpasst" . Das würde OpenGL und Direct3D unterstützen (obwohl offensichtlich vor allem Shader große Schwierigkeiten bereiten würden; daher Projekte wie AnySL).