feat: DDS 纹理加载器(BC 压缩直传 + mip 链,参考 Horizon 实现)
- Assets::Dds 解析器:中性 DdsFormat 枚举(Assets 层禁 Vulkan 头铁律), 支持 legacy fourcc(DXT1/3/5/ATI1/2)+ DX10 头(BC1..BC7/RGBA8/BGRA8) + 未压缩 32bpp + 2D mip 链;数据不解码,直接上传由硬件采样解码 - Texture:按扩展名分发(.dds → InitFromDds);渲染侧负责格式映射与 sRGB 语义(颜色图走 SRGB 变体,BC4/5/6H 数据图保持线性);view/sampler 覆盖完整 mip 链;逐 mip copyBufferToImage(紧凑排布) - Model::GetOrLoadTexture:FBX/DCC 路径反斜杠归一化(否则 Linux 全挂) - DescriptorManager 池 1000 → 4096(SunTemple 1056 材质集打爆过; 材质去重属材质系统任务) - main.cpp 临时挂 SunTemple 场景验证:48 张 DDS 全部加载(2048²、12 mips), 1056 mesh 渲染正常,validation 零警告
This commit is contained in:
+8
-17
@@ -47,7 +47,8 @@ protected:
|
||||
EnableImGui();
|
||||
|
||||
// 模型资产(AssetManager 负责加载/缓存/生命周期,返回句柄)
|
||||
const auto backpack = GetAssets().LoadModel("assets/models/backpack/backpack.obj");
|
||||
// SunTemple:FBX + DDS 压缩贴图(DdsLoader 验证场景)
|
||||
const auto temple = GetAssets().LoadModel("assets/models/SunTemple/SunTemple.fbx");
|
||||
|
||||
// 地面:程序化纯色平面(半边长 15,中心 y=-2)
|
||||
const auto ground = GetAssets().CreatePlane(15.0f, 140, 140, 145);
|
||||
@@ -64,23 +65,13 @@ protected:
|
||||
camera.primary = true;
|
||||
camera.camera.SetPosition(glm::vec3(0.0f, 0.0f, 7.0f));
|
||||
|
||||
// 背包实体 × 3(悬浮在地面上方)
|
||||
auto size = 1;
|
||||
for (int i = 0; i < size; ++i)
|
||||
// 神庙实体 × 1( FBX 单位较大,缩放到场景尺度)
|
||||
{
|
||||
for (int j = 0; j < size; j++)
|
||||
{
|
||||
auto e = scene.CreateEntity("Backpack" + std::to_string(i));
|
||||
|
||||
e.AddComponent<TransformComponent>()
|
||||
.SetPosition(glm::vec3((i - size * 0.5) * 1.5f, 0.0f, (j - size * 0.5) * 1.5f))
|
||||
.SetScale(glm::vec3(0.5f))
|
||||
.Compose();
|
||||
|
||||
e.AddComponent<MeshRendererComponent>(MeshRendererComponent{backpack});
|
||||
|
||||
m_Spinners.push_back(e);
|
||||
}
|
||||
auto e = scene.CreateEntity("SunTemple");
|
||||
e.AddComponent<TransformComponent>()
|
||||
.SetScale(glm::vec3(0.05f))
|
||||
.Compose();
|
||||
e.AddComponent<MeshRendererComponent>(MeshRendererComponent{temple});
|
||||
}
|
||||
|
||||
// 灯光实体(第一个灯 = 阴影光源)
|
||||
|
||||
Reference in New Issue
Block a user