Войти
ПрограммированиеФорумОбщее

ZenGL Update (2 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#15
(Правка: 19:23) 19:22, 20 дек. 2020

Salamandr, давайте называть всё своими именами!
То, про что вы пишите - это два видео из последних (так как захват камеры не был возможен в данных условиях, что написано под видео) и несколько видео где я снимал демки запущенные на телефоне. Мне всего лишь нужно было выдать картинку и эти видео не длинные.

Все остальные видео как раз сняты захватом экрана! Для Android, я посмотрю, буду ли я делать захват экрана, потому что для захвата нужна программа, которая так же потребляет мало ресурсов телефона, в противом случае смысла захвата не будет, потому что это будет задерживать воспроизведение программ на видео.

Но! Вообще - это конструктивная критика!


#16
(Правка: 24 дек. 2020, 19:10) 3:01, 21 дек. 2020

Обновляю ветку.
Теперь ZenGL поддерживает MacOS Cocoa. Бета версия.

Будте внимательны!!! Ветки перепутаны! (по моей неопытности работы с GitHab).
Часть демо-версий не работает!
12-я считается устаревшей и дорабатывать не буду.
3-я будет доработана позже.
4-ю не желательно использовать для MacOS Cocoa!!!
15-я требует компиляции файлов в папке "yuv2rgba" (да, я не всё умею и не на всё хватает времени) или найти какое-то другое решение.
16-я требует полной переработки, файл идущий с ZenGL для физики, устарел.
17-я в доработке.
18-я. под LCL не буду дорабатывать. Если у вас есть предложения, готов выслушать и будем от этого отталкиваться.

Введена процедура procedure gl_SetCoreGL(mode: Byte);
mode принимает значения CORE_2_1, CORE_3_2,CORE_4_1 - поэтому умельцы, могут включить нужный им OpenGL и работать именно с ним.
устанавливать значение надо до создания окна!!!

необходимо проверить триангуляцию!!! На моём компьютере она не работает.

Для ARM, вам нужно будет брать библиотеки с HomeBrew... и я не гарантирую, что там они абсолютно рабочие...
ZLib, ogg, vorbis, theora, chipmunk (знаете где взять кроме Homebrew, то берите оттуда)

Видео и физика на MacOS не настроены... поэтому theora и chipmunk зачастую не нужны. Пока не нужны.

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры
переборка демки на MacOS. Случайно подрезал видео... )))
#17
(Правка: 25 дек. 2020, 0:06) 23:34, 24 дек. 2020

Объединил ветки и обновил. Так как затёрлись некоторые обновления.
Версия 3.27 теперь содержит все обновления ветки 3.26. Ветка 3.26 удалена за ненадобностью.

#18
4:15, 26 дек. 2020
Введено ограничение FPS для всех PC-систем. Это не то же самое что вертикальная синхронизация!!! При установке FPS > 60, вертикальная синхронизация автоматически включается (не все мониторы поддерживают частоту > 60 Гц).
Возможные значения ограничения FPS = 30, 60, 75, 85, 90, 100, 120 и 144. Исключающие эти значения будут переведены в значение 60.

А зачем это надо? Вроде бы много лет нормально работала фпс>500 и мониторы её поддерживали:))) Единственная проблема, так это возможные мигающие чёрные полосы при отсутствии вертикальной синхронизации и выводе картинки не на всё окно. Так это решается установкой вертикальной синхронизации по умолчанию, а большого фпс на свой страх и риск.

#19
12:29, 26 дек. 2020

Skvoznjak
Видимо чтобы потребление цпу и соответственно расход батареи (в случае мобилок)\шум(в случае настолок) уменьшить. Хотя с этим, по-моему, тоже вертикальная синхронизация справлялась.

Мне больше интересно зачем фиксированные ограничения
> ограничено 20-ю таймерами.
> не более 5.
когда есть динамические массивы.

Но в любом случае круто что кто-то развивает. По-моему то чего фатально не хватает ZenGL для андроида - шейдеров и соответственно контекста GLES2+. Но для этого надо всю FFP-часть переписывать.

#20
(Правка: 16:54) 16:51, 26 дек. 2020

Skvoznjak, ну ответ уже дан. Почти.

При FPS > частоты монитора, этот код всё равно обрабатывался, включена или нет синхронизация. В данном случае, код просто не будет обрабатываться.

