Автор Тема: Serious Sam Classic v1.10  (Прочитано 3313 раз)

Оффлайн tx00100xt

  • Начинающий
  • *
  • Сообщений: 17
    • Email
Re: Serious Sam Classic v1.10
« Ответ #15 : 17.05.2022 18:30:51 »
Увидел сегодня.
Спасибо! за публикацию.
Serious Sam одна из любимых моих игрушек.  :-)

Оффлайн tx00100xt

  • Начинающий
  • *
  • Сообщений: 17
    • Email
Re: Serious Sam Classic v1.10
« Ответ #16 : 20.05.2022 23:25:35 »
Прошел сегодня первую часть игры (First Encuunter) с использованием Vulkan :)

Недавно обнаружил порт движка с поддержкой Vulkan но только для Windows. https://github.com/sultim-t/Serious-Engine-Vk
В конце января подумал, а не портировать ли реализацию на Linux. Около пяти дней портировал. Довел до состояния - код собрался, и забросил в долгий ящик, так как там всё-таки
 win32 api. Четыре дня назад решил снова взяться. Заменил всю инициализацию на связку SDL2 + Vulкаn по вот этим мануалам:
https://wiki.libsdl.org/CategoryVulkan https://docs.tizen.org/application/native/guides/graphics/vulkan/#rendering-a-triangle-with-vulkan и вчера Vulkаn заработал.

Из недостатков - все Issues перекочевали из Windows реализации. Порты для Linux и порт Windows с реализацией Vulkаn не имеют регулировку яркости, контраста и гаммы.
При запуске наблюдалась повышенная яркость. Удалось профиксировать с помошью функции https://wiki.libsdl.org/SDL_SetWindowBrightness. Но недостатком такого решения остается повышенная яркость скриншотов
и записи с экрана с помощью SimpleScreenRecorder, несмотря на нормальную яркость в игре. Может потом найдется правильное решение.

Кому интересно, здесь находятся исходники с поддержкой Vulkan:
https://github.com/tx00100xt/SeriousSamClassic-VK
https://gitflic.ru/project/tx00100xt/serioussamclassic-vk

Яркость скриншотов убавил в Gimp :-)

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 282
Re: Serious Sam Classic v1.10
« Ответ #17 : 22.05.2022 10:34:38 »
Попробовал собрать. Пришлось скорректировать инициализацию целых типов:
diff --git a/SamTFE/Sources/Engine/Graphics/Gfx_Vulkan.cpp b/SamTFE/Sources/Engine/Graphics/Gfx_Vulkan.cpp
index af0a1da..8aca18f 100755
--- a/SamTFE/Sources/Engine/Graphics/Gfx_Vulkan.cpp
+++ b/SamTFE/Sources/Engine/Graphics/Gfx_Vulkan.cpp
@@ -437,9 +437,9 @@ void SvkMain::Reset_Vulkan()
   gl_VkPhFeatures = {};
   gl_VkPhSurfCapabilities = {};

-  gl_VkQueueFamGraphics = VK_NULL_HANDLE;
-  gl_VkQueueFamTransfer = VK_NULL_HANDLE;
-  gl_VkQueueFamPresent = VK_NULL_HANDLE;
+  gl_VkQueueFamGraphics = 0;
+  gl_VkQueueFamTransfer = 0;
+  gl_VkQueueFamPresent = 0;
   gl_VkQueueGraphics = VK_NULL_HANDLE;
   gl_VkQueueTransfer = VK_NULL_HANDLE;
   gl_VkQueuePresent = VK_NULL_HANDLE;
Без ресурсов выдал сообщение, что не хватает файла. См. вложение. Скопировал ресурсы. Запускается.

Закомментировал оба вызова SDL_SetWindowBrightness.

Дальше меню игра не уходит, опять чего-то не хватает, см. второе вложение. Но дело не в этом. Не вижу изменений яркости. SDL ведь не знает, меню у меня, или я уже выбрал какой-то пункт. То есть меню должно быть ярче? Вот это не понятно.

Нашел, где выбирается формат поверхности. Вот код. CPrintF - это я добавил для отладки.
      vkGetPhysicalDeviceSurfaceFormatsKHR(physDevice, gl_VkSurface, &formatsCount, &gl_VkPhSurfFormats[0]);
      vkGetPhysicalDeviceSurfacePresentModesKHR(physDevice, gl_VkSurface, &presentModesCount, &gl_VkPhSurfPresentModes[0]);

      // now select preferred settings
      gl_VkSurfColorFormat = VK_FORMAT_UNDEFINED;

      CPrintF("Vulkan: formatsCount: %d\n", formatsCount);

      for (uint32_t j = 0; j < formatsCount; j++)
      {
        CPrintF("Vulkan: gl_VkPhSurfFormats.format: %d\n", gl_VkPhSurfFormats[j].format);
        CPrintF("Vulkan: gl_VkPhSurfFormats.colorSpace: %d\n", gl_VkPhSurfFormats[j].colorSpace);

        if (gl_VkPhSurfFormats[j].format == VK_FORMAT_R8G8B8A8_UNORM)
        {
          gl_VkSurfColorFormat = gl_VkPhSurfFormats[j].format;
          gl_VkSurfColorSpace = gl_VkPhSurfFormats[j].colorSpace;
          break;
        }
      }

      CPrintF("Vulkan: gl_VkSurfColorFormat: %d\n", gl_VkSurfColorFormat);

