#include #include #include #include #include namespace extra2d { namespace { /** * @brief 获取 FileModule 实例 */ FileModule *getFileModule() { return getModule(); } /** * @brief 检查文件是否存在(使用 FileModule) */ bool fileExists(const std::string &path) { FileModule *fileModule = getFileModule(); if (fileModule) { return fileModule->exists(path); } return false; } /** * @brief 读取文件内容为字符串(使用 FileModule,支持 RomFS) */ std::string readFileToString(const std::string &path) { FileModule *fileModule = getFileModule(); if (fileModule) { return fileModule->readString(path); } return ""; } } // anonymous namespace Ptr ShaderLoader::load(const std::string &path) { std::string basePath = path; std::string::size_type dotPos = basePath.rfind('.'); if (dotPos != std::string::npos) { basePath = basePath.substr(0, dotPos); } std::string vertPath = basePath + ".vert"; std::string fragPath = basePath + ".frag"; if (!fileExists(vertPath)) { vertPath = basePath + ".vs"; } if (!fileExists(fragPath)) { fragPath = basePath + ".fs"; } return load(vertPath, fragPath); } Ptr ShaderLoader::load(const std::string &vertPath, const std::string &fragPath) { // 读取顶点着色器文件 std::string vsSource = readFileToString(vertPath); if (vsSource.empty()) { E2D_LOG_ERROR("ShaderLoader: Failed to read vertex shader: {}", vertPath); return Ptr(); } // 读取片段着色器文件 std::string fsSource = readFileToString(fragPath); if (fsSource.empty()) { E2D_LOG_ERROR("ShaderLoader: Failed to read fragment shader: {}", fragPath); return Ptr(); } // 从源码加载着色器 Ptr shader = makePtr(); if (!shader->loadFromSource(vsSource, fsSource)) { E2D_LOG_ERROR("ShaderLoader: Failed to compile shader {} + {}", vertPath, fragPath); return Ptr(); } E2D_LOG_DEBUG("ShaderLoader: Loaded shader {} + {}", vertPath, fragPath); return shader; } Ptr ShaderLoader::loadFromMemory(const uint8_t *data, size_t size) { E2D_LOG_ERROR("ShaderLoader: loadFromMemory not supported for shaders"); return Ptr(); } Ptr ShaderLoader::loadFromSource(const std::string &vsSource, const std::string &fsSource) { Ptr shader = makePtr(); if (!shader->loadFromSource(vsSource, fsSource)) { E2D_LOG_ERROR("ShaderLoader: Failed to compile shader from source"); return Ptr(); } E2D_LOG_DEBUG("ShaderLoader: Compiled shader from source"); return shader; } } // namespace extra2d