windows - Hardware-accelereret OpenVG-implementering på skrivebordet baseret på OpenGL ES

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger nu at få OpenVG til at køre på mit skrivebord. Problemet kommer her: Jeg er/vil udvikle en ansøgning til en Windows CE-enhed (med .NET kompakt ramme), som har hardware-accelereret OpenGL ES 2.0 og OpenVG 1.0.1 (baseret på TI OMAP35x, hvis du er interesseret). Applikationen vil helt sikkert bruge OpenVG til tegning, og sandsynligvis OpenGL for nogle effekter, hvis OpenVG ikke tilbyder dem (det vil sige uskarphed).


Nu vil jeg gerne udvikle på mit skrivebord uden emulatoren (se dette spørgsmål). Så jeg troede, at jeg bare importerede OpenVG med P/Invoke, hvilket var ret let, da OpenVG-folkene lavede deres konstanter til ægte enums, og selvom en procedural C API, det oversatte meget godt ind i en objektorienteret form (med en grafik klasse til tegning og sti, maling, strejke og billedobjekter). Jeg har også formået at komme i gang med forskelligt navngivne DLL'er og indgangspunkter. importeret EGL 1.3, også ret nemt at oversætte til en objektorienteret API.


Indtil dette tidspunkt lød det ganske godt. Jeg troede, at jeg bare ville bruge OpenVG-referenceimplementeringen fra Khronos, men det er langsomt. Virkelig langsomt. Du ved ligesom at rydde overfladen, der tager bogstaveligt talt et andet ! Så jeg syntes fint, OpenVG er en standard, jeg vil bare tage en af ​​de andre implementeringer. De fleste af dem er baseret på OpenGL, hvilket er hvad jeg vil have. Eller er det ikke?


Nej, det er det ikke. Oprettelse af OpenGL ES 2.0-overflade med EGL 1.3 (leveres med PowerVR Windows Emulation SDK til OpenGL ES 2.0) er ikke kompatibel med nogen OpenVG-implementering, jeg prøvede. Nogle af dem kræver traditionel OpenGL (AmanithVG GLE), EGL-versionen leveret af PowerVR understøtter ikke OpenVG. De fleste implementeringer har ikke engang EGL og bruger nogle bizarre funktioner til at initialisere konteksten - alle antager, at der allerede er oprettet en OpenGL-kontekst. OpenGL, ikke OpenGL ES. Suk.


Den eneste jeg kunne få til at arbejde var AmanithVG SRE, som er meget hurtig til en softwareimplementering og ikke stoler på OpenGL eller EGL. Det virker, men det er stadig alt for langsomt til real-time animationer.


Jeg kan ikke tro på, at disse ting er så forkerte. Jeg er virkelig fristet til bare at bruge WindowsMobile.DirectX.Direct3D, for hvilken PowerVR leverer et emuleringslag til Desktop Windows, i håb om, at den endelige Board Support Package vil levere Direct3D som en OpenGL ES wrapper, som det synes at være på mange enheder.


Så spørgsmålet endelig:


Er der nogen OpenVG-implementering til Windows Desktop-systemer, der fungerer med OpenGL ES 2.0? Bonuspoint, hvis det fungerer glat med PowerVRs OpenGL ES 2.0-emulering og den medfølgende EGL 1.3.


Eller skal jeg bare prøve at bruge en traditionel OpenGL 2.0 implementering på skrivebordet? Men de leverer typisk ikke EGL. Jeg vil ikke have to initialiseringslag (EGL og WGL). Eller skal jeg?


Bemærk: Dette er ikke et .NET spørgsmål, fordi problemet er det samme uden .NET.

Bedste reference


Jeg fandt en lukket kilde OpenGL ES emulator til OpenGLES 2.0 og andre versioner fra dette websted, mens jeg søgte efter en løsning på et andet problem, jeg havde:


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


Dens lukkede kilde, men det ser ud til, at du kan bruge det til din udviklingsformål.


Ellers kan du skrive dit eget abstraktionslag, der kan skifte mellem OpenGL og OpenGL ES. Jeg kunne ikke finde en tilgængelig fra mine søgninger. Hvis du finder en, så lad mig det vide, fordi det er det jeg forsøger at gøre.