- extension/src/{port,platform,codepage} -> src/; native_render -> src/host
(+ dxt, shaders/); libgr2 -> src/gr2; extension/third_party -> third_party
- extension/tests -> tests/port, libgr2/tests -> tests/gr2
- android-native -> android (build.sh, push-client.sh moved in)
- script -> scripts; tools/40250 -> tools/server; oracle -> tools/granny-oracle;
perf tools -> tools/perf
- all build trees under build/ (native, release, android, port-gate)
- xrender:: CMake aliases -> mt::; port-map ledger impl paths rewritten
No code changes. ctest 15/15, port_gate macos+android PASS, port_map check 0 errors.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 lines
1.2 KiB
C++
28 lines
1.2 KiB
C++
// dxt.{h,cpp} — ported verbatim from xrender-poc/engine/dxt.{h,cpp}
|
||
// (namespace engine -> mtimage). DDS DXT1/3/5 + masked 16/24/32-bit RGB -> RGBA8, level 0.
|
||
// engine/dxt —— DDS(DXT1/3/5) → RGBA8 软解。见 docs/steps/M1-static-render.md T3
|
||
// 自己写 ~150 行绕开 reuse/EterImageLib 的 windows.h 依赖(M1 风险表允许)。
|
||
// 对拍时两侧都喂软解 RGBA,不被 GPU S3TC 的 bit 级差异污染。
|
||
#pragma once
|
||
#include <cstdint>
|
||
#include <vector>
|
||
|
||
namespace mtimage {
|
||
|
||
struct Image {
|
||
uint16_t w = 0, h = 0;
|
||
std::vector<uint8_t> rgba; // w*h*4,level 0
|
||
// DXT DDS only: level count 40250 CreateDDSTexture gives the texture (0 = not a DXT
|
||
// DDS, caller follows the D3DX_DEFAULT full-chain path) and levels 1.. decoded to RGBA8.
|
||
uint8_t file_mip_levels = 0;
|
||
std::vector<std::vector<uint8_t>> mips;
|
||
const char* format = ""; // "DXT1" / "DXT3" / "DXT5" / "BGRA8" / ""
|
||
bool ok() const { return w && h && rgba.size() == size_t(w) * h * 4; }
|
||
};
|
||
|
||
// 读整个 .dds 文件字节,解 level 0 到 RGBA8(DXT 另解文件内 mip 到 mips)。失败返回 !ok()。
|
||
Image load_dds(const uint8_t* bytes, size_t len);
|
||
Image load_dds_path(const char* path);
|
||
|
||
} // namespace mtimage
|