29.09.2023
	Корректированы файлы "Makefile" для "FreePascal", добавлена возможность компиляции под Linux64.

28.09.2023
	Добавлена демка 20 "OpenGL33_2", показывающая работу с матрицами. В демо происходит вращение куба.

18.09.2023
	Добавлено определение "CLEAR_STATE". Теперь если его отключить, то не будут очищаться события клавиатуры, мыши, джойстика и тачпада. Пользователю надо будет самому определить где он будет очищать данные события.

16.09.2023
	Добавлена демка 19 "OpenGL33_1", показывающая самую простенькую работу с шейдерами.

04.09.2023
	Добавлен модуль gegl_xrandr - это xrandr со всеми обновлениями. Не должен быть частью библиотек ни ZenGL ни GreeEngine.

03.09.2023
	Добавлены свои конфигурационные (уже настроенные) файлы для demo "18 - LCLZenGL" и для проектов "ZenFont" и корректированы данные проекты.

25.07.2023
	Корректировка проекта создания шрифтов для ZenGL
	Корректировка zgl_pasOpenGL для Linux.
	Внесены определения "VID_NV", "VID_AMD", "VID_INTEL" и "VID_APPLE" для включения/отключения функций/расширений для NVidia, AMD, Intel или Apple, поддерживаемые для OpenGL/OpenGL ES/EGL.

23.07.2023
	Добавлены заголовки OpenGL ES для всех версий с последними обновлениями на данную дату.
	Добавлены полные заголовки для EGL с последними обновлениями на данную дату.

03.07.2023
	Корректировка кода и возврат файлов для стабильной работы ZenGL в DelphiXE.

27.06.2023
	Окончательные правки проектов Android для новой версии ZenGL. Внесены изменения в соответствии с каждой архитектурой.

25.06.2023
	Правка проектов Android для правильной их сборки.
	Добавлен дефайн CPUARMV7A - так как он отсутствует для Android. Отключайте его, если будете использовать ARM v5 или ARM v6, во избежании ошибок.
	Добавлен дефайн NOT_OLD_ARM - отвечающий за использование динамических библиотек для старших Android-версий - это ARM64 и ARMv7a.
	Версия ZenGL теперь 0.4.0.

21.06.2023
	Собраны динамические библиотеки LibZip под Android. Требуется проверка исправлений в связи с изменениями.
	Уделены библиотеки Tremolo, как устаревшие. Для их возврата, надо заново их перебирать. Вероятнее всего ни кто этим заниматься не будет.
	Добавлены и исправлены демоверсии для Android. Теперь они содержат несколько проектов под разные архитектуры: v5, v6, v7a, v8a, x86, x86_64.

11.06.2023
	Внесены коррекции в демки для версии 3.30 (на гит).
	Удалён дефайн "OLD_METHODS". Код ZenGL полностью корректирован вместе с демками в связи с данным удалением. Теперь демки более удобочитаемы.
	Осталась старая функциональность при работе с полем ввода сделанная Andru. Введён новый дефайн "KEYBOARD_OLD_FUNCTION" для работы с данными процедурами/функциями. При включении данного дефайна отключится библиотека "Green Engine" (должна, по крайней мере).
	Полностью удалёна поддержка MacOS Carbon (она и не поддерживалась).
	Собраны библиотеки "Ogg", "Vorbis", "Theora" для Android (v8a, v7a, x86, x86_64). v7a - звук работает, видео не проверено.

17.03.2023
	Стабилизация последней версии 3.30. Подготовка модулей для создания ZenGL-library.
	
14.03.2023
	Исправления для статической сборки OGG, Vorbis - убраны динамические зависимости.
	Исправлены проблемы работы виртуальной клавиатуры в мобильных системах.
	Включена поддержка виртуальной клавиатуры для мобильных систем, её можно включить и в настольных системах (может быть больше глюков чем для мобильных систем).

10.03.2023
	Корректировка ZenGL для MacOS.

06.03.2023
	Удаление libGLU.so для мобильных систем.
	Корректирование демоверсий для Android.

07.02.2023
Модуль "zgl_screen"
	Для Linux перебрана процедура "scr_GetResList". Не доделана до конца. Обрабатывает только одно окно, а ZenGL при этом может отображать окно на другом мониторе.
	
12.01.2023
	Исправления файлов "windows_prebuild.bat" и "linux_prebuild.sh" - теперь создаются папки для копирования динамических библиотек и файлов данных (спасибо github он удаляет пустые папки).	

02.01.2023
Модуль "zgl_opengles_all"
	Использующаяся процедура "glColor4f" переименована в "_glColor4f". Все вызовы данной процедуры так же переименованы (нужно только внутри ZenGL).
	Процедура "glColor4f" была возвращена как стандартная для OpenGL ES (не путать с переименованной выше!).