///...

      if (gl_VkSurfColorFormat == VK_FORMAT_UNDEFINED)
      {
        gl_VkSurfColorFormat = gl_VkPhSurfFormats[0].format;
        gl_VkSurfColorSpace = gl_VkPhSurfFormats[0].colorSpace;
      }
У меня выводит 2 формата: 44 и 50.
    VK_FORMAT_B8G8R8A8_UNORM = 44,
    VK_FORMAT_B8G8R8A8_SRGB = 50,
для каждого VK_COLOR_SPACE_SRGB_NONLINEAR_KHR

gl_VkSurfColorFormat, соответственно, остаётся 0. Далее для такого случая выбирается 0й элемент. Вулкан требует, что бы минимум один формат поддерживался. То есть такой вариант запасного случая выглядит разумно.

Потом вспомнил, что у меня используется https://github.com/GPUOpen-Drivers/AMDVLK
Запустил с драйвером Mesa
$ AMD_VULKAN_ICD=RADV ./SeriousSam

Вот теперь цвета неестественны и ярки. В логе всё те же цифры, но в обратном порядке: 50 и 44. То есть выбирается VK_FORMAT_B8G8R8A8_SRGB.

Если же к проверке gl_VkPhSurfFormats[j].format == VK_FORMAT_R8G8B8A8_UNORM добавить VK_FORMAT_B8G8R8A8_UNORM, то цвета как и положено. Не знаю, какие ещё следует добавить форматы UNORM из https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkFormat.html
на всякий случай патч с исправлением и отлидочными вызовами.
diff --git a/SamTFE/Sources/Engine/Graphics/ViewPort.cpp b/SamTFE/Sources/Engine/Graphics/ViewPort.cpp
index 8cda71e..4bac5a0 100644
--- a/SamTFE/Sources/Engine/Graphics/ViewPort.cpp
+++ b/SamTFE/Sources/Engine/Graphics/ViewPort.cpp
@@ -231,7 +231,6 @@ void CViewPort::OpenCanvas(void)
     _pGfx->gl_SvkMain->CreateSwapchain(0, 0); //  SDL_Vulkan_GetDrawableSize in SvkSwapchain.cpp
     CPrintF("Vulkan: Create Swapchain Done.\nVulkan: === Ready to Render ===\n");
     extern  __attribute__ ((visibility("default"))) SDL_Window * _hwndMain;
-    int r = SDL_SetWindowBrightness(_hwndMain, 0.5f); // Brightness 0.0f - 1.0f // hack for normal Brightness
   }
   // is it required?
   // if (_pGfx->gl_eCurrentAPI == GAT_VK ) SetAsRenderTarget_Vulkan(this);
@@ -319,7 +318,6 @@ void CViewPort::Resize(void)
     _pGfx->gl_SvkMain->RecreateSwapchain(0, 0); //  SDL_Vulkan_GetDrawableSize in SvkSwapchain.cpp
     CPrintF("Vulkan: ReCreate Swapchain Done.\nVulkan: === Ready to Render ===\n");
     extern  __attribute__ ((visibility("default"))) SDL_Window * _hwndMain;
-    int r = SDL_SetWindowBrightness(_hwndMain, 0.5f); // Brightness 0.0f - 1.0f // hack for normal Brightness
   }
 #endif // SE1_VULKAN
 }
diff --git a/SamTFE/Sources/Engine/Graphics/Vulkan/SvkUtils.cpp b/SamTFE/Sources/Engine/Graphics/Vulkan/SvkUtils.cpp
index b3cea2d..0f7c36d 100755
--- a/SamTFE/Sources/Engine/Graphics/Vulkan/SvkUtils.cpp
+++ b/SamTFE/Sources/Engine/Graphics/Vulkan/SvkUtils.cpp
@@ -347,6 +347,8 @@ BOOL SvkMain::PickPhysicalDevice()
   VK_CHECKERROR(r)
     ASSERT(physDeviceCount > 0);

