Cheb's Game Engine

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

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

Re: Cheb's Game Engine

Сообщение скалогрыз » 03.07.2016 23:19:37

Cheb писал(а):См. Alien Shooter 2. Изометрия, но трупов иногда по колено чавкало. И ещё колёсами джипа размазывалось, оставляя следы протектора.

пардон.. 2d-же. Там даже "бутербродами" делать легко и приятно, ибо Z-buffer не нужен и всё решается порядком вывода спрайтов. А карточке это всё очень дёшево, потому что изменения геометрии фактически не нужно считать.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Cheb's Game Engine

Сообщение Cheb » 03.07.2016 23:37:06

где бравый американский астронафт, ловко командует своим подчинённм турелькам голосом:

Не, ну на. В RPG режиме ты сидишь в командном центре, гоняя юнитов по карте и, при необходимости assuming direct control. Но если враги прорвались и your dungeon heart is under attack - теряешь всё управление базой, и отбиваешься от вторженцев от первого лица, в собственной хилой тушке. Или не такой хилой.

ибо Z-buffer не нужен и всё решается порядком вывода спрайтов.

И тем не менее, запекалось в текстуру (при сбоях иногда появлялись чистые квадраты 256х256 пикселов).
Никакой z-buffer не имеет значения: запечёная текстура накладывается тем же проходом, у меша две развёртки и два набора текстурных координат.

Вы в курсе, что современная видеокарта практически обязана уметь читать из не менее 8 текстур одновременно? Из двух сразу умела ещё Voodoo2.
Но это - текстур. А уж выборок из них на пиксел можно делать хоть сорок - тут ограничение по нагрузке скорее насколько они далеко друг от друга.

В моём давишнем _test19 при увеличении QF врубается суперсемплинг. И сглаживание при выводе увеличенного рендербуфера на экран идёт за счёт N чтений из текстуры, вокруг заданной точки. Начинается с 5, расположенных крестом, но при росте разрешения они быстро выстраиваются концентрическими кольцами.

См. мой угрёбищный хак, исходный код шейдера генерируется заново при изменении числа точек, а их координаты вшиваются в него как константы. И ведь работает, самка собаки. Моя Intel HD 3000 начинает дохнуть только точки с двадцатой. И это - на каждый пиксел!
Код: Выделить всё
  procedure TMultisampleShader.GenerateShaderSource(var v, f: AnsiString);
  var
    sampler_code: AnsiString = '';
    hdr_mul: AnsiString;
    sampler_rx, sampler_ry, a, adelta, dx, dy, sr, srdelta: float;
    i, steps, step, ssum, perstep: integer;
    function csign(f: float): AnsiString;
    begin
      if f < 0 then Result:= '' else Result:= '+';
    end;
  begin
    //use default verter shader emulating ffp
    inherited GenerateShaderSource(v, f);

    hdr_mul:= '';
    if f_hdr > 1.0 then hdr_mul:=
      'vec4(' + FloatToStrF(f_hdr, ffExponent, 15, 1)
        + ','+ FloatToStrF(f_hdr, ffExponent, 15, 1)
        + ',' + FloatToStrF(f_hdr, ffExponent, 15, 1)
        + ',1.0) * ';
    steps:= 1 + ((f_samples - 1) div 8);
    ssum:= 1;
    for step:=1 to steps do begin
      perstep:= math.min(8, f_samples - ssum);
      adelta:= 3.1416 * 2 / perstep;
      a:= 3.1416 * 1.0; //0.75; //45 degrees
      sampler_rx:= 0.7 * ((1 + steps - step)/steps) * frw;
      sampler_ry:= 0.7 * ((1 + steps - step)/steps) * frh;
      for i:= 1 to perstep do begin
        dx:= sin(a) * sampler_rx;
        dy:= cos(a) * sampler_ry;

