android - 使用 glTexImage2D 绘制 63*63 图像

标签 android ios opengl-es opengl-es-2.0 glteximage2d

在android中,使用这段代码是可行的:

glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, content.width, content.height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, content.pixels);

但在 iOS 中不起作用,此代码仅绘制 64 *64(2 的幂)

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, content.width, content.height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, content.pixels);

我该怎么办?

非常感谢!!!

最佳答案

在调用 glTexImage2D 之前使用它:

// Use tightly packed data
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

更多信息在这里:http://www.khronos.org/opengles/sdk/1.1/docs/man/glPixelStorei.xml

[...]GL_PACK_ALIGNMENT 指定内存中每个像素行开始的对齐要求。允许的值为 1(字节对齐)、2(行对齐到偶数字节)、4(字对齐)和 8(行从双字边界开始)。初始值为 4。[...]

这可能不适用于所有设备。但是现在针对任何严肃的设备都应该支持它。 但是,此方法仍然存在一个缺点,即 OpenGL 读取缓冲区一次只能读取一个字节。因此,当使用 1 而不是默认值 4 时,对 glTexImage2D 的调用可能会慢 4 倍左右。当然,数据在内存中没有正确对齐,但这应该不是问题。 不过,我必须推荐使用大小为 2 的幂的纹理,因为使用 63x63 纹理的缺点比仅加载 64x64 纹理和调整纹理坐标要糟糕得多。

关于android - 使用 glTexImage2D 绘制 63*63 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19023397/

相关文章:

android - 交叉编译时NDK工具链的/system/bin/linker在哪里

ios - NSDateFormatter:如何将 "Wed, 23 Oct 2013 04:56:15 GMT"转换为本地时间?

ios - 更新另一个类别 objective-c 的变量

iOS Metal : Jaggies Anit-aliasing

java - 显示相同的纹理。绑定(bind)问题?

java - 从 getInstalled 应用程序中过滤 SystemApp

android - 任务 ':app:processReleaseGoogleServices' 执行失败。无法删除 : . ..../values.xml

android 从 GL_TEXTURE_EXTERNAL_OES 读取像素

android - 如何仅获取在 Android 中附加了 StructuredAddress 的联系人?

ios - 在 Swift 上弹出 ViewController