在chrome阴影和制服上的Three.js r68无法渲染网格

时间:2014-09-08 02:28:55

标签: google-chrome three.js webgl shader

我有一个使用three.js的WebGL应用程序。它已经运行好几个月,直到今天,2014年9月7日。 它不再在Chrome上运行,但仍可继续在Firefox和Safari上运行。

我已将问题追溯到特定情况。 我从json文件中加载对象,如下所示:

            loader.load("assets/Tables.json", callback_mesh, "assets/maps/", parent.texturesTable);

callback_mesh函数如下所示:

            var callback_mesh = function (result, materials, userData) {

            for (var i = 0; i < materials.length; i++) {

                if (materials[i].uniforms != undefined) {
                    materials[i].uniforms.tDiffuse.value = userData[TEXTURE_DIFFUSE];
                    materials[i].uniforms.tNormal.value = userData[TEXTURE_NORMAL];
                    materials[i].uniforms.tSpecular.value = userData[TEXTURE_SPECULAR];
                } 
            }


            var mesh = new THREE.Mesh(result, new THREE.MeshFaceMaterial(materials));
            mesh.scale.set(1, 1, 1);
            mesh.receiveShadow = true;
            mesh.castShadow = true;

            objects.push(mesh);
        }

以上代码不再在Chrome中运行。 如果我删除了行&#34; mesh.receiveShadow = true&#34;,它可以正常工作。 如果我创建一个新材质,而不是使用json文件中的材质并修改它们的参数/制服,我可以将receiveShadow设置为true并且它可以正常工作。

所以相当具体的问题是当我从json文件导入一个对象并将来自json文件的材质数组作为MeshFaceMaterial分配给网格并打开receiveShadow时,该对象不会加载,我得到以下内容错误讯息:

THREE.WebGLProgram:gl.getProgramInfoLog()(260,64-140):警告X3550:sampler数组索引必须是文字表达式,强制循环展开 (89,12):错误X6077:带有r#作为源的texld / texldb / texldp / dsx / dsy指令不能在动态条件内使用&#39;如果&#39;块,动态条件子程序调用或带break *的循环/ rep。

无法创建D3D着色器。  three.js所:25545 59WebGL:INVALID_OPERATION:getUniformLocation:程序未链接three.js:25283 21WebGL:INVALID_OPERATION:getAttribLocation:程序未链接

而且,再一次,我在今天之前从未见过这个,也许有Chrome更新。它在Firefox和Safari下工作正常,网格加载了receiveShadows,阴影被渲染。 在当前的Chrome中,仅当我关闭receiveShadows时它才有效。

任何人都有同样的问题,或者对可能导致这种情况的原因有什么想法? 谢谢。 -mat

0 个答案:

没有答案