Share<IShader> ShaderFactory::CreateShader( const FileIdRef& fileId,const List<HeapString>* defines/*=nullptr*/,ResourceShareType shareType /*= ResourceShareType::Share*/) { Share<IShader> result = nullptr; if (shareType != ResourceShareType::None) { result = Find(fileId); RETURN_SELF_IF_NOT_NULL(result); } result=ShaderCreater::Instance().Create(fileId.Name,fileId); if (result==nullptr) { switch(FileInfo::ExtractType(fileId.Name)) { case FileType::fsh: result=new BasePixelShader(fileId); break; case FileType::vsh: result=new BaseVertexShader(fileId); break; default: MEDUSA_ASSERT_FAILED("Unsupported shader file type"); return nullptr; } } MemoryData data= FileSystem::Instance().ReadAllData(fileId); if (data.IsNull()) { Log::FormatError("Cannot find:{}-{}", fileId.Name, fileId.Order); return nullptr; } StringRef str(data.Cast<char>()); if(result->Initialize(str,defines)) { Add(result, shareType); return result; } else { result = nullptr; } return nullptr; }
Share<QuadModel> ModelFactory::CreateQuad( const FileIdRef& fileId ,ResourceShareType shareType /*= ResourceShareType::Share*/) { Share<QuadModel> model = nullptr; if (shareType != ResourceShareType::None) { model = Find(fileId).CastPtr<QuadModel>(); RETURN_SELF_IF_NOT_NULL(model); } auto material= MaterialFactory::Instance().CreateSingleTexture(fileId); model=new QuadModel(fileId,material,Rect2I(Point2I::Zero,material->FirstTexture()->Size())); model->Initialize(); Add(model, shareType); return model; }
Share<ShapeTriangleMesh> MeshFactory::CreateShapeTriangleMesh(float width, float height, const Color4F& color) { Share<ShapeTriangleMesh> mesh = new ShapeTriangleMesh(); mesh->Initialize(width, height, color); return mesh; }
Share<ShapeTriangleMesh> MeshFactory::CreateShapeTriangleMesh(const Point3F& p1, const Point3F& p2, const Point3F& p3, const Color4F& color) { Share<ShapeTriangleMesh> mesh = new ShapeTriangleMesh(); mesh->Initialize(p1, p2, p3, color); return mesh; }
Share<ShapeQuadMesh> MeshFactory::CreateShapeQuadMesh(const Rect2F& rect, const Color4F& color) { Share<ShapeQuadMesh> mesh = new ShapeQuadMesh(); mesh->Initialize(rect, color); return mesh; }