OpenGL纹理未被渲染的常见原因

时间:2014-09-11 01:06:38

标签: android textures rendering opengl-es-2.0

我刚刚听到一位用户说我的(Android OpenGL ES 2.0)应用程序(游戏)不能在他的HTC 1X +手机上运行。他得到的只是屏幕顶部的音乐和横幅广告,没有别的。

不幸的是,我没有HTC 1X +来测试它。

一些注意事项:

  • 虽然我的纹理不是2的力量,但我只使用了GLES20.GL_CLAMP_TO_EDGE
  • 根据我的阅读,HTC 1X +的最大纹理大小为2048 x 2048,它从XHDPI 文件夹(恼人地)获取了它的资源,即便如此,我只有1个超过该尺寸的纹理,我应用程序的开始页面上显示的所有其他对象使用的纹理远小于此最大数量,因此应显示一些内容。
  • 我没有使用任何类型的纹理压缩

我的应用程序在15(aprox)其他设备上运行得相当愉快,其他设备已经测试过 - 只有1x(到目前为止)存在问题。

有人能指出OpenGL ES 2.0的一些常见问题可能导致这些纹理无法呈现?某些Android版本或设备是否有任何怪癖?

我还没有发布任何代码只是因为该应用适用于大多数设备,而且我不确定代码的哪些部分会有所帮助,但如果需要任何代码,请直接询问。

编辑 - 包括纹理加载代码

 public static int LoadTexture(GLSurfaceView view, Bitmap imgTex){

    //Array for texture
    int textures[] = new int[1];
    try {
        //texture name
        GLES20.glGenTextures(1, textures, 0);
        //Bind textures
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
        //Set parameters for texture
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);

        //Apply texture
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, imgTex, 0);

        //clamp texture
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE);

    } catch (Exception e){

    }
    //Increase texture count
    textureCount++;
    //Return texture
    return textures[0];
}

1 个答案:

答案 0 :(得分:0)

  • 您检查了采样器属性吗? 设置看起来正确,但为什么不指定GL_TEXTURE_WRAP_S设置?使用GLES20.glTexParameteri作为整数值。

  • 您使用的是哪种类型的位图? 尝试强制内部格式为GL_RGBA,GL_BGR,GL_RGB

  • 你是否正确解开绑定或绑定到不同的纹理? 其他纹理设置可能会对代码的其他部分造成严重破坏..

  • 您是否在着色器中指定了正确的纹理单元? 打印着色器的采样器属性位置,以便您知道这是正确的,并确保在渲染过程中明确地将纹理绑定到它。