#include #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); } { ShaderLoader shaderLoader(fileSystem_); Ptr shader = shaderLoader.load("shader/default.glsl"); if (!shader) { 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