//addlog('step=%0, i=%1, a=%2, dx=%3, dy=%4, frw=%5, frh=%6',[step, i, a, dx, dy, frw, frh]);
        sampler_code+= 'sum += texture2D(u_texture, vec2(gl_TexCoord[0].x '
           + csign(dx) + ' ' + FloatToStrF(dx, ffExponent, 15, 1) + ', gl_TexCoord[0].y '
           + csign(dy) + ' ' + FloatToStrF(dy, ffExponent, 15, 1) + ')) * '
           + FloatToStrF(1 / f_samples, ffExponent, 15, 1) + '; ';
        a+= adelta;
      end;
      ssum+= perstep;
    end;

    //compose fragment shader
    f:=
       'uniform sampler2D u_texture;'
     + 'void main(void) {'
         + 'vec4 sum = vec4(0.0);'
         + 'sum += texture2D(u_texture, vec2(gl_TexCoord[0].x, gl_TexCoord[0].y)) * '
         + FloatToStrF(1 / f_samples, ffExponent, 15, 1) + ';'
         + sampler_code
       //  + 'gl_FragColor = texture2D(u_texture, vec2(gl_TexCoord[0]));'
         + 'gl_FragColor = ' + hdr_mul + ' sum * gl_Color;'
     + '}';
  end;


Добавлено спустя 9 минут 34 секунды:
P.S. В итоге, меш ландшафта должен иметь три трёхкомпонентных и одну двухкомпонентный вектор текстурных координат на вершину. Трёхкомпонентные - для смешения до трёх базовых текстур на треугольник (s,t, индекс в атласе), а двухкомпонентный - развёртка персонализированной текстуры заляпов (которая тоже запихнута в какой-либо атлас, но её положение передаётся юниформами).
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 08.07.2016 14:22:54

Поковырялся немного с поддержкой GL ES 2 (использую отковырянную от Стима гугловскую dll). Запустилось, определившись как
Код: Выделить всё
Графический API: OpenGL ES 2.0 (ANGLE 2.1.0.)
  устройство ANGLE (Intel(R) HD Graphics 3000 Direct3D11 vs_4_1 ps_4_1)
  производитель Google Inc.


Скопипастил пробный шейдер эмуляции FFP. Вершинный скомпилировался, фрагментный скомпилировался, иииии-хряп:
Код: Выделить всё
Ошибка сборки шейдеров в программу GLSL: Failed to create D3D shaders.

Почесал репу. Подумал, что HD3000 недостаточно DirectX 11 совместимая.
Перенёс на игровую машину с GTX 460, откуда взял эту дллу. Хряпнулось сразу же, при первом обращении:
Код: Выделить всё
EControlC: Control-C hit
  по адресу 07C81CC9h в nvwgf2um.dll

:shock:

И тут Штирлиц догадался, что чё-то делает не так.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Mirage » 08.07.2016 22:27:10

А я как заюзал Regal для эмуляции GLES, так стабильно и работает. Причем под виртуальной XP. И никакого DX11 ему не надо.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Cheb's Game Engine

Сообщение скалогрыз » 09.07.2016 06:38:27

Полюбопытствую: а не ту каких-то официальный (и бесплатных) врапперов/эмуляторов OpenGL ES (любой версии) под винду?
Такое чувство, что все этот самый ES "пиратят" откуда придётся.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Cheb's Game Engine

Сообщение Cheb » 09.07.2016 18:49:02

Под винду мне нужна только для разработки - как сама GLES нужна только для поддержки Raspberry Pi 2/3. А так она нафиг не спёрлась, только лишний геморрой.

Regal для эмуляции GLES

Запомню на будущее. На далёкое. Хватит баловаться, на очереди - классы текстурного атласа и шейдеры мультитекстурирования ландшафта.

P.S. Роясь в архивов, наткнулся в одном из вариантов своего досовского движка на обрамление для сообщения о фатальной ошибке. Оригинал - 320х200х256 цветов.
Изображение
Последний раз редактировалось Cheb 21.08.2019 10:23:10, всего редактировалось 1 раз.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение скалогрыз » 09.07.2016 23:15:45

Cheb писал(а):Под винду мне нужна только для разработки - как сама GLES нужна только для поддержки Raspberry Pi 2/3. А так она нафиг не спёрлась