хх.12.2022
Исправлена ошибка при первичном создании полноэкранного окна.

20.10.2022
Модуль "zgl_utils".
	Процедуре "utf8_toUnicode" возвращено прежнее название "utf8_GetID", а процедура "Unicode_toUTF8" переименована в "ID_toUTF8".
	Работа процедур не изменилась.
	
	Инициализации текста (текстурного текста) - теперь шкала приближена к пиксельной составляющей. 1 пиксель примерно равен 1 пикселю при индексации.
	Это важно в процедурах setFontTextScale и setTextFontScaleEx - напрямую работающими с установкой размера шрифта.

03.09.2022
Модуль "zgl_tiles_2d"
	Убран код конфликтующий при работе с камерой. Этот код или пересмотреть или убрать (больше не восстанавливать).

02.09.2022
Модуль "zgl_camera_2d".
	Процедура "cam2d_Init" переименована в "cam2d_DefInit".
	Добавлена новая процедура с возможностью задания данных камере "procedure cam2d_Init(x, y, angle, zoom: Single; out Camera: zglTCamera2D);"
	Добавлена процедура "procedure cam2d_CenterSet(Camera: zglPCamera2D; x, y: Single);" - с её помощью можно задать координаты центра камеры. Но вы должны их или точно вычислить перед этим или точно знать заданную точку!
	Правки к коде, корректирующие работу камеры.

30.08.2022
Модуль "zglmouse".
	Добавлена функция "mouse_Move", возвращающая булев результат.

26.08.2022
Модуль "zglmouse".
"mouse_Lock(X: Integer = - 1; Y: Integer = - 1)" - переименована в "mouse_LockInXY(X: Integer = - 1; Y: Integer = - 1)".

30.07.2022
Модуль "zgl_mouse".
	Добавлена булева переменнная "mouseMove" и "function mouse_Move: Boolean;" - показывающие движется мышь или нет.

25.07.2022
Добавлен новый модуль "zgl_primitives_2dEX" - расширенные примитивы.
	На данное время позволяют рисовать широкие линии, цепочку широких линий и квадрат/параллелограм (с прямыми углами) с широким бордюром. Параллелограм прозрачный или залитый внутри. У залитого можно отметить возможность флага "FX2D_VCA" либо для бордюра, либо для внутренней части.

﻿Модуль "zgl_text"
	добавлена функция "text_GetXY(fnt: LongWord; const Rect: zglTRect2D; const Text: UTF8String; Flags: LongWord = TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER): zglTPoint2D;" - для тех моментов, когда текст идёт в одну строку и статичен (либо перемещается вместе с кватратом/прямоугольником). Достаточно для текста вызвать данную процедуру и получить координаты начала прорисовки текста (теперь вызывать каждый раз "text_drawInRect" не нужно) и прорисовывать вызовом "text_Draw".
	Данная функция не решает проблем с переносом текста на другую строку.

------------------------------------------------------------------------------------------
ZenGL 3.29 - обновления:
	добавлена процедура перехвата клавиши Escape, для выхода из программы:
	"procedure app_PKeyEscape" - регистрируется с помощью "zgl_Reg" и флага "SYS_KEYESCAPE".

Модуль gegl_color:
	"procedure Set_numColor(numColor: LongWord)" заменена на "procedure Set_ToNumColor(numColor: LongWord)"
	
	добавлены функции для работы с каждым элементом цвета в отдельности: 
	"function Get_ElColor(num, El: LongWord): LongWord;"
	"function Set_ElColor(num, El: LongWord; value: Byte): Boolean;"

	исправлены: 
	"procedure Correct_Color(num, Color: LongWord)"
	"function Get_Color(num: LongWord): LongWord" 
	- при работе с ними была была не верно обрабатываемая информация.

В модуль "zgl_utils" добавлены функции:
	"function u_FloatToStr(Value: Double; Digits: Integer = 2): UTF8String"
	"function u_StrToFloat(const Value: UTF8String): Double"
	для работы с числами двойной точности.

	Процедура "procedure fx2d_SetVertexes(x1, y1, x2, y2, x3, y3, x4, y4: Single)" заменена на "procedure fx2d_SetVertexes(xLeft, yUp, xRight, yDown: Single)" и теперь работает только с параллелограммами.
	Причина изменения: ускорение работы программы. Для работы с произвольными четырёхугольниками, надо работать с треугольниками.
	Требует дальнейших изменений?! Добавить обработку подобным образом треугольников?!

	Добавлен дефайн "KEYBOARD_OLD_FUNCTION". Позволяет работать со старыми функциями клавиатуры и полем ввода. Смотрите третью демку.

	Поле ввода теперь более самодостаточное. Для работы с ним нужно только загрузить шрифт и указать его для поля ввода. Размер шрифта зависит от самого поля ввода.

	Обновлены демки под Android.
	Изменён java-код.
	Виртуальная клавиатура настроена под Android. (виртуальные джойстики не редактировались, это в процессе).
	Исправлены ошибки при работе с виртуальной клавиатурой.
	Введены процедуры для показа/скрытия клавиатуры (для поля ввода не обязательно, там это происходит автоматически).

	!!! Обратить внимание, для мобильных систем поле ввода будет активироваться только с первого касания. Остальные пальцы не активируют поле ввода. Если это необходимо, то можно будет этот момент доработать.

	Исправлены ошибки поля ввода.

