Я успешно заставил свое приложение VS2015 Cordova правильно работать в эмуляторе VS для Android, но путь был непрямым. Моррисон Чанг выражает огромную благодарность за указание на проект Crosswalk, который специально предназначен для устранения недостатков стандартного движка Android WebView, что наиболее важно для моего приложения, поверхностной реализации WebGL стандартного движка. Первой частью решения была установка плагина Cordova Crosswalk в моем Приложение Кордова. Первоначально 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», Crosswalk вообще не вернет контекст WebGL. Но если установить depth:false, эмулятор VS будет отображать перекрывающиеся сетки так, что это не будет иметь визуального смысла в моем приложении, потому что, подождите, буфера глубины не было. Так что я мог, по крайней мере, получить контекст WebGL с глубиной: ложь, но это отстой. Что, наконец, сработало для меня, так это вызвать .getContext вообще без атрибутов, например так:
_gl = _context || _canvas.getContext( 'webgl' ) || _canvas.getContext( 'experimental-webgl' );
Это помогает мне. Мне придется переопределить конструктор THREE.WebGLRenderer и использовать сценарий платформы Android, но, по крайней мере, теперь у меня есть работающий контекст WebGL и работающее приложение. Я надеюсь, что вышеизложенное избавит кого-то еще от боли, через которую я только что прошел. Теперь, чтобы заставить отладчик подключиться к эмулятору....
person
pprchsvr
schedule
26.02.2016