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); }
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; }