То, что будет в большинстве игр, - это огромная куча данных и несколько потоков, обращающихся к некоторому подмножеству этих данных по мере необходимости. Связь между потоками редко бывает явной и, чаще всего, неявной, осуществляется путем изменения данных, вызванного одним потоком и замеченного позднее другим потоком. Изменения защищены мьютексами, семафорами или другими низкоуровневыми примитивами синхронизации.
Для вашего примера рисования поток сценариев изменит некоторые данные в компоненте GUI, и поток визуализации, в следующий раз, когда он визуализирует GUI, увидит эти новые данные и соответственно отобразит прямоугольник.
Имейте в виду, однако, что большинство разработчиков игр не так много работают, как в вашем примере, отчасти потому, что это трудно сделать эффективно с моделью, которая разделяет столько данных и полагается на низкоуровневую блокировку для корректности. В идеале больше разработчиков игр должно перейти к модели, которая использует меньше данных, но это сложно из-за требований реагирования на презентации в режиме реального времени.