예제 #1
0
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;

}
예제 #2
0
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;
}
예제 #3
0
Share<ShapeTriangleMesh> MeshFactory::CreateShapeTriangleMesh(float width, float height, const Color4F& color)
{
	Share<ShapeTriangleMesh> mesh = new ShapeTriangleMesh();
	mesh->Initialize(width, height, color);
	return mesh;
}
예제 #4
0
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;
}
예제 #5
0
Share<ShapeQuadMesh> MeshFactory::CreateShapeQuadMesh(const Rect2F& rect, const Color4F& color)
{
	Share<ShapeQuadMesh> mesh = new ShapeQuadMesh();
	mesh->Initialize(rect, color);
	return mesh;
}