void GoogleMapWidget::resizeGL(int width, int height)
{
		// New viewport
	glViewport(0, 0, width, height);

		// Let the shader know the size
		// TODO: Send a new matrix
	renderer.setUniformValue("size", width, height);

		// Tile for each side + tiles on screen
	gridWidth  = ((width  / Tile::SIZE) + 1) + 1;
	gridHeight = ((height / Tile::SIZE) + 1) + 1;

		// Clear all vertices
	vbo.clear();

		// Reserve exact size for the VBO, since we know the size in advance
		// 4 Vertices per tile
	vbo.reserve((gridWidth * 4) * (gridHeight * 4));

		// Generate the grid starting from outside the screen
	for(int y=0; y<gridHeight; ++y) {
		for(int x=0; x<gridWidth; ++x)
			vbo << generateTile(QVector2D(x, y));
	}

		// Set the generated VBO data
	renderer.setAttributeArray("position", vbo.constData() + 0, sizeof(QVector2D) * 2);
	renderer.setAttributeArray("texture",  vbo.constData() + 1, sizeof(QVector2D) * 2);

		// Recenter screen
	setCenter(center);
}
示例#2
0
Chunk& WorldGenerator::generateChunk( const Point& targetChunkPosition, Chunk& target ) const noexcept
{
	for( uint16_t iteratorY = 0; iteratorY < Chunk::sizeInTiles; iteratorY++ )
	{
		for( uint16_t iteratorX = 0; iteratorX < Chunk::sizeInTiles; iteratorX++ )
		{
			Point firstTile = Point::tilePosition( targetChunkPosition, Chunk::sizeInTiles );
			Point targetTilePosition = { firstTile.x + ( int ) iteratorX, firstTile.y + ( int ) iteratorY };
			generateTile( targetTilePosition, target.value[ iteratorX ][ iteratorY ] );
		}
	}
	return target;
}