0

由于一些深不可测的原因,纹理不会加载。

这是方法

     public static void loadGLTexture(GL10 gl, Context context){

     BitmapFactory.Options options = new BitmapFactory.Options();
     options.inDensity = 240;// needed so that the image will be 512x512

    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.glasstexture, options); 
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();

    Log.i("GridLoginSquare.loadGLTexture 96", "Bitmap:{w:" + width + " h:" + height + "}");

    gl.glGenTextures(1, textures, 0);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

    // create nearest filtered texture
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

    // Use Android GLUtils to specify a two-dimensional texture image from our bitmap
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);  //error is on this line

    Log.e("GridLoginSquare.loadGLTexture 102", " ERR "+gl.glGetError()); 
    // Clean up

    bitmap.recycle();           
}

我的纹理图像的大小是 405 x 512

该行Log.e("GridLoginSquare.loadGLTexture 102", " ERR "+gl.glGetError());给了我一个 1281 错误(在调查了其他有类似问题的人之后)意味着 INVALID_VALUE

上面的代码是整个GridLoginSquare类的一部分,在这里

注意BitmapFactory.Options在包含密度以缩放图像之前,此问题已经存在。类似地,当它包含在 gist 代码中时,纹理 uv 除以 405 和 512。

4

3 回答 3

1

我在 textImage2D 遇到了完全相同的错误,glGetError 返回 0,而 WindyB 使用宽度和长度为 2 次方的图像的解决方案......我工作了!非常感谢!:)

此错误仅发生在 Android 2(确切地说是 Android 2.3.3)中。在 Android 4 中它总是运行良好(我喜欢在不同的 Android 版本中测试我的应用程序)。

顺便说一句,我不需要创建文件夹“drawable-nodpi”,我把它全部堆叠在“drawable”中

如果有帮助:在“声明 OpenGL 要求”下的http://developer.android.com/guide/topics/graphics/opengl.html#manifest,它说某些纹理压缩格式与某些设备不兼容。也许你的问题与此有关吗?

于 2012-12-13T02:35:14.863 回答
1

当我没有将纹理放入 drawable-nodpi 文件夹时,我遇到了这个问题。尝试将纹理移动到该文件夹​​中。

此外,OpenGL 更喜欢您的纹理具有 2 次方的维度。我不确定这是否会导致纹理根本不出现,但您不妨尝试将纹理图像设置为 512x512 或 256x256 以查看。

于 2012-06-25T02:25:16.243 回答
0

我在drawable-nodpi文件夹(我们必须创建)上有我的纹理,并且在调用此函数后得到相同的错误1281:GLUtils.texImage2D(GLES20.GL_TEXTURE_2D,0,bmp,0); 这是因为我的纹理不是 2 的幂,所以在我修复它之后(让它保持 2 的幂),它工作正常,只留下纹理流血(当纹理的一小部分不想要的部分出现在边界),但这可以通过调整 uvs 坐标的值来解决。

于 2015-02-21T20:25:42.827 回答