Exemplo n.º 1
0
int kore(int argc, char** argv) {
	Kore::System::setName("Shader");
	Kore::System::setup();
	Kore::WindowOptions options;
	options.title = "Shader";
	options.width = 1024;
	options.height = 768;
	options.x = 100;
	options.y = 100;
	options.targetDisplay = -1;
	options.mode = WindowModeWindow;
	options.rendererOptions.depthBufferBits = 16;
	options.rendererOptions.stencilBufferBits = 8;
	options.rendererOptions.textureFormat = 0;
	options.rendererOptions.antialiasing = 0;
	Kore::System::initWindow(options);
	Kore::System::setCallback(update);

	FileReader vs("shader.vert");
	FileReader fs("shader.frag");
	vertexShader = new Shader(vs.readAll(), vs.size(), VertexShader);
	fragmentShader = new Shader(fs.readAll(), fs.size(), FragmentShader);
	VertexStructure structure;
	structure.add("pos", Float3VertexData);
	program = new Program;
	program->setVertexShader(vertexShader);
	program->setFragmentShader(fragmentShader);
	program->link(structure);

	vertices = new VertexBuffer(3, structure);
	float* v = vertices->lock();
	v[0] = -1;
	v[1] = -1;
	v[2] = 0.5;
	v[3] = 1;
	v[4] = -1;
	v[5] = 0.5;
	v[6] = -1;
	v[7] = 1;
	v[8] = 0.5;
	vertices->unlock();

	indices = new IndexBuffer(3);
	int* i = indices->lock();
	i[0] = 0;
	i[1] = 1;
	i[2] = 2;
	indices->unlock();

	Kore::System::start();

	return 0;
}
Exemplo n.º 2
0
void initGraphics() {
	FileReader vs("shader.vert");
	FileReader fs("shader.frag");
	vertexShader = new Shader(vs.readAll(), vs.size(), VertexShader);
	fragmentShader = new Shader(fs.readAll(), fs.size(), FragmentShader);
	VertexStructure structure;
	structure.add("pos", Float3VertexData);
	structure.add("tex", Float2VertexData);
	program = new Program;
	program->setVertexShader(vertexShader);
	program->setFragmentShader(fragmentShader);
	program->link(structure);

	tex = program->getTextureUnit("tex");

	texture = new Texture(width, height, Image::RGBA32, false);
	image = (int*)texture->lock();
	for (int y = 0; y < texture->texHeight; ++y) {
		for (int x = 0; x < texture->texWidth; ++x) {
			image[y * texture->texWidth + x] = 0;
		}
	}
	texture->unlock();

	// Correct for the difference between the texture's desired size and the actual power of 2 size
	float xAspect = (float)texture->width / texture->texWidth;
	float yAspect = (float)texture->height / texture->texHeight;


	vb = new VertexBuffer(4, structure, 0);
	float* v = vb->lock();
	{
		int i = 0;
		v[i++] = -1; v[i++] = 1; v[i++] = 0.5; v[i++] = 0; v[i++] = 0;
		v[i++] = 1;  v[i++] = 1; v[i++] = 0.5; v[i++] = xAspect; v[i++] = 0;
		v[i++] = 1; v[i++] = -1;  v[i++] = 0.5; v[i++] = xAspect; v[i++] = yAspect;
		v[i++] = -1; v[i++] = -1;  v[i++] = 0.5; v[i++] = 0; v[i++] = yAspect;
	}
	vb->unlock();

	ib = new IndexBuffer(6);
	int* ii = ib->lock();
	{
		int i = 0;
		ii[i++] = 0; ii[i++] = 1; ii[i++] = 3;
		ii[i++] = 1; ii[i++] = 2; ii[i++] = 3;
	}
	ib->unlock();
}
Exemplo n.º 3
0
void Graphics2::initShaders() {
	if (videoPipeline != nullptr) return;

	VertexStructure structure;
	structure.add("vertexPosition", Float3VertexData);
	structure.add("texPosition", Float2VertexData);
	structure.add("vertexColor", Float4VertexData);

	FileReader fs("painter-video.frag");
	FileReader vs("painter-video.vert");
	Shader* fragmentShader = new Shader(fs.readAll(), fs.size(), FragmentShader);
	Shader* vertexShader = new Shader(vs.readAll(), vs.size(), VertexShader);

	videoPipeline = new PipelineState();
	videoPipeline->setFragmentShader(fragmentShader);
	videoPipeline->setVertexShader(vertexShader);

	// videoPipeline->inputLayout[0] = { &structure };

	// videoPipeline->compile();
	videoPipeline->link(structure);
}
Exemplo n.º 4
0
int main(int argc, const char* argv[])
{
	/********************** ARGUMENTS ***********************/
	string inputFile  = argv[1];
	string outputStem = argv[2];
	string seedFile   = outputStem + "_seed";
	string vertexFile = outputStem + "_vertex.dat";
	string metaFile   = outputStem + "_meta.dat";
	string tempFile	  = outputStem + "_temp";
	cout << fixed << showpoint << setprecision(1);

	/********************* TILE SORT *************************/
	cout << "Starting First Pass: Tile Sorting\n";

	SVAReader* reader = new SVAReader(inputFile);
	TileSort* tiler = new TileSort(500*7000,VERTICES_PER_PAGE);
        while (reader->hasNext())
	{
		tiler->Insert(reader->getNext());
	}
	int Objects = tiler->sortTile();
	delete reader;

	cout << "First Pass Complete: " << Objects << "\n\n";

	/******************* CREATE STRUCTURES ******************/
	int Pages = ceil((Objects+0.0) / (VERTICES_PER_PAGE+0.0));
	MetadataEntry*   metadataStructure;
	metadataStructure = new MetadataEntry[Pages];
	VertexStructure* vertexStructure = new VertexStructure(vertexFile,true);
#ifndef MEMORY_MAPPING
	 boost::shared_ptr<SpatialIndex::IStorageManager> tmp_btree_file (SpatialIndex::StorageManager::createNewDiskStorageManager (tempFile, PAGE_SIZE));
	 vertex_to_page_id_map* btree = new vertex_to_page_id_map (tmp_btree_file,PAGE_SIZE);
#endif

	/******************** MAKE VERTEX PAGES ********************/
	cout << "Starting Second Pass: Making Vertices Pages\n";
	for (int pageId=0;pageId<Pages;pageId++)
	{
		VertexPage* vp = new VertexPage();

		for (int i=0;i<VERTICES_PER_PAGE;i++)
			if (tiler->hasNext())
			{
				Vertex_info* vinfo = tiler->getNext();
				vp->vertices[i].Vector[0] = vinfo->vi.coords[0];
				vp->vertices[i].Vector[1] = vinfo->vi.coords[1];
				vp->vertices[i].Vector[2] = vinfo->vi.coords[2];
#ifdef MEMORY_MAPPING
				idMap[vinfo->vid] = pageId;
#else
				btree->insert(vinfo->vid,pageId);
#endif

				delete vinfo;
			}
		vertexStructure->Put(vp);
		metadataStructure[pageId].MakeMetaData(vp);

		if (pageId%100000==0 && pageId!=0) cout << "Page Processed : " << pageId << " Out of " << Pages <<"\n";
		delete vp;
	}

        delete vertexStructure;
	cout << "Second Pass Complete\n\n";

	/******************** MAKE META DATA STRUCTURE ********************/
	cout << "Starting Third Pass: Replacing Vertex Ids with Page Ids\n";
	tiler->Rewind();

	for (id pageId=0;pageId<Pages;pageId++)
	{
		vector<Vertex> pageVoronoiMBR;
		for (int i=0;i<VERTICES_PER_PAGE;i++)
			if (tiler->hasNext())
			{
				Vertex_info* vinfo = tiler->getNext();
				Box voronoiBoundingBox = vinfo->vi.voronoi_mbr.as_box();
				pageVoronoiMBR.push_back(voronoiBoundingBox.low);
				pageVoronoiMBR.push_back(voronoiBoundingBox.high);
				for (vector<vertex_id>::iterator it = vinfo->vi.neighbours.begin();it != vinfo->vi.neighbours.end();it++)
				{
#ifdef MEMORY_MAPPING
					id linkPageId = idMap[*it];
#else
			        dias::map_query_result queryResult = btree->range_query (std::make_pair (*it, *it));
					id linkPageId = queryResult[0].second;
#endif
					if (linkPageId!= pageId) {
						metadataStructure[pageId].pageLinks.insert(linkPageId);
					}
				}
				delete vinfo;
			}
		Box::boundingBox(metadataStructure[pageId].voronoiMbr,pageVoronoiMBR);

		if (pageId%100000==0 && pageId!=0) cout << "Page Processed : " << pageId << " Out of " << Pages <<"\n";
	}

	cout << "Third Pass Complete: " << Pages << "\n\n";
	delete tiler;









//	for (int pageId=0;pageId<Pages;pageId++) {
////		links += metadataStructure[pageId]->pageLinks.size();
//		metadataStructure[pageId].pageLinks.clear();
//	}
//
////	long overlapping = 0;
//	long emptybb = 0;
//
//	for(int i=0; i<Pages; i++) {
//		for(int j=i+1; j<Pages; j++) {
//
//			if(Box::overlap(metadataStructure[i].pageMbr, metadataStructure[j].pageMbr)) {
//				metadataStructure[i].pageLinks.insert(j);
//				metadataStructure[j].pageLinks.insert(i);
////				overlapping++;
//			}
////			} else {
////				Box combined;
////				Box::combine(metadataStructure[i]->pageMbr, metadataStructure[j]->pageMbr, combined);
////				long ov = 0;
////				for(int k=0; k<Pages; k++) {
////					if(Box::overlap(metadataStructure[k]->pageMbr, combined)) {
////						ov++;
////					}
////				}
////
////				if(ov == 2) {
////					metadataStructure[i]->pageLinks.insert(j);
////					metadataStructure[js]->pageLinks.insert(i);
////					emptybb++;
////				}
////			}
//		}
//	}
//
//	ofstream out("test2");
//	for (int pageId=0;pageId<Pages;pageId++) {
//		out << metadataStructure[pageId].pageLinks.size() << endl;
//	}
//	out.close();








	SpatialIndex::IStorageManager* rtreeStorageManager = SpatialIndex::StorageManager::createNewDiskStorageManager(seedFile, PAGE_SIZE);

	SpatialIndex::id_type indexIdentifier=1;
	data_stream* ds = new data_stream(metadataStructure,Pages);
	SpatialIndex::ISpatialIndex *seedTree = SpatialIndex::RTree::createAndBulkLoadNewRTree (
	        SpatialIndex::RTree::BLM_STR,
	        *ds,
	        *rtreeStorageManager,
	        dias::fill_factor, dias::index_node_capacity,
	        37, 3,
	        SpatialIndex::RTree::RV_RSTAR,
	        indexIdentifier);

	cout << "Forth Pass Complete\n\n";

	/******************* DELETE STRUCTURES ******************/
	//delete ds;

	vector<SpatialIndex::id_type> keys;

	rtreeStorageManager->getKeys(&keys);

	map<uint32_t,SpatialIndex::id_type> mapping;

	for (vector<SpatialIndex::id_type>::iterator iter = keys.begin(); iter != keys.end(); ++iter) {

		SpatialIndex::Region m_nodeMBR;

		SpatialIndex::id_type id = *iter;
		nodeSkeleton * nss = readNode(id, rtreeStorageManager);

		if (nss->nodeType == SpatialIndex::RTree::PersistentLeaf) {
			for (int i = 0; i < nss->children; i++) {
				MetadataEntry m = MetadataEntry(nss->m_pData[i], nss->m_pDataLength[i]);
				mapping.insert (pair<uint32_t,SpatialIndex::id_type>(m.pageId, *iter));
			}
		}
	}

	cout << "Mapping done\n\n";

	for (vector<SpatialIndex::id_type>::iterator iter = keys.begin(); iter != keys.end(); ++iter) {

		SpatialIndex::Region m_nodeMBR;

		SpatialIndex::id_type id = *iter;
		nodeSkeleton * nss = readNode(id, rtreeStorageManager);

		if (nss->nodeType == SpatialIndex::RTree::PersistentLeaf) {
			for(int i=0; i<nss->children; i++) {
				MetadataEntry m = MetadataEntry(nss->m_pData[i], nss->m_pDataLength[i]);
				set<uint32_t> updatedLinks;

				for(set<uint32_t>::iterator it = m.pageLinks.begin(); it != m.pageLinks.end(); ++it) {
					map<uint32_t,SpatialIndex::id_type>::iterator res = mapping.find(*it);
					if(res != mapping.end()) {
						updatedLinks.insert(res->second);
					} else {
						cout << "Unable to find mapping for " << *it << endl;
					}
				}

//				if(m.pageLinks.size() != updatedLinks.size()) {
//					cout << "Unequal sizes: " << m.pageLinks.size() << " :: " << updatedLinks.size() <<  endl;
//				}

				m.pageLinks.swap(updatedLinks);
				int length = nss->m_pDataLength[i];
				m.serialize(&nss->m_pData[i], length);
			}

			writeNode(id, rtreeStorageManager, nss);
		}
	}

	cout << "Done: " << Pages << "\n\n";

	delete rtreeStorageManager;
}