И это дополнительная защита от "супер-програмистов", которые захотят что-то своё вставить. Я прекрасно помню, как взял одну из наработок ZenGL и несколько раз ловил "синий экран смерти", без каких либо оповещений вообще. При чём ловил этот глюк прямо из среды разработки. Как я долго матерился. Но зато в моей версии так сделать нельзя (вроде исправил).

kipar, там, по сути, можно менять их количество, просто меняя константы. А в будущем, если руки дойдут, то (чтоб людям десять раз одно и то же не делать) составлю программку, которая будет создавать проект и сразу же все константы будет выставлять по желанию программиста.  ... но наверно не в близком будующем. ))) Я помню сколько времени я делал редактор карт для танков... это было дольше, чем сами танки. )))

И, повторюсь, ZenGL для меня это способ создания контекста. Я буду развивать, позже (доделаю текущие мелочи) сам OpenGL/ES (добавлю все функции или заставлю работать уже с созданными библиотеками) и можно будет пользоваться ZenGL как оболочку для использования OpenGL не заморачиваясь созданием окна. Ну и, как обычно, для разных платформ. )))

#21
3:01, 27 дек. 2020

Mirrel,
>При FPS > частоты монитора, этот код всё равно обрабатывался, включена или нет синхронизация. В данном случае, код просто не будет обрабатываться.

Ну так и сделал бы ограничение на фпс при включенной синхронизации. Зачем при отключенной не давать накрутить фпс до тысячи? Это же получится что не видишь как при добавлении кода или при засирании видеопамяти постепенно проседает фпс. Заметишь только когда ниже частоты монитора опустится и будешь гадать, что месяц назад сделал не так.

#22
(Правка: 9:27) 9:24, 27 дек. 2020

Skvoznjak, давай исходить из того, что ZenGL в большинстве случаев генерирует окно в окне, а не создаёт полноэкранное приложение (хотя тоже можно использовать). И на этом моменте функция ограничения FPS и вертикальная синхронизация расходятся.
Решил программист, что его программа будет работать при FPS = 60, а пользователь решил, что частота работы его монитора будет 75 Гц. Не состыковочка правда? ))) А с каких это пор отдельное окно будет регулировать частоту отображения основного окна?
При полноэкранном приложении это можно сделать.

> Это же получится что не видишь как при добавлении кода или при засирании
> видеопамяти постепенно проседает фпс.
Это произойдёт в любом случае, когда программист не понимает что делает или нагружает машину не предназначенную для огромных нагрузок. Тут не спасёт ни чего.

#23
11:30, 27 дек. 2020

Mirrel
> Решил программист, что его программа будет работать при FPS = 60
И программист совершил ошибку, так как завязывать логику на фпс - это очень плохо. Хотя само ограничение ФПС на тех же мобилках полезная штука.

#24
(Правка: 12:25) 12:24, 27 дек. 2020

Vlad2001_MFS
> так как завязывать логику на фпс - это очень плохо.
что? При чём тут логика и FPS?
Вероятно вы что-то больше меня знаете в данной библиотеке? Поделитесь пожалуйста!

#25
15:00, 27 дек. 2020

Mirrel, а вот это ты видел?

procedure app_MainLoop;
  label   //[[[[[[[[[[[[[[[[[[[[[[
  1;      //[[[[[[[[[[[[[[[[[[[[[[
  var
    t : Double;
begin
  while appWork do
    begin
      if ZGL_BEZ_VIDEO then goto 1; //[[[[[[[[[[[[[[[
      app_ProcessOS();
1:  //[[[[[[[[[[[[[[[[[[[[[[
      res_Proc();
      {$IFDEF USE_JOYSTICK}
procedure zgl_Init( FSAA : Byte = 0; StencilBits : Byte = 0 );
LABEL   //[[[[[[[[[[[[[[[[
1;      //[[[[[[[[[[[[[[[[[[
begin
  oglFSAA    := FSAA;
  oglStencil := StencilBits;

  {$IFDEF iOS}
  if not appPoolInitialized Then
    begin
      appPoolInitialized := TRUE;
      app_InitPool();
      ExitCode := UIApplicationMain( argc, argv, nil, utf8_GetNSString( 'zglCAppDelegate' ) );
      app_FreePool();
      exit;
    end;
  {$ENDIF}

  zgl_GetSysDir();
  log_Init();

  IF ZGL_BEZ_VIDEO THEN GOTO 1;  //[[[[[[[[[[[[[[[[[
  appInitialized := TRUE;
  if not scr_Create() Then exit;
  if not gl_Create() Then exit;
  if not wnd_Create( wndWidth, wndHeight ) Then exit;
  if not gl_Initialize() Then exit;
