Esempio n. 1
0
RenderResult RenderDoc::Render(RenderBase* driver) {
	//XOTRACE_RENDER( "RenderDoc: Reset\n" );

	LayoutResult* layout = new LayoutResult(Doc);

	XOTRACE_RENDER("RenderDoc: Layout\n");
	Layout lay;
	lay.PerformLayout(Doc, layout->Root, &layout->Pool);

	XOTRACE_RENDER("RenderDoc: Render\n");
	Renderer     rend;
	RenderResult res = rend.Render(&Doc, &ClonedImages, &Doc.Strings, driver, &layout->Root);

	// Atomically publish the new layout
	{
		std::lock_guard<std::mutex> lock(LayoutLock);
		PurgeOldLayouts();
		if (LatestLayout != nullptr) {
			if (LatestLayout->IsLocked)
				OldLayouts += LatestLayout;
			else
				delete LatestLayout;
		}
		LatestLayout = layout;
	}

	return res;
}