// texture_util —— 统一的「RGBA8 字节 -> ImageTexture」出口,可选 GPU 压缩。 // // 桌面默认关(与旧路径逐字节一致:create_from_data + generate_mipmaps + // create_from_image)。移动端(OS.has_feature("mobile"))或 MTGODOT_TEXCOMP=1 // 时,对**颜色贴图**做运行时 ASTC 8x8 压缩,省 ~6–8x 显存/带宽;编码失败自动 // 回退 RGBA8。控制图 / 阴影图 / splat / 法线数据图不要走这个(用 RGBA8)。 // // BACKLOG F4 / docs/PLATFORMS.md。 #pragma once #include #include #include #include #include namespace mtgodot { // 颜色贴图(sRGB 视觉内容,可压)。法线/数据图另说,暂不压。 enum class TexUse { COLOR }; // 运行时压缩开关。首次调用惰性初始化:MTGODOT_TEXCOMP 环境变量优先 // ("1"/"0"),否则 OS.has_feature("mobile")。也可显式覆盖。 bool texcomp_enabled(); void texcomp_set_enabled(bool on); // w*h*4 的 level-0 RGBA8 -> ImageTexture。mipmaps=true 时先生成 mip 链 // (ASTC 压缩前必须)。压缩仅在 texcomp_enabled() && use==COLOR 时发生。 godot::Ref make_color_texture( int w, int h, const uint8_t *rgba, size_t len, bool mipmaps, TexUse use = TexUse::COLOR); } // namespace mtgodot