#include #include namespace extra2d { BuiltinAssetFactory::BuiltinAssetFactory(AssetStorage &textures, AssetStorage &shaders, AssetStorage &materials, AssetStorage &meshes, const AssetFileSystem &fileSystem) : textures_(textures), shaders_(shaders), materials_(materials), meshes_(meshes), fileSystem_(fileSystem) {} bool BuiltinAssetFactory::create() { { Ptr texture = makePtr(); uint8_t whitePixel[] = {255, 255, 255, 255}; if (!texture->loadFromMemory(whitePixel, 1, 1, TextureFormat::RGBA8)) { return false; } defaultTexture_ = textures_.insert(texture); } { std::string vertPath = fileSystem_.assetPath("shader/default.vert"); std::string fragPath = fileSystem_.assetPath("shader/default.frag"); if (!fileSystem_.exists(vertPath) || !fileSystem_.exists(fragPath)) { return false; } std::string vsSource = fileSystem_.readString(vertPath); std::string fsSource = fileSystem_.readString(fragPath); if (vsSource.empty() || fsSource.empty()) { return false; } Ptr shader = makePtr(); if (!shader->loadFromSource(vsSource, fsSource)) { return false; } defaultShader_ = shaders_.insert(shader); } { Ptr layout = makePtr(); layout->addParam("uColor", MaterialParamType::Color); layout->addParam("uTintColor", MaterialParamType::Color); layout->addParam("uOpacity", MaterialParamType::Float); layout->finalize(); Ptr material = makePtr(); material->setShader(shaders_.getPtr(defaultShader_)); material->setLayout(layout); material->setColor("uColor", Color::White); material->setColor("uTintColor", Color::White); material->setFloat("uOpacity", 1.0f); material->setTexture("uTexture", textures_.getPtr(defaultTexture_), 0); defaultMaterial_ = materials_.insert(material); } { Ptr mesh = Mesh::createQuad(Vec2(1.0f, 1.0f)); if (!mesh) { return false; } defaultQuad_ = meshes_.insert(mesh); } E2D_DEBUG("BuiltinAssetFactory: 默认资源创建完成"); return true; } void BuiltinAssetFactory::destroy() { materials_.remove(defaultMaterial_); meshes_.remove(defaultQuad_); textures_.remove(defaultTexture_); shaders_.remove(defaultShader_); defaultMaterial_ = Handle::invalid(); defaultQuad_ = Handle::invalid(); defaultTexture_ = Handle::invalid(); defaultShader_ = Handle::invalid(); } Handle BuiltinAssetFactory::defaultTexture() const { return defaultTexture_; } Handle BuiltinAssetFactory::defaultShader() const { return defaultShader_; } Handle BuiltinAssetFactory::defaultMaterial() const { return defaultMaterial_; } Handle BuiltinAssetFactory::defaultQuad() const { return defaultQuad_; } } // namespace extra2d