Pergunta

I'm having some strange issue with Internet Explorer 11 while I'm programming with WebGL. I have had all running fine in all browsers but suddenly when I'm changing positions for 4 meshes... IE decides to crash (in debug mode, not pointing to anything specific in the code).

I'm running IE 11 with

GL Version - WebGL 0.93

Shading Language Version - WebGL GLSL ES 0.93

I get the following error: Unhandled exception at 0x03F6435B (mshtml.dll) in iexplore.exe: 0xC0000005: Access violation writing location 0xBF35051C.

(5 last) Call Stack:

mshtml.dll!CMarkupPointer::RemoveMeFromList(void) Unknown mshtml.dll!CBackgroundInfo::Property<class CBackgroundImage>(int)'::7'::`dynamic atexit destructor for 'fieldDefaultValue''(void) Unknown mshtml.dll!CMarkupPointer::MoveToPointer(class CMarkupPointer const *) Unknown mshtml.dll!CDisplayPointer::MoveToPointer(class CDisplayPointer *) Unknown mshtml.dll!CSelectTracker::DoSelection(class CEditEvent *,int,int *) Unknown

This is the code that creates the meshes:

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);
        }
    }
}

And this is the code that for some reason crashes IE11 when Render(); is called and the meshes are set to be visible.

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;
    }
}

Note that this code works fine in Chrome, Opera and Firefox. Could I rewrite this code somehow so that IE doesn't crash?

EDIT Funny thing... if I add the line

 m_vTempFlowArrowMesh.visible = false;

in the callbackLoadFlowArrows... it doesn't crash anymore even though it updates the arrows.

Foi útil?

Solução

The IE team can not (for some awkward reason) reproduce this error.

Even though I've sent them around 3x800mb crash dump files as well as info files of the IE client they're unable to locate the issue.

So... they closed this issue as it's no longer relevant in their eyes.

GG Microsoft.

sigh

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top