diff --git a/docs/api/resources/resourcepackage/resourcepackage.md b/docs/api/resources/resourcepackage/resourcepackage.md deleted file mode 100644 index 8afc1f88..00000000 --- a/docs/api/resources/resourcepackage/resourcepackage.md +++ /dev/null @@ -1,161 +0,0 @@ -# ResourcePackage - -**命名空间**: `XCEngine::Resources` - -**类型**: `class` - -**描述**: 资源包读写工具,支持打包多个资源文件到单个包文件中,以及从包中读取资源。 - -## 概述 - -`ResourcePackage` 提供了资源打包功能,可以将多个资源文件打包成单个包文件,方便分发和加载。包文件包含文件清单和数据区域。 - -## 头文件 - -```cpp -#include -``` - ---- - -## PackageFileEntry 结构体 - -打包文件条目信息。 - -| 成员 | 类型 | 描述 | -|------|------|------| -| `relativePath` | `Containers::String` | 相对路径 | -| `size` | `size_t` | 文件大小 | -| `checksum` | `Core::uint64` | 校验和 | -| `offset` | `size_t` | 数据偏移量 | - ---- - -## ResourcePackageBuilder - -资源包构建器,用于创建新的资源包。 - -### 构造与析构 - -| 方法 | 描述 | -|------|------| -| `ResourcePackageBuilder()` | 默认构造 | -| `~ResourcePackageBuilder()` | 析构函数 | - -### 包构建 - -| 方法 | 描述 | -|------|------| -| `bool AddFile(const Containers::String& sourcePath, const Containers::String& relativePath)` | 添加单个文件到包 | -| `bool AddDirectory(const Containers::String& sourceDir, const Containers::String& relativeBase = "")` | 添加整个目录到包(当前为 stub,始终返回 true) | -| `void SetOutputPath(const Containers::String& path)` | 设置输出包文件路径 | -| `const Containers::String& GetOutputPath() const` | 获取输出路径 | -| `bool Build()` | 构建包文件 | -| `float GetProgress() const` | 获取构建进度(0.0f ~ 1.0f) | -| `const Containers::String& GetError() const` | 获取错误信息 | - -## 实现说明 - -**注意**: `ResourcePackageBuilder::AddDirectory()` 当前为 stub,始终返回 true。 - -## 使用示例(构建) - -```cpp -ResourcePackageBuilder builder; - -// 添加文件 -builder.AddFile("textures/player.png", "textures/player.png"); -builder.AddFile("textures/terrain.png", "textures/terrain.png"); - -// 添加目录 -builder.AddDirectory("shaders/", "shaders/"); - -// 设置输出 -builder.SetOutputPath("data/resources.pkg"); - -// 构建 -if (builder.Build()) { - printf("Package built successfully!\n"); -} else { - printf("Build failed: %s\n", builder.GetError().CStr()); -} -``` - ---- - -## ResourcePackage - -资源包读取器,用于从已打包的文件中读取资源。 - -### 构造与析构 - -| 方法 | 描述 | -|------|------| -| `ResourcePackage()` | 默认构造 | -| `~ResourcePackage()` | 析构函数,自动关闭包 | - -### 包操作 - -| 方法 | 描述 | -|------|------| -| `bool Open(const Containers::String& packagePath)` | 打开包文件 | -| `void Close()` | 关闭包文件 | -| `bool IsValid() const` | 检查包是否有效 | - -### 文件操作 - -| 方法 | 描述 | -|------|------| -| `bool Exists(const Containers::String& relativePath) const` | 检查文件是否存在于包中 | -| `Containers::Array Read(const Containers::String& relativePath) const` | 读取包内文件 | -| `size_t GetSize(const Containers::String& relativePath) const` | 获取包内文件大小 | -| `void Enumerate(const Containers::String& pattern, Containers::Array& outFiles) const` | 枚举包内匹配的文件 | - -### 包信息 - -| 方法 | 描述 | -|------|------| -| `const PackageInfo& GetInfo() const` | 获取包信息 | - -### PackageInfo 结构体 - -| 成员 | 类型 | 描述 | -|------|------|------| -| `path` | `Containers::String` | 包文件路径 | -| `version` | `Core::uint16` | 包格式版本 | -| `fileCount` | `size_t` | 文件数量 | -| `totalSize` | `size_t` | 总大小 | - -## 使用示例(读取) - -```cpp -ResourcePackage package; -if (package.Open("data/resources.pkg")) { - // 检查文件 - if (package.Exists("textures/player.png")) { - // 读取文件 - auto data = package.Read("textures/player.png"); - if (!data.Empty()) { - // 使用数据... - } - } - - // 获取文件大小 - size_t size = package.GetSize("textures/player.png"); - - // 枚举文件 - Containers::Array files; - package.Enumerate("textures/*.png", files); - - // 获取包信息 - auto info = package.GetInfo(); - printf("Package: %s, Files: %zu\n", info.path.CStr(), info.fileCount); - - package.Close(); -} -``` - -## 相关文档 - -- [ResourceFileSystem](../filesystem/filesystem.md) - 资源文件系统 -- [Resources 总览](../resources.md) - 返回模块总览 diff --git a/docs/api/resources/shaderloader/index.md b/docs/api/resources/shaderloader/index.md deleted file mode 100644 index a2d296dd..00000000 --- a/docs/api/resources/shaderloader/index.md +++ /dev/null @@ -1,58 +0,0 @@ -# ShaderLoader - -## 命名空间 - -`XCEngine::Resources` - -## 类型 - -类 (Class) - -## 描述 - -着色器资源加载器,负责从磁盘加载 `.vert`、`.frag`、`.geom`、`.comp`、`.glsl`、`.hlsl` 和 `.shader` 格式的着色器资源文件。 - -## 概述 - -`ShaderLoader` 继承自 `IResourceLoader`,实现了着色器资源的加载功能。它支持多种着色器语言和类型,能够根据文件扩展名自动识别着色器语言(GLSL/HLSL)和着色器类型(Vertex/Fragment/Geometry/Compute)。加载过程中会读取源文件内容、检测着色器类型并创建 `Shader` 对象。 - -## 公共方法 - -| 方法 | 签名 | 描述 | -|------|------|------| -| [ShaderLoader](methods/constructor.md) | `ShaderLoader()` | 默认构造函数 | -| [GetResourceType](methods/get-resource-type.md) | `ResourceType GetResourceType() const` | 返回资源类型为 Shader | -| [GetSupportedExtensions](methods/get-supported-extensions.md) | `Array GetSupportedExtensions() const` | 返回支持的扩展名列表 | -| [CanLoad](methods/can-load.md) | `bool CanLoad(const String& path) const` | 检查给定路径是否可被加载 | -| [Load](methods/load.md) | `LoadResult Load(const String& path, const ImportSettings* settings = nullptr)` | 加载指定路径的着色器资源 | -| [GetDefaultSettings](methods/get-default-settings.md) | `ImportSettings* GetDefaultSettings() const` | 返回默认导入设置 | - -## 使用示例 - -```cpp -#include "Resources/ShaderLoader.h" -#include "Resources/ResourceManager.h" - -using namespace XCEngine::Resources; - -// 通过 ResourceManager 加载着色器 -auto shaderHandle = ResourceManager::Get().Load("shaders/forward.vert"); -if (shaderHandle.IsValid()) { - Shader* shader = shaderHandle.Get(); - // 使用着色器... -} - -// 直接使用 ShaderLoader -ShaderLoader loader; -LoadResult result = loader.Load("shaders/pbr.frag"); -if (result.IsSuccess()) { - Shader* shader = static_cast(result.GetResource()); - // 使用着色器... -} -``` - -## 相关文档 - -- [Shader](../shader/shader.md) -- [IResourceLoader](../iloader/iloader.md) -- [ResourceManager](../resourcemanager/resourcemanager.md) diff --git a/docs/api/resources/shaderloader/methods/can-load.md b/docs/api/resources/shaderloader/methods/can-load.md deleted file mode 100644 index 83844555..00000000 --- a/docs/api/resources/shaderloader/methods/can-load.md +++ /dev/null @@ -1,27 +0,0 @@ -# ShaderLoader::CanLoad - -## 方法签名 - -```cpp -bool CanLoad(const Containers::String& path) const override; -``` - -## 详细描述 - -检查给定路径的文件是否可以被该加载器加载。通过提取文件扩展名并与支持列表进行比较来判断。 - -## 参数 - -- `path` - 资源文件的完整或相对路径 - -## 返回值 - -`bool` - 如果文件扩展名在支持列表中返回 `true`,否则返回 `false` - -## 示例 - -```cpp -ShaderLoader loader; -bool canLoad = loader.CanLoad("shaders/pbr.vert"); // true -bool canLoad2 = loader.CanLoad("textures/wood.png"); // false -``` diff --git a/docs/api/resources/shaderloader/methods/constructor.md b/docs/api/resources/shaderloader/methods/constructor.md deleted file mode 100644 index 0188b697..00000000 --- a/docs/api/resources/shaderloader/methods/constructor.md +++ /dev/null @@ -1,29 +0,0 @@ -# ShaderLoader::ShaderLoader - -## 方法签名 - -```cpp -ShaderLoader(); -``` - -## 详细描述 - -默认构造函数,创建一个 `ShaderLoader` 实例。该加载器负责管理着色器资源的加载流程。 - -## 参数 - -无 - -## 返回值 - -无 - -## 示例 - -```cpp -#include "Resources/ShaderLoader.h" - -using namespace XCEngine::Resources; - -ShaderLoader loader; -``` diff --git a/docs/api/resources/shaderloader/methods/get-default-settings.md b/docs/api/resources/shaderloader/methods/get-default-settings.md deleted file mode 100644 index 2f24e76a..00000000 --- a/docs/api/resources/shaderloader/methods/get-default-settings.md +++ /dev/null @@ -1,27 +0,0 @@ -# ShaderLoader::GetDefaultSettings - -## 方法签名 - -```cpp -ImportSettings* GetDefaultSettings() const override; -``` - -## 详细描述 - -返回着色器资源的默认导入设置。当前实现返回 `nullptr`,表示着色器加载不使用导入设置。 - -## 参数 - -无 - -## 返回值 - -`ImportSettings*` - 始终返回 `nullptr` - -## 示例 - -```cpp -ShaderLoader loader; -ImportSettings* settings = loader.GetDefaultSettings(); -// settings == nullptr -``` diff --git a/docs/api/resources/shaderloader/methods/get-resource-type.md b/docs/api/resources/shaderloader/methods/get-resource-type.md deleted file mode 100644 index 6f2c7ce8..00000000 --- a/docs/api/resources/shaderloader/methods/get-resource-type.md +++ /dev/null @@ -1,27 +0,0 @@ -# ShaderLoader::GetResourceType - -## 方法签名 - -```cpp -ResourceType GetResourceType() const override; -``` - -## 详细描述 - -返回该加载器管理的资源类型,固定为 `ResourceType::Shader`。此方法继承自 `IResourceLoader` 接口,用于资源管理器识别加载器类型。 - -## 参数 - -无 - -## 返回值 - -`ResourceType` - 资源类型枚举值,始终返回 `ResourceType::Shader` - -## 示例 - -```cpp -ShaderLoader loader; -ResourceType type = loader.GetResourceType(); -// type == ResourceType::Shader -``` diff --git a/docs/api/resources/shaderloader/methods/get-supported-extensions.md b/docs/api/resources/shaderloader/methods/get-supported-extensions.md deleted file mode 100644 index 841d3e3d..00000000 --- a/docs/api/resources/shaderloader/methods/get-supported-extensions.md +++ /dev/null @@ -1,37 +0,0 @@ -# ShaderLoader::GetSupportedExtensions - -## 方法签名 - -```cpp -Containers::Array GetSupportedExtensions() const override; -``` - -## 详细描述 - -返回该加载器支持的文件扩展名列表。支持以下扩展名: - -- `vert` - 顶点着色器 -- `frag` - 片段着色器 -- `geom` - 几何着色器 -- `comp` - 计算着色器 -- `glsl` - 通用 GLSL 着色器 -- `hlsl` - HLSL 着色器 -- `shader` - 通用着色器 - -## 参数 - -无 - -## 返回值 - -`Containers::Array` - 支持的文件扩展名数组 - -## 示例 - -```cpp -ShaderLoader loader; -auto extensions = loader.GetSupportedExtensions(); -for (const auto& ext : extensions) { - // 处理每个扩展名 -} -``` diff --git a/docs/api/resources/shaderloader/methods/load.md b/docs/api/resources/shaderloader/methods/load.md deleted file mode 100644 index e13d8ced..00000000 --- a/docs/api/resources/shaderloader/methods/load.md +++ /dev/null @@ -1,45 +0,0 @@ -# ShaderLoader::Load - -## 方法签名 - -```cpp -LoadResult Load(const Containers::String& path, const ImportSettings* settings = nullptr) override; -``` - -## 详细描述 - -加载指定路径的着色器资源文件。加载流程如下: - -1. 读取文件数据到内存 -2. 根据扩展名识别着色器语言(HLSL 或 GLSL) -3. 检测着色器类型(Vertex/Fragment/Geometry/Compute) -4. 创建 `Shader` 对象并设置属性 - -如果加载失败,返回的 `LoadResult` 将包含错误信息。 - -## 参数 - -- `path` - 着色器文件的路径 -- `settings` - 可选的导入设置指针(当前实现中未使用) - -## 返回值 - -`LoadResult` - 加载结果,成功时包含 `Shader` 指针,失败时包含错误信息 - -## 示例 - -```cpp -#include "Resources/ShaderLoader.h" - -using namespace XCEngine::Resources; - -ShaderLoader loader; -LoadResult result = loader.Load("shaders/forward.vert"); -if (result.IsSuccess()) { - Shader* shader = static_cast(result.GetResource()); - // 使用着色器... -} else { - // 处理错误 - const String& error = result.GetErrorMessage(); -} -``` diff --git a/engine/include/XCEngine/Audio/Equalizer.h b/engine/include/XCEngine/Audio/Equalizer.h index 351dbd31..11ac3631 100644 --- a/engine/include/XCEngine/Audio/Equalizer.h +++ b/engine/include/XCEngine/Audio/Equalizer.h @@ -33,7 +33,7 @@ public: private: void ProcessBand(float* buffer, uint32 sampleCount, uint32 channel, uint32 band); - void ComputeCoefficients(float frequency, float q, float gainDb); + void ComputeCoefficients(uint32 band, float frequency, float q, float gainDb); private: uint32 m_bandCount = 4; diff --git a/engine/src/Audio/Equalizer.cpp b/engine/src/Audio/Equalizer.cpp index c58a5308..82012459 100644 --- a/engine/src/Audio/Equalizer.cpp +++ b/engine/src/Audio/Equalizer.cpp @@ -18,7 +18,7 @@ Equalizer::Equalizer() for (uint32 i = 0; i < m_bandCount; ++i) { m_gains[i] = 0.0f; m_qs[i] = 1.0f; - ComputeCoefficients(m_frequencies[i], m_qs[i], m_gains[i]); + ComputeCoefficients(i, m_frequencies[i], m_qs[i], m_gains[i]); } } @@ -86,7 +86,7 @@ void Equalizer::SetBandFrequency(uint32 band, float frequency) { } m_frequencies[band] = std::max(20.0f, std::min(frequency, 20000.0f)); - ComputeCoefficients(m_frequencies[band], m_qs[band], m_gains[band]); + ComputeCoefficients(band, m_frequencies[band], m_qs[band], m_gains[band]); } float Equalizer::GetBandFrequency(uint32 band) const { @@ -102,7 +102,7 @@ void Equalizer::SetBandGain(uint32 band, float gainDb) { } m_gains[band] = std::max(-24.0f, std::min(gainDb, 24.0f)); - ComputeCoefficients(m_frequencies[band], m_qs[band], m_gains[band]); + ComputeCoefficients(band, m_frequencies[band], m_qs[band], m_gains[band]); } float Equalizer::GetBandGain(uint32 band) const { @@ -118,7 +118,7 @@ void Equalizer::SetBandQ(uint32 band, float q) { } m_qs[band] = std::max(0.1f, std::min(q, 10.0f)); - ComputeCoefficients(m_frequencies[band], m_qs[band], m_gains[band]); + ComputeCoefficients(band, m_frequencies[band], m_qs[band], m_gains[band]); } float Equalizer::GetBandQ(uint32 band) const { @@ -136,7 +136,11 @@ void Equalizer::SetWetMix(float wetMix) { m_wetMix = std::max(0.0f, std::min(1.0f, wetMix)); } -void Equalizer::ComputeCoefficients(float frequency, float q, float gainDb) { +void Equalizer::ComputeCoefficients(uint32 band, float frequency, float q, float gainDb) { + if (band >= m_bandCount) { + return; + } + float A = std::pow(10.0f, gainDb / 40.0f); float w0 = 2.0f * 3.14159265f * frequency / m_sampleRate; float cosw0 = std::cos(w0); @@ -150,15 +154,11 @@ void Equalizer::ComputeCoefficients(float frequency, float q, float gainDb) { float a1 = -2.0f * cosw0; float a2 = 1.0f - alpha / A; - size_t bandIndex = &frequency - &m_frequencies[0]; - - if (bandIndex < m_bandCount) { - m_a0[bandIndex] = b0 / a0; - m_a1[bandIndex] = b1 / a0; - m_a2[bandIndex] = b2 / a0; - m_b1[bandIndex] = a1 / a0; - m_b2[bandIndex] = a2 / a0; - } + m_a0[band] = b0 / a0; + m_a1[band] = b1 / a0; + m_a2[band] = b2 / a0; + m_b1[band] = a1 / a0; + m_b2[band] = a2 / a0; } } // namespace Audio