+  CPrintF("Vulkan: Physical Devices Count: %d\n", physDeviceCount);
+
   for (uint32_t i = 0; i < physDeviceCount; i++)
   {
     VkPhysicalDevice physDevice = physDevices[i];
@@ -385,9 +387,15 @@ BOOL SvkMain::PickPhysicalDevice()
       // now select preferred settings
       gl_VkSurfColorFormat = VK_FORMAT_UNDEFINED;

+      CPrintF("Vulkan: formatsCount: %d\n", formatsCount);
+
       for (uint32_t j = 0; j < formatsCount; j++)
       {
-        if (gl_VkPhSurfFormats[j].format == VK_FORMAT_R8G8B8A8_UNORM)
+        CPrintF("Vulkan: gl_VkPhSurfFormats.format: %d\n", gl_VkPhSurfFormats[j].format);
+        CPrintF("Vulkan: gl_VkPhSurfFormats.colorSpace: %d\n", gl_VkPhSurfFormats[j].colorSpace);
+
+        if (gl_VkPhSurfFormats[j].format == VK_FORMAT_R8G8B8A8_UNORM ||
+            gl_VkPhSurfFormats[j].format == VK_FORMAT_B8G8R8A8_UNORM)
         {
           gl_VkSurfColorFormat = gl_VkPhSurfFormats[j].format;
           gl_VkSurfColorSpace = gl_VkPhSurfFormats[j].colorSpace;
@@ -395,6 +403,8 @@ BOOL SvkMain::PickPhysicalDevice()
         }
       }

+      CPrintF("Vulkan: gl_VkSurfColorFormat: %d\n", gl_VkSurfColorFormat);
+
       extern INDEX gfx_vk_iPresentMode;
       VkPresentModeKHR preferredPresentMode;

Оффлайн tx00100xt

  • Начинающий
  • *
  • Сообщений: 17
    • Email
Re: Serious Sam Classic v1.10
« Ответ #18 : 22.05.2022 11:40:11 »
Огромное Спасибо! Я бы сам никогда не додумался.

Теперь точно возьмусь за исправление других ошибок.
Вчера увидел что в январе за основу взял старую версию https://github.com/sultim-t/Serious-Engine-Vk/releases/tag/0.1.4
С тех пор накопились исправления, внесу их в порт linux.

На скриншотах Player.ecl - это отсутствует 1_00c.gro, а 01_Hatshepsut.wld - отсутствует каталог Levels c уровнями

Добавил патч
https://github.com/tx00100xt/SeriousSamClassic-VK/commit/c812aa59592ecc30f9dd5141f7b52983dce7c8ea
https://gitflic.ru/project/tx00100xt/serioussamclassic-vk/commit/2df2d89833dbb4959b1022c1b11e44bfa040a767



Добавил дополнения:
https://gitflic.ru/project/tx00100xt/se1-tfe-tower
https://gitflic.ru/project/tx00100xt/se1-tse-st8vi
https://gitflic.ru/project/tx00100xt/se1-tse-st8vipe

https://github.com/tx00100xt/SE1-TFE-Tower
https://github.com/tx00100xt/SE1-TSE-ST8VI
https://github.com/tx00100xt/SE1-TSE-ST8VIPE
« Последнее редактирование: 25.05.2022 14:31:20 от tx00100xt »

Оффлайн tx00100xt

  • Начинающий
  • *
  • Сообщений: 17
    • Email
Re: Serious Sam Classic v1.10
« Ответ #19 : 28.05.2022 12:35:08 »
Подтянул версию vulkan файлов до последнего коммита отсюда https://github.com/sultim-t/Serious-Engine-Vk,
потом отсюда https://github.com/sultim-t/Serious-Engine-RT
Внес некоторые исправления. Увеличил размер выделяемой памяти в vulkan для текстур XPLUS. Они гораздо больше стандартных.
Issues больше нет. Проверил работу всех дополнений с vulkan.
Готовые cкомилированые бинарные файлы можно взять тут:

https://github.com/tx00100xt/SeriousSamClassic-VK/releases

Оффлайн tx00100xt

  • Начинающий
  • *
  • Сообщений: 17
    • Email
Re: Serious Sam Classic v1.10
« Ответ #20 : 17.06.2022 22:05:15 »
Для тех кто использует Gentoo сделал overlay

https://github.com/tx00100xt/serioussam-overlay

Добавить можно командой:
layman -o https://raw.githubusercontent.com/tx00100xt/serioussam-overlay/main/serioussam-overlay.xml -f -a serioussam

Описание: https://github.com/tx00100xt/serioussam-overlay#readme

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 282
Re: Serious Sam Classic v1.10
« Ответ #21 : 18.06.2022 15:31:03 »
Спасибо!
Подключил вот так:
# eselect repository add serioussam git https://github.com/tx00100xt/serioussam-overlay.git
games-fps/serioussam-tfe-vk собирается.

Настройки не сохраняются. Скопировал в /usr/share/SamTFE/Scripts/PersistentSymbols.ini одноимённый файл из той версии, что собирал сам из исходников в каталоге пользователя, программа эти настройки подхватила. Если правильно понимаю, надо менять пути, что бы файлы размещались где-то в $HOME/.config или $HOME/.local

Оффлайн tx00100xt

  • Начинающий
  • *
  • Сообщений: 17
    • Email
Re: Serious Sam Classic v1.10
« Ответ #22 : 18.06.2022 18:05:41 »
Да, когда будет время, думаю переписать код, чтобы настройки и сохранения были в домашней директории.
Так будет лучше.

Добавил ebuild'ы для XPLUS. Собрать можно так:
emerge serioussam-tfe-xplus serioussam-tse-xplus

Добавил Alpha Remake
emerge serioussam-alpharemake

« Последнее редактирование: 18.06.2022 22:23:35 от tx00100xt »

Оффлайн tx00100xt

  • Начинающий
  • *
  • Сообщений: 17
    • Email
Re: Serious Sam Classic v1.10
« Ответ #23 : 21.06.2022 11:06:40 »
Готово.
Переписал код игры. Теперь все пользовательские данные хранятся в домашнем каталоге. Обновил исходники и оверлей.

upd.
Добавил ebuild-ы для дополнений  (Dances World, OddWorld, Nightmare Tower, Parse Error для TFE и TSE)
https://github.com/tx00100xt/serioussam-overlay/tree/main/games-fps

Собрать можно командой
emerge serioussam-dancesworld serioussam-oddworld serioussam-pefe2q serioussam-pese2q serioussam-tower
« Последнее редактирование: 26.06.2022 14:10:42 от tx00100xt »

Оффлайн gvy

  • alt linux team
  • ***
  • Сообщений: 1 005
    • Альт на Эльбрусе
    • Email
Re: Serious Sam Classic v1.10
« Ответ #24 : 26.09.2022 00:35:23 »
Опубликовали. https://www.opennet.ru/opennews/art.shtml?num=57196
Пошёл проверить неадекватов, даже в лог модерирования заглянул -- а там их всего-то ничего было и вроде все уже окучены.

Переслал ребятам с @elbrus_pc_test, может, пособирают -- какую-то версию уже брали, чинили и заводили...
--
Michael Shigorin | ALT Linux Team | OpenNET | ANNA-News | Сделано у нас

Оффлайн gvy

  • alt linux team
  • ***
  • Сообщений: 1 005
    • Альт на Эльбрусе
    • Email
Re: Serious Sam Classic v1.10
« Ответ #25 : 26.09.2022 12:07:53 »
https://gitflic.ru/...
На этом сайте сейчас удобно работать? А то, вроде, "недопиленный" был.
Я там пару дней всего, из неудобств - это отсутствие функционала создания релизов и имена репозиториев только в нижнем регистре.
Передал коллегам из gitflic, откликнулись: "Привет, понял, поправим :)"
--
Michael Shigorin | ALT Linux Team | OpenNET | ANNA-News | Сделано у нас

Оффлайн gosts 87

  • Завсегдатай
  • *
  • Сообщений: 1 884
  • Дмитрий/Dmitry/德米特里/दिमित्री
Re: Serious Sam Classic v1.10
« Ответ #26 : 26.09.2022 20:11:43 »
Передал коллегам из gitflic, откликнулись: "Привет, понял, поправим :)"
Значит через Вас будем "хотелки" отправлять! ;-D ;-)

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 282
Re: Serious Sam Classic v1.10
« Ответ #27 : 27.09.2022 10:07:15 »
Передал коллегам из gitflic, откликнулись: "Привет, понял, поправим :)"
Значит через Вас будем "хотелки" отправлять! ;-D ;-)

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

Оффлайн gosts 87

  • Завсегдатай
  • *
  • Сообщений: 1 884
  • Дмитрий/Dmitry/德米特里/दिमित्री
Re: Serious Sam Classic v1.10
« Ответ #28 : 27.09.2022 14:29:32 »
Не понятно, чему тут радоваться.
Это шутка была.  :rolleyes: Разве не понятно ???
« Последнее редактирование: 27.09.2022 14:31:14 от gosts 87 »

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 282
Re: Serious Sam Classic v1.10
« Ответ #29 : 27.09.2022 14:45:27 »
Не понятно, чему тут радоваться.
Это шутка была.  :rolleyes: Разве не понятно ???

Извините. Уже и про себя не понимаю, когда шучу, а когда нет. Просто зашёл туда, посмотрел, всё так же нельзя поменять видимость репозитория, а писать им не хочется, занятые же люди.