Browse Source

Create zgl_types.pas

Seenkao 3 years ago
parent
commit
3284414750
1 changed files with 383 additions and 0 deletions
  1. 383 0
      Zengl_SRC/src/zgl_types.pas

+ 383 - 0
Zengl_SRC/src/zgl_types.pas

@@ -0,0 +1,383 @@
+{
+ *  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.