2009-04-01 7 views
23

Ich versuche gerade, OpenVG auf meinem Desktop zu installieren. Das Problem kommt hier: Ich entwickle eine Anwendung für ein Windows CE-Gerät (mit .NET compact framework), das hardwarebeschleunigtes OpenGL ES 2.0 und OpenVG 1.0.1 (basierend auf TI OMAP35x, wenn Sie interessiert sind) entwickelt). Die Anwendung wird definitiv OpenVG zum Zeichnen und wahrscheinlich OpenGL für einige Effekte verwenden, wenn OpenVG sie nicht anbietet (d. H. Unschärfe).Hardwarebeschleunigte OpenVG-Implementierung auf dem Desktop basierend auf OpenGL ES

Jetzt möchte ich auf meinem Desktop ohne den Emulator entwickeln (siehe this question). Also dachte ich, ich importiere einfach OpenVG mit P/Invoke, was ziemlich einfach war, da die OpenVG-Leute ihre Konstanten in echte enums umwandelten, und obwohl eine prozedurale C-API sehr gut in eine objektorientierte Form (mit einer Graphics-Klasse) übersetzte für Zeichnen und Pfad-, Malen-, Strich- und Bildobjekte). Ich schaffte es auch mit differently named DLLs and entry points loszulegen. Oh, und ich importierte EGL 1.3, auch ziemlich leicht zu einer objektorientierten API zu übersetzen.

Bis zu diesem Punkt klang es ziemlich gut. Ich dachte, ich würde einfach die OpenVG-Referenzimplementierung von Khronos verwenden, aber es ist langsam. Wirklich langsam. Sie wissen, wie das Löschen der Oberfläche unter wörtlich genommen Sekunde! Also dachte ich, OK, OpenVG ist ein Standard, ich nehme nur eine der anderen Implementierungen. Die meisten basieren auf OpenGL, was ich will. Oder nicht?

Nein, ist es nicht. Das Erstellen einer OpenGL ES 2.0-Oberfläche mit EGL 1.3 (im Lieferumfang des PowerVR Windows Emulation SDK für OpenGL ES 2.0 enthalten) ist mit keiner OpenVG-Implementierung kompatibel, die ich ausprobiert habe. Einige von ihnen benötigen traditionelles OpenGL (AmanithVG GLE), die von PowerVR gelieferte EGL-Version unterstützt OpenVG nicht. Die meisten Implementierungen haben nicht einmal EGL und verwenden einige bizarre Funktionen, um den Kontext zu initialisieren - alle unter der Annahme, dass bereits ein OpenGL-Kontext erstellt wurde. OpenGL, nicht OpenGL ES. Seufzer.

Die einzige, die ich zur Arbeit bekommen konnte, war AmanithVG SRE, die für eine Software-Implementierung sehr schnell ist und nicht auf OpenGL oder EGL beruht. Es funktioniert, ist aber für Echtzeit-Animationen immer noch viel zu langsam.

Ich kann nicht glauben, dass diese Dinge so falsch fühlen. Ich bin wirklich versucht, WindowsMobile.DirectX.Direct3D zu verwenden, für das PowerVR eine Emulationsschicht für Desktop Windows liefert, in der Hoffnung, dass das letzte Board Support Package Direct3D als OpenGL ES Wrapper liefern wird, wie es auf vielen zu sein scheint Geräte.

Also, die Frage schließlich:

Gibt es eine OpenVG-Implementierung für Windows Desktop-Systeme, die mit OpenGL ES 2.0 funktioniert? Bonuspunkte, wenn es reibungslos mit PowerVRs OpenGL ES 2.0-Emulation und dem mitgelieferten EGL 1.3 funktioniert.

Oder sollte ich einfach versuchen, eine herkömmliche OpenGL 2.0-Implementierung auf dem Desktop zu verwenden? Aber sie liefern EGL normalerweise auch nicht. Ich möchte nicht zwei Initialisierungsschichten (EGL und WGL) haben. Oder sollte ich?

Hinweis: Dies ist keine .NET-Frage, denn das Problem ist das gleiche ohne .NET.

Antwort

1

fand ich einen Closed-Source OpenGL ES-Emulator für OpenGLES 2.0 und andere Versionen von dieser Seite, während eine Lösung für ein anderes Problem der Suche hatte ich:

http://www.malideveloper.com/developer-resources/tools/opengl-es-20-emulator.php

Seine Quelle geschlossen, aber es scheint, dass Sie verwenden können, es für Ihre Entwicklungszwecke.

Ansonsten könnten Sie Ihre eigene Abstraktionsschicht schreiben, die zwischen OpenGL und OpenGL ES wechseln kann - ich konnte bei meinen Suchen keine finden. Wenn Sie einen finden, lassen Sie es mich wissen, denn das ist es, was ich versuche zu tun.

Verwandte Themen