private void run()
    {
        isRunning = true;

        int frames = 0;
        float frameCounter = 0;

        game.init();
        game.setCamera(renderer.getMainCamera());
        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);
                renderer.input((float) frameTime);
                Input.update();
                game.update((float) frameTime);



                if(frameCounter >= 1.0)
                {
                    System.out.println(frames);
                    frames = 0;
                    frameCounter = 0;
                }
            }
            if(render)
            {
                renderer.render(game.getRootObject());
                Window.render();
                frames++;
            }
            else
            {
                try
                {
                    Thread.sleep(1);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
        }

        cleanUp();
    }