1:   //[[[[[[[[[[[[[[[[[
  InitSoundVideo();

  wnd_ShowCursor( appShowCursor );
  wnd_SetCaption( wndCaption );
  appWork := TRUE;
procedure zgl_Destroy;
  var
    i : Integer;
    p : Pointer;
  label  //[[[[[[[[[[[[[[[[[[
    1,2;   //[[[[[[[[[[[[[[[[[[
begin
  if appWorkTime <> 0 Then
    log_Add( 'Average FPS: ' + u_IntToStr( Round( appFPSAll / appWorkTime ) ) );
 IF ZGL_BEZ_VIDEO THEN GOTO 1;  //[[[[[[[[[[[[[[[[[
  if Assigned( app_PExit ) Then
    app_PExit();
  res_Free();

  if managerTimer.Count <> 0 Then
    log_Add( 'Timers to free: ' + u_IntToStr( managerTimer.Count ) );
  while managerTimer.Count > 0 do
    begin
      p := managerTimer.First.next;
      timer_Del( zglPTimer( p ) );
    end;

  if managerFont.Count <> 0 Then
    log_Add( 'Fonts to free: ' + u_IntToStr( managerFont.Count ) );
  while managerFont.Count > 0 do
    begin
      p := managerFont.First.next;
      font_Del( zglPFont( p ) );
    end;

  if managerRTarget.Count <> 0 Then
    log_Add( 'Render Targets to free: ' + u_IntToStr( managerRTarget.Count ) );
  while managerRTarget.Count > 0 do
    begin
      p := managerRTarget.First.next;
      rtarget_Del( zglPRenderTarget( p ) );
    end;

  managerZeroTexture := nil;
  if managerTexture.Count.Items <> 0 Then
    log_Add( 'Textures to free: ' + u_IntToStr( managerTexture.Count.Items ) );
  while managerTexture.Count.Items > 0 do
    begin
      p := managerTexture.First.next;
      tex_Del( zglPTexture( p ) );
    end;

  {$IFDEF USE_SENGINE}
  sengine2d_Set( nil );
  sengine2d_ClearAll();
  {$ENDIF}

  {$IFDEF USE_PARTICLES}
  if managerEmitter2D.Count <> 0 Then
    log_Add( 'Emitters2D to free: ' + u_IntToStr( managerEmitter2D.Count ) );
  for i := 0 to managerEmitter2D.Count - 1 do
    emitter2d_Free( managerEmitter2D.List[ i ] );
  SetLength( managerEmitter2D.List, 0 );
  pengine2d_Set( nil );
  pengine2d_ClearAll();
  {$ENDIF}
1:   //[[[[[[[[[[[[[[[[[[[[[[
  {$IFDEF USE_SOUND}
  snd_Free();
  {$ENDIF}

 IF ZGL_BEZ_VIDEO THEN GOTO 2;  //[[[[[[[[[[[[[[[[[
  {$IFDEF USE_VIDEO}
  if managerVideo.Count.Items <> 0 Then
    log_Add( 'Videos to free: ' + u_IntToStr( managerVideo.Count.Items ) );
  while managerVideo.Count.Items > 0 do
    begin
      p := managerVideo.First.next;
      video_Del( zglPVideoStream( p ) );
    end;
  {$ENDIF}

  scr_Destroy();
  gl_Destroy();
  wnd_Destroy();
2:   //[[[[[[[[[[[[[[[[[[[[[[

  {$IFDEF USE_OGG}
  FreeVorbis();
  {$ENDIF}
  {$IFDEF USE_THEORA}
  FreeTheora();
  {$ENDIF}

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

>Решил программист, что его программа будет работать при FPS = 60, а пользователь решил, что частота работы его монитора будет 75 Гц. Не состыковочка правда? )))

Для таких случаев в движок добавляется ключ навроде показанного выше ZGL_BEZ_VIDEO. Поменял его и логика работы движка меняется как надо и при этом не надо ломать фичи. У тебя же не стоит задача впихнуть все новые фичи без добавления в АПИ новых процедур и переменных, значит можно для новых фич не ломать полезные старые из-за того, кому-то они не нужны. Пусть по умолчанию будет как нужно тебе, но останется возможность разблокировать старый режим работы с фпс.

