动态纹理

纹理组设置中,可以将组标记为"默认值"或"动态"。

纹理的工作原理

游戏开始时,会将纹理组加载到RAM中,除非它是稍后加载的动态纹理组

在 RAM 内存中时,纹理组保持压缩状态,就像它在磁盘上一样。

绘制纹理组中的图像或运行其中一个预取函数时,该纹理组的所有纹理页面都会加载到 VRAM 中。对于大多数纹理组格式,纹理在加载到 VRAM 之前首先进行解压缩。但是,如果您使用的是自定义纹理组格式,则会在 GPU 上实时解压缩纹理。

注意 除 GX.games 外,所有平台上的纹理解压缩都是异步的。这可能会导致游戏中纹理解压缩时出现卡顿。要避免这种情况,请确保在加载屏幕或游戏的其他非活动部分时预取纹理。

您可以刷新纹理组以将其从VRAM中删除(这不会将其从RAM中删除)。

"默认"组

默认纹理组包含在最终游戏的软件包(WAD文件)中。游戏开始后,任何此类纹理组都会立即加载到RAM中,并在需要时预取到VRAM中,或者询问

"动态"组

游戏开始时不会加载动态纹理组。它可以在需要时加载(即从中绘制图像时),也可以在手动加载时加载。

您可以通过调用texturegroup_load()将动态纹理组手动加载到RAM中。默认情况下,此功能还会解压缩该组并将其预取到VRAM中。

您可以通过将函数的第二个参数设置为false来禁用预取。这将使您稍后手动预取它,或者在从中绘制图像时自动获取它(由于它是同步的,不建议使用后者)。

也可以使用texturegroup_unload()卸载纹理组,这将从内存中删除该纹理组并将其以其原始压缩形式放回磁盘。

注意在加载动态纹理组之前,无法运行需要读取其包含的资源的操作,例如复制精灵(这将触发加载纹理组,但该功能仍将失败,因为无法立即加载)。但是,您可以读取纹理信息,如UVsTPE

动态组模式

使用texturegroup_set_mode()可以将动态组的"模式"设置为"隐式"(默认值)或"显式"。这将更改是否可以自动加载动态组。

此设置是全局设置,不能按组应用。

隐式

texturegroup_set_mode(false, ...)

这是默认设置。这样可以自动加载动态组,因此当绘制来自已卸载的动态组的图像时,它将触发该纹理组的加载。

当纹理加载到 VRAM 中并解压缩时,这可能会导致小幅冻结,因此不推荐使用隐式加载。

当隐式触发纹理组时,仅加载所需的纹理页面。例如,如果您卸载的纹理组有 4 个纹理页面,而您尝试从 Texture Page 2 中绘制某些内容,则只加载该页面,纹理页面 1、3 和 4 将保留在磁盘上。

显式

texturegroup_set_mode(true, ...)

此设置禁用动态组的自动加载,这意味着您必须手动加载它们。当您尝试从尚未加载的纹理组绘制图像时,图像将不会绘制,并且错误将打印到输出日志中。

您可以在texturegroup_set_mode()中设置"回退"精灵,该精灵将代替尚未加载的纹理。

在运行时卸载纹理,显示回退精灵

显示回退精灵时,将绘制其整个纹理页面,因此建议为回退精灵启用单独纹理页面,以防止出现意外的图形。回退精灵的纹理页面将自动加载,即使其设置为"动态"页面也是如此。

上面示例中使用的回退精灵是作为渐变棋盘创建的,因此您可以随时判断正在绘制回退纹理的哪个部分,以及绘制的比例,这可能有助于诊断与纹理相关的问题。

路径和建模

纹理组设置中,您可以设置动态组将放置在最终游戏目录中的路径。如果没有设置路径,纹理将被放置在游戏目录的根目录中。

如果将组格式设置为"PNG",则导出的纹理文件将变为可直接编辑,允许玩家对其进行修改。

更多功能

下面是一些与动态组相关的更多功能: