def main():
    setupWindow()

    mesh = Mesh(vertices, indices)

    camera = Camera2D(DIMENSIONS[0], DIMENSIONS[1])

    # Create the shader program and configure its uniforms.
    shaderprogram = ShaderProgram("shaders/vertex.shader",
                                  "shaders/fragment.shader")
    shaderprogram.setUniform2f("resolution", DIMENSIONS[0], DIMENSIONS[1])
    shaderprogram.setUniform2f("scale", camera.scaleVector[0],
                               camera.scaleVector[1])
    shaderprogram.setUniform1i("iterations", DEFAULT_ITERATIONS)

    while True:
        handleEvents()

        pan, zoom = camera.move()

        if pan:
            shaderprogram.setUniform2f("cameraPos", camera.position[0],
                                       camera.position[1])

        if zoom:
            shaderprogram.setUniform2f("scale", camera.scaleVector[0],
                                       camera.scaleVector[1])

            if AUTO_UPDATE_ITERATIONS:
                iterations = getIterationCount(camera.scale)
                shaderprogram.setUniform1i("iterations", iterations)

        renderer.clearScreen()

        # Render the quads.
        renderer.render2D(mesh, shaderprogram.shader)

        # Swap buffers.
        pygame.display.flip()