gpt4 book ai didi

ios - 修改在 OpenGL ES 2.0 中使用的纹理贴图的一部分

转载 作者:行者123 更新时间:2023-12-01 16:50:07 27 4
gpt4 key购买 nike

我有一个纹理,用作纹理贴图。它是一个 2048 x 2048 的纹理,被划分为每个 256 像素的正方形。所以我有 64 个“插槽”。此 map 可以是空的、部分填充的或已满的。在屏幕上,我正在绘制简单的正方形,每个正方形都有一个 Sprite 贴图的插槽。

问题是当插槽的 Assets 可用时,我必须不时更新此 map 。这些 Assets 是从 Internet 下载的,但初始信息会提前到达,因此我可以知道我将使用多少个插槽,并查看本地存储以检查哪些插槽已经可以在开始时绘制。

例如。我的信息说将有 10 个方 block ,其中 5 个在本地可用,所以当初始化 Sprite 贴图时,这些方 block 已经填充并准备好绘制。在屏幕上,我将显示 10 个方 block 。其中 5 个将图像存储在这些插槽的纹理图中,其余 5 个使用时间图像绘制。下载插槽的新 Assets 时,我想用新的相应纹理更新我的 Sprite 贴图(绑定(bind)并用于绘图),在绘制完成并且 Sprite 贴图更新后,我设置了一个标志,告诉OpenGL,它应该使用该插槽而不是时间图像开始绘制。

根据我的阅读,有 3 种方法可以更新 Sprite 图。

1)用glTextImage2D上传一个新的:我目前正在使用这种方法。我将创建另一个更新纹理,然后简单地交换它。但我经常遇到内存警告。

2) 使用 glTextSubImage2D 修改纹理:我无法让它工作,我不断收到内存访问错误或黑色纹理。我相信它要么是因为线程不一样,要么我正在访问正在使用的纹理。

3)使用帧缓冲区对象:我可以试试这个,但我不确定我是否可以在纹理缓冲区已经被使用时绘制它。

解决这个问题的正确方法是什么?

这意味着要在 iPhone 上使用,因此资源有限。

编辑 : 我发现这篇文章谈到了一些相关的事情 here .

不幸的是,我不认为它专注于修改当前正在使用的纹理。

最佳答案

the thread is not the same



OpenGL-ES API 绝对不是多线程的。从主线程更新您的纹理。
因为你的纹理必须上传到gpu上,所以glTextSubImage2D是最快最简单的路径。保持这个方向:)

在帧缓冲区上渲染(附加在纹理上)对于渲染已经在 gpu 上的数据非常快。 (不是你的情况)。是的,您可以在绑定(bind)到纹理的帧缓冲区上绘制(= 使用纹理作为颜色附件的帧缓冲区)。

只有一个约束:您不能在一次绘制调用中读取和写入相同的纹理(附加到当前帧缓冲区的纹理不能绑定(bind)到纹理单元)

关于ios - 修改在 OpenGL ES 2.0 中使用的纹理贴图的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16765805/

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