示例#1
0
  void newDeleteTest() {
    PageManager *pm = ((Environment *)m_env)->get_page_manager();

    REQUIRE(pm->test_get_cache());
    if (m_inmemory)
      REQUIRE(!pm->get_freelist(0));
  }
示例#2
0
	//---------------------------------------------------------------------
	bool Page::prepareImpl(StreamSerialiser& stream, PageData* dataToPopulate)
	{

		// Now do the real loading
		if (!stream.readChunkBegin(CHUNK_ID, CHUNK_VERSION, "Page"))
			return false;

		// pageID check (we should know the ID we're expecting)
		uint32 storedID;
		stream.read(&storedID);
		if (mID != storedID)
		{
			LogManager::getSingleton().stream() << "Error: Tried to populate Page ID " << mID
				<< " with data corresponding to page ID " << storedID;
			stream.undoReadChunk(CHUNK_ID);
			return false;
		}

		PageManager* mgr = getManager();
		
		while(stream.peekNextChunkID() == CHUNK_CONTENTCOLLECTION_DECLARATION_ID)
		{
			const StreamSerialiser::Chunk* collChunk = stream.readChunkBegin();
			String factoryName;
			stream.read(&factoryName);
			stream.readChunkEnd(CHUNK_CONTENTCOLLECTION_DECLARATION_ID);
			// Supported type?
			PageContentCollectionFactory* collFact = mgr->getContentCollectionFactory(factoryName);
			if (collFact)
			{
				PageContentCollection* collInst = collFact->createInstance();
				if (collInst->prepare(stream)) // read type-specific data
				{
					dataToPopulate->collectionsToAdd.push_back(collInst);
				}
				else
				{
					LogManager::getSingleton().stream() << "Error preparing PageContentCollection type: " 
						<< factoryName << " in " << *this;
					collFact->destroyInstance(collInst);
				}
			}
			else
			{
				LogManager::getSingleton().stream() << "Unsupported PageContentCollection type: " 
					<< factoryName << " in " << *this;
				// skip
				stream.readChunkEnd(collChunk->id);
			}

		}


		mModified = false;

		return true;
	}
示例#3
0
  void fetchInvalidPageTest() {
    PageManager *pm = ((Environment *)m_env)->get_page_manager();
    Page *page;

    page = 0;
    REQUIRE(HAM_IO_ERROR ==
            pm->fetch_page(&page, 0, 1024 * 1024 * 200, false));

    REQUIRE(page == (Page *)0);
  }
示例#4
0
  void allocPageTest() {
    PageManager *pm = ((Environment *)m_env)->get_page_manager();
    Page *page;

    page = 0;
    REQUIRE(0 ==
            pm->alloc_page(&page, 0, Page::TYPE_FREELIST,
                PageManager::kClearWithZero));
    if (m_inmemory == false)
      REQUIRE(page->get_self() == 2 * 16 * 1024ull);
    REQUIRE(page != 0);
    REQUIRE(!page->get_db());
  }
示例#5
0
  void fetchPageTest() {
    PageManager *pm = ((Environment *)m_env)->get_page_manager();
    Page *page;

    page = 0;
    REQUIRE(0 == pm->fetch_page(&page, 0, 16 * 1024ull, false));
    REQUIRE(page->get_self() == 16 * 1024ull);

    page = 0;
    REQUIRE(0 == pm->fetch_page(&page, 0, 16 * 1024ull, true));
    REQUIRE(page->get_self() == 16 * 1024ull);
    REQUIRE(page);
  }
