Может ли приложение VS2015 Cordova запускать WebGL в эмуляторе Android Android?
Я оглянулся и не могу найти ответ на следующий вопрос. Я хочу запустить 3D-контент в кроссплатформенном приложении. Я использую VS2015 / Инструменты для Apache Cordova / Three.js / WebGL. Когда я отлаживаю свой проект VS2015 на настольном компьютере (AnyCPU) и на удаленном устройстве iOS или симуляторе Mac Mac, мое приложение создает холст, получает контекст WebGL, и я отправляюсь в гонку. Когда я использую VS2015 для отладки моего приложения в эмуляторе Android Android, canvas.getContext завершается ошибкой, а Three.js выдает "Ошибка создания контекста WebGL".
Я скачал (для VS2015) эмулятор Android Android с помощью Lollipop (5.0) и запустил его в автономном режиме (не из моего проекта Cordova). Когда я следую этим инструкциям по настройке эмулятора Android MSDN (замените текущую версию Chrome на стандартную подсистему браузера эмулятора VS), эмулятор VS будет правильно размещать и отображать контент 3D WebGL, доступный в Интернете. Но когда я пытаюсь заставить эмулятор VS разместить мой проект Cordova, он не может создать контекст WebGL, и мне это не нравится.
Итак, мой вопрос заключается в следующем: есть ли способ настроить мой проект VS2015 Cordova для запуска и отладки в эмуляторе Android Android и в эмуляторе размещать мой 3D-контент WebGL? Или есть какой-то другой прием для настройки эмулятора Android Android, чтобы он принимал и размещал мой проект WebGL с использованием механизма с поддержкой WebGL? Тупик.
1 ответ
Я успешно установил приложение VS2015 Cordova для корректной работы в эмуляторе VS для Android, но путь был не прямым. Моррисону Чангу очень большое спасибо за то, что он указал мне на Crosswalk Project, который специально разработан для устранения недостатков в стандартном движке Android WebView, что наиболее важно, для моего приложения, схематичной реализации WebGL для стандартного движка. Первой частью решения было установить плагин Cordova Crosswalk в моем приложении Cordova. Первоначально VS2015 выдал плохо описанную ошибку развертывания версий. Решением этой проблемы было простое увеличение номера версии моего приложения с "1.0.0" до "1.0.1", как в файле config.xml:
<widget xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:vs="http://schemas.microsoft.com/appx/2014/htmlapps" id="io.cordova.XXXXXXXXXXXX" version="1.0.1" xmlns="http://www.w3.org/ns/widgets" defaultlocale="en-US">
После развертывания проекта мое приложение столкнулось с большими трудностями при получении рабочего контекста WebGL от Crosswalk. Я решил эту проблему следующим образом. В настоящее время мое приложение использует THREE r71, который создает контекст WebGL со следующим фрагментом кода в конструкторе THREE.WebGLRenderer:
var attributes = {
alpha: _alpha,
depth: _depth,
stencil: _stencil,
antialias: _antialias,
premultipliedAlpha: _premultipliedAlpha,
preserveDrawingBuffer: _preserveDrawingBuffer
};
_gl = _context || _canvas.getContext( 'webgl', attributes ) || _canvas.getContext( 'experimental-webgl', attributes );
Crosswalk не нравится вызов THREE для.getContext() со значениями по умолчанию атрибутов THREE. Если бы я не установил для атрибута "false" значение "false", Crosswalk даже не вернул бы контекст WebGL. Но, установив значение: false, VS Emulator будет отображать перекрывающиеся сетки таким образом, чтобы это не имело никакого визуального смысла в моем приложении, потому что, подождите, буфера глубины не было. Так что я мог бы по крайней мере получить контекст WebGL с глубиной: ложь - но это отстой. В конечном итоге мне удалось вызвать.getContext без каких-либо атрибутов, вот так:
_gl = _context || _canvas.getContext( 'webgl' ) || _canvas.getContext( 'experimental-webgl' );
Это делает трюк для меня. Мне придется переопределить конструктор THREE.WebGLRenderer и выделить сценарий платформы Android, но, по крайней мере, у меня сейчас есть рабочий контекст WebGL и работающее приложение. Я надеюсь, что вышеупомянутое избавит кого-то от боли, которую я только что прошел Теперь чтобы получить отладчик для подключения к эмулятору....