机器是 Freescale iMX53,我的程序通过这样的调用创建了许多图像:
EGLint attr[] = {
EGL_WIDTH, 720,
EGL_HEIGHT, 576,
EGL_IMAGE_FORMAT_FSL, EGL_FORMAT_YUV_YV12_FSL,
EGL_NONE
};
img = eglCreateImageKHR(egl_display, EGL_NO_CONTEXT, EGL_NEW_IMAGE_FSL, NULL, attr);
稍后这样的调用会获取分配图像的详细信息(物理/虚拟地址,步幅):
eglQueryImageFSL(egl_display, img, EGL_CLIENTBUFFER_TYPE_FSL, (EGLint *)&info);
iMX53 运行 EGL 1.4 和 OpenGL ES 2.0。在我看来(通过调查步幅值) eglCreateImageKHR(...) 只能分配 32 的倍数的图像宽度,这在我的情况下是绝对糟糕的。不幸的是,由于它们造成的性能损失,我不能使用 glTexImage2D 和朋友。
我可以以某种方式使 eglCreateImageKHR(...) 避免使用 32 字节的倍数,甚至强制它使用 4/8/16 字节对齐吗?16 字节对齐对我来说也足够了。我没有使用 Android,只是一个 2.6.35.4 内核和带有自定义 linux 发行版的 OpenGL ES / EGL 库。