Cheb's Game Engine

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Re: Cheb's Game Engine

Сообщение Alex2013 » 10.10.2019 01:29:31

Кстати как насчет "пришельцев с планеты Вулкан"?
https://github.com/BeRo1985/pasvulkan
(Чем хороша конкретно эта библиотека так это нативной поддержкой Лазаруса )
Зы
Лично я пока буду "пытать" вот это модуль ("напрасно эти пришельцы высадились на моем кукурузном поле"... 8) )
PasVulkan.VirtualReality.OpenVR.pas
Alex2013
долгожитель
 
Сообщения: 1856
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Cheb » 21.10.2019 11:19:43

Как рыбе зонтик.
У меня обращение к графическому API размазано между exe и dll - т.е. открывает и инициализирует - екзешник, а использует - дллка. Откуда *любые* библиотеки приходится модифицировать под себя, добавляя поддержку этого расщепления. В частности, длл-ка инициализирует у себя процедурные переменные функций огла, запрашивая их у екзешника, а не как это обычно делают.

Любое ООП-решение при этом.... Стоит так дорого, что нуегонафиг.
См. как я сделал поддержку обращения из DLL к потокам, создаваемым в екзешнике. Это двойной враппер, объект екзешника трактуется, как непрозрачный хендл, инкапсулированный внутри класса-потока длл, методы которого обращаются к функциям АПИ интерфейса, а те, на стороне екзешника, обращаются к методам класса, тайпкастя хендл обратно в TStream.
Ну, простенький, урезанный TStream я потянул. Вулкановраппер? Даже не смешно.

Кстати, мой проект заморожен до ~декабря.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 853
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Alex2013 » 21.10.2019 12:42:03

В общем понятно ... Как я понял уровень логики обращения с АПИ позволяет тебе "ассимилировать" любой движок напрямую .
Завидовать нехорошо, но есть чему ! А то у меня вот с OpenVR "затык" образовался сижу и туплю... А все потому что там в DLL засунуты си-шные КЛАССЫ ... Нет что сними делать я в целом понял в "обертке" юзают хак с record вместо класса
Код: Выделить всё
  PVR_IVRSystem_FnTable=^TVR_IVRSystem_FnTable;
     TVR_IVRSystem_FnTable=record
      GetRecommendedRenderTargetSize:procedure(pnWidth:PpovrUInt32;pnHeight:PpovrUInt32); stdcall;
   ...

Но как - Черт подери! - все это соотносить с сишными примерами? Был бы хоть один крохотный, но рабочий пример на паскале но его нет ! :evil: (Вот в "обертке" к OpenCV с этим все в порядке, а тут конструктор "догадайся сам" ! )
Alex2013
долгожитель
 
Сообщения: 1856
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Cheb » 04.11.2019 17:49:04

Куча дел, которые надо переделать до отлёта в отпуск. Лишь изредка прикладываюсь к Чентре, допиливая тут и там. До компилироемости ещё семь вёрст лесом.

Поскольку планируется хранить ссылки на объекты в ускоренных полях, которые бывают только 32-битные...
Код: Выделить всё
  {$ifdef cpu64}
    function UnpackDwordToChepersyObjectReference (d: dword): TChepersyObject; inline;
    var chunk: TChepersyMemoryManagerChunk;
    begin
      if d = 0 then Result:= nil
      else begin
        chunk:= CpsMemoryManager.GetChunkByIndex(d shr 16);
        Assert(Assigned(chunk), 'Failed to unpack a dword to an object reference: no such memory manager chunk!');
        Result:= TChepersyObject(pointer(qword(
          qword(pointer(chunk)) + qword(d and $0000ffff) shl CpsMMAllocGranPoT
        )))
      end;
    end;
    function PackChepersyObjectReferenceToDword (o: TChepersyObject): dword; inline;
    var chunk: TChepersyMemoryManagerChunk;
    begin
      if not Assigned(o) then Result:= 0
      else begin
        chunk:= o.GetMemoryManagerChunk;
        Result:= (dword(chunk.MMIndex) shl 16) or (dword(qword(pointer(o)) - qword(pointer(chunk))) shr CpsMMAllocGranPoT);
      end;
    end;
  {$else cpu64}
    // dumb type-casts on the 32-bit platforms
    function UnpackDwordToChepersyObjectReference (d: dword): TChepersyObject; inline;
    begin
      Result:= TChepsersyObject(pointer(d));
    end;
    function PackChepersyObjectReferenceToDword (o: TChepersyObject): dword; inline;
    begin
      Result:= dword(pointer(o));
    end;
  {$endif cpu64} 


P.S. У меня нехорошее предчувствие, что доделывать проект буду уже на пенсии, до которой - !внезапно! - осталось меньше, чем я уже пилю свой движок :( :( :( :(
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 853
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Alex2013 » 05.11.2019 00:15:35

Cheb писал(а):P.S. У меня нехорошее предчувствие, что доделывать проект буду уже на пенсии, до которой - !внезапно! - осталось меньше, чем я уже пилю свой движок

ИМХО Думаю нужно бетки выкладывать (приделав более менее удобный редактор сюжетов персонажей и т.п. ) просто мобилизует неплохо ... Я катати именно поэтому стараюсь СРАЗУ выкладывать почти все что могу выложить в открытый доступ из своих "исследовательских проектов" (Извини я вроде уже писал что-то похожее ) Но мой текущий "долгострой" на тему ДР-интерфейса в более чем два года определенно был бы еще более медленным если бы я не в