>Это произойдёт в любом случае, когда программист не понимает что делает или нагружает машину не предназначенную для огромных нагрузок. Тут не спасёт ни чего.

В больших и сложных программах происходят вещи, которые не всегда возможно предугадать, но с ними можно работать по факту.

#26
(Правка: 16:06) 16:05, 27 дек. 2020

Skvoznjak
> Как ты можешь догадаться, никакого окна в окне при этом не используется.
> if ZGL_BEZ_VIDEO then goto 1; //[[[[[[[[[[[[[[[
> app_ProcessOS();
> 1: //[[[[[[[[[[[[[[[[[[[[[[
ты хоть предпологаешь что ты предлагаешь? С каких пор, исключая основной процесс ты получишь рабочий плеер без окна?
Как ты собираешся этим плеером пользоваться, если ты визуально ни чего не создашь? Это подойдёт только для плееров, которые ты носишь с собой. Но для них ты должен будешь создать свой процесс обработки, раз ты исключил основной процесс. Для плеера на компьютере визуальная оболочка нужна для выбора плейлиста/звуковой дорожки. Так это нужно будет и на Android и на iOS.

Вы путаете что-то? FPS - это частота кадров окна, а не частота работы приложения! Ни чего не сломано! Всё осталось в прежнем формате! Ограничена только частота вывода на экран!!!

Что-то ещё не понятно? )))

#27
16:46, 27 дек. 2020

Mirrel,
>ты хоть предпологаешь что ты предлагаешь? С каких пор, исключая основной процесс ты получишь рабочий плеер без окна?

Но ведь работает же:) (аллюзия на анекдот с вопросом: а ты можешь 2 литра водки и после работать?) 23 кило веса, 759 строк включая пустые.

>Как ты собираешся этим плеером пользоваться, если ты визуально ни чего не создашь? Это подойдёт только для плееров, которые ты носишь с собой. Но для них ты должен будешь создать свой процесс обработки, раз ты исключил основной процесс. Для плеера на компьютере визуальная оболочка нужна для выбора плейлиста/звуковой дорожки. Так это нужно будет и на Android и на iOS.

Очень просто. Запускаю через командную строку и все дела. Если проигрывается видео со звуком, то окно используется, а если только звука, то в линуксе вообще окно не надо, а в винде хватает консоли, которая сворачивается в панель и вывода звука через директ. С опеналом в винде не всё хорошо.

>Вы путаете что-то? FPS - это частота кадров окна, а не частота работы приложения! Ни чего не сломано! Всё осталось в прежнем формате! Ограничена только частота вывода на экран!!!

У меня логика в другом потоке и скорость цикла ограничивается, зато фпс при отключенной вертикальной синхре может стремиться к тысяче. И по фпс видно и как память засирается багами в драйвере (при использовании спящего режима баги в видео накапливаются) и когда графоний или логика вдруг стали жрать выше нормы. А по умолчанию вертикальная синхронизация конечно включена, но без неё познавательней и прикольнее. Эта синхронизация даже больше ресурсов проца жрёт чем её отсутствие...

#28
18:02, 27 дек. 2020

Mirrel
А есть-ли возможность выводить картинку в какую нибудь ChildPanel готового окна по hendle, а не созданного ZenGL?

#29
(Правка: 19:54) 19:47, 27 дек. 2020

Skvoznjak
> Но ведь работает же:)
мьсе знает толк в извращениях... Зачем тебе ZenGL? Если ты всё отключаешь там. ))))

> И по фпс видно и как память засирается багами в драйвере (при использовании
> спящего режима баги в видео накапливаются) и когда графоний или логика вдруг
> стали жрать выше нормы.
Надо помнить, что ресурсы видеокарты жрёт не только ZenGL. И на слабых видеокартах будет сильно отражаться, когда запущено несколько приложений, а сверху ещё запускают приложение созданное на ZenGL. (и да, там, вероятно, не всё подчищается, тоже надо будет заняться)

flint2, я бы посоветовал кому-то сходить на форум Hiasm...
Но как культурный (или хотя бы выглядящий культурно?) человек, отвечу, изучайте демо-версии.

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорумОбщее