Danois90:
Making your "render" method non-blocking would solve your biggest problem. In your ISR, you could set a global volatile variable to indicate color change and since render no longer blocks, you could adjust color accoringly to that variable.
Void render() does, how the name implies, render the RGB values for 1728RGB LEDs in Cube with several strings of WS2811 F8 LEDs. Making this function non-blocking is very difficult. I already thought of making a global bool that makes the render function non-blocking if the bool is true and the ISR would make it true but this would be a dirty way because lots of processing power would be wasted by repeadetly checking if this bool is true inside the render() function.