1

我可以使用以下调用在 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 调用

4

2 回答 2

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,因为我加载了一个纹理而不是一个缓冲区。可能会被加载到多个瓦片缓冲区中。如果一个图块加载完成,则调用glCompressedTexSubImage2D处理它。

于 2013-03-27T04:31:57.177 回答
0

根据 API ( https://www.khronos.org/opengles/sdk/1.1/docs/man/glCompressedTexSubImage2D.xml )

“所需的调色板格式不允许子图像更新,但扩展定义的其他格式可以。”

我认为这意味着对于 ETC1 压缩,不允许使用子图像。

于 2014-07-24T17:52:48.610 回答