Может ли приложение 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 и работающее приложение. Я надеюсь, что вышеупомянутое избавит кого-то от боли, которую я только что прошел Теперь чтобы получить отладчик для подключения к эмулятору....

Другие вопросы по тегам