我在 Unity 上制作了一个 360 度图像查看器,并且我正在使用 C# 脚本动态更改图像纹理,因此它在 PC Unity 上工作正常,但是当我在 Android 设备上运行它时,它会显示以下错误:
OPENGL NATIVE PLUG-IN ERROR: GL_INVALID_FRAMEBUFFER_OPERATION: Framebuffer is not complete or incompatible with command
我的代码如下
IEnumerator registerFunc(WWW www)
{
yield return www;
if (www.error == null)
//if(true)
{
Debug.Log("OK - CountTime");
texturas = www.texture;
www.Dispose();
www = null;
sphereMS.material.mainTexture = texturas;// here i am getting error
}
else
{
Debug.Log("ERROR");
}
}
所以任何人都可以帮我解决这个问题。谢谢!
分辨率是 9999x2429 并且 sphereMS 是我拥有的公共变量 使用拖放指定球体
这就是问题所在。 9999确实很大。大多数 Android 设备上的限制约为 2048。除非您在非常高端且昂贵的 Android 设备上运行,否则任何高于此的值都会出现问题。
要尝试的一件事是更换
texturas = www.texture;
与
texturas = new Texture2D(4, 4);
texturas.LoadImage(www.bytes);
LoadImage
函数用于将jpg/png图像加载到纹理中。由于图像的大小,它也可能会失败。
如果
LoadImage
也失败,那么您应该为服务器上的每个平台设置不同的纹理分辨率。 Android 平台应该请求较低分辨率版本的纹理。只要不断降低纹理分辨率,直到它停止崩溃。 2048分辨率应该没问题。
我建议您阅读this关于Unity中纹理大小限制的文章。
编辑:
如果您将分辨率更改为低于 2048 并且问题仍然存在,那么这是一个错误。
安装 Unity 2017.2.0p1 或 2017.3.0b3 以获得修复。很少有人使用 google-cardboard 插件经历过这种情况。
大多数情况发生在使用 Mali GPU 的 Android 设备上,甚至 Asphalt 8 也无法在这些设备上运行(至少是旧设备)。
我在华为 Mate 10 和三星 Galaxy A50s 上进行了尝试,因为两者分别使用 Mali-G72 MP12 和 MP3,因此出现相同的错误,并且图像变黑/空白(无法渲染)。
虽然在其他 Android 和 iOS 设备上也能正常工作