示例#6
0
CuckooTable::CuckooTable(PageManager& pageManager)
    : mPageManager(pageManager)
      , hash1(ENTRIES_PER_PAGE)
      , hash2(ENTRIES_PER_PAGE)
      , hash3(ENTRIES_PER_PAGE)
      , mSize(0)
{
    mPages.reserve(3);
    for (size_t i = 0; i < 3; ++i) {
        auto page = pageManager.alloc();
        if (!page) {
            LOG_ERROR("PageManager ran out of space");
            std::terminate();
        }
        mPages.emplace_back(reinterpret_cast<EntryT*>(page));
    }
}
示例#7
0
 Page *fetch_page(uint64_t address) {
   LocalDatabase *db = (LocalDatabase *)m_db;
   PageManager *pm = db->get_local_env()->get_page_manager();
   return (pm->fetch_page(db, address));
 }
  void setupContent()
  {
    bool blankTerrain = false;
    //blankTerrain = true;
    mTerrainGlobals = OGRE_NEW TerrainGlobalOptions();

    ResourceGroupManager::getSingleton().createResourceGroup( "Terrain" );
    ResourceGroupManager::getSingleton().addResourceLocation( mFSLayer->getWritablePath( "" ), "FileSystem", "Terrain", false, false );

    mEditMarker = mSceneMgr->createEntity( "editMarker", "sphere.mesh" );
    mEditNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
    mEditNode->attachObject( mEditMarker );
    mEditNode->setScale( 0.05, 0.05, 0.05 );

    setupControls();

    mCameraMan->setTopSpeed( 50 );

    setDragLook( true );

    MaterialManager::getSingleton().setDefaultTextureFiltering( TFO_ANISOTROPIC );
    MaterialManager::getSingleton().setDefaultAnisotropy( 7 );

    mSceneMgr->setFog( FOG_LINEAR, ColourValue( 0.7, 0.7, 0.8 ), 0, 10000, 25000 );

    LogManager::getSingleton().setLogDetail( LL_BOREME );

    Vector3 lightdir( 0.55, -0.3, 0.75 );
    lightdir.normalise();

    Light* l = mSceneMgr->createLight( "tstLight" );
    l->setType( Light::LT_DIRECTIONAL );
    l->setDirection( lightdir );
    l->setDiffuseColour( ColourValue::White );
    l->setSpecularColour( ColourValue( 0.4, 0.4, 0.4 ) );

    mSceneMgr->setAmbientLight( ColourValue( 0.2, 0.2, 0.2 ) );

    mTerrainGroup = OGRE_NEW TerrainGroup( mSceneMgr, Terrain::ALIGN_X_Z, TERRAIN_SIZE, TERRAIN_WORLD_SIZE );
    mTerrainGroup->setFilenameConvention( TERRAIN_FILE_PREFIX, TERRAIN_FILE_SUFFIX );
    mTerrainGroup->setOrigin( mTerrainPos );
    mTerrainGroup->setResourceGroup( "Terrain" );

    configureTerrainDefaults( l );
#ifdef PAGING
    // Paging setup
    mPageManager = OGRE_NEW PageManager();
    // Since we're not loading any pages from .page files, we need a way just 
    // to say we've loaded them without them actually being loaded
    mPageManager->setPageProvider( &mDummyPageProvider );
    mPageManager->addCamera( mCamera );
    mTerrainPaging = OGRE_NEW TerrainPaging( mPageManager );
    PagedWorld* world = mPageManager->createWorld();
    mTerrainPaging->createWorldSection( world, mTerrainGroup, 2000, 3000,
      TERRAIN_PAGE_MIN_X, TERRAIN_PAGE_MIN_Y,
      TERRAIN_PAGE_MAX_X, TERRAIN_PAGE_MAX_Y );
#else
    for( long x = TERRAIN_PAGE_MIN_X; x <= TERRAIN_PAGE_MAX_X; ++x )
      for( long y = TERRAIN_PAGE_MIN_Y; y <= TERRAIN_PAGE_MAX_Y; ++y )
        defineTerrain( x, y, blankTerrain );
    // sync load since we want everything in place when we start
    mTerrainGroup->loadAllTerrains( true );
#endif
    if( mTerrainsImported )
    {
      TerrainGroup::TerrainIterator ti = mTerrainGroup->getTerrainIterator();
      while( ti.hasMoreElements() )
      {
        Terrain* t = ti.getNext()->instance;
        initBlendMaps( t );
      }
    }

    mTerrainGroup->freeTemporaryResources();
    // create a few entities on the terrain
    Entity* e = mSceneMgr->createEntity( "tudorhouse.mesh" );
    Vector3 entPos( mTerrainPos.x + 2043, 0, mTerrainPos.z + 1715 );
    Quaternion rot;
    entPos.y = mTerrainGroup->getHeightAtWorldPosition( entPos ) + 65.5 + mTerrainPos.y;
    rot.FromAngleAxis( Degree( Math::RangeRandom( -180, 180 ) ), Vector3::UNIT_Y );
    SceneNode* sn = mSceneMgr->getRootSceneNode()->createChildSceneNode( entPos, rot );
    sn->setScale( Vector3( 0.12, 0.12, 0.12 ) );
    sn->attachObject( e );
    mHouseList.push_back( e );

    e = mSceneMgr->createEntity( "tudorhouse.mesh" );
    entPos = Vector3( mTerrainPos.x + 1850, 0, mTerrainPos.z + 1478 );
    entPos.y = mTerrainGroup->getHeightAtWorldPosition( entPos ) + 65.5 + mTerrainPos.y;
    rot.FromAngleAxis( Degree( Math::RangeRandom( -180, 180 ) ), Vector3::UNIT_Y );
    sn = mSceneMgr->getRootSceneNode()->createChildSceneNode( entPos, rot );
    sn->setScale( Vector3( 0.12, 0.12, 0.12 ) );
    sn->attachObject( e );
    mHouseList.push_back( e );

    e = mSceneMgr->createEntity( "tudorhouse.mesh" );
    entPos = Vector3( mTerrainPos.x + 1970, 0, mTerrainPos.z + 2180 );
    entPos.y = mTerrainGroup->getHeightAtWorldPosition( entPos ) + 65.5 + mTerrainPos.y;
    rot.FromAngleAxis( Degree( Math::RangeRandom( -180, 180 ) ), Vector3::UNIT_Y );
    sn = mSceneMgr->getRootSceneNode()->createChildSceneNode( entPos, rot );
    sn->setScale( Vector3( 0.12, 0.12, 0.12 ) );
    sn->attachObject( e );
    mHouseList.push_back( e );

    mSceneMgr->setSkyBox( true, "Examples/CloudyNoonSkyBox" );
  }
