Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Textures Manager #729

Open
wants to merge 59 commits into
base: master
Choose a base branch
from
Open

Textures Manager #729

wants to merge 59 commits into from

Conversation

vklachkov
Copy link
Contributor

@vklachkov vklachkov commented Jan 14, 2022

Менеджер текстур

Цель

Данный PR нацелен на создание менеджера текстур для упрощения рендеров и избавления от дублирующего кода

Мотивация

Впервые с необходимостью в отдельном менеджере я столкнулся при переключении рендера на лету. Перезагрузка ресурсов, в частности, текстур -- краеугольный камень для смены рендера без перезапуска движка. В своём черновике для принудительного обновления текстур были применены грязные хаки с флагами и отключением важных проверок. Желая избавится от них была начата работа в этом направлении

Перспектива

Менеджер преимущественно разрабатывается на перспективу.
В недалёком будущем планируется:

  • Вынос системы патчей материалов из ref_vk в менеджер ресурсов
  • Реализовать переключение рендеров. Meta issue с обобщением опыта будет в скором времени
  • Доработать менеджер текстур до полноценного менеджера ресурсов

План

Работу планирую разделить на два глобальных этапа

Этап 1

Этап нацелен на создание дублирующего слоя: менеджера текстур, работающего полностью идентично текущему

  • Создать прокси между движком и рендером, для последующей реализации менеджера текстур
  • Повторить загрузку, хранение текстур
  • Повторить генерацию текстур-заглушек из рендера
  • Восстановить недостающий код флагов
  • Починить сломанные спрайты
  • Починить сломанные модели и декали
  • Починить сломанные лайтстили
  • Реализовать очистку памяти
  • Реализовать релокацию, если текстур больше, чем 4096 (пока нет необходимости)
  • Прокидывание методов менеджера ресурсов в ref_api
  • Прокидывание методов менеджера ресурсов в render_api

Этап 2

Этап нацелен на фиксы и облегчение ref_gl. Этот рендер стабилен, реализует все возможности движка и идеально подходит для экспериментов

  • Удалить хранение текстур
  • Удалить генерацию текстур-заглушек

Второй этап может выполняться параллельно с первым. Но потребует чужой помощи. Я не разбираюсь в рендерах. И патчинг ref_gl займёт у меня времени больше, чем у знающего человека

@SNMetamorph
Copy link
Member

Это как-то повлияет на рендеры, реализованные внутри клиентской игрокой библиотеки через RenderAPI?

@vklachkov
Copy link
Contributor Author

vklachkov commented Jan 14, 2022

Это как-то повлияет на рендеры, реализованные внутри клиентской игрокой библиотеки через RenderAPI?

Возможно, повлияет. Не думал, не тестировал. Если требуется, протестирую и поддержу

Нет, не повлияет. Никаких изменений в render api я не вношу принципиально. Сейчас он будет работать некорректно: проксирование методов мной не реализовано. Это сделаю позднее, как дойду до работ в рендере

@0x4E69676874466F78
Copy link
Contributor

@SNMetamorph рендеры наверное зовут что-то типа ref.dllFuncs.GL_LoadTexture? тогда менеджер текстур по идее это перехватывает.

@vklachkov vklachkov changed the title Resource Manager Textures Manager Jan 14, 2022
@vklachkov
Copy link
Contributor Author

Эксперименты в mainui попали в данный PR случайно

@vklachkov

This comment was marked as outdated.

@vklachkov

This comment was marked as off-topic.

@vklachkov
Copy link
Contributor Author

Дополнительно отмечу, что где-то утекает ref_api.h. Если его подключить несколько раз подряд, случается такое на несколько экранов:

image

@a1batross
Copy link
Member

Лучше за основу как раз брать ref_gl, а ref_vk уже подпиливать. Я в целом пока рекомендую забить на существование ref_vk, неизвестно насколько корректно он реализован.

Mod_ProcessRenderData исключительно рендероспецифичная. То что она наполовину закомментирована ничего страшного -- значит ничего делать. Вызывается при загрузке и выгрузке модели.

@vklachkov
Copy link
Contributor Author

Лучше за основу как раз брать ref_gl, а ref_vk уже подпиливать. Я в целом пока рекомендую забить на существование ref_vk, неизвестно насколько корректно он реализован

За основу взят общий код для обоих рендеров

Mod_ProcessRenderData исключительно рендероспецифичная. То что она наполовину закомментирована ничего страшного -- значит ничего делать. Вызывается при загрузке и выгрузке модели.

Понял. Как мне лучше поступить с ней? Четыре сценария изложил выше

@a1batross
Copy link
Member