Правильно, как и для любого друго автора движка, GLES нужен только для разработки.
Например в ZenGL-е, присутствует поддержка GLES для iOS и Андройда. Но так же есть предусмотренный дефайн USE_GLES_ON_DESKTOP.

Cheb писал(а):.S. Роясь в архивов, наткнулся в одном из вариантов своего досовского движка на обрамление для сообщения о фатальной ошибке. Оригинал - 320х200х256 цветов.

Красиво, но мало синего цвета :D
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Cheb's Game Engine

Сообщение Mirage » 10.07.2016 04:26:25

Разумеется, удобнее тестировать шейдеры на десктопе, написав их сразу на GLES.
А потом приятно обнаружить, что все и на реальном устройстве работает, почти без доработок.

скалогрыз писал(а):Полюбопытствую: а не ту каких-то официальный (и бесплатных) врапперов/эмуляторов OpenGL ES (любой версии) под винду?Такое чувство, что все этот самый ES "пиратят" откуда придётся.


Вендоры мобильных GPU какие-то SDK скачать предлагают. Некоторые даже бесплатно.
Однако, когда я этим озаботился, ничего официального не смог скачать/поставить/заставить работать.
И, судя по существованию таких проектов как Regal и ANGLE, проблема тут не только во мне.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Cheb's Game Engine

Сообщение Cheb » 25.07.2016 15:53:07

Нежданчик: после обновления до виндовс 10, Чентра перестала запускаться. Орёт "GDI Generic, всё пропало!"
Поискал в инете, нашёл только слёзные вопли на мелокофорумах "Обновился до десятки, у моей HD 3000 пропало аппаратное ускорение OpenGL! Помогитяаа!" - и в ответ тишинааа...
Было бы зловеще, если бы OpenGL Extension Viewer не рендерил ничтоже сумнящеся, как от 1.1 до 2.1 так и 3.3.
И вот что-то мне подсказывает, что это - радиус кривизны софта, помноженный на радиус кривизны дров.
Что-то я делаю не так. Сейчас нет времени, но задачка зело интересная.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение скалогрыз » 25.07.2016 16:13:52

Cheb писал(а):Сейчас нет времени, но задачка зело интересная.

тривиальщина заканчивающаяся на обновлении дров :)
какой-нить пиксель формат не тот выбрался.

но может быть задуматься о DX реализации движка?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Cheb's Game Engine

Сообщение Cheb » 25.07.2016 16:38:52

задуматься о DX реализации

Я, скорее, поддержку вулкана добавлю.
В конце концов, для DX существуют GLES врапперы, а мегаграфикой никогда заниматься не планировал.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение скалогрыз » 25.07.2016 16:49:31

Cheb писал(а):Я, скорее, поддержку вулкана добавлю.

а заголовки уже на паскль портировали? а то гугление Pascal + Vulcan даёт отсылки только на Нвидия карточку.

Добавлено спустя 1 минуту 48 секунд:
Cheb писал(а):В конце концов, для DX существуют GLES врапперы, а мегаграфикой никогда заниматься не планировал.

ну тут подмена понятий. Всякие модные API, они конечно делаются для ААА игрушек, дабы увеличить производительность за счёт неиспользования CPU, но всё-таки они API, а значит что мега, что немега графику они обеспечивают.

Иметь DX реализацию, как подушку, на случай кривой поддержки OpenGLа виндой.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Cheb's Game Engine

Сообщение Cheb » 25.07.2016 19:16:01

а заголовки уже на паскль портировали?

К двадцатому году, когда я, наконец-то, рожу игру - точно портируют. Если не будет атомной войны.

Подушка - это, конечно, хорошо, но разрабатывать два вида шейдеров сразу... Нееее, *сначала* доделываю игру, потом начинаю думать о директиксах.

Добавлено спустя 1 минуту 3 секунды:
З.Ы. По самой игре идей - громадье, но без работающего минимума миниморума фич это всё - сотрясение воздуха.

