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.

вздох

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