------------------------------------------------------------------------------------------
Всё что связано с дисплейными списками было удалено из минимальной версии OpenGL. Теперь относится только к основной-устаревшей.

Внимание!!! Нижеследующие изменения не затрагивали demo12!!! И при её использовании (render_target) я не гарантирую точной работы вашего кода для OpenGL. Нужно знать, требуется это или нет. Потому что 12-я демка была создана именно для 2D.

------------------------------------------------------------------------------------------
ZenGL 3.29 - обновления:
Модуль "zgl_screen"
	"procedure scr_SetViewPort" заменена на "procedure scr_SetViewPort2D".
	Введена динамическая "procedure SetViewPort". По умолчанию она использует "procedure scr_SetViewPort2D".
	Добавлен флаг "OGL_VIEW_PORT" для регистрации, посредством "procedure zgl_Reg", динамической "procedure SetViewPort".

	Модифицирована работа с LCL. При сильном желании, теперь размеры формы можно менять.
	Смотрите "procedure FormResize".

Модуль "zgl_render"
﻿	Добавлена пользовательская объявляемая процедура для MatrixMode - "SetUserMode".
	Изменена процедура установки для MatrixMode - "procedure SetCurrentMode(mode: LongWord = Mode2D);" - теперь можно выбирать режим для MatrixMode (2D, 3D, пользовательский).
	Добавлены рабочие флаги "ModeUser", "Mode2D" и "Mode3D" для "procedure SetCurrentMode".
	Добавлен флаг "OGL_USER_MODE" для регистации, посредством "procedure zgl_Reg", пользовательской "procedure SetUserMode".
	Теперь пользователь может создать сам нужную ему процедуру для использования используемой видовой модели в OpenGL.

------------------------------------------------------------------------------------------
ZenGL 3.29

Добавлено:
	- процедура сброса таймера. zgl_Reg(SYS_RESET, @gameReset) - задействована для режима паузы. Если вы работаете с физикой и с точным временем.
	- добавлены прорисовываемые примитивы. Циклическая или ломанная линии pr2d_LineSORL (Strip or Loop line). Треугольник pr2d_Triangle. Произвольный четырёхугольник pr2d_quad.
	- добавлена функция пересечения двух прямоугольников (вертикальных или горизонтальных) по двум точкам col2d_RectBPEP (Begin point - End point).

	- добавлены комментарии и переводы к ним.

Green Engine:
	- модуль gegl_Color - для ускоренной работы с цветом. Используется в основном для примитивов zgl_primitives_2d. Все значения 
	- в поле ввода добавлены ограничивающие функции. Так же есть возможность создать самим ограничивающие функции.

Работа с экраном:
	- добавлена функция для установки дальности прорисовки для 2D - Set2DNearFar. И объекты можно располагать по "глубине" экрана (по координате Z). При включении теста глубины, дальние объекты будут перекрыты ближними (на данное время не проверял). Эту функцию можно использовать и для 3D, но учитывать что Near не должно быть меньше нуля.
	- при включении/выключении флага DEPTH_BUFFER (zgl_Enable/zgl_Disable), включается очистка GL_DEPTH_BUFFER_BIT. Что позволяет правильно работать с проверкой глубины "https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm" - для ознакомления.
	- в функциях zgl_Enable и zgl_Disable добавлен флаг XY_IN_CENTER_WINDOW. При его включении X = 0, Y = 0 будут в центре экрана. (внимание, процедуры прорисовки примитивов не перерабатывались под данный флаг, потому может быть смещение примитивов на 1 пиксель при прорисовке).

