在 OpenGL 开发中,我们要渲染一张图片,通常先是得到一张图片对应的 Bitmap ,然后将该 Bitmap 作为纹理上传到 OpenGL 中。在 Android 中有封装好的 GLUtils
类的 texImage2D
方法供我们调用。
public static void texImage2D(int target, int level, int internalformat,
Bitmap bitmap, int type, int border)
该方法的底层原理实际上也是解析了该 Bitmap ,得到了 Bitmap 所有的像素数据,类似于 Android NDK 关于 Bitmap 操作的 AndroidBitmap_lockPixels
方法,如果你不太了解该方法,可以参考这篇文章:Android JNI 之 Bitmap 操作。
得到了所有像素数据之后,实际最终还是调用了 OpenGL 的 glTexImage2D
来实现纹理上传。当然,如果可以直接得到所有数据,也不需要走解析 Bitmap 这一步了,这种场景最常见的就是把相机作为输入了。