2

在我的应用程序中,我尝试使用纹理,但出现错误

:0: SGXQueueTransfer: all paths failed
:0: HardwareMipGen: Failed to generate texture mipmap levels (error=3)

在我的 Galaxy Nexus 上。我的 EVO 4G 没有出现这些错误。

这是相关的加载代码。

private static int load(Context context, int resID) {
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),
            resID);

    int[] texts = new int[1];
    GLES20.glGenTextures(1, texts, 0);
    int texID = texts[0];

    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texID);

    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
            GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
            GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);

    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
            GLES20.GL_CLAMP_TO_EDGE);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
            GLES20.GL_REPEAT);

    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);

    return texID;
}

private static int loadWithMipmap(Context context, int resID) {
    int texID = load(context, resID);

    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
            GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_NEAREST);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
            GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR_MIPMAP_NEAREST);

    GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);

    return texID;
}

任何想法发生了什么以及如何解决它?

编辑:只有一张图片导致错误,它是 1024x2048 png。

4

3 回答 3

1

吓死人了 在 Galaxy Nexus 7 上测试。

您需要执行以下操作:

    GLES20.glTexParameterf(
        GLES20.GL_TEXTURE_2D,
        GLES20.GL_TEXTURE_MIN_FILTER,
    GLES20.GL_LINEAR_MIPMAP_NEAREST);
    this.context.checkError("GL_TEXTURE_MIN_FILTER");
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
        GLES20.GL_TEXTURE_MAG_FILTER,
    GLES20.GL_LINEAR);

严格来说,我猜 GL_LINEAR_MIPMAP_NEAREST 不是有效的 MAG_FILTER。无论如何,Nexus 7 都是这么认为的。它与所做的更改完美地融合在一起。

于 2012-08-14T13:50:18.263 回答
1

我看到了这一点,一旦我将图像压缩为正方形,它就起作用了。OpenGL 不会给出错误。

于 2012-08-28T21:07:40.193 回答
0

疯狂的猜测,因为我无法访问您提到的硬件,但是错误是否发生在没有二维幂的纹理上?

于 2012-06-16T21:01:43.823 回答