|
@@ -1,383 +0,0 @@
|
|
|
-{
|
|
|
- * Copyright (c) 2012 Andrey Kemka
|
|
|
- *
|
|
|
- * This software is provided 'as-is', without any express or
|
|
|
- * implied warranty. In no event will the authors be held
|
|
|
- * liable for any damages arising from the use of this software.
|
|
|
- *
|
|
|
- * Permission is granted to anyone to use this software for any purpose,
|
|
|
- * including commercial applications, and to alter it and redistribute
|
|
|
- * it freely, subject to the following restrictions:
|
|
|
- *
|
|
|
- * 1. The origin of this software must not be misrepresented;
|
|
|
- * you must not claim that you wrote the original software.
|
|
|
- * If you use this software in a product, an acknowledgment
|
|
|
- * in the product documentation would be appreciated but
|
|
|
- * is not required.
|
|
|
- *
|
|
|
- * 2. Altered source versions must be plainly marked as such,
|
|
|
- * and must not be misrepresented as being the original software.
|
|
|
- *
|
|
|
- * 3. This notice may not be removed or altered from any
|
|
|
- * source distribution.
|
|
|
-
|
|
|
- !!! modification from Serge 02.05.2022
|
|
|
-}
|
|
|
-unit zgl_types;
|
|
|
-
|
|
|
-{$I zgl_config.cfg}
|
|
|
-
|
|
|
-interface
|
|
|
-
|
|
|
-const
|
|
|
-// mouse and touch
|
|
|
- is_down = $001; // нажато в данный момент времени
|
|
|
- is_up = $002; // отпущено в данный момент времени
|
|
|
- is_Press = $004; // нажато постоянно
|
|
|
- is_canPress = $008; // отпущенно - по умолчанию
|
|
|
- is_DoubleDown = $010; // было произведено двойное нажатие
|
|
|
- is_TripleDown = $020; // тройное нажатие, нужно или нет?
|
|
|
- is_mWheelUp = $040; // только для третьей кнопки мыши! - ролик (центральная кнопка)
|
|
|
- is_mWheelDown = $080; // указание ролик движется вверх или вниз.
|
|
|
- is_notTouch = $FF; // не было ни каких нажатий клавиши на виртуальной клавиатуре.
|
|
|
-
|
|
|
- M_BLEFT = 0;
|
|
|
- {$IfNDef MOBILE}
|
|
|
- M_BMIDDLE = 1;
|
|
|
- M_BRIGHT = 2;
|
|
|
- {$Else}
|
|
|
- M_BMIDDLE = 2;
|
|
|
- M_BRIGHT = 1;
|
|
|
- {$EndIf}
|
|
|
- MAX_TOUCH = 10;
|
|
|
-
|
|
|
- // OpenGL
|
|
|
- ModeUser = 1; // MatrixMode
|
|
|
- Mode2D = 2;
|
|
|
- Mode3D = 3;
|
|
|
- {$IfDef MACOSX}
|
|
|
- CORE_2_1 = 1;
|
|
|
- CORE_3_2 = 2;
|
|
|
- CORE_4_1 = 3;
|
|
|
- {$EndIf}
|
|
|
- CORE_VERSION = 1; // совместимость с текущей версией и выше
|
|
|
- COMPATIBILITY_VERSION = 2; // совместимость с ранними версиями. Нельзя использовать для GL 3.2
|
|
|
- GL_DEBUG = 4; // отладка контекста включена
|
|
|
- GL_FORWARD_COMPATIBLE = 8; // вперёд совместимый контекст.
|
|
|
-
|
|
|
-{$IFNDEF FPC}
|
|
|
-type
|
|
|
- QWORD = UInt64;
|
|
|
-{$ENDIF}
|
|
|
-
|
|
|
-type
|
|
|
- Ptr = {$IFDEF CPU64} QWORD {$ELSE} LongWord {$ENDIF};
|
|
|
-
|
|
|
- // Rus: указатель на массив байт.
|
|
|
- // Eng: pointer to an array of bytes.
|
|
|
- PByteArray = ^TByteArray;
|
|
|
- // Rus: массив байт.
|
|
|
- // Eng: array of bytes.
|
|
|
- TByteArray = array[0..High(LongWord) shr 1 - 1] of Byte;
|
|
|
- // Rus: указатель на массив слов.
|
|
|
- // Eng: pointer to an array of words.
|
|
|
- PWordArray = ^TWordArray;
|
|
|
- // Rus: массив слов.
|
|
|
- // Eng: array of words.
|
|
|
- TWordArray = array[0..High(LongWord) shr 2 - 1] of Word;
|
|
|
- // Rus: указатель на массив длинных слов.
|
|
|
- // Eng: pointer to an array of long words.
|
|
|
- PLongWordArray = ^TLongWordArray;
|
|
|
- // Rus: массив длинных слов.
|
|
|
- // Eng: array of long words.
|
|
|
- TLongWordArray = array[0..High(LongWord) shr 3 - 1] of LongWord;
|
|
|
-
|
|
|
- // Rus: указатель на индексы координат текстур.
|
|
|
- // Eng: pointer to texture coordinate indices.
|
|
|
- zglPTexCoordIndex = ^zglTTexCoordIndex;
|
|
|
- // Rus: индексы координат текстур.
|
|
|
- // Eng: texture coordinate indexes.
|
|
|
- zglTTexCoordIndex = array[0..3] of Integer;
|
|
|
-
|
|
|
- // Rus: указатель на список строк.
|
|
|
- // Eng: a pointer to a list of strings.
|
|
|
- zglPStringList = ^zglTStringList;
|
|
|
- // Rus: список строк.
|
|
|
- // Eng: string list.
|
|
|
- zglTStringList = record
|
|
|
- Count: Integer;
|
|
|
- Items: array of UTF8String;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на цвет в "точной" форме - RGBA - single. От 0 до 1.
|
|
|
- // Eng: pointer to color in "exact" form - RGBA - single. 0 to 1.
|
|
|
- zglPColor = ^zglTColor;
|
|
|
- // Rus: цвет в "точной" форме - RGBA - single. От 0 до 1.
|
|
|
- // Eng: color in "exact" form - RGBA - single. 0 to 1.
|
|
|
- zglTColor = record
|
|
|
- R, G, B, A: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на цвет в байтах - RGBA.
|
|
|
- // Eng: pointer to color in bytes - RGBA.
|
|
|
- zglPByteColor = ^zglTByteColor;
|
|
|
- // Rus: цвет в байтах - RGBA.
|
|
|
- // Eng: color in bytes - RGBA.
|
|
|
- zglTByteColor = record
|
|
|
- R, G, B, A: Byte;
|
|
|
- end;
|
|
|
-
|
|
|
-// - было произведено нажатие-отжатие - эти события очищаются
|
|
|
-// - было произведено удержание - это событие не должно очищаться, пока не было нажатия или отжатия
|
|
|
-
|
|
|
-(*******************************************************************************
|
|
|
-* keyboard, mouse, touch and joystick& *
|
|
|
-*******************************************************************************)
|
|
|
- // мы можем расширить структуру и реализовать множественные нажатия, аж до нескольких сотен
|
|
|
- // но, для данного ввода, нам надо определить будет ли это эффективно
|
|
|
- // проверяем это на мыши.
|
|
|
-
|
|
|
- // Rus: для тачскрина, у каждого касания есть свои координаты.
|
|
|
- // Eng: for a touchscreen, each touch has its own coordinates.
|
|
|
- Pm_touch = ^m_touch;
|
|
|
- m_touch = record
|
|
|
- oldX, oldY, newX, newY: Integer; // старые и новые координаты, когда ведут по сенсору.
|
|
|
-// oldXtap, oldYtap: Integer; // последние координаты, которые были, до обнуления координат
|
|
|
- state: LongWord;
|
|
|
- DBLClickTime: Double;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: для клавиш клавиатуры и мыши.
|
|
|
- // Eng: for keyboard and mouse keys.
|
|
|
- km_Button = record
|
|
|
- state: LongWord;
|
|
|
- DBLClickTime: Double;
|
|
|
- end;
|
|
|
-(*******************************************************************************
|
|
|
-* End *
|
|
|
-*******************************************************************************)
|
|
|
-
|
|
|
-(*******************************************************************************
|
|
|
-* primitives *
|
|
|
-*******************************************************************************)
|
|
|
-type
|
|
|
- // Rus: указатель на две координаты - X, Y и на цвет - Color точки.
|
|
|
- // Eng: pointer to two coordinates - X, Y and color - Point color.
|
|
|
- zglPPoint2DColor = ^zglTPoint2DColor;
|
|
|
- // Rus: две координаты - X, Y и цвет точки - Color.
|
|
|
- // Eng: two coordinates - X, Y and color of the point - Color.
|
|
|
- zglTPoint2DColor = record
|
|
|
- X, Y: Single;
|
|
|
- Color: LongWord;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на две координаты точки - X, Y.
|
|
|
- // Eng: pointer to two point coordinates - X, Y.
|
|
|
- zglPPoint2D = ^zglTPoint2D;
|
|
|
- // Rus: две координаты точки - X, Y.
|
|
|
- // Eng: two coordinates of a point - X, Y.
|
|
|
- zglTPoint2D = record
|
|
|
- X, Y: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на три координаты точки - X, Y, Z.
|
|
|
- // Eng: pointer to three point coordinates - X, Y, Z.
|
|
|
- zglPPoint3D = ^zglTPoint3D;
|
|
|
- // Rus: три координаты точки - X, Y, Z.
|
|
|
- // Eng: three point coordinates - X, Y, Z.
|
|
|
- zglTPoint3D = record
|
|
|
- X, Y, Z: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на две координаты точки - массив из одного элемента.
|
|
|
- // Eng: a pointer to two point coordinates - an array of one element.
|
|
|
- zglPPoints2D = ^zglTPoints2D;
|
|
|
- // Rus: две координаты точки - массив из одного элемента.
|
|
|
- // Eng: two coordinates of a point - an array of one element.
|
|
|
- zglTPoints2D = array[0..0] of zglTPoint2D;
|
|
|
-
|
|
|
- // Rus: Указатель на линию. Две координаты XY (то же самое что и вектор).
|
|
|
- // Eng:
|
|
|
- zglPLine2D = ^zglTLine2D;
|
|
|
- // Rus: Координаты линии XY. То же самое что и вектор.
|
|
|
- // Eng:
|
|
|
- zglTLine2D = record
|
|
|
- x1, y1: Single;
|
|
|
- x2, y2: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: Указатель на линию. две координаты XYZ (то же самое что и вектор).
|
|
|
- // Eng: Line pointer. Two XY coordinates (same as a vector).
|
|
|
- zglPLine3D = ^zglTLine3D;
|
|
|
- // Rus: линия - две координаты XYZ. То же самое что и вектор.
|
|
|
- // Eng: line - two XYZ coordinates. The same as a vector.
|
|
|
- zglTLine3D = record
|
|
|
- x1, y1, z1: Single;
|
|
|
- x2, y2, z2: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на вектор - 2 точки - X, Y.
|
|
|
- // Eng: pointer to vector - 2 points - X, Y.
|
|
|
- zglPVector2D = ^zglTVector2D;
|
|
|
- // Rus: вектор - 2 точки - X, Y.
|
|
|
- // Eng: vector - 2 points - X, Y.
|
|
|
- zglTVector2D = record
|
|
|
- x1, y1: Single;
|
|
|
- x2, y2: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на вектор - 2 точки - X, Y, Z.
|
|
|
- // Eng: vector pointer - 2 points - X, Y, Z.
|
|
|
- zglPVector3D = ^zglTVector3D;
|
|
|
- // Rus: вектор - 2 точки - X, Y, Z.
|
|
|
- // Eng: vector - 2 points - X, Y, Z.
|
|
|
- zglTVector3D = record
|
|
|
- x1, y1, z1: Single;
|
|
|
- x2, y2, z2: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на прямоугольник - координаты, ширина, высота - Single.
|
|
|
- // Eng: pointer to rectangle - coordinates, width, height - Single.
|
|
|
- zglPRect2D = ^zglTRect2D;
|
|
|
- // Rus: прямоугольник - координаты, ширина, высота - Single.
|
|
|
- // Eng: rectangle - coordinates, width, height - Single.
|
|
|
- zglTRect2D = record
|
|
|
- X, Y, W, H: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Begin point - end point
|
|
|
- // Rus: указатель на прямоугольник - начальная и конечная координаты - Single.
|
|
|
- // Eng: pointer to rectangle - start and end coordinates - Single.
|
|
|
- zglPRectBPEP2D = ^zglTRectBPEP2D;
|
|
|
- // Begin point - end point
|
|
|
- // Rus: прямоугольник - начальная и конечная координаты - Single.
|
|
|
- // Eng: rectangle - start and end coordinates - Single.
|
|
|
- zglTRectBPEP2D = record
|
|
|
- X1, Y1, X2, Y2: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на произвольный четырёхугольник - четыре координаты - Single.
|
|
|
- // Eng: pointer to arbitrary quadrilateral - four coordinates - Single.
|
|
|
- zglPRectPoints2D = ^zglTRectPoints2D;
|
|
|
- // Rus: произвольный четырёхугольник - четыре координаты - Single.
|
|
|
- // Eng: arbitrary quadrilateral - four coordinates - Single.
|
|
|
- zglTRectPoints2D = record
|
|
|
- x1, y1: Single;
|
|
|
- x2, y2: Single;
|
|
|
- x3, y3: Single;
|
|
|
- x4, y4: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на прямоугольник - координаты, ширина, высота - Word.
|
|
|
- // Eng: pointer to rectangle - coordinates, width, height - Word.
|
|
|
- zglPWordRect2D = ^zglTWordRect2D;
|
|
|
- // Rus: прямоугольник - координаты, ширина, высота - Word.
|
|
|
- // Eng: rectangle - coordinates, width, height - Word.
|
|
|
- zglTWordRect2D = record
|
|
|
- X, Y, W, H: Word;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на окружность - координата цетра и радиус.
|
|
|
- // Eng: circle pointer - center coordinate and radius.
|
|
|
- zglPCircle2D = ^zglTCircle2D;
|
|
|
- // Rus: окружность - координата цетра и радиус.
|
|
|
- // Eng: circle - center coordinate and radius.
|
|
|
- zglTCircle2D = record
|
|
|
- cX, cY: Single;
|
|
|
- Radius: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: Для 3D ни чего не решено, потому большинство структур - предварительны.
|
|
|
- // Eng: For 3D, nothing has been decided, because most of the structures are preliminary.
|
|
|
-
|
|
|
- // параллелограм должен находиться по координатам, высоте, ширине, глубине и
|
|
|
- // минимум углу поворота в пространстве от нуля.
|
|
|
- // Rus: указатель на параллелограм - координаты, ширина, высота, глубина - Single.
|
|
|
- // Eng: pointer to parallelogram - coordinates, width, height, depth - Single.
|
|
|
- zglPRect3D = ^zglTRect3D;
|
|
|
- // Rus: параллелограм - координаты, ширина, высота, глубина - Single.
|
|
|
- // Eng: parallelogram - coordinates, width, height, depth - Single.
|
|
|
- zglTRect3D = record
|
|
|
- X, Y, Z, W, H, Gl: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Begin point - end point
|
|
|
- // так же нужен угол поворота в пространстве. Либо описанная плоскость.
|
|
|
- // Rus: указатель на параллелограм - начальная и конечная координаты - Single.
|
|
|
- // Параллелограм описываемый двумя трёхмерными точками.
|
|
|
- // Eng: pointer to parallelogram - start and end coordinates - Single.
|
|
|
- // Parallelogram described by two 3D points.
|
|
|
- zglPRectBPEP3D = ^zglTRectBPEP3D;
|
|
|
- // Begin point - end point
|
|
|
- // Rus: параллелограм - начальная и конечная координаты - Single.
|
|
|
- // Параллелограм описываемый двумя трёхмерными точками.
|
|
|
- // Eng: parallelogram - start and end coordinates - Single.
|
|
|
- // Parallelogram described by two 3D points.
|
|
|
- zglTRectBPEP3D = record
|
|
|
- X1, Y1, Z1, X2, Y2, Z2: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на произвольный восьмиугольник - восемь координат - Single.
|
|
|
- // Eng: pointer to an arbitrary octagon - eight coordinates - Single.
|
|
|
- zglPRectPoints3D = ^zglTRectPoints3D;
|
|
|
- // Rus: произвольный восьмиугольник - восемь координат - Single.
|
|
|
- // Eng: arbitrary octagon - eight coordinates - Single.
|
|
|
- zglTRectPoints3D = record
|
|
|
- x1, y1, z1, x2, y2, z2: Single;
|
|
|
- x3, y3, z3, x4, y4, z4: Single;
|
|
|
- x5, y5, z5, x6, y6, z6: Single;
|
|
|
- x7, y7, z7, x8, y8, z8: Single;
|
|
|
- end;
|
|
|
-
|
|
|
- // Rus: указатель на сферу - координата цетра и радиус.
|
|
|
- // Eng: sphere pointer - center coordinate and radius.
|
|
|
- zglPCircle3D = ^zglTCircle3D;
|
|
|
- // Rus: сфера - координата цетра и радиус.
|
|
|
- // Eng: sphere - center coordinate and radius.
|
|
|
- zglTCircle3D = record
|
|
|
- cX, cY, cZ: Single;
|
|
|
- Radius: Single;
|
|
|
- end;
|
|
|
-(*******************************************************************************
|
|
|
-* end primitives *
|
|
|
-*******************************************************************************)
|
|
|
-
|
|
|
-(*******************************************************************************
|
|
|
-* POSIX TYPE DEFINITIONS *
|
|
|
-*******************************************************************************)
|
|
|
-type
|
|
|
- cint8 = shortint; pcint8 = ^cint8;
|
|
|
- cuint8 = byte; pcuint8 = ^cuint8;
|
|
|
- cchar = cint8; pcchar = ^cchar;
|
|
|
- cschar = cint8; pcschar = ^cschar;
|
|
|
- cuchar = cuint8; pcuchar = ^cuchar;
|
|
|
- cint16 = smallint; pcint16 = ^cint16;
|
|
|
- cuint16 = word; pcuint16 = ^cuint16;
|
|
|
- cint32 = longint; pcint32 = ^cint32;
|
|
|
- cuint32 = longword; pcuint32 = ^cuint32;
|
|
|
- cint = cint32; pcint = ^cint;
|
|
|
- csint = cint32; pcsint = ^csint;
|
|
|
- cuint = cuint32; pcuint = ^cuint;
|
|
|
- cuint64 = qword; pcuint64 = ^cuint64;
|
|
|
- cint64 = int64; pcint64 = ^cint64;
|
|
|
- cbool = longbool; pcbool = ^cbool;
|
|
|
-{$If defined(CPU64) and not defined(WINDOWS)}
|
|
|
- clong = int64;
|
|
|
- cslong = int64;
|
|
|
- culong = qword;
|
|
|
-{$Else}
|
|
|
- clong = longint;
|
|
|
- cslong = longint;
|
|
|
- culong = cardinal;
|
|
|
-{$IfEnd}
|
|
|
- pclong = ^clong;
|
|
|
- pcslong = ^cslong;
|
|
|
- pculong = ^culong;
|
|
|
- cfloat = single; pcfloat = ^cfloat;
|
|
|
- cdouble = double; pcdouble = ^cdouble;
|
|
|
-
|
|
|
- csize_t = culong;
|
|
|
-
|
|
|
-implementation
|
|
|
-
|
|
|
-end.
|