我可以在Android中成功创建和加载ETC纹理, 使用电话:
ETC1Texture etc1tex = new ETC1Texture(...);
gl11.glCompressedTexImage2D(GL10.GL_TEXTURE_2D, 0/*level*/,
ETC1.ETC1_RGB8_OES/*internal format*/,
etc1tex.getWidth(), etc1tex.getHeight(),
0/*border*/,
etc1tex.getData().capacity()/*imagesize*/,
etc1tex.getData());
但现在我需要用新的图像数据更新这个纹理。 我正在使用SubImage的调用:
GL11.glCompressedTexSubImage2D( GL10.GL_TEXTURE_2D, 0/*level*/,
0, 0, etc1tex.getWidth(), etc1tex.getHeight(),
ETC1.ETC1_RGB8_OES,
etc1tex.getData().capacity(),
etc1tex.getData());
与前一次调用一样,或多或少采用相同的参数。 但它不起作用,我的纹理甚至没有改变。
但是如果我只是用第一个替换SubImage调用,我可以在更新时看到纹理中的一些失真......
有谁知道我如何使用这个CompressedTexSubImage调用
答案 0 :(得分:2)
我使用glCompressedTexImage2D(texinfo.glTarget + face, level,glInternalFormat, pixelWidth, pixelHeight, 0,faceLodSize, data);
它有效。
但是当我使用
时glCompressedTexImage2D(texinfo.glTarget + face, level,glInternalFormat, pixelWidth, pixelHeight, 0,faceLodSize, NULL);
然后
glCompressedTexSubImage2D(texinfo.glTarget + face, level, 0, 0, pixelWidth , pixelHeight , glInternalFormat,faceLodSize, data);
它不起作用。
gl error is GL_INVALID_OPERATION
我需要使用glCompressedTexSubImage2D
,因为我在一个缓冲区中加载一个纹理。
可以加载到多个tile缓冲区中。
如果已加载一个图块,则调用glCompressedTexSubImage2D
来处理它。
答案 1 :(得分:0)
根据API(https://www.khronos.org/opengles/sdk/1.1/docs/man/glCompressedTexSubImage2D.xml)
"所需的调色板格式不允许子图像更新,但是 扩展定义的其他格式可以。"
我认为这意味着对于ETC1压缩,不允许使用子图像。