在Android平台下实现OpenGL ES程序的贴图加载操作一般是通过BitmapFactory.decodeResource这个api,然后用系统封装好的GLUtils.texImage2D函数直接转换为gl贴图即可,方便快捷。但在较新版的Android系统中res中的图片文件夹根据dpi设备分辨率的不同,细分了很多文件夹处理以支持不同设备的分辨率加载对应的图片,如drawable-hdpi,drawable-ldpi,drawable-mdpi等,如果没有注意这个问题而将贴图图片随意安置的话,在decode的时候系统会默认根据设备dpi的不同对目标图片格式解码的同时进行大小调整,也就是说有可能破坏原本已经是2^n大小的贴图图片,导致原本在模拟器上正确的绘图在真机上变成大白板!
解决这个问题的方法可以将图片放到不受dpi影响的drawable-nodpi中,或者设置BitmapFactory的选项,不处理dpi相关问题。
博主友情提示:
如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。
你好,我用android2.1 sdk进行opengl es纹理贴图开发时,在模拟器上正常显示,但是放到手机上就是白板!!!用了您的方法,还是不成,不知道您有没有解决办法…我的QQ:1944351 谢谢!期待与您联系!
这个问题我当时是在google g2上试没问题,然后换到moto xt800上有问题时试出来的,不知道这位朋友你的测试机是什么型号的。
你可以这样试验一下,用数据线开真机调试,然后把GL的DEBUG标识置上,看看是不是有GL函数调用失败了,如果没有,那你在加载图片的时候下断点看看操作返回的图片大小是不是原图的大小(注意原图的2^n方问题!),如果不是那就是我说的这个问题没有得到解决。