gpt4 book ai didi

OpenGL glTexImage2D 做什么?

转载 作者:行者123 更新时间:2023-12-04 23:49:21 24 4
gpt4 key购买 nike

gl.glTexImage2D 是什么意思做?文档说它“上传纹理数据”。但这是否意味着整个图像都在 GPU 内存中?我想使用一个大的图像文件进行纹理映射。进一步:我可以简单地使用 VBO 作为 uv 和位置坐标来绘制纹理吗?

对,我在这里用错了词。我的意思是携带 UV 坐标的 2D 数组和模型的 2D 数组,以将较大的 PNG 图像(在纹理内存中)子采样到各个图 block 模型上。我的困惑在于不知道这些获取可以多快。假设我有一个 5000x5000 像素的图像。我将它作为纹理加载。然后我创建了自己的算法来获取它的一部分以进行绘制。我在哪里可以节省绘制这些图 block 的带宽?如果我实现一个 LOD 算法来确定哪些图 block 是近的,哪些是远的,哪些是在相机视锥体之外的,如何管理内存中的每个图 block ?加载的问题我知道,但我正在努力寻找最好的实现来开始。我正在使用 OpenGL ES 2.0 为移动设备开发。

最佳答案

当您调用 glTexImage2D() 时会发生什么?取决于系统,您无法知道,除非您拥有允许您跟踪 GPU 和内存使用情况的开发人员工具。

唯一可以保证的是,您传递给调用的数据在调用返回时已被消耗(因为 API 定义允许您在调用后修改/释放数据),并且 GPU 可以访问数据它用于渲染。在这之间,任何事情都是公平的游戏。请记住,OpenGL 是一个非常异步的 API。当您进行 API 调用时,相应的工作大多会排队等待 GPU 稍后执行,并且通常在调用返回时尚未完成。这可以包括上传数据的调用。

此外,并非所有 GPU 都具有“GPU 内存”。事实上,如果你从数量上看,他们中很少有人这样做。移动 GPU 具有缓存,但大多数情况下没有传统离散 GPU 意义上的 VRAM。 VRAM 和缓存的管理方式高度依赖于系统。

有了上述所有注意事项,并描绘了具有 VRAM 的 GPU:虽然他们可以将数据加载到 glTexImage2D() 中的 VRAM 中。打电话,如果通常这样做,我会感到惊讶。这对我来说没有多大意义。加载纹理后,您不知道它将多快用于渲染。由于您不知道是否所有纹理都适合 VRAM(而且它们通常不会),因此您可能必须在使用之前将其从 VRAM 中逐出。这显然是非常浪费的。作为一般策略,我认为只有当你有一个使用它的绘图调用时才将纹理数据加载到 VRAM 中会更有效率。

如果驱动程序可以非常确信所有纹理数据都适合 VRAM,情况会有所不同。但是对于 OpenGL,真的没有合理的方法可以提前知道这一点。事情变得更加复杂,因为至少在台式计算机上,您可以同时运行多个应用程序,而 VRAM 是共享资源。

关于OpenGL glTexImage2D 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26499361/

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