OpenGL
	- добавлены процедуры OpenGL для работы с дисплейными списками. Так же добавлены функции для работы с буферами в минимальную версию OpenGL.
	- добавлен модуль "zgl_GLX_WGL.pas" и отделены функции из модуля "zgl_opengl_all.pas" для работы с GLX и WGL. Всё обновлено в соответствии с окончанием 2021-го года, за исключением определённых заголовков.
	- добавлен модуль "zgl_GLU.pas", отделены функции из модуля "zgl_opengl_all.pas" для работы с GLU.
	- добавлен модуль "zgl_pasOpenGL.pas". Он обновлён согласно последним изменениям на конец 2021 года (возможны ошибки, требуется тестирование). По умолчанию включен минимальный набор OpenGL спользуемый в ZenGL.
	- добавлен файл конфигурации для модулей "zgl_GLX_WGL.pas", "zgl_pasOpenGL.pas" - "GLdefine.cfg" и файл с константами и типами "zgl_gltypeconst.pas".
	- добавлена процедура procedure "SetGLVersionAndFlags({$IfNDef MAC_COCOA}major, minor: Integer; flag: LongWord = COMPATIBILITY_VERSION{$Else}mode: LongWord{$EndIf});" для Linux и Windows введена возможность создания контекста для OpenGL 3+ (в MacOS она была сразу, изменено название).

	- многие типы перенесены в модуль zgl_types.
	- структуры разделены на 2D и 3D. И примитивы так же разделены на 2D и 3D. Точнее в конце структур/примитивов они добавлены - изменения не значительны (как пример: zglTRect -> zglTRect2D).

Изменено:
	- для таймеров изменены рабочие константы на t_Start, t_SleepToStart, t_Stop, t_SleepToStop. Во избежание случайных совпадений.
	- для мыши возращены изначальные функции и константы (работа функций не изменена), для совместимости и удобства.
	- для тачпада тоже изменено, но не проверено.

Недоработки!
	Проблемы работы когда у вас два монитора.
	Linux: решить проблему при переключении разрешений экрана. Используется XRandr - поэтому надо делать проверку на количество мониторов и местоположение на мониторе. Полноэкранный режим - это окно для двух мониторов? Или особое свойство работы XRandr? Поиск решения проблемы отложен.

------------------------------------------------------------------------------------------
Изменения в версии 3.28.
	- Добавлена библиотека Green Engine собственной разработки. Это вроде как дополнительное API для библиотеки ZenGL. Разрабатывалась ранее и клавиатура из Green Engine была добавлена в более ранние версии. Внимание!!! Работает только с ZenGL!!!
    - В данной версии GE создано независимое от платформы поле ввода. Должно работать на всех платформах, но на мобильных платформах и MacOS не проверено. Будет проверено и добавлено в исправления.

    - В дальнейшем ожидается доработка библиотеки GE.

	- изменены названия малой части процедур/функций, для более визуального восприятия. В частности utf8_GetID заменена на utf8_toUnicode так как она как раз переводит UTF8 в юникод.

	- добавлена функция function Unicode_toUTF8(Symb: LongWord): UTF8String; перевода из юникода в UTF8.

	- изменена и ускорена работа с текстом.
	- теперь вы не получите ошибку кода, если символа не существует при загруженном шрифте. Все не существующие символы будут отмечены знаком "?".
	- вы сможете писать на любом языке, но, если шрифт для этого не предназначен, все "не печатаемые" (не определённые в шрифте) символы будут так же отмечены знаком "?". При сохранинии такого текста в файл, вероятнее всего он будет выведен правильно.
	- в демонстрационной версии 6, показана работа со шрифтами. Если вам нужен шрифт определённого размера, вы должны с ним работать через procedure setFontTextScale(Index: LongWord; fnt: Byte);, она позволит вам более быстро работать с данным шрифтом. Если не постоянно, то смотрите демонстрационную версию.
	- дополнен ряд функций для работы с текстом-шрифтами. Смотрите в файле zgl_text.pas.
	- созданы процедуры для загрузки/сохранения текста procedure txt_LoadFromFile(const FileName: UTF8String; out Buf: UTF8String);, procedure txt_SaveFromFile(const FileName: UTF8String; const Buf: UTF8String);.

	- были исправлены некоторые ошибки в коде и изменены части работы с клавиатурой. keysLast (bold) - сейчас работает только для печатаемых клавиш.

	- введена процедура постотрисовки. Регистрируется с помощью zgl_Reg и флагом SYS_POSTDRAW. Срабатываете данная функция только после того как выведется всё в окно. Бывает нужно, когда нужно работать с видеокартой, но не нужно ни чего выводить.

	- теперь обработка клавиатуры/мыши/тачпада необходимо производить с помощью регистрируемой процедуры и флагом SYS_EVENTS. Производить их "очистку" больше  нет необходимости.
	- добавленны комментарии в некоторые модули. Постарался сразу же добавить и на английском языке.

	- были исправления в части кода, о которых уже забыл... )))
