gpt4 book ai didi

ios - 在 iPhone 上使用 GL_UNSIGNED_SHORT_1_5_5_5_REV

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:59 24 4
gpt4 key购买 nike

在将定期更新的图像渲染到 iPhone 时,我一直遇到严重的性能问题。今天在 iPad 3 上试用后,我发现我只能获得 2fps。这太慢了。因此,我决定分析并发现几乎所有时间都花在了将图像转换为 32 位 ARGB 图像(在 UIImage drawInRect 之后)。每个人都说 UIKit 使用 OpenGLES 渲染的性能如此糟糕,我感到非常震惊。

所以我将渲染代码转换为 GLES1(我懒得马上设置 GLES2 渲染器 ;))。性能猛增。我现在得到 20+fps。事实上,性能如此之好,我开始怀疑我是否可以执行完整的视网膜渲染!

无论如何,我正在按如下方式创建纹理:

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, &colours.front() );

不幸的是,这颠倒了组件顺序。我通过反转位顺序来“修复”它:

val     = ((rgba.a >> 7) << 15) | ((rgba.b >> 3) << 10) | ((rgba.g >> 3) << 5) | ((rgba.r >> 3) << 0);

到:

val     = ((rgba.r >> 3) << 11) | ((rgba.g >> 3) << 6) | ((rgba.b >> 3) << 1) | ((rgba.a >> 7) << 0);

所以这证实了组件顺序在 CGImage 上是颠倒的。但是,此代码用于多种产品,因此我需要想出一种加载“组件反转”图像的方法。

因此,我找到了标志“GL_UNSIGNED_SHORT_1_5_5_5_REV”,但我无法让它工作。

我试过下面的代码:

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV, &colours.front() );

和:

glTexImage2D( GL_TEXTURE_2D, 0, GL_BGRA, width, height, 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, &colours.front() );

但两者都返回 GL_INVALID_ENUM。那我做错了什么?甚至可以加载组件反转图像吗?

提前致谢!

编辑:在此期间,我引入了另一个像素类,然后添加了以下代码:

inline uint32_t UpdateGLTexture( uint32_t texture, std::vector< R5G5B5A1 >& colours, unsigned int width, unsigned int height )
{
std::vector< A1R5G5B5 > convertedColours( colours.size() );
ColourSpaceConversion::ConvertFormat( convertedColours, colours );
return UpdateGLTexture( texture, convertedColours, width, height );
}

所以我现在有正确的渲染,但我正在努力避免这种颜色转换。我可能只是在使用 GL 渲染时以该格式创建源图像,但令人讨厌的是我无法直接加载该格式:(

最佳答案

GL_UNSIGNED_SHORT_1_5_5_5_REV 不起作用的原因是它不是纹理格式,尽管这在 iOS 上非常有用。 1555 16b 格式是 GL_EXT_read_format_bgra 扩展的一部分(请参阅定义它的#ifdef block ),它仅为 glReadPixels 定义了此枚举,不幸的是不是 glTexImage2D:

http://www.khronos.org/registry/gles/extensions/EXT/EXT_read_format_bgra.txt

这很烦人。 iOS将其16b缩略图存储在A1B5G5R5中,CGBitmapContext也支持A1B5G5R5渲染,但OpenGL ES在iOS上只支持R5G5B5A1(5551)。据我所知,无法直接下载使用 16b 5551 的 ALAsset 缩略图。

关于ios - 在 iPhone 上使用 GL_UNSIGNED_SHORT_1_5_5_5_REV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13201611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com