Добавлено спустя 2 часа 57 минут 35 секунд:
Попытка первая, перечислить:
Код: Выделить всё
//if Mother^.Debug.Verbose then
        AddLog('  Listing pixel formats...');
        for i:= 1 to min(255, //sanity check
          wglDescribePixelFormat(display, 1, sizeof(pfd), @pfd))
        do begin
          if wglDescribePixelFormat(display, i, sizeof(pfd), @pfd) <= 0 then continue;
          s:= PervertedFormat('    #%0: R%1G%2B%3',[i, pfd.cRedBits, pfd.cGreenBits,pfd.cBlueBits]);
          if pfd.cAlphaBits > 0 then s+= PervertedFormat('A%0',[pfd.cAlphaBits]);
          if pfd.cDepthBits > 0 then s+= PervertedFormat(' Z%0', [pfd.cDepthBits]);
          if pfd.cStencilBits > 0 then s+= PervertedFormat('S%0', [pfd.cStencilBits]);
          if (pfd.dwFlags and PFD_SUPPORT_OPENGL) = 0 then s+= ' NoOpenGL';
          if (pfd.dwFlags and PFD_GENERIC_ACCELERATED) = 0 then s+= ' NoHardwareAcceleration';
          if (pfd.dwFlags and PFD_DOUBLEBUFFER) = 0 then s+= ' NoDoubleBuffer';
          if (pfd.dwFlags and PFD_DRAW_TO_WINDOW) = 0 then s+= ' NoWindowed';
          if (pfd.dwFlags and PFD_STEREO) > 0 then s+= ' Stereo';
          if pfd.iPixelType = PFD_TYPE_COLORINDEX then s+= ' Paletted';

          //if Mother^.Debug.Verbose then
          AddLog(s);
        end;


А вот х..рен.
Код: Выделить всё
  Listing pixel formats...
    #1: R8G8B8 Z32S8 NoHardwareAcceleration NoDoubleBuffer
    #2: R8G8B8 Z16S8 NoHardwareAcceleration NoDoubleBuffer
    #3: R8G8B8 Z32S8 NoHardwareAcceleration
    #4: R8G8B8 Z16S8 NoHardwareAcceleration
    #5: R8G8B8A8 Z32S8 NoHardwareAcceleration NoDoubleBuffer
    #6: R8G8B8A8 Z16S8 NoHardwareAcceleration NoDoubleBuffer
    #7: R8G8B8A8 Z32S8 NoHardwareAcceleration
    #8: R8G8B8A8 Z16S8 NoHardwareAcceleration
    #9: R8G8B8 Z32S8 NoHardwareAcceleration NoDoubleBuffer Paletted
    #10: R8G8B8 Z16S8 NoHardwareAcceleration NoDoubleBuffer Paletted
    #11: R8G8B8 Z32S8 NoHardwareAcceleration Paletted
    #12: R8G8B8 Z16S8 NoHardwareAcceleration Paletted
    #13: R8G8B8 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #14: R8G8B8 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #15: R8G8B8A8 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #16: R8G8B8A8 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #17: R8G8B8 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed Paletted
    #18: R8G8B8 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed Paletted
    #19: R5G5B5 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #20: R5G5B5 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #21: R5G5B5A8 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #22: R5G5B5A8 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #23: R5G5B5 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed Paletted
    #24: R5G5B5 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed Paletted
    #25: R3G3B2 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #26: R3G3B2 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #27: R3G3B2A8 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #28: R3G3B2A8 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #29: R3G3B2 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed Paletted
    #30: R3G3B2 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed Paletted
    #31: R1G1B1 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #32: R1G1B1 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #33: R1G1B1A8 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #34: R1G1B1A8 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed
    #35: R1G1B1 Z32S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed Paletted
    #36: R1G1B1 Z16S8 NoHardwareAcceleration NoDoubleBuffer NoWindowed Paletted

Это вообще OpenGL или DirectDraw? :evil:
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение скалогрыз » 25.07.2016 22:30:32

Cheb писал(а):display

он от GetDC(0) или GetDC(hwnd)?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Cheb's Game Engine

Сообщение Cheb » 25.07.2016 23:54:25

он от GetDC(0) или GetDC(hwnd)?

Что совой об пень, что пнём об сову.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34

Рейтинг@Mail.ru