Аппаратно-ускоренная реализация OpenVG на рабочем столе на основе OpenGL ES
В настоящее время я пытаюсь запустить OpenVG на моем рабочем столе. Проблема возникает здесь: я буду / буду разрабатывать приложение для устройства Windows CE (с.NET compact framework), которое имеет аппаратное ускорение OpenGL ES 2.0 и OpenVG 1.0.1 (на основе TI OMAP35x, если вам интересно). Приложение определенно будет использовать OpenVG для рисования и, вероятно, OpenGL для некоторых эффектов, если OpenVG их не предлагает (например, размытие).
Теперь я хотел бы разработать на своем рабочем столе без эмулятора (см. Этот вопрос). Поэтому я подумал, что просто импортирую OpenVG с помощью P/Invoke, что было довольно легко, так как люди OpenVG превратили свои константы в реальные перечисления, и, хотя это процедурный API C, он очень хорошо транслировался в объектно-ориентированную форму (с классом Graphics). для рисования и объектов Path, Paint, Stroke и Image). Мне также удалось начать работу с DLL-библиотеками с разными именами и точками входа. О, и я импортировал EGL 1.3, также довольно легко переводимый в объектно-ориентированный API.
До этого момента это звучало довольно хорошо. Я думал, что просто буду использовать эталонную реализацию OpenVG от Khronos, но она медленная. Действительно медленно. Вы знаете, как очистка поверхности буквально за секунду! Итак, я подумал, хорошо, OpenVG - это стандарт, я просто возьму одну из других реализаций. Большинство из них основаны на OpenGL, чего я и хочу. Или нет?
Нет, это не так. Создание поверхности OpenGL ES 2.0 с EGL 1.3 (поставляется с PowerVR Windows Emulation SDK для OpenGL ES 2.0) несовместимо с любой реализацией OpenVG, которую я пробовал. Некоторые из них требуют традиционного OpenGL (AmanithVG GLE), версия EGL, поставляемая PowerVR, не поддерживает OpenVG. Большинство реализаций даже не имеют EGL и используют некоторые странные функции для инициализации контекста - все они предполагают, что контекст OpenGL уже создан. OpenGL, а не OpenGL ES. Вздох.
Единственным, кого я мог заставить работать, был AmanithVG SRE, который очень быстр для программной реализации и не использует OpenGL или EGL. Это работает, но все еще слишком медленно для анимации в реальном времени.
Я не могу поверить, что эти вещи чувствуют себя так неправильно. Я действительно испытываю желание просто использовать WindowsMobile.DirectX.Direct3D, для которого PowerVR предоставляет слой эмуляции для настольных Windows, в надежде, что окончательный пакет поддержки платы будет поставлять Direct3D в качестве оболочки OpenGL ES, как это, кажется, на многих устройства.
Итак, вопрос, наконец:
Существует ли реализация OpenVG для систем Windows Desktop, которая работает с OpenGL ES 2.0? Бонусные баллы, если он работает гладко с эмуляцией OpenGL ES 2.0 PowerVR и поставляемым EGL 1.3.
Или я должен просто попытаться использовать традиционную реализацию OpenGL 2.0 на рабочем столе? Но они, как правило, также не поставляют EGL. Я не хочу иметь два уровня инициализации (EGL и WGL). Или я должен?
Примечание: это не вопрос.NET, потому что проблема та же самая без.NET.
1 ответ
Я нашел с этого сайта эмулятор OpenGL ES с закрытым исходным кодом для OpenGLES 2.0 и других версий, когда искал решение другой проблемы, с которой я столкнулся:
http://www.malideveloper.com/developer-resources/tools/opengl-es-20-emulator.php
Это закрытый источник, но, похоже, вы можете использовать его в своих целях разработки.
Кроме того, вы можете написать свой собственный уровень абстракции, который может переключаться между OpenGL и OpenGL ES - я не смог найти один доступный из моих поисков. Если вы найдете один, дайте мне знать, потому что это то, что я пытаюсь сделать.