Ничего не делать. Это загрузка моделей, она не связана с текстурами.

Возможно, лучше завести новый коллбэк, который будет оповещать рендер что пора загрузить текстуру в видеопамять и присвоить ей рендероспецифичный handle.

@vklachkov
Copy link
Contributor Author

vklachkov commented Jan 15, 2022

Ничего не делать. Это загрузка моделей, она не связана с текстурами.

Вы не правы. При загрузке моделей происходит загрузка и текстур через функцию R_SpriteLoadFrame (см. gl_sprite.c:50). Происходит это в обход движка. И именно это я пытаюсь решить. То ли хачить пока не поправлю рендер, то ли прокидывать менеджер ресурсов в рендер

Возможно, лучше завести новый коллбэк, который будет оповещать рендер что пора загрузить текстуру в видеопамять и присвоить ей рендероспецифичный handle.

Да, так и будет сделано, как буду вырезать управление текстурами из рендера. Сейчас я этого не делаю для упрощения отладки

@a1batross
Copy link
Member

Ничего там в обход не происходит. У тебя уже есть LoadTexture в движке, пусть он движковый и вызывает.

It's isn't beautiful method, but in current situation...
Need to implement loading textures from buffer to fix more glitches
Hypothetically broken stub textures, practically broken lightmaps
@a1batross
Copy link
Member

А ты движок вообще собираешь после своих коммитов?

Потому что я ребейзнул и ничего не собирается. По крайней мере под Linux.

@a1batross
Copy link
Member

a1batross commented Aug 8, 2022

Разреши коммитить в твою ветку мейнтейнерам. На гитхабе есть где-то галочка.

Пока залил мелкие исправления в resman_texture в нашем репозитории. НЕ МЕРЖИ ИХ, ПОТОМУ ЧТО ЭТО РЕБЕЙЗ!!11111111

@vklachkov
Copy link
Contributor Author

А ты движок вообще собираешь после своих коммитов?

Потому что я ребейзнул и ничего не собирается. По крайней мере под Linux.

У меня на Linux точно так же не собирается по какой-то причине. Жалуется на TRUE/FALSE и incompatible pointers. А на Windows всё хорошо, собираю и тестирую на оном

@vklachkov
Copy link
Contributor Author

Разреши коммитить в твою ветку мейнтейнерам. На гитхабе есть где-то галочка.

Пока залил мелкие исправления в resman_texture в нашем репозитории. НЕ МЕРЖИ ИХ, ПОТОМУ ЧТО ЭТО РЕБЕЙЗ!!11111111

Да я и сам хотел ребейзнуть, но случайно разнёс ветку в попытках починить. Думал отложить синхронизацию с мастером до лучших времён...) Я руками там восстановил утерянные изменения в gl_image.c, а больше ничего критичного вроде бы и нет

@vklachkov
Copy link
Contributor Author

Основную пачку разгрёб.

Осталось...

  • Вернуть R_ShowTextures в ref_api
  • Поправить оформление в texturelib
  • Прокомментировать счётчик текстур в texturelib
  • Понять, зачем мы храним оригинал текстуры и нужно ли его оставлять в ref

Ohhhhh...

@a1batross
Copy link
Member

Возьми мою ветку, там под линукс собирается теперь.

Эту просто перепиши форспушем. :)

@vklachkov
Copy link
Contributor Author

Возьми мою ветку, там под линукс собирается теперь.

Какую твою?

Эту просто перепиши форспушем. :)

Эт шо, мне переносить всё здесь напатченное в 30+ файлах рученьками переносить на другую ветку? Ий историю коммитов потеряю, и долгое

@a1batross
Copy link
Member

@zgdump resman_texture. https://github.com/FWGS/xash3d-fwgs/tree/resman_texture

Зафетчи fwgs remote, чтобы ветка была.

Эт шо, мне переносить всё здесь напатченное в 30+ файлах рученьками переносить на другую ветку? Ий историю коммитов потеряю, и долгое

Нет. Закоммити что ты сделал в свою, возьми мою ветку, черрипикни в неё то что ты накоммитил в своей и форспушни поверх.

@a1batross
Copy link
Member

@zgdump any news on this? I really would like to see this upstreamed.

@0x4E69676874466F78
Copy link
Contributor

Последняя его TODO:

1. Вернуть R_ShowTextures в ref api
2. Поправить оформление в texturelib
3. Прикрутить текстуры неба
4. Протестировать текстуры-заглушки
5. Решить, стоит ли оставлять оригинал текстуры в ref_ и вообще для чего оно использовалось раньше

Похоже zgdump не в состоянии уже закончить, но возможно это будет по пути @w23.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants