gpt4 book ai didi

webgl - 最大纹理数 WebGL

转载 作者:行者123 更新时间:2023-12-05 01:19:14 30 4
gpt4 key购买 nike

我一直在寻找有关 WebGL 的信息以及可以分配用于渲染的最大纹理数/内存量。这显然是特定于硬件/设备的,因此我正在寻找一种智能处理纹理的方法。

我目前有 512x512 RGBA8 格式的纹理。一个用户可能会将 270 个纹理加载到内存中。据我所知,对于 mip 贴图,它的计算结果为每像素 4 字节乘以 4/3。因此,单个纹理加上 mip 贴图将在 4 * 512 * 512 * 1.33 = 1.33MB 左右。总共需要 359.1MB 才能将纹理加载到内存中。

这是最坏的情况,在中/高端机器上会很好,但我也想在 WebGL 在 Android 和低规范机器上广泛可用后针对移动设备进行优化。

如果我将纹理减少到 256x256,我会注意到质量下降,但这可能是低端设备的一个选项。这导致每个纹理总共 4 * 256 * 256 * 1.33 = 0.33MB,总计 89.1MB。

在尝试将纹理加载到 WebGL 上下文之前,是否有 API 可以确定总的可用纹理内存?

此外,一次可以加载到内存中的纹理总数是否也有上限?

我想在用户加载我的页面时使用上述两个参数来获得合理的默认值。

最佳答案

据我所知,没有办法做到这一点。来自东治的answer ,听起来这是出于安全原因。

我会考虑谁将使用您的应用程序,如果这组用户不是严格意义上的在桌面上拥有出色专用显卡的用户,那么为每个人缩小纹理。也许您可以允许更高级别的图形作为选项,但要意识到这可能会导致某些/大多数人出现内存不足异常。

如果您碰巧没有一次使用所有这些纹理,您可以尝试跟踪您正在使用的纹理,并且只将它们加载到内存中(并使用 gl.deleteTextures 卸载纹理)。我猜想在运行时而不是在启动时删除和加载这么多纹理会花费很多时间,所以小心翼翼地这样做(一次只有几个)以保持帧率会很聪明。不确定您是否甚至能够在一帧中加载 1.33MB 的纹理,或者这是否适用于您的应用程序。

关于webgl - 最大纹理数 WebGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14815294/

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