ThreeJS: IE11 падает на Render();
У меня странная проблема с Internet Explorer 11 во время программирования с использованием WebGL. У меня все работает нормально во всех браузерах, но внезапно, когда я меняю положение на 4 сетки... IE решает сбой (в режиме отладки, не указывая на что-то конкретное в коде).
Я использую IE 11 с
Версия GL - WebGL 0,93
Версия языка шейдинга - WebGL GLSL ES 0.93
Я получаю следующую ошибку:Необработанное исключение в 0x03F6435B (mshtml.dll) в iexplore.exe: 0xC0000005: Место записи нарушения прав доступа 0xBF35051C.
(5 последних) стек вызовов:
mshtml.dll! CMarkupPointer:: RemoveMeFromList (void) Неизвестный mshtml.dll!
CBackgroundInfo::Property<class CBackgroundImage>(int)'::
7 ':: `деструктор динамического атексита для'fieldDefaultValue''(void) Неизвестный mshtml.dll!CMarkupPointer::MoveToPointer(класс CMarkupPointer const *) Неизвестный mshtml.dll!CDisplayPointer::MoveToPointer(класс CDisplayPointer *) Неизвестный msht.dll CSelectTracker::DoSelection(класс CEditEvent *,int,int *) Неизвестный
Это код, который создает сетки:
function PrepareFlowArrows(l_vDiffuser) {
var m_vExtraLoader = new THREE.JSONLoader();
m_vExtraLoader.load('3D_Control/models/FlowArrow.js', callbackLoadFlowArrows(l_vDiffuser));
}
// Callback function for FlowArrows when loading models
function callbackLoadFlowArrows(l_vDiffuser) {
return function (geometry) {
var l_vRotation = 0;
for (var i = 0; i < 4; i++) {
if (i == 0)
l_vRotation = -1.5707; //-1.5707;
else if (i == 1)
l_vRotation = 3.1414;//3.1414;
else if (i == 2)
l_vRotation = 1.5707;//1.5707;
else
l_vRotation = 0;
var l_vMaterial = new THREE.MeshBasicMaterial(); // SETTINGS COLORS MANUALLY (way more nicer with textures though)
l_vMaterial.color.r = 0;
l_vMaterial.color.g = 255;
l_vMaterial.color.b = 0;
var m_vTempFlowArrowMesh = new THREE.Mesh(geometry, l_vMaterial);
m_vTempFlowArrowMesh.scale.x = m_vTempFlowArrowMesh.scale.y = m_vTempFlowArrowMesh.scale.z *= 25;
m_vTempFlowArrowMesh.position.set(0, 0, 0);
m_vTempFlowArrowMesh.rotation.y = l_vRotation;
l_vDiffuser.AddFlowArrow(m_vTempFlowArrowMesh);
m_vScene.add(m_vTempFlowArrowMesh);
}
}
}
И это код, который по какой-то причине аварийно завершает работу IE11 при Render(); называется, и сетки установлены, чтобы быть видимыми.
this.UpdateFlowArrows = function () {
this.GetBoundingBox();
if (m_vFlowArrows[0] != null) {
m_vFlowArrows[0].position.x = m_vBoundingBox.min.x - 100;
m_vFlowArrows[0].position.y = m_vBoundingBox.min.y + ((m_vBoundingBox.max.y - m_vBoundingBox.min.y) / 2);
m_vFlowArrows[0].position.z = m_vBoundingBox.min.z + ((m_vBoundingBox.max.z - m_vBoundingBox.min.z) / 2);
//m_vFlowArrows[0].rotation.y = -1.5707;
}
if (m_vFlowArrows[1] != null) {
m_vFlowArrows[1].position.x = m_vBoundingBox.min.x + ((m_vBoundingBox.max.x - m_vBoundingBox.min.x) / 2);
m_vFlowArrows[1].position.y = m_vBoundingBox.min.y + ((m_vBoundingBox.max.y - m_vBoundingBox.min.y) / 2);
m_vFlowArrows[1].position.z = m_vBoundingBox.min.z - 100;
//m_vFlowArrows[1].rotation.y = 3.1414;
}
if (m_vFlowArrows[2] != null) {
m_vFlowArrows[2].position.x = m_vBoundingBox.max.x + 100;
m_vFlowArrows[2].position.y = m_vBoundingBox.max.y - ((m_vBoundingBox.max.y - m_vBoundingBox.min.y) / 2);
m_vFlowArrows[2].position.z = m_vBoundingBox.max.z - ((m_vBoundingBox.max.z - m_vBoundingBox.min.z) / 2);
//m_vFlowArrows[0].rotation.y = 1.5707;
}
if (m_vFlowArrows[3] != null) {
m_vFlowArrows[3].position.x = m_vBoundingBox.max.x - ((m_vBoundingBox.max.x - m_vBoundingBox.min.x) / 2);
m_vFlowArrows[3].position.y = m_vBoundingBox.max.y - ((m_vBoundingBox.max.y - m_vBoundingBox.min.y) / 2);
m_vFlowArrows[3].position.z = m_vBoundingBox.max.z + 100;
//m_vFlowArrows[3].rotation.y = 1.5707;
}
}
Обратите внимание, что этот код отлично работает в Chrome, Opera и Firefox. Могу ли я как-то переписать этот код, чтобы IE не зависал?
РЕДАКТИРОВАТЬ Забавно... если я добавлю строку
m_vTempFlowArrowMesh.visible = false;
в callbackLoadFlowArrows... он больше не падает, даже если он обновляет стрелки.
1 ответ
Команда IE не может (по какой-то неловкой причине) воспроизвести эту ошибку.
Несмотря на то, что я отправил им около 3х800 Мб файлов аварийного дампа, а также информационные файлы клиента IE, они не могут найти проблему.
Итак... они закрыли эту проблему, так как она больше не актуальна в их глазах.
ГГ Microsoft.
вздох