将OpenGL应用程序移植到NDK。着色器效果看起来不同

时间:2014-08-04 09:57:44

标签: android opengl opengl-es android-ndk

我在OpenGL中编写了一个应用程序(未修复的管道)。 我已经使用NDK将应用程序移植到Android,并且存在一些问题。一切都比较暗,有些物体不应该显示出来。

Windows http://vvcap.net/db/WF0ilLDB2D3F72UlbPjA.png

的Android

NDK http://vvcap.net/db/KhD0q9XHJc_q5vFsda10.png

  1. 右边的茶壶是黑色的,有一些奇怪的反射。
  2. 飞球的下半部分为黑色
  3. 一切都很黑暗
  4. 水看起来并不正确。
  5. 环保茶壶呈粉红色。

  6. 在移植到OpenGL Es 2.0时有没有人遇到过类似的问题? 除了纹理加载格式之外,我没有更改着色器或代码中的任何内容:

    #ifdef _NDK
        if (IsAlpha)
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, Bits);
        else
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Width, Height, 0, GL_RGB, GL_UNSIGNED_BYTE, Bits);
    #else
        if (IsAlpha)
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, Width, Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, Bits);
         else
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, Width, Height, 0, GL_BGR, GL_UNSIGNED_BYTE, Bits);
    #endif
    

    谢谢!

1 个答案:

答案 0 :(得分:4)

在您的桌面代码路径中,您将BGR格式传递给TexImage2D,而在Android代码路径中,您选择RGB

GL无法知道Bits包含哪些数据,只是从数据中构造RGBA值(在A的情况下用1.0代替RGB组件或BGR格式。)如果您不预处理数据以反映格式,那么如果您布置数据,GL将只为B组件获取R组件值对于RGB纹理。

更正格式,你会没事的。