1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Пишу фреймворк LDL, аналог SDL но на С++ и с поддержкой старых систем

Тема в разделе "Мастерская", создана пользователем Jordan 63, 26 окт 2022.

  1. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    145
    @Jordan 63, сравнивать преимущества и недостатки по урокам не очень хорошая идея. От долгой работы над проектом взгляд замыливается, а любовь к нему лишает объективности. Нужна третья нейтральная сторона
     
  2. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Возможно. В любом случае готовлю уроки и документацию. Как будет понятен функционал и достаточность документации, можно начинать. Да я бы и сам написал, как раз в примеры программ пойдёт мини игра понг. Я просто сейчас ещё портирую примеры по OpenGL 3.3 и присматриваюсь к примерам OpenGL 4. Могу с уверенностью сказать, что доделаю документацию точно не в этом году.
    --- добавлено 3 дек 2023, предыдущее сообщение размещено: 3 дек 2023 ---
    Выложу примеры с описанием по ним можно как по примеру написать понг. Там не особо сложный функционал.
    --- добавлено 3 дек 2023 ---
    Я и так сплю в обнимку с ноутбуком:) И очень мешает ограничение 24-ех часов в сутках:)
     
    Последнее редактирование: 3 дек 2023
  3. spitefultomato Археолог

    spitefultomato

    Регистрация:
    23 апр 2005
    Сообщения:
    3.306
    В комментах, как и на других ресурсах, где ты публиковался, ожидаемый трэш и угар. Людям катастрофически не хватает понимания, что совершенно не обязательно вставлять своё ценнейшее мнение по поводу чего-то, не интересного лично им. Что, очевидно, компенсируется избытком свободного времени. Снимаю шляпу перед твоей целеустремлённостью.
     
  4. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Спасибо за отзыв. Это тоже обратная связь, я вылавливаю дельные мыслии из ответов и их не мало.
    --- добавлено 4 дек 2023, предыдущее сообщение размещено: 4 дек 2023 ---
    Самый смешной коментарий на мой взгляд: Импортозамещение, которое мы заслужили.
    --- добавлено 4 дек 2023 ---
    --- добавлено 4 дек 2023 ---
    Пометка для меня. Что нужно сделать по приоритету.

    1.Обновить редми на гитхаб.
    2. Уроки по LDL.
    3. Автоматизировать систему сборки и тестирования для всех поддерживаемых ОС. Вплоть до запуска виртуалки передачи файлов и их запуска.
    4. Документация.
    5. Остальной планируемый функционал.
     
    Gamerun и s1nka нравится это.
  5. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    145
    @Jordan 63, в вашей реализации изометрии ошибка. Для изометрических координат нельзя использовать типы без знака так как может возникнуть переполнение. Вам следует реализовать подсистему для преобразования знаковых/декартовых координат в координатную систему движка и использовать это преобразование непосредственно перед рисованием.
     
    Последнее редактирование: 14 дек 2023
  6. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Вы же об этом коде?
    Lib-LDL/include/LDL/Graphics/Isometric.hpp at master · JordanCpp/Lib-LDL

    Поменяю тип на Vec2i это как раз signed int.
    --- добавлено 15 дек 2023, предыдущее сообщение размещено: 15 дек 2023 ---
    Во всей библиотеки напутаны vec2u и vec2i, нужно будет провести рефакторинг.

    Пишите ещё если найдете проблемы, я именно по коду очень мало фидбека получаю. А очень бы хотелось получить и исправить ошибки, несуразности и т.д в коде. Взгляд со стороны.
     
  7. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    145
    @Jordan 63, продолжаю обозревать ваш код. Есть маленькое замечание по поводу метода WaitEvent класса MainWindow из файла Platforms/Windows/Graphics/MainWindow.cpp

    Магические числа лучше не использовать. Поэтому строку if (result == -1) следует заменить на if (result == FALSE). А еще можно совсем избавиться от переменной result если немного изменить метод. Код будет такой:

    bool MainWindow::WaitEvent(Event& event)
    {

    if (_Eventer.Running())
    {

    if (GetMessage(&_MSG, _HWND, 0, 0) == FALSE)
    {
    throw RuntimeError("GetMessage failed");
    }
    else
    {
    _Eventer.Pop(event);

    TranslateMessage(&_MSG);
    DispatchMessage(&_MSG);
    }
    }

    return _Eventer.Running();
    }
     
  8. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Спасибо, ваш код выглядит намного лучше. Я ваш ник добавлю в описание комита.

    Я думаю там много такого корявого кода, всё же последние 6 лет С# влияют на написание кода на С++. Я стараюсь побольше ставить проверок на ошибки, что бы библиотека молча не падала.
     
  9. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    @Bobbie,
    Нашёл в документации по GetMessage.

    Код:
    HWND hwndMain;
    HWND hwndDlgModeless = NULL;
    MSG msg;
    BOOL bRet;
    HACCEL haccel;
    //
    // Perform initialization and create a main window.
    //
     
    while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
    {
        if (bRet == -1)
        {
            // handle the error and possibly exit
        }
        else
        {
            if (hwndDlgModeless == (HWND) NULL ||
                    !IsDialogMessage(hwndDlgModeless, &msg) &&
                    !TranslateAccelerator(hwndMain, haccel,
                        &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    } 
    
    FALSE в WinApi это 0 и данный 0 это не ошибка.
    --- добавлено 19 дек 2023, предыдущее сообщение размещено: 19 дек 2023 ---
    Теперь код выглядит так:

    Код:
    bool MainWindow::WaitEvent(Event& event)
    {
        if (_Eventer.Running())
        {
            if (GetMessage(&_MSG, _HWND, 0, 0) == -1)
            {
                throw RuntimeError("GetMessage failed");
            }
            else
            {
                _Eventer.Pop(event);
    
                TranslateMessage(&_MSG);
                DispatchMessage(&_MSG);
            }
        }
    
        return _Eventer.Running();
    }
    --- добавлено 19 дек 2023 ---
    Сделал некоторые обновления, последующие обновления буду делать в новогодние праздники.
    И ещё раз предлагаю всем желающим присоединиться к проекту.

    Добавил базовую поддержку 3dfx Glide
    Добавил поддержку сборки для Borland C++ 6.0 и выше.
    Добавляю поддержку d3d11

    Теперь общий список поддерживаемых компиляторов. И библиотека не просто собирается, но и корректно работает. Код очень портабелен и уверен соберется и на других компиляторах.
    1. GCC 3 и выше
    2. MinGW 3 и выше
    3. OpenWatcom V2 и выше
    4. Visual C++ 6.0 и выше
    5. Borland C++ 6.0 и выше

    Как всё это работает:
    Библиотека поддерживает 2D API под капотом в зависимости от выбранного рендера это API работает на OpenGL, Directx и теперь Glide.
    Но так же есть доступ к нативному программированию графических API напрямую, OpenGL, DirectX. Glide. К примеру можно написать игру на Glide и запускать как на нативном железе, так и используя врапперы.
    Для разработки и тестирования интеграции с Glide я использую dgVoodoo.

    Можно используя Glide создать игру и воспользоваться библиотекой LDL для управлениями окнами и событиями ОС. Работать будет на Windows, Linux + на нативном железе. Вполне не плохо.
    Linux версия немного отстаёт от Windows, до нового года подтяну.

    Заинтересовался портированием под Android. Пока гуглю информацию, настраиваю Android студию.
    --- добавлено 19 дек 2023 ---
    Пример кода на Glide. Заливаем экран зелёным цветом.

    Код:
    #include <LDL/Core/RuntimeError.hpp>
    #include <LDL/Graphics/Window.hpp>
    #include <LDL/Graphics/Render.hpp>
    #include <LDL/Enums/RenderMode.hpp>
    #include <LDL/APIs/Glide/GlideLoader.hpp>
    
    #include <iostream>
    
    using namespace LDL::Glide;
    using namespace LDL::Graphics;
    using namespace LDL::Events;
    using namespace LDL::Enums;
    using namespace LDL::Core;
    using namespace LDL::Math;
    
    int main()
    {
      try
      {
        GlideLoader glideLoader;
        RenderContext renderContext(RenderMode::Glide);
        Window window(&renderContext, Vec2u(0, 0), Vec2u(800, 600), "01_Glide_Line");
    
        Event report;
        FxU32 handle = (FxU32)window.NativeHandle();
    
        grGlideInit();
        grSstSelect(0);
    
        FxBool result = grSstWinOpen(handle, GR_RESOLUTION_800x600, GR_REFRESH_60Hz, GR_COLORFORMAT_RGBA, GR_ORIGIN_UPPER_LEFT, 2, 1);
    
        if (!result)
          throw RuntimeError("grSstWinOpen failed");
    
        grVertexLayout(GR_PARAM_XY, 0, GR_PARAM_ENABLE);
        grColorCombine(GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE, GR_COMBINE_LOCAL_CONSTANT, GR_COMBINE_OTHER_NONE, FXFALSE);
    
        Color screenColor(34, 177, 76);
    
        while (window.Running())
        {
          grBufferClear(screenColor.toInt(), 0, 0);
    
          while (window.GetEvent(report))
          {
            if (report.Type == IsQuit)
            {
              window.StopEvent();
            }
          }
    
          grBufferSwap(1);
    
          window.PollEvents();
        }
    
        grGlideShutdown();
      }
      catch (const RuntimeError& error)
      {
        std::cout << error.what() << '\n';
      }
    
      return 0;
    }
     
    Gamerun и _ALS_ нравится это.
  10. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Задумал эксперимент.
    Очень понравилась концепция Simple STB-style cross-platform libraries for C and C++, written in C. но на С++.

    Ссылка на новый проект, LDL_Proj.

    Возможно данный проект, выстрелит лучше. Но это не точно:)

    Завёл новую репу с проектом, данная версия LDL нацелена на Header Only вариат. Весь функционал находится в заголовочном файле, подключается элементарно ссылкой в include.

    Решил данную версию сделать ещё более портабельной, поэтому принял меры:
    1. Весь функционал в hpp файлах.
    2. Убрал использование шаблонов, namespace. Испорльзую С++ с классами.
    3. Рендер выбирается заголовком.
    Пример:

    Код:
    #include "LDL/LDL_GL1.hpp" //OpenGL 1 версия рендера
    #include <stdio.h>
    
    int main()
    {
      LDL_Result result;
    
      LDL_Window window(&result, LDL_Point(0, 0), LDL_Point(800, 600), "test.cpp", LDL_WindowMode::Resized);
    
      if (result.Ok())
      {
       LDL_Event report;
    
       while (window.Running())
       {
         while (window.GetEvent(report))
         {
           if (report.Type == LDL_Event::IsQuit)
           {
             window.StopEvent();
           }
         }
    
         window.PollEvents();
         window.Update();
       }
      }
      else
      {
       printf("%s/n", result.Message());
      }
    
      return 0;
    }
    
    Сейчас пока переношу функционал, работает только инициализация окна с OpenGL.

    На данный моент библиотека разбита на следующие файлы.
    LDL_WinX.hpp - создание окна и управление событиями.
    LDL_Util.hpp - вспомогательбные классы, загрузка dll и so, работа с каталогами и т.д
    LDL_GL.hpp - инициализация фцнкций OpenGL 1.0 - 4.6
    LDL_GL1.hpp - рендер OpenGL 1.2

    Не обязательно использовать LDL для создания окна. Можно использовать в любом другом пргоекте для инициализации OpenGL, подключив 2 файла.
    LDL_Util.hpp
    LDL_GL.hpp

    Код инициализации:

    Код:
    //Код инициализации окна
      LDL_OpenGLLoader loader(3, 3);
    
    Решил сделать библиотеку более полезной.
    --- добавлено 12 янв 2024, предыдущее сообщение размещено: 12 янв 2024 ---
    С++ с классами даёт возможность нативно портировать под dos и windows 3.1 и на другие системы, ps1, ps2, sega satrun(имеется С++ sdk).

    В том числе и на современные консоли где есть С++.
    --- добавлено 12 янв 2024 ---
    По духу, проект ближе к Новый игровой движок
    --- добавлено 12 янв 2024 ---
    Простой пример на OpenGL.

    Без зависимостей.

    Код:
    #define LDL_RENDER_OPENGL1
    #include "LDL/LDL_WinX.hpp"
    #include "LDL/LDL_GL.hpp"
    #include <stdio.h>
    
    int main()
    {
      LDL_Result result;
    
      LDL_Window window(&result, LDL_Point(0, 0), LDL_Point(800, 600), "test.cpp", LDL_WindowMode::Resized);
    
      if (result.Ok())
      {
       LDL_OpenGLLoader loader(1, 2);
    
       LDL_Event report;
    
       while (window.Running())
       {
         while (window.GetEvent(report))
         {
           if (report.Type == LDL_Event::IsQuit)
           {
             window.StopEvent();
           }
         }
    
         glClearColor(0.0f, 3.0f, 0.0f, 0.5f);
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
         window.Present();
         window.PollEvents();
       }
      }
      else
      {
       printf("%s/n", result.Message());
      }
    
      return 0;
    }
     
    Gamerun и Dar_Morar нравится это.
  11. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Ссылка на новый проект, LDL_Proj.

    1. Добавил поддержку OpenGL 3.0 и выше
    2. Провёл рефакторинг заголовков.
    3. Обновил readme.
     
    Gamerun нравится это.
  12. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Перенос кода из предыдущей версии библиотеки в новую проходит довольно быстро.

    Сейчас заканчиваю перенос 2d рендера, под OpenGL и софт версию.

    Портирую библиотеку под ms-dos. Ms- Dos будет поддерживаться в двух вариантах, для 16 и 32 битных процессоров.

    Игры с палитрой написанные с учётом ms-dos используя только API библиотеки, могут быть просто перекомпилированы и будут работать на современных ОС.

    Если вы будете делать игру или программу, без учёта dos, это разрешение экрана и использование палитровых изображений. Будет работать только на системах с 24 битным цветом. Начиная с windows 95.

    Поэтому нужно создать небольшой, но функциональный API. Не только работа с графикой и событиями ОС, но и работа со звуком, чтение каталогов, время, таймеры и. д
     
    Gamerun нравится это.
  13. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Готов порт под Linux.
     
    AndyFox и Tigoro нравится это.
  14. Чёрный Думер и все виды материала

    Чёрный Думер

    Регистрация:
    17 мар 2010
    Сообщения:
    2.435
    Лучше заводить отдельные ветки в уже имеющемся репозитории, просто делать их пустыми (git switch --orphan новая_ветка).
    Потому что звёздочки на GitHub - вещь всё же полезная, а переносить их нельзя. Они привлекают внимание, украшают портфолио и повышают ЧСВ. :)
    Можно даже уже существующий репозиторий в качестве отдельной ветки залить - достаточно просто указать другой remote-адрес и выбрать имя remote-ветки, отличное от имеющихся.

    Я бы советовал осилить minimum viable product и с ним идти куда-нибудь на Reddit и подобные сообщества - там народ доброжелательнее, любопытнее и энергичнее.
     
  15. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.193
    Потыкаю.
     
  16. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Ок, так и поступлю.

    Мой английский ужасен. Только если, кто то с хорошим знанием английского сможет опубликовать и ответить на вопросы. Сначала нужно доделать.

    Спасибо за тест.
     
    Чёрный Думер нравится это.
  17. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.193
    @Jordan 63, под debian 11 нормально все прошло. А вот под 12-ым с кучей внешних реп не хочет компилироваться, т.е. ошибки компиляции, а не сборки.
     
    AndyFox нравится это.
  18. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    LDL

    На данный момент готовы следующие порты.
    Linux 32/64 только OpenGL
    Windows 32/64 только OpenGL
    MS-Dos 16bit запускается переходит в режим 320x200 идёт работа на рендером.

    Данный проект написан на С++ с классами и может собираться нативно из под dos с помощью Borland C++ 2.0

    Следующее изменение, это доделать софт рендер, рисование на ЦПУ. И портировать под windows 3.1
    --- добавлено 15 фев 2024, предыдущее сообщение размещено: 15 фев 2024 ---
    Можешь ещё протестировать плиз под debian 12.
    --- добавлено 15 фев 2024 ---
    Релиз нового варианта библиотеки LDL., будет скоро. Так как библиотека идёт по пути поддержки базовых вещей. Все остальные расширизмы в доп библиотеках. По примеру проекта SDL.
    --- добавлено 15 фев 2024 ---
    В общем для того, что бы прийти к текущему варианты библиотеки понадобился год разработки. Для удобства С++ программистов. Будут написаны заголовки обёртки над основной библиотекой, С++98, 11, 17 с поддержкой namespace и другими современными фичами.

    Я так же буду разрабатывать библиотеку на С++ с классами для лучшей портируемости кода. Но так же данные обёртки позволят иметь современный интерфейс новых стандартов С++.
     
    Gamerun, rusty_dragon и Tigoro нравится это.
  19. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    145
    @Jordan 63, поздравляю со значительным прогрессом и желаю скорейшего релиза. Поменьше вам багов.
     
  20. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Спасибо. Главное прогресс наступил у меня в голове, что и способствовало пересмотру реализации библиотеки. И вам успехов с вашим движком.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление