void GraphicsScene::Update( f32 DeltaTime )
{
	Bool bPaused = g_GraphicsManagers.pEnvironment->Runtime().GetStatus() ==
		IEnvironment::IRuntime::Status::Paused;
	m_bPause = bPaused;
	m_fDeltaTime = DeltaTime;

	if( m_bUseInstancedGeom )
	{

	}

	u32         size = (u32)m_Objects.size();

	if (m_bParallelize && ( g_GraphicsManagers.pTask != NULL ) && ( UpdateGrainSize < size ))
	{
		g_GraphicsManagers.pTask->ParallelFor( m_pTask, UpdateCallback, this, 0, size, UpdateGrainSize );
	}
	else
	{
		ProcessRange( 0, size );
	}

	// Terrain Update
}
示例#2
0
void FancyDisassembler::Disassemble(const Container &container, DisassemblyWriter& writer)
{
    metadata.clear();
    sections.clear();
    rangeToDisasm.clear();
    unprocessedRanges.clear();
    r2Values.clear();

    DoDisassemble(container);

    // run through disassembly to add metadata where it belongs

    for (auto& pair : sections)
    {
        auto& disasm = pair.second.disasm;
        for (auto iter = disasm->Begin(); iter != disasm->End(); iter++)
            unprocessedRanges.insert(&iter->second);
    }

    // first try to process all instruction ranges with a known table of contents;
    // this will only work if we start with a transition vector
    TryInitR2WithMainSymbol(container);

    // now, process all instruction ranges for which we have a known table of contents
    while (r2Values.size() > 0)
    {
        auto iter = r2Values.begin();
        auto& pair = *iter;
        ProcessRange(*pair.first, pair.second);

        unprocessedRanges.erase(pair.first);
        r2Values.erase(iter);
    }

    // now, process all remaining ranges: we cannot resolve indirect branches, but we can still resolve static branches
    while (unprocessedRanges.size() > 0)
    {
        auto iter = unprocessedRanges.begin();
        ProcessRange(**iter, nullptr);
        unprocessedRanges.erase(iter);
    }

    // and finally, print all sections
    for (auto& pair : sections)
        pair.second.WriteTo(writer, metadata);
}
示例#3
0
/**
 * @inheritDoc
 */
void GraphicScene::Update(f32 DeltaTime) {
    m_bPause = g_serviceManager->getRuntimeService()->isPaused();
    m_fDeltaTime = DeltaTime;

    u32 size = (u32)m_pObjects.size();
    if (g_serviceManager->getTaskManager() != NULL && UpdateGrainSize < size) {
        g_serviceManager->getTaskManager()->ParallelFor(m_pSystemTask, UpdateCallback, this, 0, size, UpdateGrainSize);
    } else {
        ProcessRange(0, size);
    }
}