首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加载调色板/atitc DDS (INVALID_ENUM)时的Android Opengl ES纹理压缩问题

加载调色板/atitc DDS (INVALID_ENUM)时的Android Opengl ES纹理压缩问题
EN

Stack Overflow用户
提问于 2011-08-30 20:57:17
回答 1查看 2.1K关注 0票数 1

目前,我在安卓系统的OpenGL ES 1.0上加载DDS压缩纹理(使用压缩器生成)时遇到问题:每当我调用glCompressedTexImage2D时,每次都会得到一个GL_INVALID_ENUM。下面是有问题的代码:

代码语言:javascript
复制
gl.glCompressedTexImage2D(GL11.GL_TEXTURE_2D, -mipMapCount, GL11.GL_PALETTE4_RGBA8_OES, width, height, 0, tsz, texBuf);

变量tsz的计算方法是将纹理的pitchOrLinearSize除以4,直到它是1字节(我的纹理是正方形的)。texBuf是一个ByteBuffer和mipMapCount。当我这样做的时候,我得到了一个GL_INVALID_ENUM错误代码,并且什么也没有加载。当我加载ATC压缩纹理(有一个adreno gpu)时,也会发生同样的情况。

我正在用模拟器(带有调色板纹理)和我的手机(基于MSM720x的芯片组,相当于HTC Magic,两种类型)进行测试,但都没有用。

下面是令人不快的代码:

代码语言:javascript
复制
                        ByteBuffer texBuf = ByteBuffer.allocateDirect(tsz);
                        int ld = fis.getChannel().read(texBuf);
                        if (ld == tsz) {
                            int id = newTextureID(gl);
                            gl.glBindTexture(GL11.GL_TEXTURE_2D, id);

                            // Set all of our texture parameters:
                            gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_NEAREST);
                            gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR_MIPMAP_NEAREST);
                            gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
                            gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);

                            texBuf.position(0);
                            //gl.glCompressedTexImage2D(GL11.GL_TEXTURE_2D, -mipMapCount, GL11.GL_PALETTE4_RGBA8_OES, width, height, 0, tsz, texBuf);
                            gl.glCompressedTexImage2D(GL11.GL_TEXTURE_2D, -mipMapCount, GL11.GL_PALETTE4_RGBA8_OES, width, height, 0, pitchOrLinearSize, texBuf);

                            int err = gl.glGetError();

                            if (err == GL11.GL_INVALID_VALUE) {
                                Log.d("TDL-dds", "Error INVALID_VALUE");
                            } else if (err == GL11.GL_INVALID_ENUM) {
                                Log.d("TDL-dds", "Error INVALID_ENUM");
                            }

                            if (err != 0) {
                                int texs[] = new int[1];
                                texs[0] = id;
                                gl.glDeleteTextures(1, texs, 0);
                                return 0;
                            }
                            return id;
                        }

有人知道为什么我会有INVALID_ENUM的错误吗?

EN

回答 1

Stack Overflow用户

发布于 2012-05-03 16:12:38

我认为你应该用'GL_ATC_RGB_AMD‘而不是'GL_PALETTE4_RGBA8_OES’

从这里得到::http://www.brokenteapotstudios.com/android-game-development-blog/2011/07/android-atitc-atc-texture-encoding-and-performance.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7243476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档