public void run() {
        isRunning = true;

        int frames = 0;
        double frameCounter = 0;

        game.init();

        double lastTime = Time.getTime();
        double unprocessedTime = 0;

        while (isRunning) {
            boolean render = false;

            double startTime = Time.getTime();
            double passedTime = startTime - lastTime;
            lastTime = startTime;
            unprocessedTime += passedTime;
            frameCounter += passedTime;

            while (unprocessedTime > frameTime) {
                render = true;

                unprocessedTime -= frameTime;

                if (Window.isCloseRequested())
                    stop();

                game.input((float) frameTime);
                Input.update();
                game.update((float) frameTime);

                if (frameCounter >= 1) {
//					Util.log(frames);
                    frames = 0;
                    frameCounter = 0;
                }
            }
            if (render) {
                game.render(renderingEngine);
                Window.render();
                frames++;
            } else {
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        cleanup();
    }