Загружаем всё асинхронно, менеджер загрузок, кеш, загрузка из интернета или из диска, всё сложно.
Когда писал асинхронную загрузку текстур во внешнем потоке, основной проблемой было то, что конструировать utexture2d надо было в game thread (именно конструировать через new object)
Сами байтики можно где угодно считать и преобразовать.
Ну а далее можно через d3d11 модуль или как удобно заполнять gpu memory