Войти
ПроектыФорумОцените

Фреймворк LDL (17 стр)

Страницы: 116 17 18 1927 Следующая »
#240
10:40, 31 авг 2023

При портировании, что бы не менять исходник, приходится определять следующие дефайны:

#ifndef LDL_Types_hpp
#define LDL_Types_hpp

#include <stdlib.h>

#if (_MSC_VER <= 1600 && !__MINGW32__) || (__BORLANDC__)
typedef signed char   int8_t;
typedef unsigned char uint8_t;

typedef signed short   int16_t;
typedef unsigned short uint16_t;

typedef signed int   int32_t;
typedef unsigned int uint32_t;

typedef int32_t  intmax_t;
typedef uint32_t size_t;

#define bool  int 
#define true  1 
#define false 0
#else
#include <stdint.h>
#include <stddef.h>
#include <limits.h>
#endif

#endif
#241
10:52, 31 авг 2023

Выбрал следующий вариант, без юзания pimpl. Наружу торчат интерфейсные классы.

В недрах фреймворка я реализую интерфейс LDL_IRender требующий динамического создания. Что бы не утомлять разработчика, делается дополнительный файл Render.hpp

#ifndef LDL_Cpp_Render_hpp
#define LDL_Cpp_Render_hpp

#include <LDL/Creators.hpp>

class LDL_Render
{
public:
  LDL_Render()
  {
    _Render = RenderCreate();
  }

  ~LDL_Render()
  {
     Destroy(_Render);
  }

  void Draw()
  {
    _Render->Draw();
  }
private:
  LDL_IRender* _Render;
};

#endif

Для поддержки namespace и шаблонов, делаю еще один заголовочный файл

#ifndef LDL_Cpp98_Render_hpp
#define LDL_Cpp98_Render_hpp

#include <LDL/Creators.hpp>

namespace LDL
{
  namespace Graphics
  {
    class Render
    {
    public:
      Render()
      {
        _Render = RenderCreate();
      }

      ~Render()
      {
        Destroy(_Render);
      }

      void Draw()
      {
        _Render->Draw();
      }
    private:
      LDL_IRender* _Render;
    };
  }
}

#endif

Высокоуровневое API сохраняется.

#242
10:58, 31 авг 2023

Главное сохраняется единое API для всех платформ Dos, Windows 3.1, 9x, Nt, Linux.

#243
16:26, 31 авг 2023

JordanCpp
> Ядро будет поддерживать 16 битные x86 процессоры.

Даёшь 8-ми битные x86 процессоры?

#244
(Правка: 17:05) 17:03, 31 авг 2023

gamedevfor
Это уже эребор:) Только разобрался с моделями памяти и ближними, дальними указателями. В принципе, не так всё страшно. Практически добавить поддержку 16 бит систем возможно. Общий код не пострадает, добавится парочка модификаторов типа LDL_FAR.

#245
(Правка: 6:45) 6:40, 1 сен 2023

На данный момент переношу каждый класс в новый проект с учётом портирования под Dos и Windows 3.1. На каждый класс пишется тест. Иначе никогда не портирую. Тесты пригодятся для запуска на каждой портированной платформы.

Все версии будут собираться из одного репозитория. Избегаю компиляторо специфичного кода, все зависимые штуки выношу в Config.hpp где в зависимости от версии компилятора и платформы  определены #define.

В общем коде, так же нет непереносимых возможностей. Для каждой системы свой каталог Dos/ Windows/ Unix/ + общий каталог Shared где содержится переносимый код.

#246
7:06, 1 сен 2023

Для себя напоминание.

Протестировать фреймворк на возможность компиляции на следющих компиляторах.

Borland C++ 2.0 и выше
Borland Turbo C++ 1.0 и выше
Microsoft C/C++ 7.0
Visual C++ 1.0 и выше

Данные компиляторы поддерживают нативно сборку для dos, windows 3.1

Разрабатываю проект в MSVC 2022, тестирую под Dosbox с установленными компилятором Borland C++ 2.0

image

#247
12:09, 1 сен 2023

HandriX
Будет и Watcom, просто забыл про него.

#248
12:27, 1 сен 2023

А под DOS чем рисовать будешь?

#249
(Правка: 12:43) 12:40, 1 сен 2023

gamedevfor

256-Color VGA Programming in C
Пока нашёл инфу по двум режимам VGA.

1. 320x200 создаю буфер + указатель на память видеокарты.
2. 640x480 создаю буфер и участками по 64кб переношу в видеопамять.

Общее это создаю буфер, в него рисую и потом копирую в память видеокарты.

#250
12:55, 1 сен 2023

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

#251
15:02, 1 сен 2023

JordanCpp
Наверное будет тупить на реальном железе тех лет, так как под DOS графон писали на ASM-e (по возможности с использованием математического сопроцессора).
В общем это была боль.

#252
15:11, 1 сен 2023

gamedevfor
Ничего не мешает асм перенести во фреймворк из какого нибудь проекта. Сорцы Doom нужно посмотреть.

Интересно asm у всех компиляторов одинаковый. К примеру инициализация прерывания разная.

#253
16:11, 1 сен 2023

Ну, что то вышло. Пока базовые примитивы.

#include <LDL/Equal.hpp>
#include <LDL/EventQ.hpp>
#include <LDL/Surface.hpp>
#include <LDL/Conv.hpp>
#include <LDL/Eventer.hpp>
#include <LDL/Cpp/Render.hpp>

int main()
{
  LDL_RenderContext renderContext;

  LDL_Window window(&renderContext, LDL_Point2u(0, 0), LDL_Point2u(320, 200), "");
  LDL_Render render(&renderContext, &window);

  LDL_Event report;

  while (window.GetEvent(report))
  {
    render.SetColor(LDL_Color(32, 32, 32));
    render.Clear();

    render.SetColor(LDL_Color(9, 9, 9));
    
    render.Line(LDL_Point2u(0, 0), window.Size());

    render.End();
  }

  return 0;
}

image

#254
(Правка: 18:07) 17:54, 1 сен 2023

JordanCpp
> Ну, что то вышло. Пока базовые примитивы.
А, DOS расширители будут использованы?
Как популярность DOS/4GW помогла играм в Windows 95

P.S. Может фреймворк LDL и под KolibriOS сможет запустится нативно?

Страницы: 116 17 18 1927 Следующая »
ПроектыФорумОцените