GL_INVALID_FRAMEBUFFER_OPERATION:帧缓冲区不完整或与命令不兼容

问题描述 投票:0回答:3

我在 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");
    }
}

所以任何人都可以帮我解决这个问题。谢谢!

android unity-game-engine google-cardboard
3个回答
0
投票

分辨率是 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 插件经历过这种情况。


0
投票

大多数情况发生在使用 Mali GPU 的 Android 设备上,甚至 Asphalt 8 也无法在这些设备上运行(至少是旧设备)。

我在华为 Mate 10 和三星 Galaxy A50s 上进行了尝试,因为两者分别使用 Mali-G72 MP12 和 MP3,因此出现相同的错误,并且图像变黑/空白(无法渲染)。

虽然在其他 Android 和 iOS 设备上也能正常工作


-1
投票

使用参数

-disable-gpu  

app.disableHardwareAcceleration()

看这里 在此输入链接描述

© www.soinside.com 2019 - 2024. All rights reserved.