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.