示例#9
0
int WINAPI WinMain ( HINSTANCE hInst, HINSTANCE, LPSTR szCmdLine, int)
{
	Root * pRoot = new Root(StringUtil::BLANK);

	pRoot->loadPlugin(PLUGIN("RenderSystem_GL"));
	pRoot->loadPlugin(PLUGIN("RenderSystem_Direct3D9"));
	pRoot->addResourceLocation("paging", "FileSystem", "Paging");

	if (pRoot->showConfigDialog())
	{
		OverhangTerrainSceneManager * pScMgr = OGRE_NEW OverhangTerrainSceneManager("Default");
		PageManager * pPgMan = OGRE_NEW PageManager();
		OverhangTerrainPaging * pOhPging = new OverhangTerrainPaging(pPgMan);

		RenderWindow * pRendWindow = pRoot->initialise(true);
		ResourceGroupManager::getSingleton().initialiseAllResourceGroups();

		Light * pSun = pScMgr->createLight("Sun");
		pSun->setPosition(0,5000, 0);
		pSun->setType(Light::LT_POINT);

		MaterialPtr pMat = MaterialManager::getSingleton().create("BaseMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
		Pass * pPass = pMat->getTechnique(0) ->getPass(0);
		pPass->setLightingEnabled(true);
		pPass->setDiffuse(0.1f, 0.5f, 1.0f, 1.0f);
		pPass->setAmbient(0.05f, 0.1f, 0.2f);
		pPass->setSpecular(1.0f, 1.0f, 1.0f, 1.0f);
		pPass->setShininess(80);

		Camera * pCam = pScMgr->createCamera("Photographer");
		pCam->setNearClipDistance(0.1f);
		pCam->setFarClipDistance(7000);
		pCam->setPosition(Vector3(-2725.24f, 277.747f, 2748.56f));
		pCam->setDirection(Vector3(0.998938f, 0.0495558f, 0.00161433f));

		Viewport * vp = pRendWindow->addViewport(pCam);
		pCam->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));

		SceneNode 
			* pnCam = pScMgr->getRootSceneNode()->createChildSceneNode("Helicopter"),
			* pnLight = pScMgr->getRootSceneNode() ->createChildSceneNode("Aura");

		pnCam->attachObject(pCam);
		pnLight->attachObject(pSun);

		OverhangTerrainOptions options;

		options.primaryCamera = pCam;
		options.pageSize = 129;
		options.tileSize = 33;
		options.cellScale = 50.0;
		options.heightScale = 8.0;
		options.channels[TERRAIN_ENTITY_CHANNEL].material = pMat;
		options.channels[TERRAIN_ENTITY_CHANNEL].maxGeoMipMapLevel = 6;
		options.channels[TERRAIN_ENTITY_CHANNEL].maxPixelError = 10;
		options.channels[TERRAIN_ENTITY_CHANNEL].qid = RENDER_QUEUE_1;

		pScMgr->setOptions(options);

		OverhangTerrainGroup * pGrp = OGRE_NEW OverhangTerrainGroup(pScMgr, NULL, "Paging");

		pPgMan->addCamera(pCam);
		DummyPageProvider dpp;
		pPgMan->setPageProvider(&dpp);
		PagedWorld * pWorld = pPgMan->createWorld("OhTSM");
		OverhangTerrainPagedWorldSection * pOhPgSect = pOhPging->createWorldSection(pWorld, pGrp);
		pScMgr->initialise();

		ExamplePageProvider pp(pOhPgSect, pGrp->getResourceGroupName());
		pGrp->setPageProvider(&pp);
		ExampleController * pController = new ExampleController (pRendWindow, pCam, pScMgr);
		pRoot->addFrameListener(pController);
	
		pRoot->startRendering();

		delete pController;

		OGRE_DELETE pOhPgSect;
		OGRE_DELETE pOhPging;
		OGRE_DELETE pPgMan;
		OGRE_DELETE pScMgr;
	}

	delete pRoot;

	return 0;
}
示例#10
0
void PGSampleApp::createScene(void)
{
	bool blankTerrain = false;
	mTerrainGlobals = OGRE_NEW TerrainGlobalOptions();

	Vector3 lightdir(0.55, -0.3, 0.75);
	lightdir.normalise();


	Light* l = mSceneMgr->createLight("tstLight");
	l->setType(Light::LT_DIRECTIONAL);
	l->setDirection(lightdir);
	l->setDiffuseColour(ColourValue::White);
	l->setSpecularColour(ColourValue(0.4, 0.4, 0.4));

	mSceneMgr->setAmbientLight(ColourValue(0.2, 0.2, 0.2));


	mTerrainGroup = OGRE_NEW TerrainGroup(mSceneMgr, Terrain::ALIGN_X_Z, TERRAIN_SIZE, TERRAIN_WORLD_SIZE);
	mTerrainGroup->setFilenameConvention(TERRAIN_FILE_PREFIX, TERRAIN_FILE_SUFFIX);
	mTerrainGroup->setOrigin(mTerrainPos + Vector3(TERRAIN_WORLD_SIZE/2, 0, TERRAIN_WORLD_SIZE/2));

	configureTerrainDefaults(l);
#ifdef PAGING
	// Paging setup
	mPageManager = OGRE_NEW PageManager();
	// Since we're not loading any pages from .page files, we need a way just 
	// to say we've loaded them without them actually being loaded
	mPageManager->setPageProvider(&mDummyPageProvider);
	mPageManager->addCamera(mCamera);
	mTerrainPaging = OGRE_NEW TerrainPaging(mPageManager);
	PagedWorld* world = mPageManager->createWorld();
	mTerrainPaging->createWorldSection(world, mTerrainGroup, 2000, 3000, 
		TERRAIN_PAGE_MIN_X, TERRAIN_PAGE_MIN_Y, 
		TERRAIN_PAGE_MAX_X, TERRAIN_PAGE_MAX_Y);
#else
	for (long x = TERRAIN_PAGE_MIN_X; x <= TERRAIN_PAGE_MAX_X; ++x)
		for (long y = TERRAIN_PAGE_MIN_Y; y <= TERRAIN_PAGE_MAX_Y; ++y)
			defineTerrain(x, y, blankTerrain);
	// sync load since we want everything in place when we start
	mTerrainGroup->loadAllTerrains(true);
#endif

	if (mTerrainsImported)
	{
		TerrainGroup::TerrainIterator ti = mTerrainGroup->getTerrainIterator();
		while(ti.hasMoreElements())
		{
			Terrain* t = ti.getNext()->instance;
			initBlendMaps(t);
		}
	}

	mTerrainGroup->freeTemporaryResources();



	// create a few entities on the terrain
	Entity* e = mSceneMgr->createEntity("tudorhouse.mesh");
	Vector3 entPos(mTerrainPos.x + 2043, 0, mTerrainPos.z + 1715);
	Quaternion rot;
	entPos.y = mTerrainGroup->getHeightAtWorldPosition(entPos) + 65.5 + mTerrainPos.y;
	rot.FromAngleAxis(Degree(Math::RangeRandom(-180, 180)), Vector3::UNIT_Y);
	SceneNode* sn = mSceneMgr->getRootSceneNode()->createChildSceneNode(entPos, rot);
	sn->setScale(Vector3(0.12, 0.12, 0.12));
	sn->attachObject(e);
	mHouseList.push_back(e);

	e = mSceneMgr->createEntity("tudorhouse.mesh");
	entPos = Vector3(mTerrainPos.x + 1850, 0, mTerrainPos.z + 1478);
	entPos.y = mTerrainGroup->getHeightAtWorldPosition(entPos) + 65.5 + mTerrainPos.y;
	rot.FromAngleAxis(Degree(Math::RangeRandom(-180, 180)), Vector3::UNIT_Y);
	sn = mSceneMgr->getRootSceneNode()->createChildSceneNode(entPos, rot);
	sn->setScale(Vector3(0.12, 0.12, 0.12));
	sn->attachObject(e);
	mHouseList.push_back(e);

	e = mSceneMgr->createEntity("tudorhouse.mesh");
	entPos = Vector3(mTerrainPos.x + 1970, 0, mTerrainPos.z + 2180);
	entPos.y = mTerrainGroup->getHeightAtWorldPosition(entPos) + 65.5 + mTerrainPos.y;
	rot.FromAngleAxis(Degree(Math::RangeRandom(-180, 180)), Vector3::UNIT_Y);
	sn = mSceneMgr->getRootSceneNode()->createChildSceneNode(entPos, rot);
	sn->setScale(Vector3(0.12, 0.12, 0.12));
	sn->attachObject(e);
	mHouseList.push_back(e);

	mSceneMgr->setSkyBox(true, "Examples/CloudyNoonSkyBox");


	configureShadows(true, false);

	mCamera->setPosition(mTerrainPos + Vector3(1683, 50, 2116));
	mCamera->lookAt(Vector3(1963, 50, 1660));
	mCamera->setNearClipDistance(0.1);
	mCamera->setFarClipDistance(50000);

	if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(RSC_INFINITE_FAR_PLANE))
    {
        mCamera->setFarClipDistance(0);   // enable infinite far clip distance if we can
    }

}