mirror of
https://github.com/Relintai/sfw.git
synced 2024-12-20 21:06:49 +01:00
8404 lines
198 KiB
HTML
8404 lines
198 KiB
HTML
<meta charset="utf-8">
|
|
**Sample API Doc**
|
|
1.1 Release
|
|
|
|
|
|
This is the markdeep generic "Company API" template. Replace
|
|
`company-logo-512.png` with your organization's logo and adjust the
|
|
`company-api.css` styling to match the desired colors.
|
|
|
|
See `CA::OpenHandle()` for an example of an auto-generated API link.
|
|
The rest of the information on this page is bogus placeholder to show the formatting.
|
|
|
|
|
|
API Modules
|
|
====================================================================================
|
|
|
|
The CA library is a layer on top of the resource manager and parsing libraries that
|
|
provides utilities for streaming processing and client-side process construction.
|
|
|
|
|
|
ENUMS
|
|
====================================================================================
|
|
|
|
|
|
ClockDirection
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum ClockDirection {
|
|
CLOCKWISE,
|
|
COUNTERCLOCKWISE
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Orientation
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum Orientation {
|
|
|
|
HORIZONTAL,
|
|
VERTICAL
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
HAlign
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum HAlign {
|
|
|
|
HALIGN_LEFT,
|
|
HALIGN_CENTER,
|
|
HALIGN_RIGHT
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
VAlign
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum VAlign {
|
|
|
|
VALIGN_TOP,
|
|
VALIGN_CENTER,
|
|
VALIGN_BOTTOM
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Margin
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum Margin {
|
|
|
|
MARGIN_LEFT,
|
|
MARGIN_TOP,
|
|
MARGIN_RIGHT,
|
|
MARGIN_BOTTOM
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Side
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum Side {
|
|
SIDE_LEFT,
|
|
SIDE_TOP,
|
|
SIDE_RIGHT,
|
|
SIDE_BOTTOM
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Corner
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum Corner {
|
|
|
|
CORNER_TOP_LEFT,
|
|
CORNER_TOP_RIGHT,
|
|
CORNER_BOTTOM_RIGHT,
|
|
CORNER_BOTTOM_LEFT
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Error
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum Error {
|
|
OK,
|
|
FAILED,
|
|
ERR_UNAVAILABLE,
|
|
ERR_UNCONFIGURED,
|
|
ERR_UNAUTHORIZED,
|
|
ERR_PARAMETER_RANGE_ERROR,
|
|
ERR_OUT_OF_MEMORY,
|
|
ERR_FILE_NOT_FOUND,
|
|
ERR_FILE_BAD_DRIVE,
|
|
ERR_FILE_BAD_PATH,
|
|
ERR_FILE_NO_PERMISSION,
|
|
ERR_FILE_ALREADY_IN_USE,
|
|
ERR_FILE_CANT_OPEN,
|
|
ERR_FILE_CANT_WRITE,
|
|
ERR_FILE_CANT_READ,
|
|
ERR_FILE_UNRECOGNIZED,
|
|
ERR_FILE_CORRUPT,
|
|
ERR_FILE_MISSING_DEPENDENCIES,
|
|
ERR_FILE_EOF,
|
|
ERR_CANT_OPEN,
|
|
ERR_CANT_CREATE,
|
|
ERR_QUERY_FAILED,
|
|
ERR_ALREADY_IN_USE,
|
|
ERR_LOCKED,
|
|
ERR_TIMEOUT,
|
|
ERR_CANT_CONNECT,
|
|
ERR_CANT_RESOLVE,
|
|
ERR_CONNECTION_ERROR,
|
|
ERR_CANT_ACQUIRE_RESOURCE,
|
|
ERR_CANT_FORK,
|
|
ERR_INVALID_DATA,
|
|
ERR_INVALID_PARAMETER,
|
|
ERR_ALREADY_EXISTS,
|
|
ERR_DOES_NOT_EXIST,
|
|
ERR_DATABASE_CANT_READ,
|
|
ERR_DATABASE_CANT_WRITE,
|
|
ERR_COMPILATION_FAILED,
|
|
ERR_METHOD_NOT_FOUND,
|
|
ERR_LINK_FAILED,
|
|
ERR_SCRIPT_FAILED,
|
|
ERR_CYCLIC_LINK,
|
|
ERR_INVALID_DECLARATION,
|
|
ERR_DUPLICATE_SYMBOL,
|
|
ERR_PARSE_ERROR,
|
|
ERR_BUSY,
|
|
ERR_SKIP,
|
|
ERR_HELP,
|
|
ERR_BUG,
|
|
ERR_PRINTER_ON_FIRE,
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum {
|
|
|
|
POOL_ALLOCATOR_INVALID_ID = -1
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum {
|
|
KEYBOARD_SPKEY = (1 << 24)
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
KeyList
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum KeyList {
|
|
|
|
KEY_ESCAPE = KEYBOARD_SPKEY | 0x01,
|
|
KEY_TAB = KEYBOARD_SPKEY | 0x02,
|
|
KEY_BACKTAB = KEYBOARD_SPKEY | 0x03,
|
|
KEY_BACKSPACE = KEYBOARD_SPKEY | 0x04,
|
|
KEY_ENTER = KEYBOARD_SPKEY | 0x05,
|
|
KEY_KP_ENTER = KEYBOARD_SPKEY | 0x06,
|
|
KEY_INSERT = KEYBOARD_SPKEY | 0x07,
|
|
KEY_DELETE = KEYBOARD_SPKEY | 0x08,
|
|
KEY_PAUSE = KEYBOARD_SPKEY | 0x09,
|
|
KEY_PRINT = KEYBOARD_SPKEY | 0x0A,
|
|
KEY_SYSREQ = KEYBOARD_SPKEY | 0x0B,
|
|
KEY_CLEAR = KEYBOARD_SPKEY | 0x0C,
|
|
KEY_HOME = KEYBOARD_SPKEY | 0x0D,
|
|
KEY_END = KEYBOARD_SPKEY | 0x0E,
|
|
KEY_LEFT = KEYBOARD_SPKEY | 0x0F,
|
|
KEY_UP = KEYBOARD_SPKEY | 0x10,
|
|
KEY_RIGHT = KEYBOARD_SPKEY | 0x11,
|
|
KEY_DOWN = KEYBOARD_SPKEY | 0x12,
|
|
KEY_PAGEUP = KEYBOARD_SPKEY | 0x13,
|
|
KEY_PAGEDOWN = KEYBOARD_SPKEY | 0x14,
|
|
KEY_SHIFT = KEYBOARD_SPKEY | 0x15,
|
|
KEY_CONTROL = KEYBOARD_SPKEY | 0x16,
|
|
KEY_META = KEYBOARD_SPKEY | 0x17,
|
|
KEY_ALT = KEYBOARD_SPKEY | 0x18,
|
|
KEY_CAPSLOCK = KEYBOARD_SPKEY | 0x19,
|
|
KEY_NUMLOCK = KEYBOARD_SPKEY | 0x1A,
|
|
KEY_SCROLLLOCK = KEYBOARD_SPKEY | 0x1B,
|
|
KEY_F1 = KEYBOARD_SPKEY | 0x1C,
|
|
KEY_F2 = KEYBOARD_SPKEY | 0x1D,
|
|
KEY_F3 = KEYBOARD_SPKEY | 0x1E,
|
|
KEY_F4 = KEYBOARD_SPKEY | 0x1F,
|
|
KEY_F5 = KEYBOARD_SPKEY | 0x20,
|
|
KEY_F6 = KEYBOARD_SPKEY | 0x21,
|
|
KEY_F7 = KEYBOARD_SPKEY | 0x22,
|
|
KEY_F8 = KEYBOARD_SPKEY | 0x23,
|
|
KEY_F9 = KEYBOARD_SPKEY | 0x24,
|
|
KEY_F10 = KEYBOARD_SPKEY | 0x25,
|
|
KEY_F11 = KEYBOARD_SPKEY | 0x26,
|
|
KEY_F12 = KEYBOARD_SPKEY | 0x27,
|
|
KEY_F13 = KEYBOARD_SPKEY | 0x28,
|
|
KEY_F14 = KEYBOARD_SPKEY | 0x29,
|
|
KEY_F15 = KEYBOARD_SPKEY | 0x2A,
|
|
KEY_F16 = KEYBOARD_SPKEY | 0x2B,
|
|
KEY_KP_MULTIPLY = KEYBOARD_SPKEY | 0x81,
|
|
KEY_KP_DIVIDE = KEYBOARD_SPKEY | 0x82,
|
|
KEY_KP_SUBTRACT = KEYBOARD_SPKEY | 0x83,
|
|
KEY_KP_PERIOD = KEYBOARD_SPKEY | 0x84,
|
|
KEY_KP_ADD = KEYBOARD_SPKEY | 0x85,
|
|
KEY_KP_0 = KEYBOARD_SPKEY | 0x86,
|
|
KEY_KP_1 = KEYBOARD_SPKEY | 0x87,
|
|
KEY_KP_2 = KEYBOARD_SPKEY | 0x88,
|
|
KEY_KP_3 = KEYBOARD_SPKEY | 0x89,
|
|
KEY_KP_4 = KEYBOARD_SPKEY | 0x8A,
|
|
KEY_KP_5 = KEYBOARD_SPKEY | 0x8B,
|
|
KEY_KP_6 = KEYBOARD_SPKEY | 0x8C,
|
|
KEY_KP_7 = KEYBOARD_SPKEY | 0x8D,
|
|
KEY_KP_8 = KEYBOARD_SPKEY | 0x8E,
|
|
KEY_KP_9 = KEYBOARD_SPKEY | 0x8F,
|
|
KEY_SUPER_L = KEYBOARD_SPKEY | 0x2C,
|
|
KEY_SUPER_R = KEYBOARD_SPKEY | 0x2D,
|
|
KEY_MENU = KEYBOARD_SPKEY | 0x2E,
|
|
KEY_HYPER_L = KEYBOARD_SPKEY | 0x2F,
|
|
KEY_HYPER_R = KEYBOARD_SPKEY | 0x30,
|
|
KEY_HELP = KEYBOARD_SPKEY | 0x31,
|
|
KEY_DIRECTION_L = KEYBOARD_SPKEY | 0x32,
|
|
KEY_DIRECTION_R = KEYBOARD_SPKEY | 0x33,
|
|
KEY_BACK = KEYBOARD_SPKEY | 0x40,
|
|
KEY_FORWARD = KEYBOARD_SPKEY | 0x41,
|
|
KEY_STOP = KEYBOARD_SPKEY | 0x42,
|
|
KEY_REFRESH = KEYBOARD_SPKEY | 0x43,
|
|
KEY_VOLUMEDOWN = KEYBOARD_SPKEY | 0x44,
|
|
KEY_VOLUMEMUTE = KEYBOARD_SPKEY | 0x45,
|
|
KEY_VOLUMEUP = KEYBOARD_SPKEY | 0x46,
|
|
KEY_BASSBOOST = KEYBOARD_SPKEY | 0x47,
|
|
KEY_BASSUP = KEYBOARD_SPKEY | 0x48,
|
|
KEY_BASSDOWN = KEYBOARD_SPKEY | 0x49,
|
|
KEY_TREBLEUP = KEYBOARD_SPKEY | 0x4A,
|
|
KEY_TREBLEDOWN = KEYBOARD_SPKEY | 0x4B,
|
|
KEY_MEDIAPLAY = KEYBOARD_SPKEY | 0x4C,
|
|
KEY_MEDIASTOP = KEYBOARD_SPKEY | 0x4D,
|
|
KEY_MEDIAPREVIOUS = KEYBOARD_SPKEY | 0x4E,
|
|
KEY_MEDIANEXT = KEYBOARD_SPKEY | 0x4F,
|
|
KEY_MEDIARECORD = KEYBOARD_SPKEY | 0x50,
|
|
KEY_HOMEPAGE = KEYBOARD_SPKEY | 0x51,
|
|
KEY_FAVORITES = KEYBOARD_SPKEY | 0x52,
|
|
KEY_SEARCH = KEYBOARD_SPKEY | 0x53,
|
|
KEY_STANDBY = KEYBOARD_SPKEY | 0x54,
|
|
KEY_OPENURL = KEYBOARD_SPKEY | 0x55,
|
|
KEY_LAUNCHMAIL = KEYBOARD_SPKEY | 0x56,
|
|
KEY_LAUNCHMEDIA = KEYBOARD_SPKEY | 0x57,
|
|
KEY_LAUNCH0 = KEYBOARD_SPKEY | 0x58,
|
|
KEY_LAUNCH1 = KEYBOARD_SPKEY | 0x59,
|
|
KEY_LAUNCH2 = KEYBOARD_SPKEY | 0x5A,
|
|
KEY_LAUNCH3 = KEYBOARD_SPKEY | 0x5B,
|
|
KEY_LAUNCH4 = KEYBOARD_SPKEY | 0x5C,
|
|
KEY_LAUNCH5 = KEYBOARD_SPKEY | 0x5D,
|
|
KEY_LAUNCH6 = KEYBOARD_SPKEY | 0x5E,
|
|
KEY_LAUNCH7 = KEYBOARD_SPKEY | 0x5F,
|
|
KEY_LAUNCH8 = KEYBOARD_SPKEY | 0x60,
|
|
KEY_LAUNCH9 = KEYBOARD_SPKEY | 0x61,
|
|
KEY_LAUNCHA = KEYBOARD_SPKEY | 0x62,
|
|
KEY_LAUNCHB = KEYBOARD_SPKEY | 0x63,
|
|
KEY_LAUNCHC = KEYBOARD_SPKEY | 0x64,
|
|
KEY_LAUNCHD = KEYBOARD_SPKEY | 0x65,
|
|
KEY_LAUNCHE = KEYBOARD_SPKEY | 0x66,
|
|
KEY_LAUNCHF = KEYBOARD_SPKEY | 0x67,
|
|
|
|
KEY_UNKNOWN = KEYBOARD_SPKEY | 0xFFFFFF,
|
|
|
|
KEY_SPACE = 0x0020,
|
|
KEY_EXCLAM = 0x0021,
|
|
KEY_QUOTEDBL = 0x0022,
|
|
KEY_NUMBERSIGN = 0x0023,
|
|
KEY_DOLLAR = 0x0024,
|
|
KEY_PERCENT = 0x0025,
|
|
KEY_AMPERSAND = 0x0026,
|
|
KEY_APOSTROPHE = 0x0027,
|
|
KEY_PARENLEFT = 0x0028,
|
|
KEY_PARENRIGHT = 0x0029,
|
|
KEY_ASTERISK = 0x002A,
|
|
KEY_PLUS = 0x002B,
|
|
KEY_COMMA = 0x002C,
|
|
KEY_MINUS = 0x002D,
|
|
KEY_PERIOD = 0x002E,
|
|
KEY_SLASH = 0x002F,
|
|
KEY_0 = 0x0030,
|
|
KEY_1 = 0x0031,
|
|
KEY_2 = 0x0032,
|
|
KEY_3 = 0x0033,
|
|
KEY_4 = 0x0034,
|
|
KEY_5 = 0x0035,
|
|
KEY_6 = 0x0036,
|
|
KEY_7 = 0x0037,
|
|
KEY_8 = 0x0038,
|
|
KEY_9 = 0x0039,
|
|
KEY_COLON = 0x003A,
|
|
KEY_SEMICOLON = 0x003B,
|
|
KEY_LESS = 0x003C,
|
|
KEY_EQUAL = 0x003D,
|
|
KEY_GREATER = 0x003E,
|
|
KEY_QUESTION = 0x003F,
|
|
KEY_AT = 0x0040,
|
|
KEY_A = 0x0041,
|
|
KEY_B = 0x0042,
|
|
KEY_C = 0x0043,
|
|
KEY_D = 0x0044,
|
|
KEY_E = 0x0045,
|
|
KEY_F = 0x0046,
|
|
KEY_G = 0x0047,
|
|
KEY_H = 0x0048,
|
|
KEY_I = 0x0049,
|
|
KEY_J = 0x004A,
|
|
KEY_K = 0x004B,
|
|
KEY_L = 0x004C,
|
|
KEY_M = 0x004D,
|
|
KEY_N = 0x004E,
|
|
KEY_O = 0x004F,
|
|
KEY_P = 0x0050,
|
|
KEY_Q = 0x0051,
|
|
KEY_R = 0x0052,
|
|
KEY_S = 0x0053,
|
|
KEY_T = 0x0054,
|
|
KEY_U = 0x0055,
|
|
KEY_V = 0x0056,
|
|
KEY_W = 0x0057,
|
|
KEY_X = 0x0058,
|
|
KEY_Y = 0x0059,
|
|
KEY_Z = 0x005A,
|
|
KEY_BRACKETLEFT = 0x005B,
|
|
KEY_BACKSLASH = 0x005C,
|
|
KEY_BRACKETRIGHT = 0x005D,
|
|
KEY_ASCIICIRCUM = 0x005E,
|
|
KEY_UNDERSCORE = 0x005F,
|
|
KEY_QUOTELEFT = 0x0060,
|
|
KEY_BRACELEFT = 0x007B,
|
|
KEY_BAR = 0x007C,
|
|
KEY_BRACERIGHT = 0x007D,
|
|
KEY_ASCIITILDE = 0x007E,
|
|
KEY_NOBREAKSPACE = 0x00A0,
|
|
KEY_EXCLAMDOWN = 0x00A1,
|
|
KEY_CENT = 0x00A2,
|
|
KEY_STERLING = 0x00A3,
|
|
KEY_CURRENCY = 0x00A4,
|
|
KEY_YEN = 0x00A5,
|
|
KEY_BROKENBAR = 0x00A6,
|
|
KEY_SECTION = 0x00A7,
|
|
KEY_DIAERESIS = 0x00A8,
|
|
KEY_COPYRIGHT = 0x00A9,
|
|
KEY_ORDFEMININE = 0x00AA,
|
|
KEY_GUILLEMOTLEFT = 0x00AB,
|
|
KEY_NOTSIGN = 0x00AC,
|
|
KEY_HYPHEN = 0x00AD,
|
|
KEY_REGISTERED = 0x00AE,
|
|
KEY_MACRON = 0x00AF,
|
|
KEY_DEGREE = 0x00B0,
|
|
KEY_PLUSMINUS = 0x00B1,
|
|
KEY_TWOSUPERIOR = 0x00B2,
|
|
KEY_THREESUPERIOR = 0x00B3,
|
|
KEY_ACUTE = 0x00B4,
|
|
KEY_MU = 0x00B5,
|
|
KEY_PARAGRAPH = 0x00B6,
|
|
KEY_PERIODCENTERED = 0x00B7,
|
|
KEY_CEDILLA = 0x00B8,
|
|
KEY_ONESUPERIOR = 0x00B9,
|
|
KEY_MASCULINE = 0x00BA,
|
|
KEY_GUILLEMOTRIGHT = 0x00BB,
|
|
KEY_ONEQUARTER = 0x00BC,
|
|
KEY_ONEHALF = 0x00BD,
|
|
KEY_THREEQUARTERS = 0x00BE,
|
|
KEY_QUESTIONDOWN = 0x00BF,
|
|
KEY_AGRAVE = 0x00C0,
|
|
KEY_AACUTE = 0x00C1,
|
|
KEY_ACIRCUMFLEX = 0x00C2,
|
|
KEY_ATILDE = 0x00C3,
|
|
KEY_ADIAERESIS = 0x00C4,
|
|
KEY_ARING = 0x00C5,
|
|
KEY_AE = 0x00C6,
|
|
KEY_CCEDILLA = 0x00C7,
|
|
KEY_EGRAVE = 0x00C8,
|
|
KEY_EACUTE = 0x00C9,
|
|
KEY_ECIRCUMFLEX = 0x00CA,
|
|
KEY_EDIAERESIS = 0x00CB,
|
|
KEY_IGRAVE = 0x00CC,
|
|
KEY_IACUTE = 0x00CD,
|
|
KEY_ICIRCUMFLEX = 0x00CE,
|
|
KEY_IDIAERESIS = 0x00CF,
|
|
KEY_ETH = 0x00D0,
|
|
KEY_NTILDE = 0x00D1,
|
|
KEY_OGRAVE = 0x00D2,
|
|
KEY_OACUTE = 0x00D3,
|
|
KEY_OCIRCUMFLEX = 0x00D4,
|
|
KEY_OTILDE = 0x00D5,
|
|
KEY_ODIAERESIS = 0x00D6,
|
|
KEY_MULTIPLY = 0x00D7,
|
|
KEY_OOBLIQUE = 0x00D8,
|
|
KEY_UGRAVE = 0x00D9,
|
|
KEY_UACUTE = 0x00DA,
|
|
KEY_UCIRCUMFLEX = 0x00DB,
|
|
KEY_UDIAERESIS = 0x00DC,
|
|
KEY_YACUTE = 0x00DD,
|
|
KEY_THORN = 0x00DE,
|
|
KEY_SSHARP = 0x00DF,
|
|
|
|
KEY_DIVISION = 0x00F7,
|
|
KEY_YDIAERESIS = 0x00FF,
|
|
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
KeyModifierMask
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum KeyModifierMask {
|
|
|
|
KEY_CODE_MASK = ((1 << 25) - 1),
|
|
KEY_MODIFIER_MASK = (0xFF << 24),
|
|
KEY_MASK_SHIFT = (1 << 25),
|
|
KEY_MASK_ALT = (1 << 26),
|
|
KEY_MASK_META = (1 << 27),
|
|
KEY_MASK_CTRL = (1 << 28),
|
|
#ifdef APPLE_STYLE_KEYS
|
|
KEY_MASK_CMD = KEY_MASK_META,
|
|
#else
|
|
KEY_MASK_CMD = KEY_MASK_CTRL,
|
|
#endif
|
|
|
|
KEY_MASK_KPAD = (1 << 29),
|
|
KEY_MASK_GROUP_SWITCH = (1 << 30)
|
|
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
ButtonList
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
enum ButtonList {
|
|
BUTTON_LEFT = 1,
|
|
BUTTON_RIGHT = 2,
|
|
BUTTON_MIDDLE = 3,
|
|
BUTTON_WHEEL_UP = 4,
|
|
BUTTON_WHEEL_DOWN = 5,
|
|
BUTTON_WHEEL_LEFT = 6,
|
|
BUTTON_WHEEL_RIGHT = 7,
|
|
BUTTON_XBUTTON1 = 8,
|
|
BUTTON_XBUTTON2 = 9,
|
|
BUTTON_MASK_LEFT = (1 << (BUTTON_LEFT - 1)),
|
|
BUTTON_MASK_RIGHT = (1 << (BUTTON_RIGHT - 1)),
|
|
BUTTON_MASK_MIDDLE = (1 << (BUTTON_MIDDLE - 1)),
|
|
BUTTON_MASK_XBUTTON1 = (1 << (BUTTON_XBUTTON1 - 1)),
|
|
BUTTON_MASK_XBUTTON2 = (1 << (BUTTON_XBUTTON2 - 1))
|
|
};
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
STRUCTS
|
|
====================================================================================
|
|
|
|
|
|
Comparator
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Comparator {
|
|
_ALWAYS_INLINE_ bool operator();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
_GlobalLock
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct _GlobalLock {
|
|
_GlobalLock();
|
|
~_GlobalLock();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
_GlobalNil
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct _GlobalNil {
|
|
int color;
|
|
_GlobalNil *right;
|
|
_GlobalNil *left;
|
|
_GlobalNil *parent;
|
|
|
|
_GlobalNil();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
_GlobalNilClass
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct _GlobalNilClass {
|
|
static _GlobalNil _nil;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
_DefaultComparator
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct _DefaultComparator {
|
|
bool operator();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
CharRange
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct CharRange {
|
|
char32_t start;
|
|
char32_t end;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
StrRange
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct StrRange {
|
|
const CharType *c_str;
|
|
int len;
|
|
|
|
StrRange(const CharType *p_c_str = nullptr, int p_len = 0);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
NoCaseComparator
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct NoCaseComparator {
|
|
bool operator();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
NaturalNoCaseComparator
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct NaturalNoCaseComparator {
|
|
bool operator();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
StaticCString
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct StaticCString {
|
|
const char *ptr;
|
|
static StaticCString create(const char *p_ptr);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
MemoryPool
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct MemoryPool {
|
|
|
|
static PoolAllocator *memory_pool;
|
|
static uint8_t *pool_memory;
|
|
static size_t *pool_size;
|
|
|
|
struct Alloc {
|
|
SafeRefCount refcount;
|
|
SafeNumeric<uint32_t> lock;
|
|
void *mem;
|
|
PoolAllocator::ID pool_id;
|
|
size_t size;
|
|
|
|
Alloc *free_list;
|
|
|
|
Alloc();
|
|
};
|
|
|
|
static Alloc *allocs;
|
|
static Alloc *free_list;
|
|
static uint32_t alloc_count;
|
|
static uint32_t allocs_used;
|
|
static Mutex alloc_mutex;
|
|
static size_t total_memory;
|
|
static size_t max_memory;
|
|
|
|
static void setup(uint32_t p_max_allocs = (1 << 16);
|
|
static void cleanup();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Color
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Color {
|
|
union {
|
|
struct {
|
|
float r;
|
|
float g;
|
|
float b;
|
|
float a;
|
|
};
|
|
float components[4];
|
|
};
|
|
|
|
bool operator==(const Color &p_color);
|
|
bool operator!=(const Color &p_color);
|
|
|
|
uint32_t to_rgba32();
|
|
uint32_t to_argb32();
|
|
uint32_t to_abgr32();
|
|
uint64_t to_rgba64();
|
|
uint64_t to_argb64();
|
|
uint64_t to_abgr64();
|
|
float get_h();
|
|
float get_s();
|
|
float get_v();
|
|
void set_hsv(float p_h, float p_s, float p_v, float p_alpha = 1.0);
|
|
|
|
float &operator[](int idx);
|
|
const float &operator[](int idx);
|
|
|
|
Color operator+(const Color &p_color);
|
|
void operator+=(const Color &p_color);
|
|
|
|
Color operator-();
|
|
Color operator-(const Color &p_color);
|
|
void operator-=(const Color &p_color);
|
|
|
|
Color operator*(const Color &p_color);
|
|
Color operator*(const real_t &rvalue);
|
|
void operator*=(const Color &p_color);
|
|
void operator*=(const real_t &rvalue);
|
|
|
|
Color operator/(const Color &p_color);
|
|
Color operator/(const real_t &rvalue);
|
|
void operator/=(const Color &p_color);
|
|
void operator/=(const real_t &rvalue);
|
|
|
|
bool is_equal_approx(const Color &p_color);
|
|
|
|
Color clamp(const Color &p_min = Color(0, 0, 0, 0);
|
|
|
|
void invert();
|
|
void contrast();
|
|
Color inverted();
|
|
Color contrasted();
|
|
|
|
float get_luminance();
|
|
|
|
Color linear_interpolate(const Color &p_to, float p_weight);
|
|
|
|
Color darkened(float p_amount);
|
|
|
|
Color lightened(float p_amount);
|
|
|
|
uint32_t to_rgbe9995();
|
|
|
|
Color blend(const Color &p_over);
|
|
|
|
Color to_linear();
|
|
Color to_srgb();
|
|
|
|
static Color hex(uint32_t p_hex);
|
|
static Color hex64(uint64_t p_hex);
|
|
static Color html(const String &p_color);
|
|
static bool html_is_valid(const String &p_color);
|
|
String to_html(bool p_alpha = true);
|
|
Color from_hsv(float p_h, float p_s, float p_v, float p_a);
|
|
static Color from_rgbe9995(uint32_t p_rgbe);
|
|
|
|
bool operator<(const Color &p_color);
|
|
operator String();
|
|
|
|
static Color color8(int r, int g, int b);
|
|
|
|
static Color color8(int r, int g, int b, int a);
|
|
|
|
void set_r8(int32_t r8);
|
|
int32_t get_r8();
|
|
void set_g8(int32_t g8);
|
|
int32_t get_g8();
|
|
void set_b8(int32_t b8);
|
|
int32_t get_b8();
|
|
void set_a8(int32_t a8);
|
|
int32_t get_a8();
|
|
|
|
void set_h(float p_h);
|
|
void set_s(float p_s);
|
|
void set_v(float p_v);
|
|
|
|
Color();
|
|
|
|
Color(float p_r, float p_g, float p_b, float p_a = 1.0);
|
|
|
|
Color(const Color &p_c, float p_a);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Vector2
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Vector2 {
|
|
static const int AXIS_COUNT = 2;
|
|
|
|
enum Axis {
|
|
AXIS_X,
|
|
AXIS_Y,
|
|
};
|
|
|
|
union {
|
|
struct {
|
|
union {
|
|
real_t x;
|
|
real_t width;
|
|
};
|
|
union {
|
|
real_t y;
|
|
real_t height;
|
|
};
|
|
};
|
|
|
|
real_t coord[2];
|
|
};
|
|
|
|
real_t &operator[](int p_idx);
|
|
const real_t &operator[](int p_idx);
|
|
|
|
void set_all(real_t p_value);
|
|
|
|
int min_axis();
|
|
|
|
int max_axis();
|
|
|
|
void normalize();
|
|
Vector2 normalized();
|
|
bool is_normalized();
|
|
|
|
real_t length();
|
|
real_t length_squared();
|
|
Vector2 limit_length(const real_t p_len = 1.0);
|
|
|
|
Vector2 min(const Vector2 &p_vector2);
|
|
|
|
Vector2 max(const Vector2 &p_vector2);
|
|
|
|
real_t distance_to(const Vector2 &p_vector2);
|
|
real_t distance_squared_to(const Vector2 &p_vector2);
|
|
real_t angle_to(const Vector2 &p_vector2);
|
|
real_t angle_to_point(const Vector2 &p_vector2);
|
|
Vector2 direction_to(const Vector2 &p_to);
|
|
|
|
real_t dot(const Vector2 &p_other);
|
|
real_t cross(const Vector2 &p_other);
|
|
Vector2 posmod(const real_t p_mod);
|
|
Vector2 posmodv(const Vector2 &p_modv);
|
|
Vector2 project(const Vector2 &p_to);
|
|
|
|
Vector2 plane_project(real_t p_d, const Vector2 &p_vec);
|
|
|
|
static Vector2 linear_interpolate(const Vector2 &p_a, const Vector2 &p_b, real_t p_weight);
|
|
Vector2 linear_interpolate(const Vector2 &p_to, real_t p_weight);
|
|
Vector2 slerp(const Vector2 &p_to, real_t p_weight);
|
|
Vector2 cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, const Vector2 &p_post_b, real_t p_weight);
|
|
Vector2 bezier_interpolate(const Vector2 &p_control_1, const Vector2 &p_control_2, const Vector2 &p_end, const real_t p_t);
|
|
|
|
Vector2 move_toward(const Vector2 &p_to, const real_t p_delta);
|
|
|
|
Vector2 slide(const Vector2 &p_normal);
|
|
Vector2 bounce(const Vector2 &p_normal);
|
|
Vector2 reflect(const Vector2 &p_normal);
|
|
|
|
bool is_equal_approx(const Vector2 &p_v);
|
|
|
|
Vector2 operator+(const Vector2 &p_v);
|
|
void operator+=(const Vector2 &p_v);
|
|
Vector2 operator-(const Vector2 &p_v);
|
|
void operator-=(const Vector2 &p_v);
|
|
Vector2 operator*(const Vector2 &p_v1);
|
|
|
|
Vector2 operator*(const real_t &rvalue);
|
|
void operator*=(const real_t &rvalue);
|
|
void operator*=(const Vector2 &rvalue);
|
|
|
|
Vector2 operator/(const Vector2 &p_v1);
|
|
|
|
Vector2 operator/(const real_t &rvalue);
|
|
|
|
void operator/=(const real_t &rvalue);
|
|
void operator/=(const Vector2 &rvalue);
|
|
|
|
Vector2 operator-();
|
|
|
|
bool operator==(const Vector2 &p_vec2);
|
|
bool operator!=(const Vector2 &p_vec2);
|
|
|
|
bool operator<(const Vector2 &p_vec2);
|
|
bool operator>(const Vector2 &p_vec2);
|
|
bool operator<=(const Vector2 &p_vec2);
|
|
bool operator>=(const Vector2 &p_vec2);
|
|
|
|
real_t angle();
|
|
|
|
void set_rotation(real_t p_radians);
|
|
|
|
Vector2 abs();
|
|
|
|
Vector2 rotated(real_t p_by);
|
|
Vector2 tangent();
|
|
Vector2 orthogonal();
|
|
|
|
Vector2 sign();
|
|
Vector2 floor();
|
|
Vector2 ceil();
|
|
Vector2 round();
|
|
Vector2 snapped(const Vector2 &p_by);
|
|
real_t aspect();
|
|
|
|
operator String();
|
|
|
|
Vector2(real_t p_x, real_t p_y);
|
|
Vector2();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Vector2i
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Vector2i {
|
|
enum Axis {
|
|
AXIS_X,
|
|
AXIS_Y,
|
|
};
|
|
|
|
union {
|
|
struct {
|
|
union {
|
|
int x;
|
|
int width;
|
|
};
|
|
union {
|
|
int y;
|
|
int height;
|
|
};
|
|
};
|
|
|
|
int coord[2];
|
|
};
|
|
|
|
int &operator[](int p_idx);
|
|
const int &operator[](int p_idx);
|
|
|
|
void set_all(int p_value);
|
|
|
|
int min_axis();
|
|
|
|
int max_axis();
|
|
|
|
Vector2i min(const Vector2i &p_vector2i);
|
|
|
|
Vector2i max(const Vector2i &p_vector2i);
|
|
|
|
static Vector2i linear_interpolate(const Vector2i &p_a, const Vector2i &p_b, real_t p_weight);
|
|
Vector2i linear_interpolate(const Vector2i &p_to, real_t p_weight);
|
|
|
|
Vector2i operator+(const Vector2i &p_v);
|
|
void operator+=(const Vector2i &p_v);
|
|
Vector2i operator-(const Vector2i &p_v);
|
|
void operator-=(const Vector2i &p_v);
|
|
Vector2i operator*(const Vector2i &p_v1);
|
|
|
|
Vector2i operator*(const int &rvalue);
|
|
void operator*=(const int &rvalue);
|
|
|
|
Vector2i operator/(const Vector2i &p_v1);
|
|
|
|
Vector2i operator/(const int &rvalue);
|
|
|
|
void operator/=(const int &rvalue);
|
|
|
|
Vector2i operator-();
|
|
bool operator<(const Vector2i &p_vec2);
|
|
bool operator>(const Vector2i &p_vec2);
|
|
bool operator<=(const Vector2 &p_vec2);
|
|
bool operator>=(const Vector2 &p_vec2);
|
|
|
|
bool operator==(const Vector2i &p_vec2);
|
|
bool operator!=(const Vector2i &p_vec2);
|
|
|
|
int64_t length_squared();
|
|
double length();
|
|
|
|
real_t aspect();
|
|
Vector2i sign();
|
|
Vector2i abs();
|
|
Vector2i clamp(const Vector2i &p_min, const Vector2i &p_max);
|
|
|
|
Vector2 to_vector2();
|
|
|
|
operator String();
|
|
operator Vector2();
|
|
|
|
Vector2i(const Vector2 &p_vec2);
|
|
Vector2i(int p_x, int p_y);
|
|
Vector2i();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Rect2
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Rect2 {
|
|
Point2 position;
|
|
Size2 size;
|
|
|
|
const Vector2 &get_position();
|
|
void set_position(const Vector2 &p_pos);
|
|
const Vector2 &get_size();
|
|
void set_size(const Vector2 &p_size);
|
|
|
|
real_t get_area();
|
|
|
|
Vector2 get_center();
|
|
|
|
bool intersects(const Rect2 &p_rect, const bool p_include_borders = false);
|
|
|
|
real_t distance_to(const Vector2 &p_point);
|
|
|
|
bool intersects_transformed(const Transform2D &p_xform, const Rect2 &p_rect);
|
|
|
|
bool intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2 *r_pos = nullptr, Point2 *r_normal = nullptr);
|
|
|
|
bool encloses(const Rect2 &p_rect);
|
|
|
|
bool has_no_area();
|
|
Rect2 clip(const Rect2 &p_rect);
|
|
|
|
Rect2 intersection(const Rect2 &p_rect);
|
|
|
|
Rect2 merge(const Rect2 &p_rect);
|
|
bool has_point(const Point2 &p_point);
|
|
bool is_equal_approx(const Rect2 &p_rect);
|
|
|
|
bool operator==(const Rect2 &p_rect);
|
|
bool operator!=(const Rect2 &p_rect);
|
|
|
|
Rect2 grow(real_t p_by);
|
|
|
|
void grow_by(real_t p_by);
|
|
|
|
Rect2 grow_margin(Margin p_margin, real_t p_amount);
|
|
|
|
Rect2 grow_side(Side p_side, real_t p_amount);
|
|
|
|
Rect2 grow_individual(real_t p_left, real_t p_top, real_t p_right, real_t p_bottom);
|
|
|
|
Rect2 expand(const Vector2 &p_vector);
|
|
|
|
void expand_to(const Vector2 &p_vector);
|
|
|
|
Rect2 abs();
|
|
|
|
Vector2 get_support(const Vector2 &p_normal);
|
|
|
|
bool intersects_filled_polygon(const Vector2 *p_points, int p_point_count);
|
|
|
|
void set_end(const Vector2 &p_end);
|
|
|
|
Vector2 get_end();
|
|
|
|
operator String();
|
|
|
|
Rect2();
|
|
Rect2(real_t p_x, real_t p_y, real_t p_width, real_t p_height);
|
|
Rect2(const Point2 &p_pos, const Size2 &p_size);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Rect2i
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Rect2i {
|
|
Point2i position;
|
|
Size2i size;
|
|
|
|
const Point2i &get_position();
|
|
void set_position(const Point2i &p_position);
|
|
const Size2i &get_size();
|
|
void set_size(const Size2i &p_size);
|
|
|
|
int get_area();
|
|
|
|
Vector2i get_center();
|
|
|
|
bool intersects(const Rect2i &p_rect);
|
|
|
|
bool encloses(const Rect2i &p_rect);
|
|
|
|
bool has_no_area();
|
|
|
|
Rect2i clip(const Rect2i &p_rect);
|
|
|
|
Rect2i intersection(const Rect2i &p_rect);
|
|
|
|
Rect2i merge(const Rect2i &p_rect);
|
|
|
|
bool has_point(const Point2i &p_point);
|
|
|
|
bool operator==(const Rect2i &p_rect);
|
|
bool operator!=(const Rect2i &p_rect);
|
|
|
|
Rect2i grow(int p_by);
|
|
|
|
void grow_by(int p_by);
|
|
|
|
Rect2i grow_margin(Margin p_margin, int p_amount);
|
|
|
|
Rect2i grow_side(Side p_side, int p_amount);
|
|
|
|
Rect2i grow_individual(int p_left, int p_top, int p_right, int p_bottom);
|
|
|
|
Rect2i expand(const Vector2i &p_vector);
|
|
|
|
void expand_to(const Point2i &p_vector);
|
|
|
|
Rect2i abs();
|
|
|
|
void set_end(const Vector2i &p_end);
|
|
|
|
Vector2i get_end();
|
|
|
|
Rect2 to_rect2();
|
|
|
|
operator String();
|
|
operator Rect2();
|
|
|
|
Rect2i(const Rect2 &p_r2);
|
|
Rect2i();
|
|
Rect2i(int p_x, int p_y, int p_width, int p_height);
|
|
Rect2i(const Point2 &p_pos, const Size2 &p_size);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Vector3
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Vector3 {
|
|
static const int AXIS_COUNT = 3;
|
|
|
|
enum Axis {
|
|
AXIS_X,
|
|
AXIS_Y,
|
|
AXIS_Z,
|
|
};
|
|
|
|
union {
|
|
struct {
|
|
real_t x;
|
|
real_t y;
|
|
real_t z;
|
|
};
|
|
|
|
real_t coord[3];
|
|
};
|
|
|
|
const real_t &operator[](int p_axis);
|
|
|
|
real_t &operator[](int p_axis);
|
|
|
|
void set_axis(int p_axis, real_t p_value);
|
|
real_t get_axis(int p_axis);
|
|
|
|
void set_all(real_t p_value);
|
|
|
|
int min_axis();
|
|
|
|
int max_axis();
|
|
|
|
real_t length();
|
|
real_t length_squared();
|
|
|
|
void normalize();
|
|
Vector3 normalized();
|
|
bool is_normalized();
|
|
Vector3 inverse();
|
|
Vector3 limit_length(const real_t p_len = 1.0);
|
|
|
|
void zero();
|
|
|
|
void snap(const Vector3 &p_val);
|
|
Vector3 snapped(const Vector3 &p_val);
|
|
|
|
void rotate(const Vector3 &p_axis, real_t p_phi);
|
|
Vector3 rotated(const Vector3 &p_axis, real_t p_phi);
|
|
|
|
Vector3 linear_interpolate(const Vector3 &p_to, real_t p_weight);
|
|
Vector3 slerp(const Vector3 &p_to, real_t p_weight);
|
|
Vector3 cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, real_t p_weight);
|
|
Vector3 bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, const real_t p_t);
|
|
|
|
Vector3 move_toward(const Vector3 &p_to, const real_t p_delta);
|
|
|
|
Vector3 cross(const Vector3 &p_b);
|
|
real_t dot(const Vector3 &p_b);
|
|
Basis outer(const Vector3 &p_b);
|
|
Basis to_diagonal_matrix();
|
|
|
|
Vector3 abs();
|
|
Vector3 floor();
|
|
Vector3 sign();
|
|
Vector3 ceil();
|
|
Vector3 round();
|
|
Vector3 clamp(const Vector3 &p_min, const Vector3 &p_max);
|
|
|
|
real_t distance_to(const Vector3 &p_to);
|
|
real_t distance_squared_to(const Vector3 &p_to);
|
|
|
|
Vector3 posmod(const real_t p_mod);
|
|
Vector3 posmodv(const Vector3 &p_modv);
|
|
Vector3 project(const Vector3 &p_to);
|
|
|
|
real_t angle_to(const Vector3 &p_to);
|
|
real_t signed_angle_to(const Vector3 &p_to, const Vector3 &p_axis);
|
|
Vector3 direction_to(const Vector3 &p_to);
|
|
|
|
Vector3 slide(const Vector3 &p_normal);
|
|
Vector3 bounce(const Vector3 &p_normal);
|
|
Vector3 reflect(const Vector3 &p_normal);
|
|
|
|
bool is_equal_approx(const Vector3 &p_v);
|
|
bool is_equal_approx(const Vector3 &p_v, real_t p_tolerance);
|
|
bool is_equal_approxt(const Vector3 &p_v, real_t p_tolerance);
|
|
|
|
Vector3 &operator+=(const Vector3 &p_v);
|
|
Vector3 operator+(const Vector3 &p_v);
|
|
Vector3 &operator-=(const Vector3 &p_v);
|
|
Vector3 operator-(const Vector3 &p_v);
|
|
Vector3 &operator*=(const Vector3 &p_v);
|
|
Vector3 operator*(const Vector3 &p_v);
|
|
Vector3 &operator/=(const Vector3 &p_v);
|
|
Vector3 operator/(const Vector3 &p_v);
|
|
|
|
Vector3 &operator*=(real_t p_scalar);
|
|
Vector3 operator*(real_t p_scalar);
|
|
Vector3 &operator/=(real_t p_scalar);
|
|
Vector3 operator/(real_t p_scalar);
|
|
|
|
Vector3 operator-();
|
|
|
|
bool operator==(const Vector3 &p_v);
|
|
bool operator!=(const Vector3 &p_v);
|
|
bool operator<(const Vector3 &p_v);
|
|
bool operator<=(const Vector3 &p_v);
|
|
bool operator>(const Vector3 &p_v);
|
|
bool operator>=(const Vector3 &p_v);
|
|
|
|
operator String();
|
|
|
|
Vector3(real_t p_x, real_t p_y, real_t p_z);
|
|
Vector3();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Vector3i
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Vector3i {
|
|
enum Axis {
|
|
AXIS_X,
|
|
AXIS_Y,
|
|
AXIS_Z,
|
|
};
|
|
|
|
union {
|
|
struct {
|
|
int32_t x;
|
|
int32_t y;
|
|
int32_t z;
|
|
};
|
|
|
|
int32_t coord[3];
|
|
};
|
|
|
|
const int32_t &operator[](const int p_axis);
|
|
|
|
int32_t &operator[](const int p_axis);
|
|
|
|
void set_axis(const int p_axis, const int32_t p_value);
|
|
int32_t get_axis(const int p_axis);
|
|
|
|
void set_all(int32_t p_value);
|
|
|
|
Vector3i::Axis min_axis();
|
|
Vector3i::Axis max_axis();
|
|
|
|
int64_t length_squared();
|
|
double length();
|
|
|
|
void zero();
|
|
|
|
Vector3i abs();
|
|
Vector3i sign();
|
|
Vector3i clamp(const Vector3i &p_min, const Vector3i &p_max);
|
|
|
|
Vector3i linear_interpolate(const Vector3i &p_to, real_t p_weight);
|
|
|
|
Vector3i &operator+=(const Vector3i &p_v);
|
|
Vector3i operator+(const Vector3i &p_v);
|
|
Vector3i &operator-=(const Vector3i &p_v);
|
|
Vector3i operator-(const Vector3i &p_v);
|
|
Vector3i &operator*=(const Vector3i &p_v);
|
|
Vector3i operator*(const Vector3i &p_v);
|
|
Vector3i &operator/=(const Vector3i &p_v);
|
|
Vector3i operator/(const Vector3i &p_v);
|
|
Vector3i &operator%=(const Vector3i &p_v);
|
|
Vector3i operator%(const Vector3i &p_v);
|
|
|
|
Vector3i &operator*=(const int32_t p_scalar);
|
|
Vector3i operator*(const int32_t p_scalar);
|
|
Vector3i &operator/=(const int32_t p_scalar);
|
|
Vector3i operator/(const int32_t p_scalar);
|
|
Vector3i &operator%=(const int32_t p_scalar);
|
|
Vector3i operator%(const int32_t p_scalar);
|
|
|
|
Vector3i operator-();
|
|
|
|
bool operator==(const Vector3i &p_v);
|
|
bool operator!=(const Vector3i &p_v);
|
|
bool operator<(const Vector3i &p_v);
|
|
bool operator<=(const Vector3i &p_v);
|
|
bool operator>(const Vector3i &p_v);
|
|
bool operator>=(const Vector3i &p_v);
|
|
|
|
Vector3 to_vector3();
|
|
|
|
operator String();
|
|
operator Vector3();
|
|
|
|
Vector3i();
|
|
Vector3i(const int32_t p_x, const int32_t p_y, const int32_t p_z);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Vector4
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Vector4 {
|
|
enum Axis {
|
|
AXIS_X,
|
|
AXIS_Y,
|
|
AXIS_Z,
|
|
AXIS_W,
|
|
};
|
|
|
|
union {
|
|
struct {
|
|
real_t x;
|
|
real_t y;
|
|
real_t z;
|
|
real_t w;
|
|
};
|
|
real_t components[4];
|
|
};
|
|
|
|
real_t &operator[](const int p_axis);
|
|
const real_t &operator[](const int p_axis);
|
|
|
|
void set_all(const real_t p_value);
|
|
|
|
void set_axis(const int p_axis, const real_t p_value);
|
|
real_t get_axis(const int p_axis);
|
|
|
|
Vector4::Axis min_axis();
|
|
Vector4::Axis max_axis();
|
|
|
|
real_t length_squared();
|
|
bool is_equal_approx(const Vector4 &p_vec4);
|
|
real_t length();
|
|
void normalize();
|
|
Vector4 normalized();
|
|
bool is_normalized();
|
|
Vector4 limit_length(const real_t p_len = 1.0);
|
|
|
|
void zero();
|
|
|
|
real_t distance_to(const Vector4 &p_to);
|
|
real_t distance_squared_to(const Vector4 &p_to);
|
|
Vector4 direction_to(const Vector4 &p_to);
|
|
|
|
Vector4 abs();
|
|
Vector4 sign();
|
|
Vector4 floor();
|
|
Vector4 ceil();
|
|
Vector4 round();
|
|
|
|
Vector4 linear_interpolate(const Vector4 &p_to, const real_t p_weight);
|
|
Vector4 cubic_interpolate(const Vector4 &p_b, const Vector4 &p_pre_a, const Vector4 &p_post_b, const real_t p_weight);
|
|
|
|
Vector4 posmod(const real_t p_mod);
|
|
Vector4 posmodv(const Vector4 &p_modv);
|
|
void snap(const Vector4 &p_step);
|
|
Vector4 snapped(const Vector4 &p_step);
|
|
Vector4 clamp(const Vector4 &p_min, const Vector4 &p_max);
|
|
|
|
Vector4 inverse();
|
|
real_t dot(const Vector4 &p_vec4);
|
|
|
|
void operator+=(const Vector4 &p_vec4);
|
|
void operator-=(const Vector4 &p_vec4);
|
|
void operator*=(const Vector4 &p_vec4);
|
|
void operator/=(const Vector4 &p_vec4);
|
|
void operator*=(const real_t &s);
|
|
void operator/=(const real_t &s);
|
|
Vector4 operator+(const Vector4 &p_vec4);
|
|
Vector4 operator-(const Vector4 &p_vec4);
|
|
Vector4 operator*(const Vector4 &p_vec4);
|
|
Vector4 operator/(const Vector4 &p_vec4);
|
|
Vector4 operator-();
|
|
Vector4 operator*(const real_t &s);
|
|
Vector4 operator/(const real_t &s);
|
|
|
|
bool operator==(const Vector4 &p_vec4);
|
|
bool operator!=(const Vector4 &p_vec4);
|
|
bool operator>(const Vector4 &p_vec4);
|
|
bool operator<(const Vector4 &p_vec4);
|
|
bool operator>=(const Vector4 &p_vec4);
|
|
bool operator<=(const Vector4 &p_vec4);
|
|
|
|
operator String();
|
|
|
|
Vector4();
|
|
|
|
Vector4(real_t p_x, real_t p_y, real_t p_z, real_t p_w);
|
|
|
|
Vector4(const Vector4 &p_vec4);
|
|
|
|
void operator=(const Vector4 &p_vec4);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Vector4i
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Vector4i {
|
|
enum Axis {
|
|
AXIS_X,
|
|
AXIS_Y,
|
|
AXIS_Z,
|
|
AXIS_W,
|
|
};
|
|
|
|
union {
|
|
struct {
|
|
int32_t x;
|
|
int32_t y;
|
|
int32_t z;
|
|
int32_t w;
|
|
};
|
|
|
|
int32_t coord[4];
|
|
};
|
|
|
|
const int32_t &operator[](const int p_axis);
|
|
|
|
int32_t &operator[](const int p_axis);
|
|
|
|
void set_all(const int32_t p_value);
|
|
|
|
void set_axis(const int p_axis, const int32_t p_value);
|
|
int32_t get_axis(const int p_axis);
|
|
|
|
Vector4i::Axis min_axis();
|
|
Vector4i::Axis max_axis();
|
|
|
|
int64_t length_squared();
|
|
double length();
|
|
|
|
void zero();
|
|
|
|
Vector4i abs();
|
|
Vector4i sign();
|
|
Vector4i clamp(const Vector4i &p_min, const Vector4i &p_max);
|
|
|
|
Vector4i linear_interpolate(const Vector4i &p_to, const real_t p_weight);
|
|
|
|
Vector4i &operator+=(const Vector4i &p_v);
|
|
Vector4i operator+(const Vector4i &p_v);
|
|
Vector4i &operator-=(const Vector4i &p_v);
|
|
Vector4i operator-(const Vector4i &p_v);
|
|
Vector4i &operator*=(const Vector4i &p_v);
|
|
Vector4i operator*(const Vector4i &p_v);
|
|
Vector4i &operator/=(const Vector4i &p_v);
|
|
Vector4i operator/(const Vector4i &p_v);
|
|
Vector4i &operator%=(const Vector4i &p_v);
|
|
Vector4i operator%(const Vector4i &p_v);
|
|
|
|
Vector4i &operator*=(const int32_t p_scalar);
|
|
Vector4i operator*(const int32_t p_scalar);
|
|
Vector4i &operator/=(const int32_t p_scalar);
|
|
Vector4i operator/(const int32_t p_scalar);
|
|
Vector4i &operator%=(const int32_t p_scalar);
|
|
Vector4i operator%(const int32_t p_scalar);
|
|
|
|
Vector4i operator-();
|
|
|
|
bool operator==(const Vector4i &p_v);
|
|
bool operator!=(const Vector4i &p_v);
|
|
bool operator<(const Vector4i &p_v);
|
|
bool operator<=(const Vector4i &p_v);
|
|
bool operator>(const Vector4i &p_v);
|
|
bool operator>=(const Vector4i &p_v);
|
|
|
|
Vector4 to_vector4();
|
|
|
|
operator String();
|
|
operator Vector4();
|
|
|
|
Vector4i();
|
|
|
|
Vector4i(const int32_t p_x, const int32_t p_y, const int32_t p_z, const int32_t p_w);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Plane
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Plane {
|
|
Vector3 normal;
|
|
real_t d;
|
|
|
|
void set_normal(const Vector3 &p_normal);
|
|
Vector3 get_normal();
|
|
|
|
void normalize();
|
|
Plane normalized();
|
|
|
|
Vector3 center();
|
|
Vector3 get_any_point();
|
|
Vector3 get_any_perpendicular_normal();
|
|
|
|
bool is_point_over(const Vector3 &p_point);
|
|
real_t distance_to(const Vector3 &p_point);
|
|
bool has_point(const Vector3 &p_point, real_t _epsilon = CMP_EPSILON);
|
|
|
|
bool intersect_3(const Plane &p_plane1, const Plane &p_plane2, Vector3 *r_result = nullptr);
|
|
bool intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *p_intersection);
|
|
bool intersects_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 *p_intersection);
|
|
|
|
Vector3 project(const Vector3 &p_point);
|
|
|
|
Plane operator-();
|
|
bool is_equal_approx(const Plane &p_plane);
|
|
bool is_equal_approx_any_side(const Plane &p_plane);
|
|
|
|
bool operator==(const Plane &p_plane);
|
|
bool operator!=(const Plane &p_plane);
|
|
operator String();
|
|
|
|
Plane();
|
|
Plane(real_t p_a, real_t p_b, real_t p_c, real_t p_d);
|
|
|
|
Plane(const Vector3 &p_normal, real_t p_d);
|
|
Plane(const Vector3 &p_point, const Vector3 &p_normal);
|
|
Plane(const Vector3 &p_point1, const Vector3 &p_point2, const Vector3 &p_point3, ClockDirection p_dir = CLOCKWISE);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
AABB
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct AABB {
|
|
Vector3 position;
|
|
Vector3 size;
|
|
|
|
real_t get_volume();
|
|
bool has_no_volume();
|
|
|
|
bool has_no_surface();
|
|
|
|
const Vector3 &get_position();
|
|
void set_position(const Vector3 &p_pos);
|
|
const Vector3 &get_size();
|
|
void set_size(const Vector3 &p_size);
|
|
|
|
bool operator==(const AABB &p_rval);
|
|
bool operator!=(const AABB &p_rval);
|
|
|
|
bool is_equal_approx(const AABB &p_aabb);
|
|
bool intersects(const AABB &p_aabb);
|
|
bool intersects_inclusive(const AABB &p_aabb);
|
|
bool encloses(const AABB &p_aabb);
|
|
|
|
AABB merge(const AABB &p_with);
|
|
void merge_with(const AABB &p_aabb);
|
|
AABB intersection(const AABB &p_aabb);
|
|
bool intersects_segment(const Vector3 &p_from, const Vector3 &p_to, Vector3 *r_clip = nullptr, Vector3 *r_normal = nullptr);
|
|
bool intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *r_clip = nullptr, Vector3 *r_normal = nullptr);
|
|
bool smits_intersect_ray(const Vector3 &p_from, const Vector3 &p_dir, real_t t0, real_t t1);
|
|
|
|
bool intersects_convex_shape(const Plane *p_planes, int p_plane_count, const Vector3 *p_points, int p_point_count);
|
|
bool inside_convex_shape(const Plane *p_planes, int p_plane_count);
|
|
bool intersects_plane(const Plane &p_plane);
|
|
|
|
bool has_point(const Vector3 &p_point);
|
|
Vector3 get_support(const Vector3 &p_normal);
|
|
|
|
Vector3 get_longest_axis();
|
|
int get_longest_axis_index();
|
|
real_t get_longest_axis_size();
|
|
|
|
Vector3 get_shortest_axis();
|
|
int get_shortest_axis_index();
|
|
real_t get_shortest_axis_size();
|
|
|
|
AABB grow(real_t p_by);
|
|
void grow_by(real_t p_amount);
|
|
|
|
void get_edge(int p_edge, Vector3 &r_from, Vector3 &r_to);
|
|
Vector3 get_endpoint(int p_point);
|
|
|
|
AABB expand(const Vector3 &p_vector);
|
|
void project_range_in_plane(const Plane &p_plane, real_t &r_min, real_t &r_max);
|
|
void expand_to(const Vector3 &p_vector);
|
|
bool create_from_points(const Vector<Vector3> &p_points);
|
|
|
|
AABB abs();
|
|
|
|
void quantize(real_t p_unit);
|
|
AABB quantized(real_t p_unit);
|
|
|
|
void set_end(const Vector3 &p_end);
|
|
|
|
Vector3 get_end();
|
|
|
|
Vector3 get_center();
|
|
|
|
operator String();
|
|
|
|
AABB();
|
|
AABB(const Vector3 &p_pos, const Vector3 &p_size);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Quaternion
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Quaternion {
|
|
union {
|
|
struct {
|
|
real_t x;
|
|
real_t y;
|
|
real_t z;
|
|
real_t w;
|
|
};
|
|
real_t components[4];
|
|
};
|
|
|
|
real_t &operator[](int idx);
|
|
const real_t &operator[](int idx);
|
|
|
|
real_t length_squared();
|
|
bool is_equal_approx(const Quaternion &p_quat);
|
|
real_t length();
|
|
void normalize();
|
|
Quaternion normalized();
|
|
bool is_normalized();
|
|
Quaternion inverse();
|
|
Quaternion log();
|
|
Quaternion exp();
|
|
real_t dot(const Quaternion &p_q);
|
|
real_t angle_to(const Quaternion &p_to);
|
|
|
|
void set_euler_xyz(const Vector3 &p_euler);
|
|
Vector3 get_euler_xyz();
|
|
void set_euler_yxz(const Vector3 &p_euler);
|
|
Vector3 get_euler_yxz();
|
|
|
|
void set_euler(const Vector3 &p_euler);
|
|
Vector3 get_euler();
|
|
|
|
Quaternion slerp(const Quaternion &p_to, const real_t &p_weight);
|
|
Quaternion slerpni(const Quaternion &p_to, const real_t &p_weight);
|
|
Quaternion cubic_slerp(const Quaternion &p_b, const Quaternion &p_pre_a, const Quaternion &p_post_b, const real_t &p_weight);
|
|
Quaternion spherical_cubic_interpolate(const Quaternion &p_b, const Quaternion &p_pre_a, const Quaternion &p_post_b, const real_t &p_weight);
|
|
|
|
Vector3 get_axis();
|
|
float get_angle();
|
|
|
|
void set_axis_angle(const Vector3 &axis, const real_t &angle);
|
|
void get_axis_angle(Vector3 &r_axis, real_t &r_angle);
|
|
|
|
void operator*=(const Quaternion &p_q);
|
|
Quaternion operator*(const Quaternion &p_q);
|
|
|
|
Quaternion operator*(const Vector3 &v);
|
|
|
|
Vector3 xform(const Vector3 &v);
|
|
|
|
void operator+=(const Quaternion &p_q);
|
|
void operator-=(const Quaternion &p_q);
|
|
void operator*=(const real_t &s);
|
|
void operator/=(const real_t &s);
|
|
Quaternion operator+(const Quaternion &q2);
|
|
Quaternion operator-(const Quaternion &q2);
|
|
Quaternion operator-();
|
|
Quaternion operator*(const real_t &s);
|
|
Quaternion operator/(const real_t &s);
|
|
|
|
bool operator==(const Quaternion &p_quat);
|
|
bool operator!=(const Quaternion &p_quat);
|
|
|
|
operator String();
|
|
|
|
void set(real_t p_x, real_t p_y, real_t p_z, real_t p_w);
|
|
Quaternion(real_t p_x, real_t p_y, real_t p_z, real_t p_w);
|
|
Quaternion(const Vector3 &axis, const real_t &angle);
|
|
|
|
Quaternion(const Vector3 &euler);
|
|
Quaternion(const Quaternion &p_q);
|
|
|
|
Quaternion &operator=(const Quaternion &p_q);
|
|
|
|
Quaternion(const Vector3 &v0, const Vector3 &v1);
|
|
|
|
Quaternion();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Projection
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Projection {
|
|
enum Planes {
|
|
PLANE_NEAR,
|
|
PLANE_FAR,
|
|
PLANE_LEFT,
|
|
PLANE_TOP,
|
|
PLANE_RIGHT,
|
|
PLANE_BOTTOM
|
|
};
|
|
|
|
Vector4 matrix[4];
|
|
|
|
const Vector4 &operator[](const int p_axis);
|
|
|
|
Vector4 &operator[](const int p_axis);
|
|
|
|
float determinant();
|
|
void set_identity();
|
|
void set_zero();
|
|
void set_light_bias();
|
|
void set_depth_correction(bool p_flip_y = true);
|
|
|
|
void set_light_atlas_rect(const Rect2 &p_rect);
|
|
void set_perspective(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov = false);
|
|
void set_perspective(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov, int p_eye, real_t p_intraocular_dist, real_t p_convergence_dist);
|
|
void set_for_hmd(int p_eye, real_t p_aspect, real_t p_intraocular_dist, real_t p_display_width, real_t p_display_to_lens, real_t p_oversample, real_t p_z_near, real_t p_z_far);
|
|
void set_orthogonal(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_znear, real_t p_zfar);
|
|
void set_orthogonal(real_t p_size, real_t p_aspect, real_t p_znear, real_t p_zfar, bool p_flip_fov = false);
|
|
void set_frustum(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_near, real_t p_far);
|
|
void set_frustum(real_t p_size, real_t p_aspect, Vector2 p_offset, real_t p_near, real_t p_far, bool p_flip_fov = false);
|
|
void adjust_perspective_znear(real_t p_new_znear);
|
|
|
|
static Projection create_depth_correction(bool p_flip_y);
|
|
static Projection create_light_atlas_rect(const Rect2 &p_rect);
|
|
static Projection create_perspective(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov = false);
|
|
static Projection create_perspective_hmd(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov, int p_eye, real_t p_intraocular_dist, real_t p_convergence_dist);
|
|
static Projection create_for_hmd(int p_eye, real_t p_aspect, real_t p_intraocular_dist, real_t p_display_width, real_t p_display_to_lens, real_t p_oversample, real_t p_z_near, real_t p_z_far);
|
|
static Projection create_orthogonal(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_znear, real_t p_zfar);
|
|
static Projection create_orthogonal_aspect(real_t p_size, real_t p_aspect, real_t p_znear, real_t p_zfar, bool p_flip_fov = false);
|
|
static Projection create_frustum(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_near, real_t p_far);
|
|
static Projection create_frustum_aspect(real_t p_size, real_t p_aspect, Vector2 p_offset, real_t p_near, real_t p_far, bool p_flip_fov = false);
|
|
static Projection create_fit_aabb(const AABB &p_aabb);
|
|
|
|
Projection perspective_znear_adjusted(real_t p_new_znear);
|
|
Plane get_projection_plane(Planes p_plane);
|
|
Projection flipped_y();
|
|
Projection jitter_offseted(const Vector2 &p_offset);
|
|
|
|
static real_t get_fovy(real_t p_fovx, real_t p_aspect);
|
|
|
|
real_t calculate_fovy(real_t p_fovx, real_t p_aspect);
|
|
|
|
real_t get_z_far();
|
|
real_t get_z_near();
|
|
real_t get_aspect();
|
|
real_t get_fov();
|
|
bool is_orthogonal();
|
|
|
|
Vector<Plane> get_projection_planes(const Transform &p_transform);
|
|
|
|
bool get_endpoints(const Transform &p_transform, Vector3 *p_8points);
|
|
Vector2 get_viewport_half_extents();
|
|
Vector2 get_far_plane_half_extents();
|
|
|
|
void invert();
|
|
Projection inverse();
|
|
|
|
Projection operator*(const Projection &p_matrix);
|
|
|
|
Vector4 xform(const Vector4 &p_vec4);
|
|
Vector4 xform_inv(const Vector4 &p_vec4);
|
|
|
|
Vector3 xform(const Vector3 &p_vector);
|
|
Plane xform(const Plane &p_plane);
|
|
|
|
operator String();
|
|
|
|
void scale_translate_to_fit(const AABB &p_aabb);
|
|
void add_jitter_offset(const Vector2 &p_offset);
|
|
void make_scale(const Vector3 &p_scale);
|
|
int get_pixels_per_meter(int p_for_pixel_width);
|
|
operator Transform();
|
|
|
|
void flip_y();
|
|
|
|
bool operator==(const Projection &p_cam);
|
|
|
|
bool operator!=(const Projection &p_cam);
|
|
|
|
float get_lod_multiplier();
|
|
|
|
void set_perspective1(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov = false);
|
|
void set_perspective2(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov, int p_eye, real_t p_intraocular_dist, real_t p_convergence_dist);
|
|
void set_orthogonal1(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_znear, real_t p_zfar);
|
|
void set_orthogonal2(real_t p_size, real_t p_aspect, real_t p_znear, real_t p_zfar, bool p_flip_fov = false);
|
|
void set_frustum1(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_near, real_t p_far);
|
|
|
|
void set_frustum2(real_t p_size, real_t p_aspect, Vector2 p_offset, real_t p_near, real_t p_far, bool p_flip_fov = false);
|
|
|
|
Projection();
|
|
Projection(const Vector4 &p_x, const Vector4 &p_y, const Vector4 &p_z, const Vector4 &p_w);
|
|
Projection(const Transform &p_transform);
|
|
~Projection();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Basis
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Basis {
|
|
Vector3 rows[3] = {
|
|
Vector3(1, 0, 0);
|
|
}
|
|
Vector3 &operator[](int p_row);
|
|
|
|
void invert();
|
|
void transpose();
|
|
|
|
Basis inverse();
|
|
Basis transposed();
|
|
|
|
real_t determinant();
|
|
|
|
void from_z(const Vector3 &p_z);
|
|
|
|
void rotate(const Vector3 &p_axis, real_t p_phi);
|
|
Basis rotated(const Vector3 &p_axis, real_t p_phi);
|
|
|
|
void rotate_local(const Vector3 &p_axis, real_t p_phi);
|
|
Basis rotated_local(const Vector3 &p_axis, real_t p_phi);
|
|
|
|
void rotate(const Vector3 &p_euler);
|
|
Basis rotated(const Vector3 &p_euler);
|
|
|
|
void rotate(const Quaternion &p_quat);
|
|
Basis rotated(const Quaternion &p_quat);
|
|
|
|
void rotatev(const Vector3 &p_euler);
|
|
Basis rotatedv(const Vector3 &p_euler);
|
|
void rotateq(const Quaternion &p_quat);
|
|
Basis rotatedq(const Quaternion &p_quat);
|
|
|
|
Vector3 get_rotation_euler();
|
|
void get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle);
|
|
void get_rotation_axis_angle_local(Vector3 &p_axis, real_t &p_angle);
|
|
Quaternion get_rotation_quaternion();
|
|
Vector3 get_rotation();
|
|
|
|
void rotate_to_align(const Vector3 &p_start_direction, const Vector3 &p_end_direction);
|
|
|
|
Vector3 rotref_posscale_decomposition(Basis &rotref);
|
|
|
|
Vector3 get_euler_xyz();
|
|
void set_euler_xyz(const Vector3 &p_euler);
|
|
|
|
Vector3 get_euler_xzy();
|
|
void set_euler_xzy(const Vector3 &p_euler);
|
|
|
|
Vector3 get_euler_yzx();
|
|
void set_euler_yzx(const Vector3 &p_euler);
|
|
|
|
Vector3 get_euler_yxz();
|
|
void set_euler_yxz(const Vector3 &p_euler);
|
|
|
|
Vector3 get_euler_zxy();
|
|
void set_euler_zxy(const Vector3 &p_euler);
|
|
|
|
Vector3 get_euler_zyx();
|
|
void set_euler_zyx(const Vector3 &p_euler);
|
|
|
|
Vector3 get_euler();
|
|
void set_euler(const Vector3 &p_euler);
|
|
|
|
Quaternion get_quaternion();
|
|
void set_quaternion(const Quaternion &p_quat);
|
|
|
|
void get_axis_angle(Vector3 &r_axis, real_t &r_angle);
|
|
void set_axis_angle(const Vector3 &p_axis, real_t p_phi);
|
|
|
|
void scale(const Vector3 &p_scale);
|
|
Basis scaled(const Vector3 &p_scale);
|
|
|
|
void scale_local(const Vector3 &p_scale);
|
|
Basis scaled_local(const Vector3 &p_scale);
|
|
|
|
void scale_orthogonal(const Vector3 &p_scale);
|
|
Basis scaled_orthogonal(const Vector3 &p_scale);
|
|
|
|
void make_scale_uniform();
|
|
real_t get_uniform_scale();
|
|
|
|
Vector3 get_scale();
|
|
Vector3 get_scale_abs();
|
|
Vector3 get_scale_local();
|
|
|
|
void set_axis_angle_scale(const Vector3 &p_axis, real_t p_phi, const Vector3 &p_scale);
|
|
void set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale);
|
|
void set_quaternion_scale(const Quaternion &p_quat, const Vector3 &p_scale);
|
|
|
|
real_t tdotx(const Vector3 &v);
|
|
real_t tdoty(const Vector3 &v);
|
|
real_t tdotz(const Vector3 &v);
|
|
|
|
bool is_equal_approx(const Basis &p_basis);
|
|
bool is_equal_approx_ratio(const Basis &a, const Basis &b, real_t p_epsilon = UNIT_EPSILON);
|
|
|
|
bool operator==(const Basis &p_matrix);
|
|
bool operator!=(const Basis &p_matrix);
|
|
|
|
Vector3 xform(const Vector3 &p_vector);
|
|
Vector3 xform_inv(const Vector3 &p_vector);
|
|
|
|
Vector3i xform(const Vector3i &p_vector);
|
|
Vector3i xform_inv(const Vector3i &p_vector);
|
|
|
|
void operator*=(const Basis &p_matrix);
|
|
Basis operator*(const Basis &p_matrix);
|
|
void operator+=(const Basis &p_matrix);
|
|
Basis operator+(const Basis &p_matrix);
|
|
void operator-=(const Basis &p_matrix);
|
|
Basis operator-(const Basis &p_matrix);
|
|
void operator*=(real_t p_val);
|
|
Basis operator*(real_t p_val);
|
|
|
|
int get_orthogonal_index();
|
|
void set_orthogonal_index(int p_index);
|
|
|
|
void set_diagonal(const Vector3 &p_diag);
|
|
|
|
bool is_orthogonal();
|
|
bool is_diagonal();
|
|
bool is_rotation();
|
|
|
|
Basis slerp(const Basis &p_to, const real_t &p_weight);
|
|
Basis lerp(const Basis &p_to, const real_t &p_weight);
|
|
void rotate_sh(real_t *p_values);
|
|
|
|
operator String();
|
|
|
|
void set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz);
|
|
void set(const Vector3 &p_x, const Vector3 &p_y, const Vector3 &p_z);
|
|
|
|
Vector3 get_column(int i);
|
|
|
|
void set_column(int p_index, const Vector3 &p_value);
|
|
|
|
void set_columns(const Vector3 &p_x, const Vector3 &p_y, const Vector3 &p_z);
|
|
|
|
Vector3 get_row(int i);
|
|
void set_row(int i, const Vector3 &p_row);
|
|
|
|
Vector3 get_axis(int i);
|
|
|
|
void set_axis(int p_index, const Vector3 &p_value);
|
|
|
|
Vector3 get_main_diagonal();
|
|
|
|
void set_zero();
|
|
|
|
Basis transpose_xform(const Basis &m);
|
|
Basis(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz);
|
|
|
|
void orthonormalize();
|
|
Basis orthonormalized();
|
|
|
|
void orthogonalize();
|
|
Basis orthogonalized();
|
|
|
|
bool is_symmetric();
|
|
Basis diagonalize();
|
|
|
|
Basis get_normal_xform_basis();
|
|
|
|
Vector3 xform_normal_fast(const Vector3 &p_vector);
|
|
|
|
Vector3 xform_normal(const Vector3 &p_vector);
|
|
|
|
static Basis looking_at(const Vector3 &p_target, const Vector3 &p_up = Vector3(0, 1, 0);
|
|
static Basis from_scale(const Vector3 &p_scale);
|
|
|
|
operator Quaternion();
|
|
|
|
Basis(const Quaternion &p_quat);
|
|
Basis(const Quaternion &p_quat, const Vector3 &p_scale);
|
|
|
|
Basis(const Vector3 &p_euler);
|
|
Basis(const Vector3 &p_euler, const Vector3 &p_scale);
|
|
|
|
Basis(const Vector3 &p_axis, real_t p_phi);
|
|
Basis(const Vector3 &p_axis, real_t p_phi, const Vector3 &p_scale);
|
|
|
|
Basis(const Vector3 &row0, const Vector3 &row1, const Vector3 &row2);
|
|
|
|
Basis();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Transform2D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Transform2D {
|
|
|
|
Vector2 columns[3];
|
|
|
|
real_t tdotx(const Vector2 &v);
|
|
real_t tdoty(const Vector2 &v);
|
|
|
|
const Vector2 &operator[](int p_idx);
|
|
Vector2 &operator[](int p_idx);
|
|
|
|
Vector2 get_axis(int p_axis);
|
|
void set_axis(int p_axis, const Vector2 &p_vec);
|
|
|
|
Vector2 get_column(int p_colum);
|
|
void set_column(int p_colum, const Vector2 &p_vec);
|
|
|
|
void invert();
|
|
Transform2D inverse();
|
|
|
|
void affine_invert();
|
|
Transform2D affine_inverse();
|
|
|
|
void set_rotation(real_t p_rot);
|
|
real_t get_rotation();
|
|
real_t get_skew();
|
|
void set_skew(const real_t p_angle);
|
|
void set_rotation_and_scale(real_t p_rot, const Size2 &p_scale);
|
|
void set_rotation_scale_and_skew(const real_t p_rot, const Size2 &p_scale, const real_t p_skew);
|
|
void rotate(real_t p_phi);
|
|
|
|
void scale(const Size2 &p_scale);
|
|
void scale_basis(const Size2 &p_scale);
|
|
void translate(real_t p_tx, real_t p_ty);
|
|
void translate(const Vector2 &p_offset);
|
|
void translate_local(real_t p_tx, real_t p_ty);
|
|
void translate_local(const Vector2 &p_translation);
|
|
|
|
void translater(real_t p_tx, real_t p_ty);
|
|
void translatev(const Vector2 &p_offset);
|
|
void translate_localr(real_t p_tx, real_t p_ty);
|
|
void translate_localv(const Vector2 &p_translation);
|
|
|
|
real_t basis_determinant();
|
|
|
|
Size2 get_scale();
|
|
void set_scale(const Size2 &p_scale);
|
|
|
|
const Vector2 &get_origin();
|
|
void set_origin(const Vector2 &p_origin);
|
|
|
|
Transform2D basis_scaled(const Size2 &p_scale);
|
|
Transform2D scaled(const Size2 &p_scale);
|
|
Transform2D scaled_local(const Size2 &p_scale);
|
|
Transform2D translated(const Vector2 &p_offset);
|
|
Transform2D translated_local(const Vector2 &p_offset);
|
|
Transform2D rotated(const real_t p_angle);
|
|
Transform2D rotated_local(const real_t p_angle);
|
|
|
|
Transform2D untranslated();
|
|
|
|
void orthonormalize();
|
|
Transform2D orthonormalized();
|
|
bool is_equal_approx(const Transform2D &p_transform);
|
|
|
|
Transform2D looking_at(const Vector2 &p_target);
|
|
|
|
bool operator==(const Transform2D &p_transform);
|
|
bool operator!=(const Transform2D &p_transform);
|
|
|
|
void operator*=(const Transform2D &p_transform);
|
|
Transform2D operator*(const Transform2D &p_transform);
|
|
void operator*=(const real_t p_val);
|
|
Transform2D operator*(const real_t p_val);
|
|
|
|
Transform2D interpolate_with(const Transform2D &p_transform, real_t p_c);
|
|
|
|
Vector2 basis_xform(const Vector2 &p_vec);
|
|
Vector2 basis_xform_inv(const Vector2 &p_vec);
|
|
Vector2 xform(const Vector2 &p_vec);
|
|
Vector2 xform_inv(const Vector2 &p_vec);
|
|
|
|
Rect2 xform(const Rect2 &p_rect);
|
|
Rect2 xform_inv(const Rect2 &p_rect);
|
|
|
|
Vector2i basis_xform(const Vector2i &p_vec);
|
|
Vector2i basis_xform_inv(const Vector2i &p_vec);
|
|
Vector2i xform(const Vector2i &p_vec);
|
|
Vector2i xform_inv(const Vector2i &p_vec);
|
|
|
|
PoolVector<Vector2> xform(const PoolVector<Vector2> &p_array);
|
|
PoolVector<Vector2> xform_inv(const PoolVector<Vector2> &p_array);
|
|
PoolVector<Vector2i> xform(const PoolVector<Vector2i> &p_array);
|
|
PoolVector<Vector2i> xform_inv(const PoolVector<Vector2i> &p_array);
|
|
|
|
operator String();
|
|
|
|
Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy);
|
|
|
|
Transform2D(const Vector2 &p_x, const Vector2 &p_y, const Vector2 &p_origin);
|
|
|
|
Transform2D(real_t p_rot, const Vector2 &p_pos);
|
|
|
|
Transform2D(const real_t p_rot, const Size2 &p_scale, const real_t p_skew, const Vector2 &p_pos);
|
|
|
|
Transform2D();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Face3
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Face3 {
|
|
enum Side {
|
|
SIDE_OVER,
|
|
SIDE_UNDER,
|
|
SIDE_SPANNING,
|
|
SIDE_COPLANAR
|
|
};
|
|
|
|
Vector3 vertex[3];
|
|
|
|
int split_by_plane(const Plane &p_plane, Face3 *p_res, bool *p_is_point_over);
|
|
|
|
Plane get_plane(ClockDirection p_dir = CLOCKWISE);
|
|
Vector3 get_random_point_inside();
|
|
|
|
Side get_side_of(const Face3 &p_face, ClockDirection p_clock_dir = CLOCKWISE);
|
|
|
|
bool is_degenerate();
|
|
real_t get_area();
|
|
real_t get_twice_area_squared();
|
|
|
|
Vector3 get_median_point();
|
|
Vector3 get_closest_point_to(const Vector3 &p_point);
|
|
|
|
bool intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *p_intersection = nullptr);
|
|
bool intersects_segment(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *p_intersection = nullptr);
|
|
|
|
ClockDirection get_clock_dir();
|
|
|
|
void get_support(const Vector3 &p_normal, const Transform &p_transform, Vector3 *p_vertices, int *p_count, int p_max);
|
|
void project_range(const Vector3 &p_normal, const Transform &p_transform, real_t &r_min, real_t &r_max);
|
|
|
|
AABB get_aabb();
|
|
|
|
bool intersects_aabb(const AABB &p_aabb);
|
|
bool intersects_aabb2(const AABB &p_aabb);
|
|
operator String();
|
|
|
|
Face3();
|
|
Face3(const Vector3 &p_v1, const Vector3 &p_v2, const Vector3 &p_v3);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Transform
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Transform {
|
|
Basis basis;
|
|
Vector3 origin;
|
|
|
|
void invert();
|
|
Transform inverse();
|
|
|
|
void affine_invert();
|
|
Transform affine_inverse();
|
|
|
|
Transform rotated(const Vector3 &p_axis, real_t p_phi);
|
|
Transform rotated_local(const Vector3 &p_axis, real_t p_phi);
|
|
|
|
void rotate(const Vector3 &p_axis, real_t p_phi);
|
|
void rotate_local(const Vector3 &p_axis, real_t p_phi);
|
|
void rotate_basis(const Vector3 &p_axis, real_t p_phi);
|
|
|
|
void set_look_at(const Vector3 &p_eye, const Vector3 &p_target, const Vector3 &p_up);
|
|
Transform looking_at(const Vector3 &p_target, const Vector3 &p_up);
|
|
|
|
void scale(const Vector3 &p_scale);
|
|
Transform scaled(const Vector3 &p_scale);
|
|
Transform scaled_local(const Vector3 &p_scale);
|
|
void scale_basis(const Vector3 &p_scale);
|
|
|
|
void translate_local(real_t p_tx, real_t p_ty, real_t p_tz);
|
|
void translate_local(const Vector3 &p_translation);
|
|
void translate_localr(real_t p_tx, real_t p_ty, real_t p_tz);
|
|
void translate_localv(const Vector3 &p_translation);
|
|
Transform translated(const Vector3 &p_translation);
|
|
Transform translated_local(const Vector3 &p_translation);
|
|
|
|
const Basis &get_basis();
|
|
void set_basis(const Basis &p_basis);
|
|
|
|
const Vector3 &get_origin();
|
|
void set_origin(const Vector3 &p_origin);
|
|
|
|
void orthonormalize();
|
|
Transform orthonormalized();
|
|
void orthogonalize();
|
|
Transform orthogonalized();
|
|
bool is_equal_approx(const Transform &p_transform);
|
|
|
|
bool operator==(const Transform &p_transform);
|
|
bool operator!=(const Transform &p_transform);
|
|
|
|
Vector3 xform(const Vector3 &p_vector);
|
|
Vector3i xform(const Vector3i &p_vector);
|
|
AABB xform(const AABB &p_aabb);
|
|
PoolVector<Vector3> xform(const PoolVector<Vector3> &p_array);
|
|
PoolVector<Vector3i> xform(const PoolVector<Vector3i> &p_array);
|
|
|
|
Vector3 xform_inv(const Vector3 &p_vector);
|
|
Vector3i xform_inv(const Vector3i &p_vector);
|
|
AABB xform_inv(const AABB &p_aabb);
|
|
PoolVector<Vector3> xform_inv(const PoolVector<Vector3> &p_array);
|
|
PoolVector<Vector3i> xform_inv(const PoolVector<Vector3i> &p_array);
|
|
|
|
Plane xform(const Plane &p_plane);
|
|
Plane xform_inv(const Plane &p_plane);
|
|
|
|
Plane xform_fast(const Plane &p_plane, const Basis &p_basis_inverse_transpose);
|
|
static Plane xform_inv_fast(const Plane &p_plane, const Transform &p_inverse, const Basis &p_basis_transpose);
|
|
|
|
void operator*=(const Transform &p_transform);
|
|
Transform operator*(const Transform &p_transform);
|
|
void operator*=(const real_t p_val);
|
|
Transform operator*(const real_t p_val);
|
|
|
|
Transform spherical_interpolate_with(const Transform &p_transform, real_t p_c);
|
|
Transform interpolate_with(const Transform &p_transform, real_t p_c);
|
|
|
|
Transform inverse_xform(const Transform &t);
|
|
|
|
void set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz, real_t tx, real_t ty, real_t tz);
|
|
|
|
operator String();
|
|
|
|
Transform(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz, real_t ox, real_t oy, real_t oz);
|
|
Transform(const Basis &p_basis, const Vector3 &p_origin = Vector3();
|
|
Transform(const Vector3 &p_x, const Vector3 &p_y, const Vector3 &p_z, const Vector3 &p_origin);
|
|
Transform();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
HashMapHasherDefault
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct HashMapHasherDefault {
|
|
|
|
template <class T>
|
|
static uint32_t hash(const T *p_pointer);
|
|
|
|
template <class T>
|
|
static uint32_t hash(const Ref<T> &p_ref);
|
|
|
|
static uint32_t hash(const String &p_string);
|
|
static uint32_t hash(const char *p_cstr);
|
|
static uint32_t hash(const wchar_t p_wchar);
|
|
static uint32_t hash(const char16_t p_uchar);
|
|
static uint32_t hash(const char32_t p_uchar);
|
|
static uint32_t hash(const StringName &p_string_name);
|
|
|
|
static uint32_t hash(const uint64_t p_int);
|
|
static uint32_t hash(const int64_t p_int);
|
|
static uint32_t hash(const float p_float);
|
|
static uint32_t hash(const double p_double);
|
|
static uint32_t hash(const uint32_t p_int);
|
|
static uint32_t hash(const int32_t p_int);
|
|
static uint32_t hash(const uint16_t p_int);
|
|
static uint32_t hash(const int16_t p_int);
|
|
static uint32_t hash(const uint8_t p_int);
|
|
static uint32_t hash(const int8_t p_int);
|
|
|
|
static uint32_t hash(const Vector2i &p_vec);
|
|
static uint32_t hash(const Vector3i &p_vec);
|
|
static uint32_t hash(const Vector4i &p_vec);
|
|
static uint32_t hash(const Vector2 &p_vec);
|
|
static uint32_t hash(const Vector3 &p_vec);
|
|
static uint32_t hash(const Vector4 &p_vec);
|
|
static uint32_t hash(const Rect2i &p_rect);
|
|
static uint32_t hash(const Rect2 &p_rect);
|
|
static uint32_t hash(const AABB &p_aabb);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
HashMapComparatorDefault
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct HashMapComparatorDefault {
|
|
static bool compare(const T &p_lhs, const T &p_rhs);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
HashMapComparatorDefault<float>
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct HashMapComparatorDefault<float> {
|
|
static bool compare(const float &p_lhs, const float &p_rhs);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
HashMapComparatorDefault<double>
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct HashMapComparatorDefault<double> {
|
|
static bool compare(const double &p_lhs, const double &p_rhs);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
HashMapComparatorDefault<Vector2>
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct HashMapComparatorDefault<Vector2> {
|
|
static bool compare(const Vector2 &p_lhs, const Vector2 &p_rhs);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
HashMapComparatorDefault<Vector3>
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct HashMapComparatorDefault<Vector3> {
|
|
static bool compare(const Vector3 &p_lhs, const Vector3 &p_rhs);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Pair
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct Pair {
|
|
F first;
|
|
S second;
|
|
|
|
Pair();
|
|
|
|
Pair(F p_first, const S &p_second);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
PairSort
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct PairSort {
|
|
bool operator();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
PairHash
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct PairHash {
|
|
static uint32_t hash(const Pair<F, S> &P);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
KeyValue
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct KeyValue {
|
|
const K key;
|
|
V value;
|
|
|
|
void operator=(const KeyValue &p_kv);
|
|
KeyValue(const KeyValue &p_kv);
|
|
KeyValue(const K &p_key, const V &p_value);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
KeyValueSort
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct KeyValueSort {
|
|
bool operator();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
VariantHasher
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct VariantHasher {
|
|
static uint32_t hash(const Variant &p_variant);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
VariantComparator
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
struct VariantComparator {
|
|
static bool compare(const Variant &p_lhs, const Variant &p_rhs);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
CLASSES
|
|
====================================================================================
|
|
|
|
|
|
RLogger
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RLogger {
|
|
public:
|
|
static void print_trace(const String &str);
|
|
static void print_trace(const char *str);
|
|
static void print_trace(const char *p_function, const char *p_file, int p_line, const String &str);
|
|
static void print_trace(const char *p_function, const char *p_file, int p_line, const char *str);
|
|
|
|
static void print_message(const String &str);
|
|
static void print_message(const char *str);
|
|
static void print_message(const char *p_function, const char *p_file, int p_line, const String &str);
|
|
static void print_message(const char *p_function, const char *p_file, int p_line, const char *str);
|
|
|
|
static void print_warning(const String &str);
|
|
static void print_warning(const char *str);
|
|
static void print_warning(const char *p_function, const char *p_file, int p_line, const String &str);
|
|
static void print_warning(const char *p_function, const char *p_file, int p_line, const char *str);
|
|
|
|
static void print_error(const String &str);
|
|
static void print_error(const char *str);
|
|
static void print_error(const char *p_function, const char *p_file, int p_line, const char *str);
|
|
static void print_error(const char *p_function, const char *p_file, int p_line, const String &str);
|
|
static void print_msg_error(const char *p_function, const char *p_file, int p_line, const char *p_msg, const char *str);
|
|
static void print_index_error(const char *p_function, const char *p_file, int p_line, const int index, const int size, const char *str);
|
|
|
|
static void log_trace(const String &str);
|
|
static void log_trace(const char *str);
|
|
static void log_trace(const char *p_function, const char *p_file, int p_line, const String &str);
|
|
static void log_trace(const char *p_function, const char *p_file, int p_line, const char *str);
|
|
|
|
static void log_message(const String &str);
|
|
static void log_message(const char *str);
|
|
static void log_message(const char *p_function, const char *p_file, int p_line, const String &str);
|
|
static void log_message(const char *p_function, const char *p_file, int p_line, const char *str);
|
|
|
|
static void log_warning(const String &str);
|
|
static void log_warning(const char *str);
|
|
static void log_warning(const char *p_function, const char *p_file, int p_line, const String &str);
|
|
static void log_warning(const char *p_function, const char *p_file, int p_line, const char *str);
|
|
|
|
static void log_error(const String &str);
|
|
static void log_error(const char *str);
|
|
static void log_error(const char *p_function, const char *p_file, int p_line, const char *str);
|
|
static void log_error(const char *p_function, const char *p_file, int p_line, const String &str);
|
|
static void log_msg_error(const char *p_function, const char *p_file, int p_line, const char *p_msg, const char *str);
|
|
static void log_index_error(const char *p_function, const char *p_file, int p_line, const int index, const int size, const char *str);
|
|
static void log_index_error(const char *p_function, const char *p_file, int p_line, const int index, const int size, const String &str);
|
|
|
|
static String *get_string_ptr(const int p_default_size = 100);
|
|
static String *get_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
|
|
static String *get_string_ptr(const char *p_prefix, const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
|
|
static void return_string_ptr(String *str);
|
|
|
|
static String *get_trace_string_ptr(const int p_default_size = 100);
|
|
static String *get_message_string_ptr(const int p_default_size = 100);
|
|
static String *get_warning_string_ptr(const int p_default_size = 100);
|
|
static String *get_error_string_ptr(const int p_default_size = 100);
|
|
|
|
static String *get_trace_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
|
|
static String *get_message_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
|
|
static String *get_warning_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
|
|
static String *get_error_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
|
|
|
|
static void log_ptr(String *str);
|
|
static void log_ret_ptr(String *str);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
STime
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class STime {
|
|
public:
|
|
static uint64_t date();
|
|
static uint64_t date_epoch();
|
|
static char *date_string();
|
|
static double time_hh();
|
|
static double time_mm();
|
|
static double time_ss();
|
|
static uint64_t time_ms();
|
|
static uint64_t time_us();
|
|
static uint64_t time_ns();
|
|
static void sleep_ss(double ss);
|
|
static void sleep_ms(double ms);
|
|
static void sleep_us(double us);
|
|
static void sleep_ns(double us);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
SafeNumeric
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class SafeNumeric {
|
|
std::atomic<T> value;
|
|
|
|
public:
|
|
_ALWAYS_INLINE_ void set(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T get();
|
|
|
|
_ALWAYS_INLINE_ T increment();
|
|
|
|
_ALWAYS_INLINE_ T postincrement();
|
|
|
|
_ALWAYS_INLINE_ T decrement();
|
|
|
|
_ALWAYS_INLINE_ T postdecrement();
|
|
|
|
_ALWAYS_INLINE_ T add(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T postadd(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T sub(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T postsub(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T exchange_if_greater(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T conditional_increment();
|
|
|
|
_ALWAYS_INLINE_ explicit SafeNumeric<T>(T p_value = static_cast<T>(0);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
SafeFlag
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class SafeFlag {
|
|
std::atomic_bool flag;
|
|
|
|
public:
|
|
_ALWAYS_INLINE_ bool is_set();
|
|
|
|
_ALWAYS_INLINE_ void set();
|
|
|
|
_ALWAYS_INLINE_ void clear();
|
|
|
|
_ALWAYS_INLINE_ void set_to(bool p_value);
|
|
|
|
_ALWAYS_INLINE_ explicit SafeFlag(bool p_value = false);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
SafeRefCount
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class SafeRefCount {
|
|
SafeNumeric<uint32_t> count;
|
|
|
|
public:
|
|
_ALWAYS_INLINE_ bool ref();
|
|
|
|
_ALWAYS_INLINE_ uint32_t refval();
|
|
|
|
_ALWAYS_INLINE_ bool unref();
|
|
|
|
_ALWAYS_INLINE_ uint32_t unrefval();
|
|
|
|
_ALWAYS_INLINE_ uint32_t get();
|
|
|
|
_ALWAYS_INLINE_ void init(uint32_t p_value = 1);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
SafeNumeric
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class SafeNumeric {
|
|
protected:
|
|
T value;
|
|
|
|
public:
|
|
_ALWAYS_INLINE_ void set(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T get();
|
|
|
|
_ALWAYS_INLINE_ T increment();
|
|
|
|
_ALWAYS_INLINE_ T postincrement();
|
|
|
|
_ALWAYS_INLINE_ T decrement();
|
|
|
|
_ALWAYS_INLINE_ T postdecrement();
|
|
|
|
_ALWAYS_INLINE_ T add(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T postadd(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T sub(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T postsub(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T exchange_if_greater(T p_value);
|
|
|
|
_ALWAYS_INLINE_ T conditional_increment();
|
|
|
|
_ALWAYS_INLINE_ explicit SafeNumeric<T>(T p_value = static_cast<T>(0);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
SafeFlag
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class SafeFlag {
|
|
protected:
|
|
bool flag;
|
|
|
|
public:
|
|
_ALWAYS_INLINE_ bool is_set();
|
|
|
|
_ALWAYS_INLINE_ void set();
|
|
|
|
_ALWAYS_INLINE_ void clear();
|
|
|
|
_ALWAYS_INLINE_ void set_to(bool p_value);
|
|
|
|
_ALWAYS_INLINE_ explicit SafeFlag(bool p_value = false);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
SafeRefCount
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class SafeRefCount {
|
|
uint32_t count;
|
|
|
|
public:
|
|
_ALWAYS_INLINE_ bool ref();
|
|
|
|
_ALWAYS_INLINE_ uint32_t refval();
|
|
|
|
_ALWAYS_INLINE_ bool unref();
|
|
|
|
_ALWAYS_INLINE_ uint32_t unrefval();
|
|
|
|
_ALWAYS_INLINE_ uint32_t get();
|
|
|
|
_ALWAYS_INLINE_ void init(uint32_t p_value = 1);
|
|
|
|
SafeRefCount();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Memory
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Memory {
|
|
#ifdef DEBUG_ENABLED
|
|
static SafeNumeric<uint64_t> mem_usage;
|
|
static SafeNumeric<uint64_t> max_usage;
|
|
#endif
|
|
|
|
static SafeNumeric<uint64_t> alloc_count;
|
|
|
|
public:
|
|
static void *alloc_static(size_t p_bytes, bool p_pad_align = false);
|
|
static void *realloc_static(void *p_memory, size_t p_bytes, bool p_pad_align = false);
|
|
static void free_static(void *p_ptr, bool p_pad_align = false);
|
|
|
|
static uint64_t get_mem_available();
|
|
static uint64_t get_mem_usage();
|
|
static uint64_t get_mem_max_usage();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
DefaultAllocator
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class DefaultAllocator {
|
|
public:
|
|
static void *alloc(size_t p_memory);
|
|
static void free(void *p_ptr);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
MutexImpl
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class MutexImpl {
|
|
mutable StdMutexT mutex;
|
|
friend class MutexLock;
|
|
|
|
public:
|
|
_ALWAYS_INLINE_ void lock();
|
|
|
|
_ALWAYS_INLINE_ void unlock();
|
|
|
|
_ALWAYS_INLINE_ Error try_lock();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
MutexLock
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class MutexLock {
|
|
union {
|
|
std::recursive_mutex *recursive_mutex;
|
|
std::mutex *mutex;
|
|
};
|
|
bool recursive;
|
|
|
|
public:
|
|
_ALWAYS_INLINE_ explicit MutexLock(const MutexImpl<std::recursive_mutex> &p_mutex);
|
|
_ALWAYS_INLINE_ explicit MutexLock(const MutexImpl<std::mutex> &p_mutex);
|
|
|
|
_ALWAYS_INLINE_ ~MutexLock();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
FakeMutex
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class FakeMutex {
|
|
FakeMutex();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
MutexImpl
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class MutexImpl {
|
|
public:
|
|
_ALWAYS_INLINE_ void lock();
|
|
_ALWAYS_INLINE_ void unlock();
|
|
_ALWAYS_INLINE_ Error try_lock();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
MutexLock
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class MutexLock {
|
|
public:
|
|
explicit MutexLock(const MutexImpl<FakeMutex> &p_mutex);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RWLock
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RWLock {
|
|
mutable std::shared_timed_mutex mutex;
|
|
|
|
public:
|
|
|
|
void read_lock();
|
|
|
|
void read_unlock();
|
|
|
|
Error read_try_lock();
|
|
|
|
void write_lock();
|
|
|
|
void write_unlock();
|
|
|
|
Error write_try_lock();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RWLock
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RWLock {
|
|
public:
|
|
void read_lock();
|
|
void read_unlock();
|
|
Error read_try_lock();
|
|
|
|
void write_lock();
|
|
void write_unlock();
|
|
Error write_try_lock();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RWLockRead
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RWLockRead {
|
|
const RWLock &lock;
|
|
|
|
public:
|
|
RWLockRead(const RWLock &p_lock);
|
|
~RWLockRead();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RWLockWrite
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RWLockWrite {
|
|
RWLock &lock;
|
|
|
|
public:
|
|
RWLockWrite(RWLock &p_lock);
|
|
~RWLockWrite();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
SpinLock
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class SpinLock {
|
|
std::atomic_flag locked = ATOMIC_FLAG_INIT;
|
|
|
|
public:
|
|
_ALWAYS_INLINE_ void lock();
|
|
_ALWAYS_INLINE_ void unlock();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RandomPCG
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RandomPCG {
|
|
pcg32_random_t pcg;
|
|
uint64_t current_seed;
|
|
uint64_t current_inc;
|
|
|
|
public:
|
|
static const uint64_t DEFAULT_SEED = 12047754176567800795U;
|
|
static const uint64_t DEFAULT_INC = PCG_DEFAULT_INC_64;
|
|
|
|
RandomPCG(uint64_t p_seed = DEFAULT_SEED, uint64_t p_inc = DEFAULT_INC);
|
|
|
|
void seed(uint64_t p_seed);
|
|
uint64_t get_seed();
|
|
|
|
void set_state(uint64_t p_state);
|
|
uint64_t get_state();
|
|
|
|
void randomize();
|
|
uint32_t rand();
|
|
uint32_t rand(uint32_t bounds);
|
|
|
|
double randd();
|
|
float randf();
|
|
|
|
double randfn(double p_mean, double p_deviation);
|
|
float randfn(float p_mean, float p_deviation);
|
|
|
|
double random(double p_from, double p_to);
|
|
float random(float p_from, float p_to);
|
|
real_t randomr(real_t p_from, real_t p_to);
|
|
int random(int p_from, int p_to);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Math
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Math {
|
|
static RandomPCG default_rand;
|
|
|
|
public:
|
|
Math();
|
|
|
|
static const uint64_t RANDOM_32BIT_MAX = 0xFFFFFFFF;
|
|
|
|
static _ALWAYS_INLINE_ double sin(double p_x);
|
|
static _ALWAYS_INLINE_ float sin(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double cos(double p_x);
|
|
static _ALWAYS_INLINE_ float cos(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double tan(double p_x);
|
|
static _ALWAYS_INLINE_ float tan(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double sinh(double p_x);
|
|
static _ALWAYS_INLINE_ float sinh(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ float sinc(float p_x);
|
|
static _ALWAYS_INLINE_ double sinc(double p_x);
|
|
|
|
static _ALWAYS_INLINE_ float sincn(float p_x);
|
|
static _ALWAYS_INLINE_ double sincn(double p_x);
|
|
|
|
static _ALWAYS_INLINE_ double cosh(double p_x);
|
|
static _ALWAYS_INLINE_ float cosh(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double tanh(double p_x);
|
|
static _ALWAYS_INLINE_ float tanh(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double asin(double p_x);
|
|
static _ALWAYS_INLINE_ float asin(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double acos(double p_x);
|
|
static _ALWAYS_INLINE_ float acos(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double asin_unsafe(double p_x);
|
|
static _ALWAYS_INLINE_ float asin_unsafe(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double acos_unsafe(double p_x);
|
|
static _ALWAYS_INLINE_ float acos_unsafe(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double atan(double p_x);
|
|
static _ALWAYS_INLINE_ float atan(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double atan2(double p_y, double p_x);
|
|
static _ALWAYS_INLINE_ float atan2(float p_y, float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double sqrt(double p_x);
|
|
static _ALWAYS_INLINE_ float sqrt(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double fmod(double p_x, double p_y);
|
|
static _ALWAYS_INLINE_ float fmod(float p_x, float p_y);
|
|
|
|
static _ALWAYS_INLINE_ double floor(double p_x);
|
|
static _ALWAYS_INLINE_ float floor(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ int floorf_int(const float x);
|
|
|
|
static _ALWAYS_INLINE_ double ceil(double p_x);
|
|
static _ALWAYS_INLINE_ float ceil(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double pow(double p_x, double p_y);
|
|
static _ALWAYS_INLINE_ float pow(float p_x, float p_y);
|
|
|
|
static _ALWAYS_INLINE_ double log(double p_x);
|
|
static _ALWAYS_INLINE_ float log(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double log1p(double p_x);
|
|
static _ALWAYS_INLINE_ float log1p(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double log10(double p_x);
|
|
static _ALWAYS_INLINE_ float log10(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double log2(double p_x);
|
|
static _ALWAYS_INLINE_ float log2(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double exp(double p_x);
|
|
static _ALWAYS_INLINE_ float exp(float p_x);
|
|
|
|
static _ALWAYS_INLINE_ double erf(double p_x);
|
|
static _ALWAYS_INLINE_ float erf(float p_x);
|
|
|
|
static float divf(const float a, const float b);
|
|
|
|
static _ALWAYS_INLINE_ bool is_nan(double p_val);
|
|
|
|
static _ALWAYS_INLINE_ bool is_nan(float p_val);
|
|
|
|
static _ALWAYS_INLINE_ bool is_inf(double p_val);
|
|
|
|
static _ALWAYS_INLINE_ bool is_inf(float p_val);
|
|
|
|
static _ALWAYS_INLINE_ double abs(double g);
|
|
static _ALWAYS_INLINE_ float abs(float g);
|
|
static _ALWAYS_INLINE_ int abs(int g);
|
|
static _ALWAYS_INLINE_ int64_t abs(int64_t g);
|
|
static _ALWAYS_INLINE_ int absi(int g);
|
|
static _ALWAYS_INLINE_ int64_t absi(int64_t g);
|
|
|
|
static _ALWAYS_INLINE_ double fposmod(double p_x, double p_y);
|
|
static _ALWAYS_INLINE_ float fposmod(float p_x, float p_y);
|
|
|
|
static _ALWAYS_INLINE_ float fposmodp(float p_x, float p_y);
|
|
static _ALWAYS_INLINE_ double fposmodp(double p_x, double p_y);
|
|
|
|
static _ALWAYS_INLINE_ int64_t posmod(int64_t p_x, int64_t p_y);
|
|
|
|
static _ALWAYS_INLINE_ double deg2rad(double p_y);
|
|
static _ALWAYS_INLINE_ float deg2rad(float p_y);
|
|
|
|
static _ALWAYS_INLINE_ double rad2deg(double p_y);
|
|
static _ALWAYS_INLINE_ float rad2deg(float p_y);
|
|
|
|
static _ALWAYS_INLINE_ double lerp(double p_from, double p_to, double p_weight);
|
|
static _ALWAYS_INLINE_ float lerp(float p_from, float p_to, float p_weight);
|
|
|
|
static _ALWAYS_INLINE_ double lerp_angle(double p_from, double p_to, double p_weight);
|
|
static _ALWAYS_INLINE_ float lerp_angle(float p_from, float p_to, float p_weight);
|
|
|
|
static _ALWAYS_INLINE_ double inverse_lerp(double p_from, double p_to, double p_value);
|
|
static _ALWAYS_INLINE_ float inverse_lerp(float p_from, float p_to, float p_value);
|
|
|
|
static _ALWAYS_INLINE_ double range_lerp(double p_value, double p_istart, double p_istop, double p_ostart, double p_ostop);
|
|
static _ALWAYS_INLINE_ float range_lerp(float p_value, float p_istart, float p_istop, float p_ostart, float p_ostop);
|
|
|
|
static _ALWAYS_INLINE_ double cubic_interpolate(double p_from, double p_to, double p_pre, double p_post, double p_weight);
|
|
static _ALWAYS_INLINE_ float cubic_interpolate(float p_from, float p_to, float p_pre, float p_post, float p_weight);
|
|
|
|
static _ALWAYS_INLINE_ double bezier_interpolate(double p_start, double p_control_1, double p_control_2, double p_end, double p_t);
|
|
static _ALWAYS_INLINE_ float bezier_interpolate(float p_start, float p_control_1, float p_control_2, float p_end, float p_t);
|
|
|
|
static _ALWAYS_INLINE_ double smoothstep(double p_from, double p_to, double p_s);
|
|
static _ALWAYS_INLINE_ float smoothstep(float p_from, float p_to, float p_s);
|
|
static _ALWAYS_INLINE_ double move_toward(double p_from, double p_to, double p_delta);
|
|
static _ALWAYS_INLINE_ float move_toward(float p_from, float p_to, float p_delta);
|
|
|
|
static _ALWAYS_INLINE_ double linear2db(double p_linear);
|
|
static _ALWAYS_INLINE_ float linear2db(float p_linear);
|
|
|
|
static _ALWAYS_INLINE_ double db2linear(double p_db);
|
|
static _ALWAYS_INLINE_ float db2linear(float p_db);
|
|
|
|
static _ALWAYS_INLINE_ double round(double p_val);
|
|
static _ALWAYS_INLINE_ float round(float p_val);
|
|
|
|
static _ALWAYS_INLINE_ int64_t wrapi(int64_t value, int64_t min, int64_t max);
|
|
static _ALWAYS_INLINE_ double wrapf(double value, double min, double max);
|
|
static _ALWAYS_INLINE_ float wrapf(float value, float min, float max);
|
|
|
|
static _ALWAYS_INLINE_ float fract(float value);
|
|
static _ALWAYS_INLINE_ double fract(double value);
|
|
static _ALWAYS_INLINE_ float pingpong(float value, float length);
|
|
static _ALWAYS_INLINE_ double pingpong(double value, double length);
|
|
|
|
static double ease(double p_x, double p_c);
|
|
static int step_decimals(double p_step);
|
|
static int range_step_decimals(double p_step);
|
|
static double stepify(double p_value, double p_step);
|
|
static double dectime(double p_value, double p_amount, double p_step);
|
|
|
|
static uint32_t larger_prime(uint32_t p_val);
|
|
|
|
static void seed(uint64_t x);
|
|
static void randomize();
|
|
static uint32_t rand_from_seed(uint64_t *seed);
|
|
static uint32_t rand();
|
|
static _ALWAYS_INLINE_ double randd();
|
|
static _ALWAYS_INLINE_ float randf();
|
|
static double randfn(double mean, double deviation);
|
|
|
|
static double random(double from, double to);
|
|
static float random(float from, float to);
|
|
static real_t randomr(real_t from, real_t to);
|
|
static int random(int from, int to);
|
|
static _ALWAYS_INLINE_ int randomi(int from, int to);
|
|
|
|
static _ALWAYS_INLINE_ bool is_equal_approx_ratio(real_t a, real_t b, real_t epsilon = CMP_EPSILON, real_t min_epsilon = CMP_EPSILON);
|
|
|
|
static _ALWAYS_INLINE_ bool is_equal_approx(float a, float b);
|
|
|
|
static _ALWAYS_INLINE_ bool is_equal_approx(float a, float b, float tolerance);
|
|
|
|
static _ALWAYS_INLINE_ bool is_equal_approxt(float a, float b, float tolerance);
|
|
|
|
static _ALWAYS_INLINE_ bool is_zero_approx(float s);
|
|
|
|
static _ALWAYS_INLINE_ bool is_equal_approx(double a, double b);
|
|
|
|
static _ALWAYS_INLINE_ bool is_equal_approx(double a, double b, double tolerance);
|
|
|
|
static _ALWAYS_INLINE_ bool is_zero_approx(double s);
|
|
|
|
static _ALWAYS_INLINE_ float absf(float g);
|
|
|
|
static _ALWAYS_INLINE_ double absd(double g);
|
|
|
|
static _ALWAYS_INLINE_ int fast_ftoi(float a);
|
|
|
|
static _ALWAYS_INLINE_ uint32_t halfbits_to_floatbits(uint16_t h);
|
|
|
|
static _ALWAYS_INLINE_ float halfptr_to_float(const uint16_t *h);
|
|
|
|
static _ALWAYS_INLINE_ float half_to_float(const uint16_t h);
|
|
|
|
static _ALWAYS_INLINE_ uint16_t make_half_float(float f);
|
|
|
|
static _ALWAYS_INLINE_ float snap_scalar(float p_offset, float p_step, float p_target);
|
|
|
|
static _ALWAYS_INLINE_ float snap_scalar_separation(float p_offset, float p_step, float p_target, float p_separation);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
CowData
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class CowData {
|
|
template <class TV>
|
|
friend class Vector;
|
|
friend class String;
|
|
friend class Char16String;
|
|
friend class CharString;
|
|
template <class TV, class VV>
|
|
friend class VMap;
|
|
|
|
private:
|
|
mutable T *_ptr;
|
|
|
|
SafeNumeric<uint32_t> *_get_refcount();
|
|
|
|
uint32_t *_get_size();
|
|
|
|
size_t _get_alloc_size(size_t p_elements);
|
|
|
|
bool _get_alloc_size_checked(size_t p_elements, size_t *out);
|
|
|
|
void _unref(void *p_data);
|
|
void _ref(const CowData *p_from);
|
|
void _ref(const CowData &p_from);
|
|
uint32_t _copy_on_write();
|
|
|
|
public:
|
|
void operator=(const CowData<T> &p_from);
|
|
|
|
T *ptrw();
|
|
|
|
const T *ptr();
|
|
|
|
int size();
|
|
|
|
void clear();
|
|
bool empty();
|
|
|
|
void set(int p_index, const T &p_elem);
|
|
|
|
T &get_m(int p_index);
|
|
|
|
const T &get(int p_index);
|
|
|
|
Error resize(int p_size);
|
|
|
|
void remove(int p_index);
|
|
|
|
Error insert(int p_pos, const T &p_val);
|
|
|
|
void fill(const T &p_val);
|
|
|
|
int find(const T &p_val, int p_from = 0);
|
|
|
|
CowData();
|
|
~CowData();
|
|
CowData(CowData<T> &p_from);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
SortArray
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class SortArray {
|
|
enum {
|
|
|
|
INTROSORT_THRESHOLD = 16
|
|
};
|
|
|
|
public:
|
|
Comparator compare;
|
|
|
|
const T &median_of_3(const T &a, const T &b, const T &c);
|
|
|
|
int bitlog(int n);
|
|
|
|
void push_heap(int p_first, int p_hole_idx, int p_top_index, T p_value, T *p_array);
|
|
|
|
void pop_heap(int p_first, int p_last, int p_result, T p_value, T *p_array);
|
|
void pop_heap(int p_first, int p_last, T *p_array);
|
|
|
|
void adjust_heap(int p_first, int p_hole_idx, int p_len, T p_value, T *p_array);
|
|
|
|
void sort_heap(int p_first, int p_last, T *p_array);
|
|
|
|
void make_heap(int p_first, int p_last, T *p_array);
|
|
|
|
void partial_sort(int p_first, int p_last, int p_middle, T *p_array);
|
|
|
|
void partial_select(int p_first, int p_last, int p_middle, T *p_array);
|
|
|
|
int partitioner(int p_first, int p_last, T p_pivot, T *p_array);
|
|
|
|
void introsort(int p_first, int p_last, T *p_array, int p_max_depth);
|
|
|
|
void introselect(int p_first, int p_nth, int p_last, T *p_array, int p_max_depth);
|
|
|
|
void unguarded_linear_insert(int p_last, T p_value, T *p_array);
|
|
|
|
void linear_insert(int p_first, int p_last, T *p_array);
|
|
|
|
void insertion_sort(int p_first, int p_last, T *p_array);
|
|
|
|
void unguarded_insertion_sort(int p_first, int p_last, T *p_array);
|
|
|
|
void final_insertion_sort(int p_first, int p_last, T *p_array);
|
|
|
|
void sort_range(int p_first, int p_last, T *p_array);
|
|
|
|
void sort(T *p_array, int p_len);
|
|
|
|
void nth_element(int p_first, int p_last, int p_nth, T *p_array);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RBMap
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RBMap {
|
|
enum Color {
|
|
RED,
|
|
BLACK
|
|
};
|
|
struct _Data;
|
|
|
|
public:
|
|
class Element {
|
|
private:
|
|
friend class RBMap<K, V, C, A>;
|
|
int color;
|
|
Element *right;
|
|
Element *left;
|
|
Element *parent;
|
|
Element *_next;
|
|
Element *_prev;
|
|
K _key;
|
|
V _value;
|
|
|
|
public:
|
|
const Element *next();
|
|
Element *next();
|
|
const Element *prev();
|
|
Element *prev();
|
|
const K &key();
|
|
V &value();
|
|
const V &value();
|
|
V &get();
|
|
const V &get();
|
|
Element();
|
|
};
|
|
|
|
private:
|
|
struct _Data {
|
|
Element *_root;
|
|
Element *_nil;
|
|
int size_cache;
|
|
|
|
_Data();
|
|
|
|
void _create_root();
|
|
|
|
void _free_root();
|
|
|
|
~_Data();
|
|
};
|
|
|
|
_Data _data;
|
|
|
|
void _set_color(Element *p_node, int p_color);
|
|
|
|
void _rotate_left(Element *p_node);
|
|
|
|
void _rotate_right(Element *p_node);
|
|
|
|
Element *_successor(Element *p_node);
|
|
|
|
Element *_predecessor(Element *p_node);
|
|
|
|
Element *_find(const K &p_key);
|
|
|
|
Element *_find_closest(const K &p_key);
|
|
|
|
void _insert_rb_fix(Element *p_new_node);
|
|
|
|
Element *_insert(const K &p_key, const V &p_value);
|
|
|
|
void _erase_fix_rb(Element *p_node);
|
|
|
|
void _erase(Element *p_node);
|
|
|
|
void _calculate_depth(Element *p_element, int &max_d, int d);
|
|
|
|
void _cleanup_tree(Element *p_element);
|
|
|
|
void _copy_from(const RBMap &p_map);
|
|
|
|
public:
|
|
const Element *find(const K &p_key);
|
|
|
|
Element *find(const K &p_key);
|
|
|
|
const Element *find_closest(const K &p_key);
|
|
|
|
Element *find_closest(const K &p_key);
|
|
|
|
bool has(const K &p_key);
|
|
|
|
Element *insert(const K &p_key, const V &p_value);
|
|
|
|
void erase(Element *p_element);
|
|
|
|
bool erase(const K &p_key);
|
|
|
|
const V &operator[](const K &p_key);
|
|
|
|
V &operator[](const K &p_key);
|
|
|
|
Element *front();
|
|
|
|
Element *back();
|
|
|
|
bool empty();
|
|
int size();
|
|
|
|
int calculate_depth();
|
|
|
|
void clear();
|
|
|
|
void operator=(const RBMap &p_map);
|
|
|
|
RBMap(const RBMap &p_map);
|
|
|
|
RBMap();
|
|
|
|
~RBMap();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RBSet
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RBSet {
|
|
enum Color {
|
|
RED,
|
|
BLACK
|
|
};
|
|
struct _Data;
|
|
|
|
public:
|
|
class Element {
|
|
private:
|
|
friend class RBSet<T, C, A>;
|
|
int color;
|
|
Element *right;
|
|
Element *left;
|
|
Element *parent;
|
|
Element *_next;
|
|
Element *_prev;
|
|
T value;
|
|
|
|
public:
|
|
const Element *next();
|
|
Element *next();
|
|
const Element *prev();
|
|
Element *prev();
|
|
const T &get();
|
|
Element();
|
|
};
|
|
|
|
private:
|
|
struct _Data {
|
|
Element *_root;
|
|
Element *_nil;
|
|
int size_cache;
|
|
|
|
_Data();
|
|
|
|
void _create_root();
|
|
|
|
void _free_root();
|
|
|
|
~_Data();
|
|
};
|
|
|
|
_Data _data;
|
|
|
|
void _set_color(Element *p_node, int p_color);
|
|
|
|
void _rotate_left(Element *p_node);
|
|
|
|
void _rotate_right(Element *p_node);
|
|
|
|
Element *_successor(Element *p_node);
|
|
|
|
Element *_predecessor(Element *p_node);
|
|
|
|
Element *_find(const T &p_value);
|
|
|
|
Element *_lower_bound(const T &p_value);
|
|
|
|
void _insert_rb_fix(Element *p_new_node);
|
|
|
|
Element *_insert(const T &p_value);
|
|
|
|
void _erase_fix_rb(Element *p_node);
|
|
|
|
void _erase(Element *p_node);
|
|
|
|
void _calculate_depth(Element *p_element, int &max_d, int d);
|
|
|
|
void _cleanup_tree(Element *p_element);
|
|
|
|
void _copy_from(const RBSet &p_set);
|
|
|
|
public:
|
|
const Element *find(const T &p_value);
|
|
|
|
Element *find(const T &p_value);
|
|
|
|
Element *lower_bound(const T &p_value);
|
|
|
|
bool has(const T &p_value);
|
|
|
|
Element *insert(const T &p_value);
|
|
|
|
void erase(Element *p_element);
|
|
|
|
bool erase(const T &p_value);
|
|
|
|
Element *front();
|
|
|
|
Element *back();
|
|
|
|
bool empty();
|
|
int size();
|
|
|
|
int calculate_depth();
|
|
|
|
void clear();
|
|
|
|
void operator=(const RBSet &p_set);
|
|
|
|
RBSet(const RBSet &p_set);
|
|
|
|
RBSet();
|
|
|
|
~RBSet();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
VMap
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class VMap {
|
|
public:
|
|
struct Pair {
|
|
T key;
|
|
V value;
|
|
|
|
Pair();
|
|
|
|
Pair(const T &p_key, const V &p_value);
|
|
};
|
|
|
|
private:
|
|
CowData<Pair> _cowdata;
|
|
|
|
int _find(const T &p_val, bool &r_exact);
|
|
|
|
int _find_exact(const T &p_val);
|
|
|
|
public:
|
|
int insert(const T &p_key, const V &p_val);
|
|
|
|
bool has(const T &p_val);
|
|
|
|
void erase(const T &p_val);
|
|
|
|
int find(const T &p_val);
|
|
|
|
int find_nearest(const T &p_val);
|
|
|
|
int size();
|
|
bool empty();
|
|
|
|
const Pair *get_array();
|
|
|
|
Pair *get_array();
|
|
|
|
const V &getv(int p_index);
|
|
|
|
V &getv(int p_index);
|
|
|
|
const T &getk(int p_index);
|
|
|
|
T &getk(int p_index);
|
|
|
|
const V &operator[](const T &p_key);
|
|
|
|
V &operator[](const T &p_key);
|
|
|
|
VMap();
|
|
VMap(const VMap &p_from);
|
|
VMap &operator=(const VMap &p_from);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
VectorWriteProxy
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class VectorWriteProxy {
|
|
public:
|
|
T &operator[](int p_index);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Vector
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Vector {
|
|
friend class VectorWriteProxy<T>;
|
|
|
|
public:
|
|
VectorWriteProxy<T> write;
|
|
|
|
private:
|
|
CowData<T> _cowdata;
|
|
|
|
public:
|
|
bool push_back(T p_elem);
|
|
|
|
void remove(int p_index);
|
|
bool erase(const T &p_val);
|
|
void invert();
|
|
|
|
T *ptrw();
|
|
const T *ptr();
|
|
void clear();
|
|
bool empty();
|
|
|
|
T get(int p_index);
|
|
const T &get(int p_index);
|
|
void set(int p_index, const T &p_elem);
|
|
int size();
|
|
Error resize(int p_size);
|
|
const T &operator[](int p_index);
|
|
Error insert(int p_pos, T p_val);
|
|
int find(const T &p_val, int p_from = 0);
|
|
void fill(const T &p_val);
|
|
|
|
void append_array(Vector<T> p_other);
|
|
|
|
template <class C>
|
|
void sort_custom();
|
|
|
|
void sort();
|
|
|
|
void ordered_insert(const T &p_val);
|
|
|
|
Vector();
|
|
Vector(const Vector &p_from);
|
|
Vector &operator=(const Vector &p_from);
|
|
|
|
Vector<uint8_t> to_byte_array();
|
|
|
|
Vector<T> slice(int p_begin, int p_end = INT32_MAX);
|
|
|
|
~Vector();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
VSet
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class VSet {
|
|
Vector<T> _data;
|
|
|
|
int _find(const T &p_val, bool &r_exact);
|
|
|
|
int _find_exact(const T &p_val);
|
|
|
|
public:
|
|
void insert(const T &p_val);
|
|
|
|
bool has(const T &p_val);
|
|
|
|
void erase(const T &p_val);
|
|
|
|
int find(const T &p_val);
|
|
|
|
bool empty();
|
|
|
|
int size();
|
|
|
|
T &operator[](int p_index);
|
|
|
|
const T &operator[](int p_index);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
List
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class List {
|
|
struct _Data;
|
|
|
|
public:
|
|
class Element {
|
|
private:
|
|
friend class List<T, A>;
|
|
|
|
T value;
|
|
Element *next_ptr;
|
|
Element *prev_ptr;
|
|
_Data *data;
|
|
|
|
public:
|
|
|
|
const Element *next();
|
|
|
|
Element *next();
|
|
|
|
const Element *prev();
|
|
|
|
Element *prev();
|
|
|
|
const T &operator*();
|
|
|
|
const T *operator->();
|
|
|
|
T &operator*();
|
|
|
|
T *operator->();
|
|
|
|
T &get();
|
|
|
|
const T &get();
|
|
|
|
void set(const T &p_value);
|
|
|
|
void erase();
|
|
|
|
Element();
|
|
};
|
|
|
|
private:
|
|
struct _Data {
|
|
Element *first;
|
|
Element *last;
|
|
int size_cache;
|
|
|
|
bool erase(const Element *p_I);
|
|
};
|
|
|
|
_Data *_data;
|
|
|
|
public:
|
|
|
|
const Element *front();
|
|
|
|
Element *front();
|
|
|
|
const Element *back();
|
|
|
|
Element *back();
|
|
|
|
Element *push_back(const T &value);
|
|
|
|
void pop_back();
|
|
|
|
Element *push_front(const T &value);
|
|
|
|
void pop_front();
|
|
|
|
Element *insert_after(Element *p_element, const T &p_value);
|
|
|
|
Element *insert_before(Element *p_element, const T &p_value);
|
|
|
|
template <class T_v>
|
|
Element *find(const T_v &p_val);
|
|
|
|
bool erase(const Element *p_I);
|
|
|
|
bool erase(const T &value);
|
|
|
|
bool empty();
|
|
|
|
void clear();
|
|
|
|
int size();
|
|
|
|
void swap(Element *p_A, Element *p_B);
|
|
|
|
void operator=(const List &p_list);
|
|
|
|
T &operator[](int p_index);
|
|
|
|
const T &operator[](int p_index);
|
|
|
|
void move_to_back(Element *p_I);
|
|
|
|
void invert();
|
|
|
|
void move_to_front(Element *p_I);
|
|
|
|
void move_before(Element *value, Element *where);
|
|
|
|
void sort();
|
|
|
|
template <class C>
|
|
void sort_custom_inplace();
|
|
|
|
template <class C>
|
|
struct AuxiliaryComparator {
|
|
C compare;
|
|
bool operator();
|
|
};
|
|
|
|
template <class C>
|
|
void sort_custom();
|
|
|
|
const void *id();
|
|
|
|
List(const List &p_list);
|
|
|
|
List();
|
|
~List();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RingBuffer
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RingBuffer {
|
|
Vector<T> data;
|
|
int read_pos;
|
|
int write_pos;
|
|
int size_mask;
|
|
|
|
int inc(int &p_var, int p_size);
|
|
|
|
public:
|
|
T read();
|
|
|
|
int read(T *p_buf, int p_size, bool p_advance = true);
|
|
|
|
int copy(T *p_buf, int p_offset, int p_size);
|
|
|
|
int find(const T &t, int p_offset, int p_max_size);
|
|
|
|
int advance_read(int p_n);
|
|
|
|
int decrease_write(int p_n);
|
|
|
|
Error write(const T &p_v);
|
|
|
|
int write(const T *p_buf, int p_size);
|
|
|
|
int space_left();
|
|
int data_left();
|
|
|
|
int size();
|
|
|
|
void clear();
|
|
|
|
void resize(int p_power);
|
|
|
|
RingBuffer<T>(int p_power = 0);
|
|
~RingBuffer<T>();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
PagedAllocator
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class PagedAllocator {
|
|
T **page_pool = nullptr;
|
|
T ***available_pool = nullptr;
|
|
uint32_t pages_allocated = 0;
|
|
uint32_t allocs_available = 0;
|
|
|
|
uint32_t page_shift = 0;
|
|
uint32_t page_mask = 0;
|
|
uint32_t page_size = 0;
|
|
SpinLock spin_lock;
|
|
|
|
public:
|
|
T *alloc();
|
|
|
|
void free(T *p_mem);
|
|
|
|
void reset(bool p_allow_unfreed = false);
|
|
bool is_configured();
|
|
|
|
void configure(uint32_t p_page_size);
|
|
|
|
PagedAllocator(uint32_t p_page_size = 4096);
|
|
|
|
~PagedAllocator();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
PoolAllocator
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class PoolAllocator {
|
|
public:
|
|
typedef int ID;
|
|
|
|
private:
|
|
enum {
|
|
CHECK_BITS = 8,
|
|
CHECK_LEN = (1 << CHECK_BITS);
|
|
unsigned int len;
|
|
unsigned int lock;
|
|
unsigned int check;
|
|
|
|
void clear();
|
|
Entry();
|
|
};
|
|
|
|
typedef int EntryArrayPos;
|
|
typedef int EntryIndicesPos;
|
|
|
|
Entry *entry_array;
|
|
int *entry_indices;
|
|
int entry_max;
|
|
int entry_count;
|
|
|
|
uint8_t *pool;
|
|
void *mem_ptr;
|
|
int pool_size;
|
|
|
|
int free_mem;
|
|
int free_mem_peak;
|
|
|
|
unsigned int check_count;
|
|
int align;
|
|
|
|
bool needs_locking;
|
|
|
|
int entry_end(const Entry &p_entry);
|
|
int aligned(int p_size);
|
|
|
|
void compact(int p_up_to = -1);
|
|
void compact_up(int p_from = 0);
|
|
bool get_free_entry(EntryArrayPos *p_pos);
|
|
bool find_hole(EntryArrayPos *p_pos, int p_for_size);
|
|
bool find_entry_index(EntryIndicesPos *p_map_pos, Entry *p_entry);
|
|
Entry *get_entry(ID p_mem);
|
|
const Entry *get_entry(ID p_mem);
|
|
|
|
void create_pool(void *p_mem, int p_size, int p_max_entries);
|
|
|
|
protected:
|
|
virtual void mt_lock();
|
|
virtual void mt_unlock();
|
|
|
|
public:
|
|
enum {
|
|
DEFAULT_MAX_ALLOCS = 4096,
|
|
};
|
|
|
|
ID alloc(int p_size);
|
|
void free(ID p_mem);
|
|
Error resize(ID p_mem, int p_new_size);
|
|
int get_size(ID p_mem);
|
|
|
|
int get_free_mem();
|
|
int get_used_mem();
|
|
int get_free_peak();
|
|
|
|
Error lock(ID p_mem);
|
|
void *get(ID p_mem);
|
|
const void *get(ID p_mem);
|
|
void unlock(ID p_mem);
|
|
bool is_locked(ID p_mem);
|
|
|
|
PoolAllocator(int p_size, bool p_needs_locking = false, int p_max_entries = DEFAULT_MAX_ALLOCS);
|
|
PoolAllocator(void *p_mem, int p_size, int p_align = 1, bool p_needs_locking = false, int p_max_entries = DEFAULT_MAX_ALLOCS);
|
|
PoolAllocator(int p_align, int p_size, bool p_needs_locking = false, int p_max_entries = DEFAULT_MAX_ALLOCS);
|
|
|
|
virtual ~PoolAllocator();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
CharProxy
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class CharProxy {
|
|
friend class Char16String;
|
|
friend class CharString;
|
|
friend class String;
|
|
|
|
const int _index;
|
|
CowData<T> &_cowdata;
|
|
static const T _null = 0;
|
|
|
|
CharProxy(const int &p_index, CowData<T> &p_cowdata);
|
|
|
|
public:
|
|
CharProxy(const CharProxy<T> &p_other);
|
|
|
|
operator T();
|
|
|
|
const T *operator&();
|
|
|
|
void operator=(const T &p_other);
|
|
|
|
void operator=(const CharProxy<T> &p_other);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Char16String
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Char16String {
|
|
CowData<char16_t> _cowdata;
|
|
static const char16_t _null;
|
|
|
|
public:
|
|
char16_t *ptrw();
|
|
const char16_t *ptr();
|
|
int size();
|
|
Error resize(int p_size);
|
|
|
|
char16_t get(int p_index);
|
|
void set(int p_index, const char16_t &p_elem);
|
|
const char16_t &operator[](int p_index);
|
|
CharProxy<char16_t> operator[](int p_index);
|
|
|
|
Char16String();
|
|
Char16String(const Char16String &p_str);
|
|
void operator=(const Char16String &p_str);
|
|
Char16String(const char16_t *p_cstr);
|
|
|
|
void operator=(const char16_t *p_cstr);
|
|
bool operator<(const Char16String &p_right);
|
|
Char16String &operator+=(char16_t p_char);
|
|
int length();
|
|
const char16_t *get_data();
|
|
operator const char16_t *();
|
|
|
|
protected:
|
|
void copy_from(const char16_t *p_cstr);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
CharString
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class CharString {
|
|
CowData<char> _cowdata;
|
|
static const char _null;
|
|
|
|
public:
|
|
char *ptrw();
|
|
const char *ptr();
|
|
int size();
|
|
Error resize(int p_size);
|
|
|
|
char get(int p_index);
|
|
void set(int p_index, const char &p_elem);
|
|
const char &operator[](int p_index);
|
|
CharProxy<char> operator[](int p_index);
|
|
|
|
CharString();
|
|
CharString(const CharString &p_str);
|
|
void operator=(const CharString &p_str);
|
|
CharString(const char *p_cstr);
|
|
|
|
void operator=(const char *p_cstr);
|
|
bool operator<(const CharString &p_right);
|
|
CharString &operator+=(char p_char);
|
|
int length();
|
|
const char *get_data();
|
|
operator const char *();
|
|
|
|
protected:
|
|
void copy_from(const char *p_cstr);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
String
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class String {
|
|
public:
|
|
enum {
|
|
npos = -1
|
|
};
|
|
|
|
CharType *ptrw();
|
|
const CharType *ptr();
|
|
|
|
void remove(int p_index);
|
|
|
|
void clear();
|
|
|
|
CharType get(int p_index);
|
|
void set(int p_index, const CharType &p_elem);
|
|
int size();
|
|
Error resize(int p_size);
|
|
Error set_length(int p_length);
|
|
|
|
const CharType &operator[](int p_index);
|
|
CharProxy<CharType> operator[](int p_index);
|
|
|
|
bool operator==(const String &p_str);
|
|
bool operator!=(const String &p_str);
|
|
String operator+(const String &p_str);
|
|
|
|
String &operator+=(const String &);
|
|
String &operator+=(CharType p_char);
|
|
String &operator+=(const char *p_str);
|
|
String &operator+=(const wchar_t *p_str);
|
|
String &operator+=(const CharType *p_str);
|
|
|
|
void operator=(const char *p_str);
|
|
void operator=(const wchar_t *p_str);
|
|
void operator=(const CharType *p_str);
|
|
|
|
bool operator==(const char *p_str);
|
|
bool operator==(const wchar_t *p_str);
|
|
bool operator==(const CharType *p_str);
|
|
bool operator==(const StrRange &p_str_range);
|
|
|
|
bool operator!=(const char *p_str);
|
|
bool operator!=(const wchar_t *p_str);
|
|
bool operator!=(const CharType *p_str);
|
|
|
|
bool operator<(const CharType *p_str);
|
|
bool operator<(const char *p_str);
|
|
bool operator<(const wchar_t *p_str);
|
|
|
|
bool operator<(const String &p_str);
|
|
bool operator<=(const String &p_str);
|
|
bool operator>(const String &p_str);
|
|
bool operator>=(const String &p_str);
|
|
|
|
signed char casecmp_to(const String &p_str);
|
|
signed char nocasecmp_to(const String &p_str);
|
|
signed char naturalnocasecmp_to(const String &p_str);
|
|
|
|
const CharType *get_data();
|
|
|
|
int length();
|
|
|
|
bool is_valid_string();
|
|
|
|
void print_unicode_error(const String &p_message, bool p_critical = false);
|
|
|
|
String substr(int p_from, int p_chars = -1);
|
|
String substr_index(const int p_start_index, const int p_end_index);
|
|
|
|
int find(const String &p_str, int p_from = 0);
|
|
int find(const char *p_str, int p_from = 0);
|
|
int find_char(const CharType &p_char, int p_from = 0);
|
|
int find_last(const String &p_str);
|
|
int findn(const String &p_str, int p_from = 0);
|
|
int rfind(const String &p_str, int p_from = -1);
|
|
int rfindn(const String &p_str, int p_from = -1);
|
|
int findmk(const Vector<String> &p_keys, int p_from = 0, int *r_key = nullptr);
|
|
int find_first_difference_index(const String &p_str);
|
|
|
|
bool is_word_at(const int p_index, const char *p_str);
|
|
bool is_word_at(const int p_index, const String &p_str);
|
|
|
|
bool match(const String &p_wildcard);
|
|
bool matchn(const String &p_wildcard);
|
|
|
|
bool begins_with(const String &p_string);
|
|
bool begins_with(const char *p_string);
|
|
bool ends_with(const String &p_string);
|
|
|
|
bool is_enclosed_in(const String &p_string);
|
|
bool is_subsequence_of(const String &p_string);
|
|
bool is_subsequence_ofi(const String &p_string);
|
|
bool is_quoted();
|
|
|
|
Vector<String> bigrams();
|
|
float similarity(const String &p_string);
|
|
|
|
String replace_first(const String &p_key, const String &p_with);
|
|
String replace(const String &p_key, const String &p_with);
|
|
String replace(const char *p_key, const char *p_with);
|
|
String replacen(const String &p_key, const String &p_with);
|
|
|
|
String newline_to_br();
|
|
|
|
String repeat(int p_count);
|
|
String insert(int p_at_pos, const String &p_string);
|
|
|
|
String pad_decimals(int p_digits);
|
|
String pad_zeros(int p_digits);
|
|
|
|
String trim_prefix(const String &p_prefix);
|
|
String trim_suffix(const String &p_suffix);
|
|
|
|
String lpad(int min_length, const String &character = " ");
|
|
String rpad(int min_length, const String &character = " ");
|
|
|
|
String quote(String quotechar = "\"");
|
|
String unquote();
|
|
|
|
static String num(double p_num, int p_decimals = -1);
|
|
static String num_scientific(double p_num);
|
|
static String num_real(double p_num);
|
|
static String num_int64(int64_t p_num, int base = 10, bool capitalize_hex = false);
|
|
static String num_uint64(uint64_t p_num, int base = 10, bool capitalize_hex = false);
|
|
|
|
static String chr(CharType p_char);
|
|
|
|
static String md5(const uint8_t *p_md5);
|
|
|
|
static String hex_encode_buffer(const uint8_t *p_buffer, int p_len);
|
|
|
|
static String bool_num(bool p_val);
|
|
static String bool_str(bool p_val);
|
|
|
|
bool is_numeric();
|
|
bool is_zero();
|
|
|
|
double to_double();
|
|
float to_float();
|
|
int to_int();
|
|
bool to_bool();
|
|
uint32_t to_uint();
|
|
|
|
int hex_to_int(bool p_with_prefix = true);
|
|
int64_t hex_to_int64(bool p_with_prefix = true);
|
|
int64_t bin_to_int64(bool p_with_prefix = true);
|
|
int64_t to_int64();
|
|
|
|
static int64_t to_int(const char *p_str, int p_len = -1);
|
|
static int64_t to_int(const wchar_t *p_str, int p_len = -1);
|
|
static int64_t to_int(const CharType *p_str, int p_len = -1, bool p_clamp = false);
|
|
|
|
static double to_float(const char *p_str);
|
|
static double to_float(const wchar_t *p_str, const wchar_t **r_end = nullptr);
|
|
static double to_float(const CharType *p_str, const CharType **r_end = nullptr);
|
|
|
|
static double to_double(const char *p_str);
|
|
static double to_double(const wchar_t *p_str, const wchar_t **r_end = nullptr);
|
|
static double to_double(const CharType *p_str, const CharType **r_end = nullptr);
|
|
|
|
static uint32_t num_characters(int64_t p_int);
|
|
|
|
String capitalize();
|
|
String camelcase_to_underscore(bool lowercase = true);
|
|
|
|
int get_slice_count(String p_splitter);
|
|
String get_slice(String p_splitter, int p_slice);
|
|
String get_slicec(CharType p_splitter, int p_slice);
|
|
|
|
Vector<String> split(const String &p_splitter, bool p_allow_empty = true, int p_maxsplit = 0);
|
|
Vector<String> rsplit(const String &p_splitter, bool p_allow_empty = true, int p_maxsplit = 0);
|
|
Vector<String> split_spaces();
|
|
Vector<float> split_floats(const String &p_splitter, bool p_allow_empty = true);
|
|
Vector<float> split_floats_mk(const Vector<String> &p_splitters, bool p_allow_empty = true);
|
|
Vector<int> split_ints(const String &p_splitter, bool p_allow_empty = true);
|
|
Vector<int> split_ints_mk(const Vector<String> &p_splitters, bool p_allow_empty = true);
|
|
|
|
String join(const Vector<String> &parts);
|
|
|
|
static CharType char_uppercase(CharType p_char);
|
|
static CharType char_lowercase(CharType p_char);
|
|
String to_upper();
|
|
String to_lower();
|
|
|
|
int count(const String &p_string, int p_from = 0, int p_to = 0);
|
|
int countn(const String &p_string, int p_from = 0, int p_to = 0);
|
|
|
|
String left(int p_pos);
|
|
String right(int p_pos);
|
|
String indent(const String &p_prefix);
|
|
String dedent();
|
|
|
|
String strip_edges(bool left = true, bool right = true);
|
|
String strip_escapes();
|
|
String lstrip(const String &p_chars);
|
|
String rstrip(const String &p_chars);
|
|
|
|
String get_extension();
|
|
String get_basename();
|
|
String plus_file(const String &p_file);
|
|
|
|
CharType unicode_at(int p_idx);
|
|
CharType ord_at(int p_idx);
|
|
|
|
void erase(int p_pos, int p_chars);
|
|
|
|
CharString ascii(bool p_allow_extended = false);
|
|
CharString utf8();
|
|
Error parse_utf8(const char *p_utf8, int p_len = -1, bool p_skip_cr = false);
|
|
static String utf8(const char *p_utf8, int p_len = -1);
|
|
int utf8_byte_length();
|
|
|
|
Char16String utf16();
|
|
Error parse_utf16(const char16_t *p_utf16, int p_len = -1);
|
|
static String utf16(const char16_t *p_utf16, int p_len = -1);
|
|
int utf16_byte_length();
|
|
|
|
static uint32_t hash(const char *p_cstr);
|
|
static uint32_t hash(const char *p_cstr, int p_len);
|
|
static uint32_t hash(const wchar_t *p_cstr);
|
|
static uint32_t hash(const wchar_t *p_cstr, int p_len);
|
|
static uint32_t hash(const CharType *p_cstr);
|
|
static uint32_t hash(const CharType *p_cstr, int p_len);
|
|
|
|
uint32_t hash();
|
|
uint64_t hash64();
|
|
|
|
bool empty();
|
|
bool contains(const char *p_str);
|
|
bool contains(const String &p_str);
|
|
|
|
bool is_abs_path();
|
|
bool is_rel_path();
|
|
bool is_resource_file();
|
|
String path_to(const String &p_path);
|
|
String path_to_file(const String &p_path);
|
|
String get_base_dir();
|
|
String get_file();
|
|
static String humanize_size(uint64_t p_size);
|
|
String simplify_path();
|
|
bool is_network_share_path();
|
|
String append_path(const char *p_path);
|
|
String append_path(const String &p_path);
|
|
String path_clean_end_slash();
|
|
String path_ensure_end_slash();
|
|
String path_get_prev_dir();
|
|
|
|
String xml_escape(bool p_escape_quotes = false);
|
|
String xml_unescape();
|
|
String http_escape();
|
|
String http_unescape();
|
|
String uri_encode();
|
|
String uri_decode();
|
|
String c_escape();
|
|
String c_escape_multiline();
|
|
String c_unescape();
|
|
String json_escape();
|
|
String word_wrap(int p_chars_per_line);
|
|
Error parse_url(String &r_scheme, String &r_host, int &r_port, String &r_path);
|
|
|
|
String percent_encode();
|
|
String percent_decode();
|
|
|
|
String property_name_encode();
|
|
|
|
static String get_invalid_node_name_characters();
|
|
String validate_node_name();
|
|
String validate_identifier();
|
|
|
|
bool is_valid_identifier();
|
|
bool is_valid_integer();
|
|
bool is_valid_float();
|
|
bool is_valid_hex_number(bool p_with_prefix);
|
|
bool is_valid_html_color();
|
|
bool is_valid_ip_address();
|
|
bool is_valid_filename();
|
|
bool is_valid_bool();
|
|
bool is_valid_unsigned_integer();
|
|
|
|
String();
|
|
String(const String &p_str);
|
|
|
|
void operator=(const String &p_str);
|
|
|
|
Vector<uint8_t> to_ascii_buffer();
|
|
Vector<uint8_t> to_utf8_buffer();
|
|
Vector<uint8_t> to_utf16_buffer();
|
|
Vector<uint8_t> to_utf32_buffer();
|
|
|
|
String(const char *p_str);
|
|
String(const wchar_t *p_str);
|
|
String(const CharType *p_str);
|
|
String(const char *p_str, int p_clip_to_len);
|
|
String(const wchar_t *p_str, int p_clip_to_len);
|
|
String(const CharType *p_str, int p_clip_to_len);
|
|
String(const StrRange &p_range);
|
|
|
|
private:
|
|
CowData<CharType> _cowdata;
|
|
static const CharType _null;
|
|
|
|
void copy_from(const char *p_cstr);
|
|
void copy_from(const char *p_cstr, const int p_clip_to);
|
|
void copy_from(const wchar_t *p_cstr);
|
|
void copy_from(const wchar_t *p_cstr, const int p_clip_to);
|
|
void copy_from(const CharType *p_cstr);
|
|
void copy_from(const CharType *p_cstr, const int p_clip_to);
|
|
|
|
void copy_from(const CharType &p_char);
|
|
|
|
void copy_from_unchecked(const CharType *p_char, const int p_length);
|
|
|
|
bool _base_is_subsequence_of(const String &p_string, bool case_insensitive);
|
|
int _count(const String &p_string, int p_from, int p_to, bool p_case_insensitive);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
StringName
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class StringName {
|
|
enum {
|
|
STRING_TABLE_BITS = 14,
|
|
STRING_TABLE_LEN = 1 << STRING_TABLE_BITS,
|
|
STRING_TABLE_MASK = STRING_TABLE_LEN - 1
|
|
};
|
|
|
|
struct _Data {
|
|
SafeRefCount refcount;
|
|
SafeNumeric<uint32_t> static_count;
|
|
const char *cname;
|
|
String name;
|
|
|
|
#ifdef DEBUG_ENABLED
|
|
uint32_t debug_references;
|
|
#endif
|
|
|
|
String get_name();
|
|
|
|
int idx;
|
|
uint32_t hash;
|
|
_Data *prev;
|
|
_Data *next;
|
|
|
|
_Data();
|
|
};
|
|
|
|
static _Data *_table[STRING_TABLE_LEN];
|
|
|
|
_Data *_data;
|
|
|
|
union _HashUnion {
|
|
_Data *ptr;
|
|
uint32_t hash;
|
|
|
|
_HashUnion();
|
|
};
|
|
|
|
void unref();
|
|
friend void register_core_types();
|
|
friend void unregister_core_types();
|
|
|
|
static Mutex lock;
|
|
static bool configured;
|
|
#ifdef DEBUG_ENABLED
|
|
struct DebugSortReferences {
|
|
bool operator();
|
|
};
|
|
|
|
static bool debug_stringname;
|
|
#endif
|
|
|
|
StringName(_Data *p_data);
|
|
|
|
public:
|
|
operator const void *();
|
|
|
|
bool operator==(const String &p_name);
|
|
bool operator==(const char *p_name);
|
|
bool operator!=(const String &p_name);
|
|
|
|
bool is_node_unique_name();
|
|
|
|
bool operator<(const StringName &p_name);
|
|
bool operator==(const StringName &p_name);
|
|
uint32_t hash();
|
|
const void *data_unique_pointer();
|
|
bool operator!=(const StringName &p_name);
|
|
|
|
operator String();
|
|
|
|
static StringName search(const char *p_name);
|
|
static StringName search(const CharType *p_name);
|
|
static StringName search(const String &p_name);
|
|
|
|
struct AlphCompare {
|
|
bool operator();
|
|
};
|
|
|
|
void operator=(const StringName &p_name);
|
|
StringName(const char *p_name, bool p_static = false);
|
|
StringName(const StringName &p_name);
|
|
StringName(const String &p_name, bool p_static = false);
|
|
StringName(const StaticCString &p_static_string, bool p_static = false);
|
|
StringName();
|
|
~StringName();
|
|
|
|
static void setup();
|
|
static void cleanup();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
PoolVector
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class PoolVector {
|
|
MemoryPool::Alloc *alloc;
|
|
|
|
void _copy_on_write();
|
|
|
|
void _reference(const PoolVector &p_pool_vector);
|
|
|
|
void _unreference();
|
|
|
|
public:
|
|
class Access {
|
|
friend class PoolVector;
|
|
|
|
protected:
|
|
MemoryPool::Alloc *alloc;
|
|
T *mem;
|
|
|
|
void _ref(MemoryPool::Alloc *p_alloc);
|
|
|
|
void _unref();
|
|
|
|
Access();
|
|
|
|
public:
|
|
virtual ~Access();
|
|
|
|
void release();
|
|
};
|
|
|
|
class Read : public Access {
|
|
public:
|
|
const T &operator[](int p_index);
|
|
const T *ptr();
|
|
|
|
void operator=(const Read &p_read);
|
|
|
|
Read(const Read &p_read);
|
|
|
|
Read();
|
|
};
|
|
|
|
class Write : public Access {
|
|
public:
|
|
T &operator[](int p_index);
|
|
T *ptr();
|
|
|
|
void operator=(const Write &p_read);
|
|
|
|
Write(const Write &p_read);
|
|
|
|
Write();
|
|
};
|
|
|
|
Read read();
|
|
Write write();
|
|
|
|
template <class MC>
|
|
void fill_with(const MC &p_mc);
|
|
|
|
void remove(int p_index);
|
|
|
|
int size();
|
|
bool empty();
|
|
T get(int p_index);
|
|
void set(int p_index, const T &p_val);
|
|
void fill(const T &p_val);
|
|
void push_back(const T &p_val);
|
|
void append(const T &p_val);
|
|
void append_array(const PoolVector<T> &p_arr);
|
|
|
|
PoolVector<T> subarray(int p_from, int p_to);
|
|
|
|
Error insert(int p_pos, const T &p_val);
|
|
|
|
String join(const String &delimiter);
|
|
|
|
bool contains(const T &p_val);
|
|
int find(const T &p_val, int p_from = 0);
|
|
int rfind(const T &p_val, int p_from = -1);
|
|
int count(const T &p_val);
|
|
bool has(const T &p_val);
|
|
|
|
bool is_locked();
|
|
|
|
T operator[](int p_index);
|
|
|
|
Error resize(int p_size);
|
|
Error clear();
|
|
|
|
void invert();
|
|
void sort();
|
|
|
|
void operator=(const PoolVector &p_pool_vector);
|
|
PoolVector();
|
|
PoolVector(const PoolVector &p_pool_vector);
|
|
~PoolVector();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
TightLocalVector
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class TightLocalVector {
|
|
private:
|
|
U count = 0;
|
|
U capacity = 0;
|
|
T *data = nullptr;
|
|
|
|
public:
|
|
T *ptr();
|
|
|
|
const T *ptr();
|
|
|
|
void push_back(T p_elem);
|
|
|
|
void remove(U p_index);
|
|
|
|
void remove_unordered(U p_index);
|
|
|
|
void erase(const T &p_val);
|
|
|
|
U erase_multiple_unordered(const T &p_val);
|
|
|
|
void invert();
|
|
|
|
void clear();
|
|
void reset();
|
|
bool empty();
|
|
U get_capacity();
|
|
void reserve(U p_size);
|
|
|
|
U size();
|
|
void resize(U p_size);
|
|
const T &operator[](U p_index);
|
|
T &operator[](U p_index);
|
|
|
|
void fill(T p_val);
|
|
|
|
void insert(U p_pos, T p_val);
|
|
|
|
int64_t find(const T &p_val, U p_from = 0);
|
|
|
|
template <class C>
|
|
void sort_custom();
|
|
|
|
void sort();
|
|
|
|
void ordered_insert(T p_val);
|
|
|
|
operator Vector<T>();
|
|
|
|
operator PoolVector<T>();
|
|
|
|
Vector<uint8_t> to_byte_array();
|
|
|
|
TightLocalVector();
|
|
TightLocalVector(const TightLocalVector &p_from);
|
|
TightLocalVector(const Vector<T> &p_from);
|
|
TightLocalVector(const PoolVector<T> &p_from);
|
|
|
|
void operator=(const TightLocalVector &p_from);
|
|
void operator=(const Vector<T> &p_from);
|
|
TightLocalVector &operator=(const PoolVector<T> &p_from);
|
|
|
|
~TightLocalVector();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
TightLocalVectori
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class TightLocalVectori : public TightLocalVector<T, I, force_trivial> {
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
LocalVector
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class LocalVector {
|
|
protected:
|
|
U count = 0;
|
|
U capacity = 0;
|
|
T *data = nullptr;
|
|
|
|
public:
|
|
T *ptr();
|
|
|
|
const T *ptr();
|
|
|
|
void push_back(T p_elem);
|
|
|
|
void remove(U p_index);
|
|
|
|
void remove_unordered(U p_index);
|
|
|
|
bool erase(const T &p_val);
|
|
|
|
U erase_multiple_unordered(const T &p_val);
|
|
|
|
void invert();
|
|
|
|
void clear();
|
|
void reset();
|
|
bool empty();
|
|
U get_capacity();
|
|
void reserve(U p_size, bool p_allow_shrink = false);
|
|
|
|
U size();
|
|
void resize(U p_size);
|
|
const T &operator[](U p_index);
|
|
T &operator[](U p_index);
|
|
|
|
void fill(T p_val);
|
|
|
|
void insert(U p_pos, T p_val);
|
|
|
|
int64_t find(const T &p_val, U p_from = 0);
|
|
|
|
template <class C>
|
|
void sort_custom();
|
|
|
|
void sort();
|
|
|
|
void ordered_insert(T p_val);
|
|
|
|
operator Vector<T>();
|
|
|
|
operator PoolVector<T>();
|
|
|
|
Vector<uint8_t> to_byte_array();
|
|
|
|
LocalVector();
|
|
LocalVector(const LocalVector &p_from);
|
|
LocalVector(const Vector<T> &p_from);
|
|
LocalVector(const PoolVector<T> &p_from);
|
|
|
|
LocalVector &operator=(const LocalVector &p_from);
|
|
LocalVector &operator=(const Vector<T> &p_from);
|
|
LocalVector &operator=(const PoolVector<T> &p_from);
|
|
|
|
~LocalVector();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
LocalVectori
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class LocalVectori : public LocalVector<T, I, force_trivial> {
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
OGHashMap
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class OGHashMap {
|
|
public:
|
|
struct Pair {
|
|
TKey key;
|
|
TData data;
|
|
|
|
Pair(const TKey &p_key);
|
|
Pair(const TKey &p_key, const TData &p_data);
|
|
};
|
|
|
|
struct Element {
|
|
private:
|
|
friend class OGHashMap;
|
|
|
|
uint32_t hash;
|
|
Element *next;
|
|
Element();
|
|
Pair pair;
|
|
|
|
public:
|
|
const TKey &key();
|
|
|
|
TData &value();
|
|
|
|
const TData &value();
|
|
|
|
TData &get();
|
|
const TData &get();
|
|
|
|
Element(const TKey &p_key);
|
|
Element(const Element &p_other);
|
|
};
|
|
|
|
private:
|
|
Element **hash_table;
|
|
uint8_t hash_table_power;
|
|
uint32_t elements;
|
|
|
|
void make_hash_table();
|
|
|
|
void erase_hash_table();
|
|
|
|
void check_hash_table();
|
|
|
|
const Element *get_element(const TKey &p_key);
|
|
|
|
Element *create_element(const TKey &p_key);
|
|
|
|
void copy_from(const OGHashMap &p_t);
|
|
|
|
public:
|
|
Element *set(const TKey &p_key, const TData &p_data);
|
|
|
|
Element *set(const Pair &p_pair);
|
|
|
|
bool has(const TKey &p_key);
|
|
|
|
const TData &get(const TKey &p_key);
|
|
|
|
TData &get(const TKey &p_key);
|
|
|
|
TData *getptr(const TKey &p_key);
|
|
|
|
const TData *getptr(const TKey &p_key);
|
|
|
|
const Element *find(const TKey &p_key);
|
|
|
|
Element *find(const TKey &p_key);
|
|
|
|
template <class C>
|
|
TData *custom_getptr(C p_custom_key, uint32_t p_custom_hash);
|
|
|
|
template <class C>
|
|
const TData *custom_getptr(C p_custom_key, uint32_t p_custom_hash);
|
|
|
|
bool erase(const TKey &p_key);
|
|
|
|
const TData &operator[](const TKey &p_key);
|
|
TData &operator[](const TKey &p_key);
|
|
|
|
const TKey *next(const TKey *p_key);
|
|
|
|
unsigned int size();
|
|
|
|
bool empty();
|
|
|
|
void clear();
|
|
|
|
void operator=(const OGHashMap &p_table);
|
|
|
|
OGHashMap();
|
|
|
|
void get_key_value_ptr_array(const Pair **p_pairs);
|
|
|
|
void get_key_list(List<TKey> *p_keys);
|
|
|
|
OGHashMap(const OGHashMap &p_table);
|
|
|
|
~OGHashMap();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
OrderedHashMap
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class OrderedHashMap {
|
|
typedef List<Pair<const K *, V>> InternalList;
|
|
typedef OGHashMap<K, typename InternalList::Element *, Hasher, Comparator, MIN_HASH_TABLE_POWER, RELATIONSHIP> InternalMap;
|
|
|
|
InternalList list;
|
|
InternalMap map;
|
|
|
|
public:
|
|
class Element {
|
|
friend class OrderedHashMap<K, V, Hasher, Comparator, MIN_HASH_TABLE_POWER, RELATIONSHIP>;
|
|
|
|
typename InternalList::Element *list_element;
|
|
typename InternalList::Element *prev_element;
|
|
typename InternalList::Element *next_element;
|
|
|
|
Element(typename InternalList::Element *p_element);
|
|
|
|
public:
|
|
Element();
|
|
|
|
Element next();
|
|
|
|
Element prev();
|
|
|
|
Element(const Element &other);
|
|
|
|
Element &operator=(const Element &other);
|
|
|
|
bool operator==(const Element &p_other);
|
|
bool operator!=(const Element &p_other);
|
|
|
|
operator bool();
|
|
|
|
const K &key();
|
|
|
|
V &value();
|
|
|
|
const V &value();
|
|
|
|
V &get();
|
|
|
|
const V &get();
|
|
};
|
|
|
|
class ConstElement {
|
|
friend class OrderedHashMap<K, V, Hasher, Comparator, MIN_HASH_TABLE_POWER, RELATIONSHIP>;
|
|
|
|
const typename InternalList::Element *list_element;
|
|
|
|
ConstElement(const typename InternalList::Element *p_element);
|
|
|
|
public:
|
|
ConstElement();
|
|
|
|
ConstElement(const ConstElement &other);
|
|
|
|
ConstElement &operator=(const ConstElement &other);
|
|
|
|
ConstElement next();
|
|
|
|
ConstElement prev();
|
|
|
|
bool operator==(const ConstElement &p_other);
|
|
bool operator!=(const ConstElement &p_other);
|
|
|
|
operator bool();
|
|
|
|
const K &key();
|
|
|
|
const V &value();
|
|
|
|
const V &get();
|
|
};
|
|
|
|
ConstElement find(const K &p_key);
|
|
|
|
Element find(const K &p_key);
|
|
|
|
Element insert(const K &p_key, const V &p_value);
|
|
|
|
void erase(Element &p_element);
|
|
|
|
bool erase(const K &p_key);
|
|
|
|
bool has(const K &p_key);
|
|
|
|
const V &operator[](const K &p_key);
|
|
|
|
V &operator[](const K &p_key);
|
|
|
|
Element front();
|
|
|
|
Element back();
|
|
|
|
ConstElement front();
|
|
|
|
ConstElement back();
|
|
|
|
bool empty();
|
|
int size();
|
|
|
|
const void *id();
|
|
|
|
void clear();
|
|
|
|
private:
|
|
void _copy_from(const OrderedHashMap &p_map);
|
|
|
|
public:
|
|
void operator=(const OrderedHashMap &p_map);
|
|
|
|
OrderedHashMap(const OrderedHashMap &p_map);
|
|
|
|
OrderedHashMap();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
HashMap
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class HashMap {
|
|
public:
|
|
const uint32_t MIN_CAPACITY_INDEX = 2;
|
|
const float MAX_OCCUPANCY = 0.75;
|
|
const uint32_t EMPTY_HASH = 0;
|
|
|
|
public:
|
|
struct Element {
|
|
Element *next = nullptr;
|
|
Element *prev = nullptr;
|
|
KeyValue<TKey, TValue> data;
|
|
|
|
const TKey &key();
|
|
|
|
TValue &value();
|
|
|
|
const TValue &value();
|
|
|
|
TValue &get();
|
|
const TValue &get();
|
|
|
|
Element();
|
|
Element(const TKey &p_key, const TValue &p_value);
|
|
};
|
|
|
|
public:
|
|
uint32_t get_capacity();
|
|
uint32_t size();
|
|
|
|
bool empty();
|
|
|
|
void clear();
|
|
|
|
TValue &get(const TKey &p_key);
|
|
|
|
const TValue &get(const TKey &p_key);
|
|
|
|
const TValue *getptr(const TKey &p_key);
|
|
|
|
TValue *getptr(const TKey &p_key);
|
|
|
|
const Element *get_element(const TKey &p_key);
|
|
|
|
Element *get_element(const TKey &p_key);
|
|
|
|
const Element *find(const TKey &p_key);
|
|
|
|
Element *find(const TKey &p_key);
|
|
|
|
template <class C>
|
|
TValue *custom_getptr(C p_custom_key, uint32_t p_custom_hash);
|
|
|
|
template <class C>
|
|
const TValue *custom_getptr(C p_custom_key, uint32_t p_custom_hash);
|
|
|
|
bool has(const TKey &p_key);
|
|
|
|
bool erase(const TKey &p_key);
|
|
|
|
void reserve(uint32_t p_new_capacity);
|
|
|
|
Element *front();
|
|
Element *back();
|
|
|
|
const Element *front();
|
|
const Element *back();
|
|
|
|
const TKey *next(const TKey *p_key);
|
|
|
|
const TValue &operator[](const TKey &p_key);
|
|
|
|
TValue &operator[](const TKey &p_key);
|
|
|
|
Element *insert(const TKey &p_key, const TValue &p_value, bool p_front_insert = false);
|
|
|
|
Element *set(const TKey &p_key, const TValue &p_value, bool p_front_insert = false);
|
|
|
|
void get_key_list(List<TKey> *p_keys);
|
|
|
|
HashMap(const HashMap &p_other);
|
|
|
|
void operator=(const HashMap &p_other);
|
|
|
|
HashMap(uint32_t p_initial_capacity);
|
|
HashMap();
|
|
|
|
uint32_t debug_get_hash(uint32_t p_index);
|
|
Element *debug_get_element(uint32_t p_index);
|
|
|
|
~HashMap();
|
|
|
|
private:
|
|
Element **elements = nullptr;
|
|
uint32_t *hashes = nullptr;
|
|
Element *head_element = nullptr;
|
|
Element *tail_element = nullptr;
|
|
|
|
uint32_t capacity_index = 0;
|
|
uint32_t num_elements = 0;
|
|
|
|
uint32_t _hash(const TKey &p_key);
|
|
|
|
static uint32_t _get_probe_length(const uint32_t p_pos, const uint32_t p_hash, const uint32_t p_capacity, const uint64_t p_capacity_inv);
|
|
|
|
bool _lookup_pos(const TKey &p_key, uint32_t &r_pos);
|
|
|
|
void _insert_with_hash(uint32_t p_hash, Element *p_value);
|
|
|
|
void _resize_and_rehash(uint32_t p_new_capacity_index);
|
|
|
|
Element *_insert(const TKey &p_key, const TValue &p_value, bool p_front_insert = false);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
HashSet
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class HashSet {
|
|
public:
|
|
static constexpr uint32_t MIN_CAPACITY_INDEX = 2;
|
|
static constexpr float MAX_OCCUPANCY = 0.75;
|
|
static constexpr uint32_t EMPTY_HASH = 0;
|
|
|
|
private:
|
|
TKey *keys = nullptr;
|
|
uint32_t *hash_to_key = nullptr;
|
|
uint32_t *key_to_hash = nullptr;
|
|
uint32_t *hashes = nullptr;
|
|
|
|
uint32_t capacity_index = 0;
|
|
uint32_t num_elements = 0;
|
|
|
|
uint32_t _hash(const TKey &p_key);
|
|
|
|
static uint32_t _get_probe_length(const uint32_t p_pos, const uint32_t p_hash, const uint32_t p_capacity, const uint64_t p_capacity_inv);
|
|
|
|
bool _lookup_pos(const TKey &p_key, uint32_t &r_pos);
|
|
|
|
uint32_t _insert_with_hash(uint32_t p_hash, uint32_t p_index);
|
|
|
|
void _resize_and_rehash(uint32_t p_new_capacity_index);
|
|
|
|
int32_t _insert(const TKey &p_key);
|
|
|
|
void _init_from(const HashSet &p_other);
|
|
|
|
public:
|
|
uint32_t get_capacity();
|
|
uint32_t size();
|
|
|
|
bool is_empty();
|
|
|
|
void clear();
|
|
|
|
bool has(const TKey &p_key);
|
|
|
|
bool erase(const TKey &p_key);
|
|
|
|
void reserve(uint32_t p_new_capacity);
|
|
|
|
struct Iterator {
|
|
const TKey &operator*();
|
|
const TKey *operator->();
|
|
Iterator &operator++();
|
|
Iterator &operator--();
|
|
|
|
const TKey &key();
|
|
const TKey *key_ptr();
|
|
|
|
Iterator &next();
|
|
Iterator &prev();
|
|
|
|
bool valid();
|
|
|
|
bool operator==(const Iterator &b);
|
|
bool operator!=(const Iterator &b);
|
|
|
|
explicit operator bool();
|
|
|
|
Iterator(const TKey *p_keys, uint32_t p_num_keys, int32_t p_index = -1);
|
|
Iterator();
|
|
Iterator(const Iterator &p_it);
|
|
void operator=(const Iterator &p_it);
|
|
|
|
private:
|
|
const TKey *keys = nullptr;
|
|
uint32_t num_keys = 0;
|
|
int32_t index = -1;
|
|
};
|
|
|
|
Iterator begin();
|
|
Iterator end();
|
|
Iterator last();
|
|
|
|
Iterator find(const TKey &p_key);
|
|
|
|
void remove(const Iterator &p_iter);
|
|
|
|
Iterator insert(const TKey &p_key);
|
|
|
|
HashSet(const HashSet &p_other);
|
|
|
|
void operator=(const HashSet &p_other);
|
|
|
|
HashSet(uint32_t p_initial_capacity);
|
|
HashSet();
|
|
|
|
void reset();
|
|
|
|
~HashSet();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
FileAccess
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class FileAccess {
|
|
public:
|
|
|
|
String read_file(const String &path);
|
|
|
|
Vector<uint8_t> read_file_bin(const String &path);
|
|
Error read_file_into_bin(const String &path, Vector<uint8_t> *data);
|
|
|
|
Error write_file(const String &path, const String &str);
|
|
Error write_file_bin(const String &path, const Vector<uint8_t> &data);
|
|
|
|
FileAccess();
|
|
virtual ~FileAccess();
|
|
|
|
private:
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
DirAccess
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class DirAccess {
|
|
public:
|
|
Error open_dir(const String &path, bool skip_specials = true);
|
|
Error open_dir(const char *path, bool skip_specials = true);
|
|
void close_dir();
|
|
|
|
bool has_next();
|
|
bool read();
|
|
bool next();
|
|
|
|
bool current_is_ok();
|
|
String current_get_name();
|
|
String current_get_path();
|
|
String current_get_extension();
|
|
const char *current_get_name_cstr();
|
|
const char *current_get_path_cstr();
|
|
const char *current_get_extension_cstr();
|
|
bool current_is_file();
|
|
bool current_is_dir();
|
|
bool current_is_special_dir();
|
|
|
|
bool is_dir_open();
|
|
bool is_dir_closed();
|
|
|
|
DirAccess();
|
|
virtual ~DirAccess();
|
|
|
|
private:
|
|
bool _skip_specials;
|
|
int _read_file_result;
|
|
tinydir_dir *_dir;
|
|
tinydir_file *_file;
|
|
|
|
bool _dir_open;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
SFWCore
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class SFWCore {
|
|
public:
|
|
static void setup();
|
|
static void cleanup();
|
|
|
|
protected:
|
|
static bool _initialized;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RefPtr
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RefPtr {
|
|
enum {
|
|
DATASIZE = sizeof(void *);
|
|
RefPtr(const RefPtr &p_other);
|
|
RefPtr();
|
|
~RefPtr();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
CoreStringNames
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class CoreStringNames {
|
|
public:
|
|
static void create();
|
|
static void free();
|
|
|
|
CoreStringNames();
|
|
|
|
static CoreStringNames *get_singleton();
|
|
|
|
static CoreStringNames *singleton;
|
|
|
|
StringName _free;
|
|
StringName changed;
|
|
StringName _meta;
|
|
StringName _script;
|
|
StringName script_changed;
|
|
StringName ___pdcdata;
|
|
StringName __getvar;
|
|
StringName _iter_init;
|
|
StringName _iter_next;
|
|
StringName _iter_get;
|
|
StringName get_rid;
|
|
StringName _to_string;
|
|
#ifdef TOOLS_ENABLED
|
|
StringName _sections_unfolded;
|
|
#endif
|
|
StringName _custom_features;
|
|
|
|
StringName x;
|
|
StringName y;
|
|
StringName z;
|
|
StringName w;
|
|
StringName r;
|
|
StringName g;
|
|
StringName b;
|
|
StringName a;
|
|
StringName position;
|
|
StringName size;
|
|
StringName end;
|
|
StringName basis;
|
|
StringName origin;
|
|
StringName normal;
|
|
StringName d;
|
|
StringName h;
|
|
StringName s;
|
|
StringName v;
|
|
StringName r8;
|
|
StringName g8;
|
|
StringName b8;
|
|
StringName a8;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Array
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Array {
|
|
mutable ArrayPrivate *_p;
|
|
void _ref(const Array &p_from);
|
|
void _unref();
|
|
|
|
int _clamp_slice_index(int p_index);
|
|
|
|
public:
|
|
Variant &operator[](int p_idx);
|
|
const Variant &operator[](int p_idx);
|
|
|
|
void set(int p_idx, const Variant &p_value);
|
|
const Variant &get(int p_idx);
|
|
|
|
int size();
|
|
bool empty();
|
|
void clear();
|
|
|
|
bool deep_equal(const Array &p_array, int p_recursion_count = 0);
|
|
bool operator==(const Array &p_array);
|
|
|
|
uint32_t hash();
|
|
uint32_t recursive_hash(int p_recursion_count);
|
|
void operator=(const Array &p_array);
|
|
|
|
void push_back(const Variant &p_value);
|
|
void append(const Variant &p_value);
|
|
void append_array(const Array &p_array);
|
|
Error resize(int p_new_size);
|
|
|
|
void insert(int p_pos, const Variant &p_value);
|
|
void remove(int p_pos);
|
|
void fill(const Variant &p_value);
|
|
|
|
Variant front();
|
|
Variant back();
|
|
|
|
Array &sort();
|
|
Array &sort_custom(Object *p_obj);
|
|
void shuffle();
|
|
int bsearch(const Variant &p_value, bool p_before = true);
|
|
int bsearch_custom(const Variant &p_value, Object *p_obj, const StringName &p_function, bool p_before = true);
|
|
Array &invert();
|
|
|
|
int find(const Variant &p_value, int p_from = 0);
|
|
int rfind(const Variant &p_value, int p_from = -1);
|
|
int find_last(const Variant &p_value);
|
|
int count(const Variant &p_value);
|
|
bool has(const Variant &p_value);
|
|
|
|
void erase(const Variant &p_value);
|
|
|
|
void push_front(const Variant &p_value);
|
|
Variant pop_back();
|
|
Variant pop_front();
|
|
Variant pop_at(int p_pos);
|
|
|
|
Array duplicate(bool p_deep = false);
|
|
|
|
Array slice(int p_begin, int p_end, int p_step = 1, bool p_deep = false);
|
|
|
|
Variant min();
|
|
Variant max();
|
|
|
|
const void *id();
|
|
|
|
String sprintf(const String &p_format, bool *error);
|
|
|
|
Array(const Array &p_from);
|
|
Array();
|
|
~Array();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Dictionary
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Dictionary {
|
|
mutable DictionaryPrivate *_p;
|
|
|
|
void _ref(const Dictionary &p_from);
|
|
void _unref();
|
|
|
|
public:
|
|
void get_key_list(List<Variant> *p_keys);
|
|
Variant get_key_at_index(int p_index);
|
|
Variant get_value_at_index(int p_index);
|
|
|
|
Variant &operator[](const Variant &p_key);
|
|
const Variant &operator[](const Variant &p_key);
|
|
|
|
const Variant *getptr(const Variant &p_key);
|
|
Variant *getptr(const Variant &p_key);
|
|
|
|
Variant get_valid(const Variant &p_key);
|
|
Variant get(const Variant &p_key, const Variant &p_default);
|
|
|
|
int size();
|
|
bool empty();
|
|
void clear();
|
|
void merge(const Dictionary &p_dictionary, bool p_overwrite = false);
|
|
|
|
bool has(const Variant &p_key);
|
|
bool has_all(const Array &p_keys);
|
|
Variant find_key(const Variant &p_value);
|
|
|
|
bool erase(const Variant &p_key);
|
|
|
|
bool deep_equal(const Dictionary &p_dictionary, int p_recursion_count = 0);
|
|
bool operator==(const Dictionary &p_dictionary);
|
|
bool operator!=(const Dictionary &p_dictionary);
|
|
|
|
uint32_t hash();
|
|
uint32_t recursive_hash(int p_recursion_count);
|
|
void operator=(const Dictionary &p_dictionary);
|
|
|
|
const Variant *next(const Variant *p_key = nullptr);
|
|
|
|
Array keys();
|
|
Array values();
|
|
|
|
Dictionary duplicate(bool p_deep = false);
|
|
|
|
const void *id();
|
|
|
|
Dictionary(const Dictionary &p_from);
|
|
Dictionary();
|
|
~Dictionary();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Variant
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Variant {
|
|
public:
|
|
|
|
enum Type {
|
|
|
|
NIL,
|
|
|
|
BOOL,
|
|
INT,
|
|
REAL,
|
|
STRING,
|
|
|
|
RECT2,
|
|
RECT2I,
|
|
VECTOR2,
|
|
VECTOR2I,
|
|
VECTOR3,
|
|
VECTOR3I,
|
|
VECTOR4,
|
|
VECTOR4I,
|
|
|
|
PLANE,
|
|
QUATERNION,
|
|
AABB,
|
|
BASIS,
|
|
TRANSFORM,
|
|
TRANSFORM2D,
|
|
PROJECTION,
|
|
|
|
COLOR,
|
|
OBJECT,
|
|
STRING_NAME,
|
|
DICTIONARY,
|
|
ARRAY,
|
|
|
|
POOL_BYTE_ARRAY,
|
|
POOL_INT_ARRAY,
|
|
POOL_REAL_ARRAY,
|
|
POOL_STRING_ARRAY,
|
|
POOL_VECTOR2_ARRAY,
|
|
POOL_VECTOR2I_ARRAY,
|
|
POOL_VECTOR3_ARRAY,
|
|
POOL_VECTOR3I_ARRAY,
|
|
POOL_VECTOR4_ARRAY,
|
|
POOL_VECTOR4I_ARRAY,
|
|
POOL_COLOR_ARRAY,
|
|
|
|
VARIANT_MAX
|
|
|
|
};
|
|
|
|
enum {
|
|
|
|
MAX_RECURSION_DEPTH = 1024,
|
|
};
|
|
|
|
private:
|
|
|
|
Type type;
|
|
|
|
struct ObjData {
|
|
|
|
ObjectRC *rc;
|
|
|
|
RefPtr ref;
|
|
};
|
|
|
|
ObjData &_get_obj();
|
|
const ObjData &_get_obj();
|
|
|
|
union {
|
|
bool _bool;
|
|
int64_t _int;
|
|
double _real;
|
|
Transform2D *_transform2d;
|
|
::AABB *_aabb;
|
|
Basis *_basis;
|
|
Transform *_transform;
|
|
Projection *_projection;
|
|
void *_ptr;
|
|
uint8_t _mem[sizeof(ObjData);
|
|
} _data GCC_ALIGNED_8;
|
|
|
|
void reference(const Variant &p_variant);
|
|
void clear();
|
|
|
|
public:
|
|
Type get_type();
|
|
static String get_type_name(Variant::Type p_type);
|
|
static bool can_convert(Type p_type_from, Type p_type_to);
|
|
static bool can_convert_strict(Type p_type_from, Type p_type_to);
|
|
|
|
bool is_ref();
|
|
bool is_num();
|
|
bool is_array();
|
|
bool is_null();
|
|
bool is_shared();
|
|
bool is_zero();
|
|
bool is_one();
|
|
|
|
ObjectID get_object_instance_id();
|
|
bool is_invalid_object();
|
|
|
|
operator bool();
|
|
operator signed int();
|
|
operator unsigned int();
|
|
operator signed short();
|
|
operator unsigned short();
|
|
operator signed char();
|
|
operator unsigned char();
|
|
|
|
operator int64_t();
|
|
operator uint64_t();
|
|
#ifdef NEED_LONG_INT
|
|
operator signed long();
|
|
operator unsigned long();
|
|
#endif
|
|
|
|
operator CharType();
|
|
operator float();
|
|
operator double();
|
|
operator String();
|
|
operator StringName();
|
|
operator Rect2();
|
|
operator Rect2i();
|
|
operator Vector2();
|
|
operator Vector2i();
|
|
operator Vector3();
|
|
operator Vector3i();
|
|
operator Vector4();
|
|
operator Vector4i();
|
|
operator Plane();
|
|
operator ::AABB();
|
|
operator Quaternion();
|
|
operator Basis();
|
|
operator Transform();
|
|
operator Transform2D();
|
|
operator Projection();
|
|
|
|
operator Color();
|
|
operator RefPtr();
|
|
|
|
operator Object *();
|
|
|
|
operator Dictionary();
|
|
operator Array();
|
|
|
|
operator PoolVector<uint8_t>();
|
|
operator PoolVector<int>();
|
|
operator PoolVector<real_t>();
|
|
operator PoolVector<String>();
|
|
operator PoolVector<Vector2>();
|
|
operator PoolVector<Vector2i>();
|
|
operator PoolVector<Vector3>();
|
|
operator PoolVector<Vector3i>();
|
|
operator PoolVector<Vector4>();
|
|
operator PoolVector<Vector4i>();
|
|
operator PoolVector<Color>();
|
|
operator PoolVector<Plane>();
|
|
operator PoolVector<Face3>();
|
|
|
|
operator Vector<Variant>();
|
|
operator Vector<uint8_t>();
|
|
operator Vector<int>();
|
|
operator Vector<real_t>();
|
|
operator Vector<String>();
|
|
operator Vector<StringName>();
|
|
operator Vector<Vector3>();
|
|
operator Vector<Vector3i>();
|
|
operator Vector<Vector4>();
|
|
operator Vector<Vector4i>();
|
|
operator Vector<Color>();
|
|
operator Vector<Vector2>();
|
|
operator Vector<Vector2i>();
|
|
|
|
operator Vector<Plane>();
|
|
|
|
operator Margin();
|
|
operator Side();
|
|
operator Orientation();
|
|
|
|
Variant(bool p_bool);
|
|
Variant(signed int p_int);
|
|
Variant(unsigned int p_int);
|
|
#ifdef NEED_LONG_INT
|
|
Variant(signed long p_long);
|
|
Variant(unsigned long p_long);
|
|
#endif
|
|
Variant(signed short p_short);
|
|
Variant(unsigned short p_short);
|
|
Variant(signed char p_char);
|
|
Variant(unsigned char p_char);
|
|
Variant(int64_t p_int);
|
|
Variant(uint64_t p_int);
|
|
Variant(float p_float);
|
|
Variant(double p_double);
|
|
Variant(const String &p_string);
|
|
Variant(const StringName &p_string);
|
|
Variant(const char *const p_cstring);
|
|
Variant(const CharType *p_wstring);
|
|
Variant(const Vector2 &p_vector2);
|
|
Variant(const Vector2i &p_vector2);
|
|
Variant(const Rect2 &p_rect2);
|
|
Variant(const Rect2i &p_rect2);
|
|
Variant(const Vector3 &p_vector3);
|
|
Variant(const Vector3i &p_vector3);
|
|
Variant(const Vector4 &p_vector4);
|
|
Variant(const Vector4i &p_vector4);
|
|
Variant(const Projection &p_projection);
|
|
Variant(const Plane &p_plane);
|
|
Variant(const ::AABB &p_aabb);
|
|
Variant(const Quaternion &p_quat);
|
|
Variant(const Basis &p_matrix);
|
|
Variant(const Transform2D &p_transform);
|
|
Variant(const Transform &p_transform);
|
|
Variant(const Color &p_color);
|
|
Variant(const RefPtr &p_resource);
|
|
Variant(const Object *p_object);
|
|
Variant(const Dictionary &p_dictionary);
|
|
|
|
Variant(const Array &p_array);
|
|
Variant(const PoolVector<Plane> &p_array);
|
|
Variant(const PoolVector<uint8_t> &p_raw_array);
|
|
Variant(const PoolVector<int> &p_int_array);
|
|
Variant(const PoolVector<real_t> &p_real_array);
|
|
Variant(const PoolVector<String> &p_string_array);
|
|
Variant(const PoolVector<Vector3> &p_vector3_array);
|
|
Variant(const PoolVector<Vector3i> &p_vector3_array);
|
|
Variant(const PoolVector<Color> &p_color_array);
|
|
Variant(const PoolVector<Face3> &p_face_array);
|
|
Variant(const PoolVector<Vector2> &p_vector2_array);
|
|
Variant(const PoolVector<Vector2i> &p_vector2_array);
|
|
Variant(const PoolVector<Vector4> &p_vector4_array);
|
|
Variant(const PoolVector<Vector4i> &p_vector4_array);
|
|
|
|
Variant(const Vector<Variant> &p_array);
|
|
Variant(const Vector<uint8_t> &p_array);
|
|
Variant(const Vector<int> &p_array);
|
|
Variant(const Vector<real_t> &p_array);
|
|
Variant(const Vector<String> &p_array);
|
|
Variant(const Vector<StringName> &p_array);
|
|
Variant(const Vector<Vector3> &p_array);
|
|
Variant(const Vector<Vector3i> &p_array);
|
|
Variant(const Vector<Color> &p_array);
|
|
Variant(const Vector<Plane> &p_array);
|
|
Variant(const Vector<Vector2> &p_array);
|
|
Variant(const Vector<Vector2i> &p_array);
|
|
Variant(const Vector<Vector4> &p_array);
|
|
Variant(const Vector<Vector4i> &p_array);
|
|
|
|
enum Operator {
|
|
|
|
OP_EQUAL,
|
|
OP_NOT_EQUAL,
|
|
OP_LESS,
|
|
OP_LESS_EQUAL,
|
|
OP_GREATER,
|
|
OP_GREATER_EQUAL,
|
|
|
|
OP_ADD,
|
|
OP_SUBTRACT,
|
|
OP_MULTIPLY,
|
|
OP_DIVIDE,
|
|
OP_NEGATE,
|
|
OP_POSITIVE,
|
|
OP_MODULE,
|
|
OP_STRING_CONCAT,
|
|
|
|
OP_SHIFT_LEFT,
|
|
OP_SHIFT_RIGHT,
|
|
OP_BIT_AND,
|
|
OP_BIT_OR,
|
|
OP_BIT_XOR,
|
|
OP_BIT_NEGATE,
|
|
|
|
OP_AND,
|
|
OP_OR,
|
|
OP_XOR,
|
|
OP_NOT,
|
|
|
|
OP_IN,
|
|
OP_MAX
|
|
};
|
|
|
|
static String get_operator_name(Operator p_op);
|
|
static void evaluate(const Operator &p_op, const Variant &p_a, const Variant &p_b, Variant &r_ret, bool &r_valid);
|
|
static Variant evaluate(const Operator &p_op, const Variant &p_a, const Variant &p_b);
|
|
|
|
void zero();
|
|
Variant duplicate(bool deep = false);
|
|
static void blend(const Variant &a, const Variant &b, float c, Variant &r_dst);
|
|
static void interpolate(const Variant &a, const Variant &b, float c, Variant &r_dst);
|
|
static void sub(const Variant &a, const Variant &b, Variant &r_dst);
|
|
|
|
void set_named(const StringName &p_index, const Variant &p_value, bool *r_valid = nullptr);
|
|
Variant get_named(const StringName &p_index, bool *r_valid = nullptr);
|
|
|
|
void set(const Variant &p_index, const Variant &p_value, bool *r_valid = nullptr);
|
|
Variant get(const Variant &p_index, bool *r_valid = nullptr);
|
|
bool in(const Variant &p_index, bool *r_valid = nullptr);
|
|
|
|
bool iter_init(Variant &r_iter, bool &r_valid);
|
|
bool iter_next(Variant &r_iter, bool &r_valid);
|
|
Variant iter_get(const Variant &r_iter, bool &r_valid);
|
|
|
|
bool deep_equal(const Variant &p_variant, int p_recursion_count = 0);
|
|
bool operator==(const Variant &p_variant);
|
|
bool operator!=(const Variant &p_variant);
|
|
bool operator<(const Variant &p_variant);
|
|
uint32_t hash();
|
|
uint32_t recursive_hash(int p_recursion_count);
|
|
|
|
bool hash_compare(const Variant &p_variant);
|
|
bool booleanize();
|
|
String stringify(List<const void *> &stack);
|
|
|
|
void operator=(const Variant &p_variant);
|
|
Variant(const Variant &p_variant);
|
|
Variant();
|
|
~Variant();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Signal
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Signal {
|
|
public:
|
|
Object *emitter;
|
|
Vector<Variant> params;
|
|
Vector<Variant> static_data;
|
|
|
|
template <class T>
|
|
void connect(T *obj, void (*func);
|
|
template <class T>
|
|
void disconnect(T *obj, void (*func);
|
|
template <class T>
|
|
bool is_connected(T *obj, void (*func);
|
|
|
|
void connect_static(void (*func);
|
|
void disconnect_static(void (*func);
|
|
bool is_connected_static(void (*func);
|
|
|
|
void emit(Object *p_emitter);
|
|
void emit(Object *p_emitter, const Variant &p1);
|
|
void emit(Object *p_emitter, const Variant &p1, const Variant &p2);
|
|
void emit(Object *p_emitter, const Variant &p1, const Variant &p2, const Variant &p3);
|
|
void emit(Object *p_emitter, const Variant &p1, const Variant &p2, const Variant &p3, const Variant &p4);
|
|
void emit(Object *p_emitter, const Variant &p1, const Variant &p2, const Variant &p3, const Variant &p4, const Variant &p5);
|
|
|
|
Signal();
|
|
~Signal();
|
|
|
|
protected:
|
|
enum SignalEntryType {
|
|
SIGNAL_ENTRY_TYPE_NONE = 0,
|
|
SIGNAL_ENTRY_TYPE_STATIC = 1,
|
|
SIGNAL_ENTRY_TYPE_CLASS = 2,
|
|
};
|
|
|
|
struct SignalEntry {
|
|
SignalEntryType type;
|
|
|
|
virtual void call(Signal *s);
|
|
|
|
SignalEntry();
|
|
};
|
|
|
|
struct StaticSignalEntry : public SignalEntry {
|
|
void (*func);
|
|
|
|
virtual void call(Signal *s);
|
|
|
|
StaticSignalEntry();
|
|
};
|
|
|
|
struct ClassSignalEntry : public SignalEntry {
|
|
|
|
virtual void* get_obj_ptr();
|
|
|
|
virtual void* get_func_ptr();
|
|
|
|
ClassSignalEntry();
|
|
};
|
|
|
|
template<typename T>
|
|
struct ClassSignalEntrySpec : public ClassSignalEntry {
|
|
union {
|
|
T* obj;
|
|
void* obj_ptr;
|
|
};
|
|
union {
|
|
void (*func);
|
|
void* func_ptr;
|
|
};
|
|
|
|
virtual void call(Signal *s);
|
|
|
|
void* get_obj_ptr();
|
|
|
|
void* get_func_ptr();
|
|
|
|
ClassSignalEntrySpec();
|
|
};
|
|
|
|
protected:
|
|
Vector<SignalEntry *> entries;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Object
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Object {
|
|
public:
|
|
enum {
|
|
NOTIFICATION_POSTINITIALIZE = 0,
|
|
NOTIFICATION_PREDELETE = 1
|
|
};
|
|
|
|
void set(const StringName &p_name, const Variant &p_value, bool *r_valid = nullptr);
|
|
Variant get(const StringName &p_name, bool *r_valid = nullptr);
|
|
|
|
virtual bool lt(const Variant &p_value_l, const Variant &p_value_r);
|
|
|
|
virtual String get_class();
|
|
static void *get_class_ptr_static();
|
|
|
|
static String get_class_static();
|
|
static String get_parent_class_static();
|
|
|
|
static void get_inheritance_list_static(Vector<String> *p_inheritance_list);
|
|
|
|
virtual bool is_class(const String &p_class);
|
|
virtual bool is_class_ptr(void *p_ptr);
|
|
|
|
static void get_valid_parents_static(Vector<String> *p_parents);
|
|
static void _get_valid_parents_static(Vector<String> *p_parents);
|
|
|
|
virtual const StringName *_get_class_namev();
|
|
|
|
const StringName &get_class_name();
|
|
|
|
ObjectRC *_use_rc();
|
|
|
|
ObjectID get_instance_id();
|
|
|
|
void notification(int p_notification, bool p_reversed = false);
|
|
virtual String to_string();
|
|
|
|
bool _is_queued_for_deletion;
|
|
bool is_queued_for_deletion();
|
|
|
|
void cancel_free();
|
|
|
|
bool has_meta(const String &p_name);
|
|
void set_meta(const String &p_name, const Variant &p_value);
|
|
void remove_meta(const String &p_name);
|
|
Variant get_meta(const String &p_name, const Variant &p_default = Variant();
|
|
void get_meta_list(List<String> *p_list);
|
|
|
|
Object();
|
|
virtual ~Object();
|
|
|
|
template <class T>
|
|
static T *cast_to(Object *p_object);
|
|
|
|
template <class T>
|
|
static const T *cast_to(const Object *p_object);
|
|
|
|
protected:
|
|
void (Object::*_get_notification();
|
|
|
|
bool _set(const StringName &p_name, const Variant &p_property);
|
|
bool _get(const StringName &p_name, Variant &r_property);
|
|
|
|
virtual bool _setv(const StringName &p_name, const Variant &p_property);
|
|
virtual bool _getv(const StringName &p_name, Variant &r_property);
|
|
|
|
bool (Object::*_get_get();
|
|
bool (Object::*_get_set();
|
|
|
|
virtual void _notificationv(int p_notification, bool p_reversed);
|
|
void _notification(int p_notification);
|
|
|
|
friend bool predelete_handler(Object *);
|
|
friend void postinitialize_handler(Object *);
|
|
|
|
int _predelete_ok;
|
|
bool _predelete();
|
|
void _postinitialize();
|
|
|
|
mutable StringName _class_name;
|
|
mutable const StringName *_class_ptr;
|
|
|
|
ObjectID _instance_id;
|
|
std::atomic<ObjectRC *> _rc;
|
|
|
|
Dictionary metadata;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
ObjectDB
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class ObjectDB {
|
|
struct ObjectPtrHash {
|
|
static uint32_t hash(const Object *p_obj);
|
|
};
|
|
|
|
static HashMap<ObjectID, Object *> instances;
|
|
static HashMap<Object *, ObjectID, ObjectPtrHash> instance_checks;
|
|
|
|
static ObjectID instance_counter;
|
|
friend class Object;
|
|
friend void unregister_core_types();
|
|
|
|
static RWLock rw_lock;
|
|
static void cleanup();
|
|
static ObjectID add_instance(Object *p_object);
|
|
static void remove_instance(Object *p_object);
|
|
friend void register_core_types();
|
|
|
|
public:
|
|
typedef void (*DebugFunc);
|
|
|
|
static Object *get_instance(ObjectID p_instance_id);
|
|
static void debug_objects(DebugFunc p_func);
|
|
static int get_object_count();
|
|
|
|
static bool instance_validate(Object *p_ptr);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
ObjectRC
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class ObjectRC {
|
|
std::atomic<Object *> _ptr;
|
|
std::atomic<uint32_t> _users;
|
|
|
|
public:
|
|
|
|
const ObjectID instance_id;
|
|
|
|
void increment();
|
|
|
|
bool decrement();
|
|
|
|
bool invalidate();
|
|
|
|
Object *get_ptr();
|
|
|
|
ObjectRC(Object *p_object);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Reference
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Reference : public Object {
|
|
SFW_OBJECT(Reference, Object);
|
|
|
|
public:
|
|
bool is_referenced();
|
|
bool init_ref();
|
|
bool reference();
|
|
bool unreference();
|
|
int reference_get_count();
|
|
|
|
Reference();
|
|
virtual ~Reference();
|
|
|
|
private:
|
|
SafeRefCount refcount;
|
|
SafeRefCount refcount_init;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Ref
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Ref {
|
|
T *reference;
|
|
|
|
void ref(const Ref &p_from);
|
|
|
|
void ref_pointer(T *p_ref);
|
|
|
|
public:
|
|
bool operator==(const T *p_ptr);
|
|
bool operator!=(const T *p_ptr);
|
|
|
|
bool operator<(const Ref<T> &p_r);
|
|
bool operator==(const Ref<T> &p_r);
|
|
bool operator!=(const Ref<T> &p_r);
|
|
|
|
T *operator->();
|
|
|
|
T *operator*();
|
|
|
|
const T *operator->();
|
|
|
|
const T *ptr();
|
|
T *ptr();
|
|
|
|
const T *operator*();
|
|
|
|
void operator=(const Ref &p_from);
|
|
|
|
template <class T_Other>
|
|
void operator=(const Ref<T_Other> &p_from);
|
|
|
|
template <class T_Other>
|
|
void reference_ptr(T_Other *p_ptr);
|
|
|
|
Ref(const Ref &p_from);
|
|
|
|
template <class T_Other>
|
|
Ref(const Ref<T_Other> &p_from);
|
|
|
|
Ref(T *p_reference);
|
|
|
|
bool is_valid();
|
|
bool is_null();
|
|
|
|
void unref();
|
|
|
|
void instance();
|
|
|
|
RefPtr get_ref_ptr();
|
|
|
|
operator Variant();
|
|
|
|
void operator=(const RefPtr &p_refptr);
|
|
|
|
void operator=(const Variant &p_variant);
|
|
|
|
Ref(const Variant &p_variant);
|
|
|
|
Ref(const RefPtr &p_refptr);
|
|
|
|
Ref();
|
|
|
|
~Ref();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Resource
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Resource : public Reference {
|
|
SFW_OBJECT(Resource, Reference);
|
|
|
|
public:
|
|
Signal changed;
|
|
|
|
void emit_changed();
|
|
|
|
virtual Error load(const String &path);
|
|
virtual Error save(const String &path);
|
|
|
|
Resource();
|
|
virtual ~Resource();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RenderState
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RenderState {
|
|
public:
|
|
static Transform camera_transform_3d;
|
|
static Transform model_view_matrix_3d;
|
|
static Projection projection_matrix_3d;
|
|
|
|
static Transform2D model_view_matrix_2d;
|
|
static Transform projection_matrix_2d;
|
|
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Image
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Image : public Reference {
|
|
SFW_OBJECT(Image, Reference);
|
|
|
|
public:
|
|
enum {
|
|
MAX_WIDTH = 16384,
|
|
MAX_HEIGHT = 16384
|
|
};
|
|
|
|
enum Format {
|
|
|
|
FORMAT_L8,
|
|
FORMAT_LA8,
|
|
FORMAT_R8,
|
|
FORMAT_RG8,
|
|
FORMAT_RGB8,
|
|
FORMAT_RGBA8,
|
|
FORMAT_RGBA4444,
|
|
FORMAT_RGBA5551,
|
|
FORMAT_RF,
|
|
FORMAT_RGF,
|
|
FORMAT_RGBF,
|
|
FORMAT_RGBAF,
|
|
FORMAT_MAX
|
|
};
|
|
|
|
static const char *format_names[FORMAT_MAX];
|
|
enum Interpolation {
|
|
|
|
INTERPOLATE_NEAREST,
|
|
INTERPOLATE_BILINEAR,
|
|
INTERPOLATE_CUBIC,
|
|
INTERPOLATE_TRILINEAR,
|
|
INTERPOLATE_LANCZOS,
|
|
|
|
};
|
|
|
|
bool write_lock;
|
|
|
|
private:
|
|
void _create_empty(int p_width, int p_height, bool p_use_mipmaps, Format p_format);
|
|
|
|
void _create_from_data(int p_width, int p_height, bool p_use_mipmaps, Format p_format, const Vector<uint8_t> &p_data);
|
|
|
|
Format format;
|
|
Vector<uint8_t> data;
|
|
int width, height;
|
|
bool mipmaps;
|
|
|
|
void _copy_internals_from(const Image &p_image);
|
|
|
|
void _get_mipmap_offset_and_size(int p_mipmap, int &r_offset, int &r_width, int &r_height);
|
|
|
|
static int _get_dst_image_size(int p_width, int p_height, Format p_format, int &r_mipmaps, int p_mipmaps = -1);
|
|
bool _can_modify(Format p_format);
|
|
|
|
void _put_pixelb(int p_x, int p_y, uint32_t p_pixel_size, uint8_t *p_data, const uint8_t *p_pixel);
|
|
void _get_pixelb(int p_x, int p_y, uint32_t p_pixel_size, const uint8_t *p_data, uint8_t *p_pixel);
|
|
|
|
void _repeat_pixel_over_subsequent_memory(uint8_t *p_pixel, int p_pixel_size, int p_count);
|
|
|
|
static void average_4_uint8(uint8_t &p_out, const uint8_t &p_a, const uint8_t &p_b, const uint8_t &p_c, const uint8_t &p_d);
|
|
static void average_4_float(float &p_out, const float &p_a, const float &p_b, const float &p_c, const float &p_d);
|
|
static void average_4_half(uint16_t &p_out, const uint16_t &p_a, const uint16_t &p_b, const uint16_t &p_c, const uint16_t &p_d);
|
|
static void average_4_rgbe9995(uint32_t &p_out, const uint32_t &p_a, const uint32_t &p_b, const uint32_t &p_c, const uint32_t &p_d);
|
|
static void renormalize_uint8(uint8_t *p_rgb);
|
|
static void renormalize_float(float *p_rgb);
|
|
static void renormalize_half(uint16_t *p_rgb);
|
|
static void renormalize_rgbe9995(uint32_t *p_rgb);
|
|
|
|
public:
|
|
int get_width();
|
|
int get_height();
|
|
Vector2 get_size();
|
|
bool has_mipmaps();
|
|
int get_mipmap_count();
|
|
|
|
void convert(Format p_new_format);
|
|
|
|
Format get_format();
|
|
|
|
int get_mipmap_offset(int p_mipmap);
|
|
void get_mipmap_offset_and_size(int p_mipmap, int &r_ofs, int &r_size);
|
|
void get_mipmap_offset_size_and_dimensions(int p_mipmap, int &r_ofs, int &r_size, int &w, int &h);
|
|
|
|
void resize_to_po2(bool p_square = false, Interpolation p_interpolation = INTERPOLATE_BILINEAR);
|
|
void resize(int p_width, int p_height, Interpolation p_interpolation = INTERPOLATE_BILINEAR);
|
|
void shrink_x2();
|
|
bool is_size_po2();
|
|
|
|
void crop_from_point(int p_x, int p_y, int p_width, int p_height);
|
|
void crop(int p_width, int p_height);
|
|
|
|
void flip_x();
|
|
void flip_y();
|
|
|
|
int generate_mipmaps(bool p_renormalize = false);
|
|
|
|
void clear_mipmaps();
|
|
void normalize();
|
|
|
|
void load_from_file(const String &file_name, Format p_format = FORMAT_RGBA8);
|
|
|
|
void create(int p_width, int p_height, bool p_use_mipmaps, Format p_format);
|
|
void create(int p_width, int p_height, bool p_use_mipmaps, Format p_format, const Vector<uint8_t> &p_data);
|
|
|
|
void create(const char **p_xpm);
|
|
|
|
bool empty();
|
|
|
|
Vector<uint8_t> get_data();
|
|
const uint8_t *datar();
|
|
uint8_t *dataw();
|
|
int get_data_size();
|
|
|
|
Image();
|
|
Image(int p_width, int p_height, bool p_use_mipmaps, Format p_format);
|
|
Image(int p_width, int p_height, bool p_mipmaps, Format p_format, const Vector<uint8_t> &p_data);
|
|
|
|
enum AlphaMode {
|
|
ALPHA_NONE,
|
|
ALPHA_BIT,
|
|
ALPHA_BLEND
|
|
};
|
|
|
|
AlphaMode detect_alpha();
|
|
bool is_invisible();
|
|
|
|
static int get_format_pixel_size(Format p_format);
|
|
static int get_format_pixel_rshift(Format p_format);
|
|
static int get_format_block_size(Format p_format);
|
|
static void get_format_min_pixel_size(Format p_format, int &r_w, int &r_h);
|
|
|
|
static int get_image_data_size(int p_width, int p_height, Format p_format, bool p_mipmaps = false);
|
|
static int get_image_required_mipmaps(int p_width, int p_height, Format p_format);
|
|
static int get_image_mipmap_offset(int p_width, int p_height, Format p_format, int p_mipmap);
|
|
|
|
enum CompressMode {
|
|
COMPRESS_S3TC,
|
|
COMPRESS_PVRTC2,
|
|
COMPRESS_PVRTC4,
|
|
COMPRESS_ETC,
|
|
COMPRESS_ETC2,
|
|
COMPRESS_BPTC,
|
|
COMPRESS_MAX,
|
|
};
|
|
|
|
bool is_compressed();
|
|
|
|
void fix_alpha_edges();
|
|
void premultiply_alpha();
|
|
void srgb_to_linear();
|
|
void normalmap_to_xy();
|
|
Ref<Image> rgbe_to_srgb();
|
|
void bumpmap_to_normalmap(float bump_scale = 1.0);
|
|
|
|
void blit_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Vector2 &p_dest);
|
|
void blit_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, const Rect2 &p_src_rect, const Vector2 &p_dest);
|
|
void blend_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Vector2 &p_dest);
|
|
void blend_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, const Rect2 &p_src_rect, const Vector2 &p_dest);
|
|
void fill(const Color &p_color);
|
|
void fill_rect(const Rect2 &p_rect, const Color &p_color);
|
|
|
|
Rect2 get_used_rect();
|
|
Ref<Image> get_rect(const Rect2 &p_area);
|
|
|
|
static String get_format_name(Format p_format);
|
|
|
|
Image(const char **p_xpm);
|
|
|
|
Ref<Image> duplicate();
|
|
|
|
void lock();
|
|
void unlock();
|
|
|
|
enum DetectChannels {
|
|
DETECTED_L,
|
|
DETECTED_LA,
|
|
DETECTED_R,
|
|
DETECTED_RG,
|
|
DETECTED_RGB,
|
|
DETECTED_RGBA,
|
|
};
|
|
|
|
DetectChannels get_detected_channels();
|
|
void optimize_channels();
|
|
|
|
Color get_pixelv(const Vector2 &p_src);
|
|
Color get_pixel(int p_x, int p_y);
|
|
void set_pixelv(const Vector2 &p_dst, const Color &p_color);
|
|
void set_pixel(int p_x, int p_y, const Color &p_color);
|
|
|
|
void copy_internals_from(const Ref<Image> &p_image);
|
|
|
|
~Image();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Texture
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Texture : public Resource {
|
|
SFW_OBJECT(Texture, Resource);
|
|
|
|
public:
|
|
enum TextureFlags {
|
|
TEXTURE_FLAG_FILTER = 1 << 0,
|
|
TEXTURE_FLAG_REPEAT = 1 << 1,
|
|
TEXTURE_FLAG_MIRRORED_REPEAT = 1 << 2,
|
|
TEXTURE_FLAG_MIP_MAPS = 1 << 3,
|
|
};
|
|
|
|
uint32_t get_gl_texture();
|
|
|
|
void create_from_image(const Ref<Image> &img);
|
|
|
|
Ref<Image> get_data();
|
|
|
|
Vector2i get_size();
|
|
|
|
void upload();
|
|
|
|
Texture();
|
|
virtual ~Texture();
|
|
|
|
protected:
|
|
void _get_gl_format(Image::Format p_format, uint32_t &r_gl_format, uint32_t &r_gl_internal_format, uint32_t &r_gl_type, bool &r_supported);
|
|
|
|
Ref<Image> _image;
|
|
|
|
int _texture_width;
|
|
int _texture_height;
|
|
Image::Format _texture_format;
|
|
|
|
int _flags;
|
|
int _texture_index;
|
|
int _data_size;
|
|
int _mipmaps;
|
|
|
|
uint32_t _texture;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RenderTexture
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class RenderTexture : public Texture {
|
|
public:
|
|
void set_as_render_target();
|
|
void unset_render_target();
|
|
|
|
RenderTexture();
|
|
virtual ~RenderTexture();
|
|
|
|
protected:
|
|
int _fbo_width;
|
|
int _fbo_height;
|
|
uint32_t _fbo;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Mesh
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Mesh : public Resource {
|
|
SFW_OBJECT(Mesh, Resource);
|
|
|
|
public:
|
|
void add_vertex2(float x, float y);
|
|
void add_vertex3(float x, float y, float z);
|
|
|
|
void add_normal(float x, float y, float z);
|
|
void add_color(float r = 1, float g = 1, float b = 1, float a = 1);
|
|
void add_color(const Color &p_color);
|
|
|
|
void add_uv(float u, float v);
|
|
|
|
void add_index(uint32_t index);
|
|
void add_triangle(uint32_t i1, uint32_t i2, uint32_t i3);
|
|
|
|
void clear();
|
|
|
|
void upload();
|
|
void destroy();
|
|
void render();
|
|
|
|
Mesh();
|
|
Mesh(int vert_dim);
|
|
virtual ~Mesh();
|
|
|
|
uint32_t VBO;
|
|
uint32_t IBO;
|
|
|
|
int vertex_dimesions;
|
|
|
|
Vector<float> vertices;
|
|
Vector<float> normals;
|
|
Vector<float> colors;
|
|
Vector<float> uvs;
|
|
Vector<uint32_t> indices;
|
|
|
|
protected:
|
|
uint32_t vertices_vbo_size;
|
|
uint32_t normals_vbo_size;
|
|
uint32_t colors_vbo_size;
|
|
uint32_t uvs_vbo_size;
|
|
uint32_t indices_vbo_size;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
MeshUtils
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class MeshUtils {
|
|
public:
|
|
static void create_cone(Ref<Mesh> mesh);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
InputEvent
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class InputEvent : public Resource {
|
|
SFW_OBJECT(InputEvent, Resource);
|
|
|
|
int device;
|
|
|
|
protected:
|
|
bool canceled;
|
|
bool pressed;
|
|
|
|
public:
|
|
static const int DEVICE_ID_TOUCH_MOUSE;
|
|
static const int DEVICE_ID_INTERNAL;
|
|
|
|
void set_device(int p_device);
|
|
int get_device();
|
|
|
|
bool is_action(const StringName &p_action, bool p_exact_match = false);
|
|
bool is_action_pressed(const StringName &p_action, bool p_allow_echo = false, bool p_exact_match = false);
|
|
bool is_action_released(const StringName &p_action, bool p_exact_match = false);
|
|
float get_action_strength(const StringName &p_action, bool p_exact_match = false);
|
|
float get_action_raw_strength(const StringName &p_action, bool p_exact_match = false);
|
|
|
|
bool is_canceled();
|
|
bool is_pressed();
|
|
bool is_released();
|
|
virtual bool is_echo();
|
|
|
|
virtual String as_text();
|
|
|
|
virtual Ref<InputEvent> xformed_by(const Transform2D &p_xform, const Vector2 &p_local_ofs = Vector2();
|
|
|
|
virtual bool action_match(const Ref<InputEvent> &p_event, bool p_exact_match, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone);
|
|
virtual bool shortcut_match(const Ref<InputEvent> &p_event, bool p_exact_match = true);
|
|
virtual bool is_action_type();
|
|
|
|
virtual bool accumulate(const Ref<InputEvent> &p_event);
|
|
InputEvent();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
InputEventWithModifiers
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class InputEventWithModifiers : public InputEvent {
|
|
SFW_OBJECT(InputEventWithModifiers, InputEvent);
|
|
|
|
bool shift;
|
|
bool alt;
|
|
#ifdef APPLE_STYLE_KEYS
|
|
union {
|
|
bool command;
|
|
bool meta;
|
|
};
|
|
|
|
bool control;
|
|
#else
|
|
union {
|
|
bool command;
|
|
bool control;
|
|
};
|
|
bool meta;
|
|
|
|
#endif
|
|
|
|
public:
|
|
void set_shift(bool p_enabled);
|
|
bool get_shift();
|
|
|
|
void set_alt(bool p_enabled);
|
|
bool get_alt();
|
|
|
|
void set_control(bool p_enabled);
|
|
bool get_control();
|
|
|
|
void set_metakey(bool p_enabled);
|
|
bool get_metakey();
|
|
|
|
void set_command(bool p_enabled);
|
|
bool get_command();
|
|
|
|
void set_modifiers_from_event(const InputEventWithModifiers *event);
|
|
|
|
uint32_t get_modifiers_mask();
|
|
|
|
InputEventWithModifiers();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
InputEventKey
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class InputEventKey : public InputEventWithModifiers {
|
|
SFW_OBJECT(InputEventKey, InputEventWithModifiers);
|
|
|
|
uint32_t scancode;
|
|
uint32_t physical_scancode;
|
|
uint32_t unicode;
|
|
|
|
bool echo;
|
|
|
|
bool action_match_force_exact;
|
|
|
|
public:
|
|
void set_pressed(bool p_pressed);
|
|
|
|
void set_scancode(uint32_t p_scancode);
|
|
uint32_t get_scancode();
|
|
|
|
void set_physical_scancode(uint32_t p_scancode);
|
|
uint32_t get_physical_scancode();
|
|
|
|
void set_unicode(uint32_t p_unicode);
|
|
uint32_t get_unicode();
|
|
|
|
void set_echo(bool p_enable);
|
|
virtual bool is_echo();
|
|
|
|
void set_action_match_force_exact(bool p_enable);
|
|
bool is_action_match_force_exact();
|
|
|
|
uint32_t get_scancode_with_modifiers();
|
|
uint32_t get_physical_scancode_with_modifiers();
|
|
|
|
virtual bool action_match(const Ref<InputEvent> &p_event, bool p_exact_match, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone);
|
|
virtual bool shortcut_match(const Ref<InputEvent> &p_event, bool p_exact_match = true);
|
|
|
|
virtual bool is_action_type();
|
|
|
|
virtual String as_text();
|
|
|
|
InputEventKey();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
InputEventMouse
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class InputEventMouse : public InputEventWithModifiers {
|
|
SFW_OBJECT(InputEventMouse, InputEventWithModifiers);
|
|
|
|
int button_mask;
|
|
|
|
Vector2 pos;
|
|
Vector2 global_pos;
|
|
|
|
public:
|
|
void set_button_mask(int p_mask);
|
|
int get_button_mask();
|
|
|
|
void set_position(const Vector2 &p_pos);
|
|
Vector2 get_position();
|
|
|
|
void set_global_position(const Vector2 &p_global_pos);
|
|
Vector2 get_global_position();
|
|
|
|
InputEventMouse();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
InputEventMouseButton
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class InputEventMouseButton : public InputEventMouse {
|
|
SFW_OBJECT(InputEventMouseButton, InputEventMouse);
|
|
|
|
float factor;
|
|
int button_index;
|
|
bool doubleclick;
|
|
|
|
public:
|
|
void set_factor(float p_factor);
|
|
float get_factor();
|
|
|
|
void set_button_index(int p_index);
|
|
int get_button_index();
|
|
|
|
void set_pressed(bool p_pressed);
|
|
void set_canceled(bool p_canceled);
|
|
|
|
void set_doubleclick(bool p_doubleclick);
|
|
bool is_doubleclick();
|
|
|
|
virtual Ref<InputEvent> xformed_by(const Transform2D &p_xform, const Vector2 &p_local_ofs = Vector2();
|
|
virtual bool action_match(const Ref<InputEvent> &p_event, bool p_exact_match, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone);
|
|
virtual bool shortcut_match(const Ref<InputEvent> &p_event, bool p_exact_match = true);
|
|
|
|
virtual bool is_action_type();
|
|
virtual String as_text();
|
|
|
|
InputEventMouseButton();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
InputEventMouseMotion
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class InputEventMouseMotion : public InputEventMouse {
|
|
SFW_OBJECT(InputEventMouseMotion, InputEventMouse);
|
|
|
|
Vector2 tilt;
|
|
float pressure;
|
|
Vector2 relative;
|
|
Vector2 speed;
|
|
bool pen_inverted;
|
|
|
|
public:
|
|
void set_tilt(const Vector2 &p_tilt);
|
|
Vector2 get_tilt();
|
|
|
|
void set_pressure(float p_pressure);
|
|
float get_pressure();
|
|
|
|
void set_pen_inverted(bool p_inverted);
|
|
bool get_pen_inverted();
|
|
|
|
void set_relative(const Vector2 &p_relative);
|
|
Vector2 get_relative();
|
|
|
|
void set_speed(const Vector2 &p_speed);
|
|
Vector2 get_speed();
|
|
|
|
virtual Ref<InputEvent> xformed_by(const Transform2D &p_xform, const Vector2 &p_local_ofs = Vector2();
|
|
virtual String as_text();
|
|
|
|
virtual bool accumulate(const Ref<InputEvent> &p_event);
|
|
|
|
InputEventMouseMotion();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
InputEventAction
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class InputEventAction : public InputEvent {
|
|
SFW_OBJECT(InputEventAction, InputEvent);
|
|
|
|
StringName action;
|
|
float strength;
|
|
|
|
public:
|
|
void set_action(const StringName &p_action);
|
|
StringName get_action();
|
|
|
|
void set_pressed(bool p_pressed);
|
|
|
|
void set_strength(float p_strength);
|
|
float get_strength();
|
|
|
|
virtual bool is_action(const StringName &p_action);
|
|
|
|
virtual bool action_match(const Ref<InputEvent> &p_event, bool p_exact_match, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone);
|
|
virtual bool shortcut_match(const Ref<InputEvent> &p_event, bool p_exact_match = true);
|
|
|
|
virtual bool is_action_type();
|
|
virtual String as_text();
|
|
|
|
InputEventAction();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
InputEventShortCut
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class InputEventShortCut : public InputEvent {
|
|
SFW_OBJECT(InputEventShortCut, InputEvent);
|
|
|
|
Ref<ShortCut> shortcut;
|
|
|
|
public:
|
|
void set_shortcut(Ref<ShortCut> p_shortcut);
|
|
Ref<ShortCut> get_shortcut();
|
|
|
|
virtual String as_text();
|
|
virtual String to_string();
|
|
|
|
InputEventShortCut();
|
|
~InputEventShortCut();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
ShortCut
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class ShortCut : public Resource {
|
|
SFW_OBJECT(ShortCut, Resource);
|
|
|
|
public:
|
|
void set_shortcut(const Ref<InputEvent> &p_shortcut);
|
|
Ref<InputEvent> get_shortcut();
|
|
bool is_shortcut(const Ref<InputEvent> &p_event);
|
|
bool is_valid();
|
|
|
|
String get_as_text();
|
|
|
|
ShortCut();
|
|
~ShortCut();
|
|
|
|
private:
|
|
Ref<InputEvent> shortcut;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
InputMap
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class InputMap : public Object {
|
|
SFW_OBJECT(InputMap, Object);
|
|
|
|
public:
|
|
|
|
static int ALL_DEVICES;
|
|
|
|
struct Action {
|
|
int id;
|
|
float deadzone;
|
|
List<Ref<InputEvent>> inputs;
|
|
};
|
|
|
|
private:
|
|
static InputMap *singleton;
|
|
|
|
mutable RBMap<StringName, Action> input_map;
|
|
|
|
List<Ref<InputEvent>>::Element *_find_event(Action &p_action, const Ref<InputEvent> &p_event, bool p_exact_match = false, bool *p_pressed = nullptr, float *p_strength = nullptr, float *p_raw_strength = nullptr);
|
|
|
|
Array _get_action_list(const StringName &p_action);
|
|
Array _get_actions();
|
|
|
|
public:
|
|
static InputMap *get_singleton();
|
|
|
|
bool has_action(const StringName &p_action);
|
|
List<StringName> get_actions();
|
|
void add_action(const StringName &p_action, float p_deadzone = 0.5);
|
|
void erase_action(const StringName &p_action);
|
|
|
|
float action_get_deadzone(const StringName &p_action);
|
|
void action_set_deadzone(const StringName &p_action, float p_deadzone);
|
|
void action_add_event(const StringName &p_action, const Ref<InputEvent> &p_event);
|
|
bool action_has_event(const StringName &p_action, const Ref<InputEvent> &p_event);
|
|
void action_erase_event(const StringName &p_action, const Ref<InputEvent> &p_event);
|
|
void action_erase_events(const StringName &p_action);
|
|
|
|
const List<Ref<InputEvent>> *get_action_list(const StringName &p_action);
|
|
bool event_is_action(const Ref<InputEvent> &p_event, const StringName &p_action, bool p_exact_match = false);
|
|
bool event_get_action_status(const Ref<InputEvent> &p_event, const StringName &p_action, bool p_exact_match = false, bool *p_pressed = nullptr, float *p_strength = nullptr, float *p_raw_strength = nullptr);
|
|
|
|
const RBMap<StringName, Action> &get_action_map();
|
|
void load_default();
|
|
|
|
String suggest_actions(const StringName &p_action);
|
|
|
|
InputMap();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Input
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Input : public Object {
|
|
SFW_OBJECT(Input, Object);
|
|
|
|
_THREAD_SAFE_CLASS_
|
|
|
|
public:
|
|
Signal joy_connection_changed_signal;
|
|
|
|
enum MouseMode {
|
|
MOUSE_MODE_VISIBLE,
|
|
MOUSE_MODE_HIDDEN,
|
|
MOUSE_MODE_CAPTURED
|
|
};
|
|
|
|
#undef CursorShape
|
|
enum CursorShape {
|
|
CURSOR_ARROW,
|
|
CURSOR_IBEAM,
|
|
CURSOR_POINTING_HAND,
|
|
CURSOR_CROSS,
|
|
CURSOR_WAIT,
|
|
CURSOR_BUSY,
|
|
CURSOR_DRAG,
|
|
CURSOR_CAN_DROP,
|
|
CURSOR_FORBIDDEN,
|
|
CURSOR_VSIZE,
|
|
CURSOR_HSIZE,
|
|
CURSOR_BDIAGSIZE,
|
|
CURSOR_FDIAGSIZE,
|
|
CURSOR_MOVE,
|
|
CURSOR_VSPLIT,
|
|
CURSOR_HSPLIT,
|
|
CURSOR_HELP,
|
|
CURSOR_MAX
|
|
};
|
|
|
|
enum HatMask {
|
|
HAT_MASK_CENTER = 0,
|
|
HAT_MASK_UP = 1,
|
|
HAT_MASK_RIGHT = 2,
|
|
HAT_MASK_DOWN = 4,
|
|
HAT_MASK_LEFT = 8,
|
|
};
|
|
|
|
enum HatDir {
|
|
HAT_UP,
|
|
HAT_RIGHT,
|
|
HAT_DOWN,
|
|
HAT_LEFT,
|
|
HAT_MAX,
|
|
};
|
|
|
|
enum {
|
|
JOYPADS_MAX = 16,
|
|
};
|
|
|
|
static Input *get_singleton();
|
|
|
|
void set_mouse_mode(MouseMode p_mode);
|
|
MouseMode get_mouse_mode();
|
|
|
|
virtual bool is_key_pressed(int p_scancode);
|
|
virtual bool is_physical_key_pressed(int p_scancode);
|
|
virtual bool is_mouse_button_pressed(int p_button);
|
|
virtual bool is_action_pressed(const StringName &p_action, bool p_exact = false);
|
|
virtual bool is_action_just_pressed(const StringName &p_action, bool p_exact = false);
|
|
virtual bool is_action_just_released(const StringName &p_action, bool p_exact = false);
|
|
virtual float get_action_strength(const StringName &p_action, bool p_exact = false);
|
|
virtual float get_action_raw_strength(const StringName &p_action, bool p_exact = false);
|
|
|
|
float get_axis(const StringName &p_negative_action, const StringName &p_positive_action);
|
|
Vector2 get_vector(const StringName &p_negative_x, const StringName &p_positive_x, const StringName &p_negative_y, const StringName &p_positive_y, float p_deadzone = -1.0f);
|
|
|
|
virtual Point2 get_mouse_position();
|
|
virtual Point2 get_last_mouse_speed();
|
|
virtual int get_mouse_button_mask();
|
|
|
|
void set_mouse_position(const Point2 &p_posf);
|
|
|
|
virtual void warp_mouse_position(const Vector2 &p_to);
|
|
virtual Point2i warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect);
|
|
|
|
virtual void action_press(const StringName &p_action, float p_strength = 1.f);
|
|
virtual void action_release(const StringName &p_action);
|
|
|
|
virtual CursorShape get_default_cursor_shape();
|
|
virtual void set_default_cursor_shape(CursorShape p_shape);
|
|
virtual CursorShape get_current_cursor_shape();
|
|
virtual void set_custom_mouse_cursor(const Ref<Reference> &p_cursor, CursorShape p_shape = CURSOR_ARROW, const Vector2 &p_hotspot = Vector2();
|
|
|
|
virtual void parse_input_event(const Ref<InputEvent> &p_event);
|
|
|
|
virtual void flush_buffered_events();
|
|
virtual bool is_using_input_buffering();
|
|
virtual void set_use_input_buffering(bool p_enable);
|
|
virtual bool is_using_accumulated_input();
|
|
virtual void set_use_accumulated_input(bool p_enable);
|
|
|
|
virtual void release_pressed_events();
|
|
|
|
void set_main_loop(Application *p_main_loop);
|
|
void iteration(real_t p_step);
|
|
|
|
Input();
|
|
|
|
void _setup_window_callbacks();
|
|
|
|
protected:
|
|
static int glfw_to_sfw_code(int glfw_code);
|
|
|
|
unsigned int get_mouse_button_state(unsigned int p_button, int p_type);
|
|
static void get_key_modifier_state(int mods, Ref<InputEventWithModifiers> state);
|
|
|
|
static void GLFWkeyfunCallback(GLFWwindow *window, int key, int scancode, int action, int mods);
|
|
static void GLFWcharfunCallback(GLFWwindow *window, unsigned int codepoint);
|
|
static void GLFWcharmodsfunCallback(GLFWwindow *window, unsigned int codepoint, int mods);
|
|
static void GLFWmousebuttonfunCallback(GLFWwindow *window, int button, int action, int mods);
|
|
static void GLFWcursorposfunCallback(GLFWwindow *window, double xpos, double ypos);
|
|
static void GLFWcursorenterfunCallback(GLFWwindow *window, int entered);
|
|
static void GLFWscrollfunCallback(GLFWwindow *window, double xoffset, double yoffset);
|
|
static void GLFWdropfunCallback(GLFWwindow *window, int path_count, const char *paths[]);
|
|
static void GLFWjoystickfunCallback(int jid, int event);
|
|
static void GLFWwindowfocusfunCallback(GLFWwindow *window, int focused);
|
|
|
|
protected:
|
|
|
|
struct SpeedTrack {
|
|
uint64_t last_tick;
|
|
Vector2 speed;
|
|
Vector2 accum;
|
|
float accum_t;
|
|
float min_ref_frame;
|
|
float max_ref_frame;
|
|
|
|
void update(const Vector2 &p_delta_p);
|
|
void reset();
|
|
SpeedTrack();
|
|
};
|
|
|
|
struct Action {
|
|
uint64_t pressed_idle_frame;
|
|
uint64_t released_idle_frame;
|
|
bool pressed;
|
|
bool exact;
|
|
float strength;
|
|
float raw_strength;
|
|
|
|
Action();
|
|
};
|
|
|
|
void _parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_emulated);
|
|
|
|
static String _hex_str(uint8_t p_byte);
|
|
|
|
List<Ref<InputEvent>> buffered_events;
|
|
bool use_input_buffering;
|
|
bool use_accumulated_input;
|
|
|
|
int mouse_button_mask;
|
|
|
|
RBSet<int> physical_keys_pressed;
|
|
RBSet<int> keys_pressed;
|
|
|
|
Vector2 mouse_pos;
|
|
|
|
Application *main_loop;
|
|
bool legacy_just_pressed_behavior;
|
|
|
|
Point2 last_mouse_pos;
|
|
bool last_mouse_pos_valid;
|
|
Point2i last_click_pos;
|
|
uint64_t last_click_ms;
|
|
int last_click_button_index;
|
|
uint32_t last_button_state;
|
|
|
|
int last_key_modifier_state;
|
|
|
|
bool window_has_focus;
|
|
|
|
RBMap<StringName, Action> action_state;
|
|
|
|
SpeedTrack mouse_speed_track;
|
|
|
|
CursorShape default_shape;
|
|
|
|
static Input *singleton;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Shader
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Shader {
|
|
public:
|
|
enum VertexAttributes {
|
|
ATTRIBUTE_POSITION = 0,
|
|
ATTRIBUTE_NORMAL,
|
|
ATTRIBUTE_COLOR,
|
|
ATTRIBUTE_UV,
|
|
};
|
|
|
|
bool bind();
|
|
void unbind();
|
|
|
|
void compile();
|
|
void destroy();
|
|
|
|
const char **get_vertex_shader_source();
|
|
void set_vertex_shader_source(const char **source);
|
|
|
|
const char **get_fragment_shader_source();
|
|
void set_fragment_shader_source(const char **source);
|
|
|
|
void print_shader_errors(const uint32_t p_program, const char *name);
|
|
void print_program_errors(const uint32_t p_program);
|
|
|
|
Shader();
|
|
~Shader();
|
|
|
|
uint32_t vertex_shader;
|
|
uint32_t fragment_shader;
|
|
uint32_t program;
|
|
|
|
static Shader *current_shader;
|
|
|
|
protected:
|
|
const char **vertex_shader_source;
|
|
const char **fragment_shader_source;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
ShaderCache
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class ShaderCache {
|
|
public:
|
|
static ShaderCache *get_singleton();
|
|
|
|
Shader *get_shader(const int id);
|
|
void add_shader(const int id, Shader *shader);
|
|
|
|
ShaderCache();
|
|
~ShaderCache();
|
|
|
|
protected:
|
|
HashMap<int, Shader *> shaders;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Material
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Material : public Reference {
|
|
SFW_OBJECT(Material, Reference);
|
|
|
|
public:
|
|
void bind();
|
|
|
|
virtual void unbind();
|
|
virtual int get_material_id();
|
|
virtual void bind_uniforms();
|
|
virtual void setup_uniforms();
|
|
virtual void setup_state();
|
|
virtual const char **get_vertex_shader_source();
|
|
virtual const char **get_fragment_shader_source();
|
|
|
|
int32_t get_uniform(const char *name);
|
|
|
|
Material();
|
|
virtual ~Material();
|
|
|
|
protected:
|
|
static Material *current_material;
|
|
|
|
Shader *shader;
|
|
|
|
protected:
|
|
void set_uniform(int32_t p_uniform, const Transform &p_transform);
|
|
void set_uniform(int32_t p_uniform, const Transform2D &p_transform);
|
|
void set_uniform(int32_t p_uniform, const Projection &p_matrix);
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
ColorMaterial
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class ColorMaterial : public Material {
|
|
SFW_OBJECT(ColorMaterial, Material);
|
|
|
|
public:
|
|
int get_material_id();
|
|
|
|
void bind_uniforms();
|
|
void setup_uniforms();
|
|
|
|
const char **get_vertex_shader_source();
|
|
const char **get_fragment_shader_source();
|
|
|
|
ColorMaterial();
|
|
|
|
int32_t projection_matrix_location;
|
|
int32_t camera_matrix_location;
|
|
int32_t model_view_matrix_location;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
ColorMaterial2D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class ColorMaterial2D : public Material {
|
|
SFW_OBJECT(ColorMaterial2D, Material);
|
|
|
|
public:
|
|
int get_material_id();
|
|
|
|
void bind_uniforms();
|
|
void setup_uniforms();
|
|
void unbind();
|
|
void setup_state();
|
|
|
|
const char **get_vertex_shader_source();
|
|
const char **get_fragment_shader_source();
|
|
|
|
ColorMaterial2D();
|
|
|
|
int32_t projection_matrix_location;
|
|
int32_t model_view_matrix_location;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
TextureMaterial2D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class TextureMaterial2D : public Material {
|
|
SFW_OBJECT(TextureMaterial2D, Material);
|
|
|
|
public:
|
|
int get_material_id();
|
|
|
|
void bind_uniforms();
|
|
void setup_uniforms();
|
|
void unbind();
|
|
void setup_state();
|
|
|
|
const char **get_vertex_shader_source();
|
|
const char **get_fragment_shader_source();
|
|
|
|
TextureMaterial2D();
|
|
|
|
int32_t projection_matrix_location;
|
|
int32_t model_view_matrix_location;
|
|
|
|
int32_t texture_location;
|
|
|
|
Ref<Texture> texture;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
TextureMaterial
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class TextureMaterial : public Material {
|
|
SFW_OBJECT(TextureMaterial, Material);
|
|
|
|
public:
|
|
int get_material_id();
|
|
|
|
void bind_uniforms();
|
|
void setup_uniforms();
|
|
void unbind();
|
|
void setup_state();
|
|
|
|
const char **get_vertex_shader_source();
|
|
const char **get_fragment_shader_source();
|
|
|
|
TextureMaterial();
|
|
|
|
int32_t projection_matrix_location;
|
|
int32_t camera_matrix_location;
|
|
int32_t model_view_matrix_location;
|
|
|
|
int32_t texture_location;
|
|
|
|
Ref<Texture> texture;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
ColoredMaterial
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class ColoredMaterial : public Material {
|
|
public:
|
|
int get_material_id();
|
|
|
|
void bind_uniforms();
|
|
void setup_uniforms();
|
|
|
|
const char **get_vertex_shader_source();
|
|
const char **get_fragment_shader_source();
|
|
|
|
ColoredMaterial();
|
|
|
|
int32_t projection_matrix_location;
|
|
int32_t model_view_matrix_location;
|
|
|
|
int32_t tri_color_uniform_location;
|
|
Color color;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
FontMaterial
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class FontMaterial : public Material {
|
|
SFW_OBJECT(FontMaterial, Material);
|
|
|
|
public:
|
|
int get_material_id();
|
|
|
|
void bind_uniforms();
|
|
void setup_uniforms();
|
|
void unbind();
|
|
void setup_state();
|
|
|
|
const char **get_vertex_shader_source();
|
|
const char **get_fragment_shader_source();
|
|
|
|
FontMaterial();
|
|
|
|
int32_t projection_matrix_location;
|
|
int32_t model_view_matrix_location;
|
|
|
|
int32_t texture_location;
|
|
|
|
Ref<Texture> texture;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
TransparentTextureMaterial
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class TransparentTextureMaterial : public Material {
|
|
SFW_OBJECT(TransparentTextureMaterial, Material);
|
|
|
|
public:
|
|
int get_material_id();
|
|
|
|
void bind_uniforms();
|
|
void setup_uniforms();
|
|
void unbind();
|
|
void setup_state();
|
|
|
|
const char **get_vertex_shader_source();
|
|
const char **get_fragment_shader_source();
|
|
|
|
TransparentTextureMaterial();
|
|
|
|
int32_t projection_matrix_location;
|
|
int32_t model_view_matrix_location;
|
|
|
|
int32_t texture_location;
|
|
|
|
Ref<Texture> texture;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Font
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Font : public Resource {
|
|
SFW_OBJECT(Font, Resource);
|
|
|
|
public:
|
|
|
|
enum FONT_FLAGS {
|
|
|
|
FONT_512 = 0x0,
|
|
FONT_1024 = 0x1,
|
|
FONT_2048 = 0x2,
|
|
FONT_4096 = 0x4,
|
|
|
|
FONT_NO_OVERSAMPLE = 0x0,
|
|
FONT_OVERSAMPLE_X = 0x08,
|
|
FONT_OVERSAMPLE_Y = 0x10,
|
|
|
|
FONT_ASCII = 0x800,
|
|
FONT_AR = 0x001000,
|
|
FONT_ZH = 0x002000,
|
|
FONT_EL = 0x004000,
|
|
FONT_EM = 0x008000,
|
|
FONT_EU = 0x010000,
|
|
FONT_HE = 0x020000,
|
|
FONT_JP = 0x040000,
|
|
FONT_KR = 0x080000,
|
|
FONT_RU = 0x100000,
|
|
FONT_TH = 0x200000,
|
|
FONT_VI = 0x400000,
|
|
FONT_CJK = FONT_ZH | FONT_JP | FONT_KR,
|
|
|
|
};
|
|
|
|
struct FontMetrics {
|
|
float ascent;
|
|
float descent;
|
|
float linegap;
|
|
float linedist;
|
|
};
|
|
|
|
void load_default(const float size, const uint32_t flags = 0);
|
|
|
|
float get_scale();
|
|
void set_scale(const float p_scale);
|
|
|
|
void font_face(const char *filename_ttf, float font_size, uint32_t flags);
|
|
void font_face_from_mem(const void *ttf_buffer, uint32_t ttf_len, float font_size, uint32_t flags);
|
|
|
|
Vector2 generate_mesh(const String &p_text, Ref<Mesh> &p_into, const Color &p_color = Color(1, 1, 1, 1);
|
|
Vector2 get_string_size(const String &p_text);
|
|
FontMetrics font_metrics();
|
|
|
|
int get_atlas_width();
|
|
int get_atlas_height();
|
|
|
|
Ref<Image> get_image();
|
|
Ref<Texture> get_texture();
|
|
|
|
void unload();
|
|
|
|
Font();
|
|
~Font();
|
|
|
|
protected:
|
|
|
|
uint32_t _num_glyphs;
|
|
uint32_t *_cp2iter;
|
|
uint32_t *_iter2cp;
|
|
uint32_t _begin;
|
|
|
|
bool _initialized;
|
|
|
|
int _height;
|
|
int _width;
|
|
float _font_size;
|
|
float _factor;
|
|
float _scale;
|
|
|
|
float _ascent;
|
|
float _descent;
|
|
float _linegap;
|
|
float _linedist;
|
|
|
|
Ref<Image> _image;
|
|
Ref<Texture> _texture;
|
|
|
|
struct TextureOffset {
|
|
float x0;
|
|
float y0;
|
|
float x1;
|
|
float y1;
|
|
|
|
float x0_orig;
|
|
float y0_orig;
|
|
float x1_orig;
|
|
float y1_orig;
|
|
|
|
float xoff;
|
|
float xoff2;
|
|
float xadvance;
|
|
float yoff;
|
|
float yoff2;
|
|
};
|
|
|
|
Vector<TextureOffset> _texture_offsets;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Scene
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Scene : public Reference {
|
|
SFW_OBJECT(Scene, Reference);
|
|
|
|
public:
|
|
virtual void input_event(const Ref<InputEvent> &event);
|
|
virtual void update(float delta);
|
|
virtual void render();
|
|
|
|
Scene();
|
|
virtual ~Scene();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
AppWindow
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class AppWindow {
|
|
public:
|
|
enum WINDOW_FLAGS {
|
|
WINDOW_MSAA2 = 0x02,
|
|
WINDOW_MSAA4 = 0x04,
|
|
WINDOW_MSAA8 = 0x08,
|
|
|
|
WINDOW_SQUARE = 0x20,
|
|
WINDOW_PORTRAIT = 0x40,
|
|
WINDOW_LANDSCAPE = 0x80,
|
|
WINDOW_ASPECT = 0x100,
|
|
WINDOW_FIXED = 0x200,
|
|
WINDOW_TRANSPARENT = 0x400,
|
|
WINDOW_BORDERLESS = 0x800,
|
|
|
|
WINDOW_VSYNC = 0,
|
|
WINDOW_VSYNC_ADAPTIVE = 0x1000,
|
|
WINDOW_VSYNC_DISABLED = 0x2000,
|
|
};
|
|
|
|
bool create(float scale, unsigned int flags);
|
|
bool create_from_handle(void *handle, float scale, unsigned int flags);
|
|
|
|
int frame_begin();
|
|
void frame_end();
|
|
void frame_swap();
|
|
int swap();
|
|
|
|
void loop(void (*function);
|
|
void loop_exit();
|
|
|
|
void set_title(const char *title);
|
|
void set_color(unsigned color);
|
|
Vector2 get_canvas();
|
|
void *get_handle();
|
|
char *get_stats();
|
|
|
|
uint64_t frame();
|
|
int get_width();
|
|
int get_height();
|
|
double get_time();
|
|
double get_delta();
|
|
|
|
void set_focus();
|
|
int has_focus();
|
|
|
|
void set_fullscreen(int enabled);
|
|
int has_fullscreen();
|
|
|
|
enum MouseMode {
|
|
MOUSE_MODE_VISIBLE,
|
|
MOUSE_MODE_HIDDEN,
|
|
MOUSE_MODE_CAPTURED
|
|
};
|
|
|
|
void set_mouse_mode(MouseMode p_mode);
|
|
MouseMode get_mouse_mode();
|
|
|
|
void set_pause(int paused);
|
|
int has_pause();
|
|
|
|
void set_visible(int visible);
|
|
int has_visible();
|
|
|
|
void set_maximize(int enabled);
|
|
int has_maximize();
|
|
|
|
void set_transparent(int enabled);
|
|
int has_transparent();
|
|
|
|
void set_icon(const char *file_icon);
|
|
int has_icon();
|
|
|
|
double get_aspect();
|
|
void aspect_lock(unsigned numer, unsigned denom);
|
|
void aspect_unlock();
|
|
|
|
double get_fps();
|
|
double get_fps_target();
|
|
|
|
void fps_lock(float fps);
|
|
void fps_unlock();
|
|
|
|
void shutdown();
|
|
|
|
Vector2 dpi();
|
|
|
|
enum CURSOR_SHAPES {
|
|
CURSOR_NONE,
|
|
CURSOR_HW_ARROW,
|
|
CURSOR_HW_IBEAM,
|
|
CURSOR_HW_HDRAG,
|
|
CURSOR_HW_VDRAG,
|
|
CURSOR_HW_HAND,
|
|
CURSOR_HW_CROSS,
|
|
CURSOR_SW_AUTO,
|
|
};
|
|
|
|
void set_cursor_shape(unsigned shape);
|
|
|
|
const char *get_clipboard();
|
|
void set_clipboard(const char *text);
|
|
|
|
static AppWindow *get_singleton();
|
|
|
|
AppWindow();
|
|
~AppWindow();
|
|
|
|
protected:
|
|
static void glfw_quit();
|
|
static void glfw_init();
|
|
static void glfw_error_callback(int error, const char *description);
|
|
static void drop_callback(GLFWwindow *window, int count, const char **paths);
|
|
static void window_hints(unsigned flags);
|
|
GLFWmonitor *find_monitor(int wx, int wy);
|
|
void resize();
|
|
static void loop_wrapper(void *loopArg);
|
|
void glNewFrame();
|
|
double get_scale();
|
|
void create_default_cursors();
|
|
|
|
static AppWindow *_singleton;
|
|
|
|
double boot_time;
|
|
|
|
GLFWwindow *_window;
|
|
int w;
|
|
int h;
|
|
int xpos;
|
|
int ypos;
|
|
int paused;
|
|
int fullscreen;
|
|
int xprev;
|
|
int yprev;
|
|
int wprev;
|
|
int hprev;
|
|
uint64_t frame_count;
|
|
double t;
|
|
double dt;
|
|
double fps;
|
|
double hz;
|
|
char title[128];
|
|
int locked_aspect_ratio;
|
|
Color winbgcolor;
|
|
int _has_icon;
|
|
|
|
int _cursorshape = 1;
|
|
|
|
void (*render_callback);
|
|
Vector2 last_canvas_size;
|
|
|
|
int width;
|
|
int height;
|
|
bool keep_running;
|
|
unsigned int _window_flags;
|
|
|
|
bool _fullscreen;
|
|
bool _transparent;
|
|
bool _vsync;
|
|
bool _vsync_adaptive;
|
|
|
|
bool _cursors_initialized;
|
|
GLFWcursor *cursors[7];
|
|
unsigned int cursor_enums[7];
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Application
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Application : public Object {
|
|
SFW_OBJECT(Application, Object);
|
|
|
|
public:
|
|
enum {
|
|
NOTIFICATION_WM_MOUSE_ENTER = 1002,
|
|
NOTIFICATION_WM_MOUSE_EXIT = 1003,
|
|
NOTIFICATION_WM_FOCUS_IN = 1004,
|
|
NOTIFICATION_WM_FOCUS_OUT = 1005,
|
|
NOTIFICATION_WM_QUIT_REQUEST = 1006,
|
|
NOTIFICATION_WM_GO_BACK_REQUEST = 1007,
|
|
NOTIFICATION_WM_UNFOCUS_REQUEST = 1008,
|
|
|
|
NOTIFICATION_APP_RESUMED = 1014,
|
|
NOTIFICATION_APP_PAUSED = 1015,
|
|
};
|
|
|
|
bool running;
|
|
int target_fps;
|
|
|
|
virtual void input_event(const Ref<InputEvent> &event);
|
|
virtual void update(float delta);
|
|
virtual void render();
|
|
|
|
uint64_t get_idle_frames();
|
|
|
|
void main_loop();
|
|
|
|
void main_loop_static();
|
|
|
|
Application();
|
|
virtual ~Application();
|
|
|
|
Ref<Scene> scene;
|
|
|
|
static Application *get_singleton();
|
|
|
|
real_t frame_delta;
|
|
|
|
protected:
|
|
virtual void _init_window();
|
|
|
|
static Application *_instance;
|
|
|
|
uint64_t _idle_frames;
|
|
|
|
real_t _time_scale;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Renderer
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Renderer : public Object {
|
|
SFW_OBJECT(Renderer, Object);
|
|
|
|
public:
|
|
bool get_depth_buffer_enable();
|
|
void set_depth_buffer_enable(const bool p_depth_buffer);
|
|
|
|
void draw_point(const Vector2 &p_position, const Color &p_color = Color(1, 1, 1);
|
|
void draw_line(const Vector2 &p_from, const Vector2 &p_to, const Color &p_color = Color(1, 1, 1);
|
|
void draw_line_rect(const Rect2 &p_rect, const Color &p_color = Color(1, 1, 1);
|
|
void draw_rect(const Rect2 &p_rect, const Color &p_color = Color(1, 1, 1);
|
|
|
|
void draw_texture(const Ref<Texture> &p_texture, const Rect2 &p_dst_rect, const Color &p_modulate = Color(1, 1, 1);
|
|
void draw_texture_clipped(const Ref<Texture> &p_texture, const Rect2 &p_src_rect, const Rect2 &p_dst_rect, const Color &p_modulate = Color(1, 1, 1);
|
|
void draw_texture_tr(const Transform2D &p_transform_2d, const Ref<Texture> &p_texture, const Rect2 &p_dst_rect, const Color &p_modulate = Color(1, 1, 1);
|
|
void draw_texture_clipped_tr(const Transform2D &p_transform_2d, const Ref<Texture> &p_texture, const Rect2 &p_src_rect, const Rect2 &p_dst_rect, const Color &p_modulate = Color(1, 1, 1);
|
|
|
|
void draw_mesh_2d(const Ref<Mesh> &p_mesh, const Ref<Texture> &p_texture, const Vector2 &p_position);
|
|
void draw_mesh_2d_tr(const Ref<Mesh> &p_mesh, const Ref<Texture> &p_texture, const Transform2D &p_transform_2d);
|
|
void draw_mesh_2d_mat(const Ref<Mesh> &p_mesh, const Ref<Material> &p_material, const Vector2 &p_position);
|
|
void draw_mesh_2d_mat_tr(const Ref<Mesh> &p_mesh, const Ref<Material> &p_material, const Transform2D &p_transform_2d);
|
|
|
|
void draw_text_2d(const String &p_text, const Ref<Font> &p_font, const Vector2 &p_position, const Color &p_color = Color(1, 1, 1);
|
|
void draw_text_2d_tf(const String &p_text, const Ref<Font> &p_font, const Transform2D &p_transform_2d, const Color &p_color = Color(1, 1, 1);
|
|
void draw_text_2d_tf_material(const String &p_text, const Ref<Font> &p_font, const Ref<Material> &p_material, const Transform2D &p_transform_2d, const Color &p_color = Color(1, 1, 1);
|
|
|
|
void draw_mesh_3d(const Ref<Mesh> &p_mesh, const Ref<Material> &p_material, const Transform &p_transform);
|
|
|
|
Transform2D camera_2d_get_current_model_view_matrix();
|
|
void camera_2d_push_model_view_matrix(const Transform2D &p_transform_2d);
|
|
void camera_2d_pop_model_view_matrix();
|
|
int get_camera_2d_model_view_matrix_stack_size();
|
|
void camera_2d_reset();
|
|
|
|
void camera_3d_reset();
|
|
|
|
void clear_screen(const Color &p_color);
|
|
|
|
Vector2i get_window_size();
|
|
float get_window_aspect();
|
|
|
|
static void initialize();
|
|
static void destroy();
|
|
|
|
Renderer();
|
|
~Renderer();
|
|
|
|
static Renderer *get_singleton();
|
|
|
|
private:
|
|
static Renderer *_singleton;
|
|
|
|
bool _depth_buffer;
|
|
|
|
Ref<Mesh> _2d_mesh;
|
|
Ref<Mesh> _3d_mesh;
|
|
Ref<Mesh> _font_mesh;
|
|
|
|
Ref<TextureMaterial2D> _texture_material_2d;
|
|
Ref<FontMaterial> _font_material;
|
|
Ref<ColorMaterial2D> _color_material_2d;
|
|
|
|
Vector<Transform2D> camera_2d_model_view_matrix_stack;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Object2D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Object2D : public Object {
|
|
SFW_OBJECT(Object2D, Object);
|
|
|
|
public:
|
|
Object2D();
|
|
virtual ~Object2D();
|
|
|
|
Transform2D transform;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Object3D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Object3D : public Object {
|
|
SFW_OBJECT(Object3D, Object);
|
|
|
|
public:
|
|
Object3D();
|
|
virtual ~Object3D();
|
|
|
|
Transform transform;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Camera2D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Camera2D : public Object2D {
|
|
SFW_OBJECT(Camera2D, Object2D);
|
|
|
|
public:
|
|
Transform2D get_model_view_matrix();
|
|
void set_model_view_matrix(const Transform2D &p_value);
|
|
|
|
Transform get_projection_matrix();
|
|
void set_projection_matrix(const Transform &p_value);
|
|
|
|
virtual void bind();
|
|
|
|
void make_current();
|
|
|
|
Camera2D();
|
|
virtual ~Camera2D();
|
|
|
|
Vector2 size;
|
|
|
|
static Camera2D *current_camera;
|
|
|
|
protected:
|
|
Transform2D _model_view_matrix;
|
|
Transform _projection_matrix;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
MeshInstance2D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class MeshInstance2D : public Object2D {
|
|
SFW_OBJECT(MeshInstance2D, Object2D);
|
|
|
|
public:
|
|
void render();
|
|
|
|
MeshInstance2D();
|
|
~MeshInstance2D();
|
|
|
|
Ref<Material> material;
|
|
Ref<Mesh> mesh;
|
|
|
|
Transform2D transform;
|
|
|
|
Vector<MeshInstance2D *> children;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Sprite
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Sprite : public Object2D {
|
|
public:
|
|
void render();
|
|
void update_mesh();
|
|
|
|
Sprite();
|
|
~Sprite();
|
|
|
|
Transform2D transform;
|
|
|
|
MeshInstance2D *mesh_instance;
|
|
|
|
float width;
|
|
float height;
|
|
|
|
float region_x;
|
|
float region_y;
|
|
float region_width;
|
|
float region_height;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Text2D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Text2D : public Object2D {
|
|
SFW_OBJECT(Text2D, Object2D);
|
|
|
|
public:
|
|
Color get_text_color();
|
|
void set_text_color(const Color &p_color);
|
|
|
|
String get_text();
|
|
void set_text(const String &p_text);
|
|
|
|
Ref<Font> get_font();
|
|
void set_font(const Ref<Font> &p_font);
|
|
|
|
Vector2 get_text_size();
|
|
|
|
void update();
|
|
void render();
|
|
|
|
Text2D();
|
|
~Text2D();
|
|
|
|
protected:
|
|
Ref<Font> _font;
|
|
Ref<FontMaterial> _material;
|
|
Ref<Mesh> _mesh;
|
|
String _text;
|
|
Color _text_color;
|
|
Vector2 _text_size;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
TileMap
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class TileMap : public Object2D {
|
|
SFW_OBJECT(TileMap, Object2D);
|
|
|
|
public:
|
|
void build_mesh();
|
|
void allocate_data();
|
|
void add_rect(const int x, const int y, const float uv_x, const float uv_y, const float uv_size_x, const float uv_size_y);
|
|
|
|
uint8_t get_data(const int x, const int y);
|
|
void set_data(const int x, const int y, const uint8_t value);
|
|
|
|
void render();
|
|
|
|
TileMap();
|
|
~TileMap();
|
|
|
|
uint8_t *data;
|
|
int size_x;
|
|
int size_y;
|
|
|
|
int atlas_size_x;
|
|
int atlas_size_y;
|
|
|
|
Ref<Mesh> mesh;
|
|
Ref<Material> material;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Camera3D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class Camera3D : public Object3D {
|
|
SFW_OBJECT(Camera3D, Object3D);
|
|
|
|
public:
|
|
Transform get_camera_transform();
|
|
void set_camera_transform(const Transform &p_value);
|
|
|
|
Transform get_model_view_matrix();
|
|
void set_model_view_matrix(const Transform &p_value);
|
|
|
|
Projection get_projection_matrix();
|
|
void set_projection_matrix(const Projection &p_value);
|
|
|
|
virtual void bind();
|
|
|
|
void make_current();
|
|
|
|
Camera3D();
|
|
virtual ~Camera3D();
|
|
|
|
float size;
|
|
float screen_aspect_ratio;
|
|
float znear;
|
|
float zfar;
|
|
bool vaspect;
|
|
|
|
static Camera3D *current_camera;
|
|
|
|
protected:
|
|
Transform _camera_transform;
|
|
Transform _model_view_matrix;
|
|
Projection _projection_matrix;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
OrthographicCamera
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class OrthographicCamera : public Camera3D {
|
|
public:
|
|
void bind();
|
|
|
|
OrthographicCamera();
|
|
~OrthographicCamera();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
PerspectiveCamera
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class PerspectiveCamera : public Camera3D {
|
|
public:
|
|
float fov;
|
|
|
|
void bind();
|
|
|
|
PerspectiveCamera();
|
|
~PerspectiveCamera();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
FrustumCamera
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class FrustumCamera : public Camera3D {
|
|
public:
|
|
float offset;
|
|
|
|
void bind();
|
|
|
|
FrustumCamera();
|
|
~FrustumCamera();
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
MeshInstance3D
|
|
----------------------------------------------------------------------------------------
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
|
class MeshInstance3D : public Object3D {
|
|
SFW_OBJECT(MeshInstance3D, Object3D);
|
|
|
|
public:
|
|
void render();
|
|
|
|
MeshInstance3D();
|
|
~MeshInstance3D();
|
|
|
|
Ref<Material> material;
|
|
Ref<Mesh> mesh;
|
|
|
|
Vector<MeshInstance3D *> children;
|
|
};
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
Modules
|
|
----------------------------------------------------------------------------------------
|
|
|
|
The CA library contains the APIs for applications to allocate and exchange resources.
|
|
|
|
|
|
!!! Attention Attention
|
|
Always read all of the documentation.
|
|
|
|
[CA APIs](#CA)
|
|
: List of APIs to manage external processes.
|
|
|
|
CA Buffer List APIs
|
|
: Methods to process buffer resources separate from computation.
|
|
|
|
CA Data Structures
|
|
: Specifies the data structures used for complex cases.
|
|
|
|
|
|
## Handles
|
|
|
|
`CA::OpenHandle(const std::string&)`
|
|
: Open a reference handle.
|
|
|
|
`CA::ReadMetaData(const Handle&)`
|
|
: Metadata about the event.
|
|
|
|
`CA::CloseHandle(const Handle&)`
|
|
: Free all handle resources, recursively.
|
|
|
|
|
|
CA
|
|
====================================================================================
|
|
|
|
!!! Warning Warning
|
|
The API content represents the set of APIs you can use directly. Some APIs
|
|
are not documented and we advise you do not use them directly. Using undocumented
|
|
APIs can lead to incompatibility when upgrading to later releases.
|
|
|
|
|
|
These examples assume that your directory structure is:
|
|
|
|
**********************************************************
|
|
*
|
|
* 📂 ca1
|
|
* |
|
|
* +-- 📄 bar.txt
|
|
* |
|
|
* +-- 📂 foo
|
|
* | |
|
|
* | ⋮
|
|
* |
|
|
* +-- 📂 xsource
|
|
* | |
|
|
* | +-- 📂 data
|
|
* | | |
|
|
* | | +-- 📄 manifest.json
|
|
* | | |
|
|
* | ⋮ ⋮
|
|
* |
|
|
* ⋮
|
|
**********************************************************
|
|
[Directory structure.]
|
|
|
|
|
|
Table
|
|
------------------------------------------------------------------
|
|
|
|
|
|
Screen | Factor | Used | Efficiency
|
|
----------:|------------:|----------:|---------:
|
|
1366x768 | 3x | 1152x672 | 74%
|
|
1440x900 | 3x | 1152x672 | 60%
|
|
*1600x900* | *4x* | 1536x896 | *96%*
|
|
1680x1050 | 4x | 1536x896 | 78%
|
|
1920x1080 | 4x | 1536x896 | 66%
|
|
*1920x1200*| *5x* | 1920x1120 | *93%*
|
|
[A Table]
|
|
|
|
|
|
More Info
|
|
------------------------------------------------------------------
|
|
|
|
******************************************************************
|
|
* ^ y
|
|
* |
|
|
* .---------. .----|----.
|
|
* | | | | |
|
|
* | *-------> x | *--------> x
|
|
* | | | | |
|
|
* '----|----' '---------'
|
|
* |
|
|
* v y
|
|
******************************************************************
|
|
[Figure 1: Coordinate Example]
|
|
|
|
|
|
-----
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GLSL
|
|
vec3 sphNormal(in vec3 pos, in vec4 sph) {
|
|
return normalize(pos-sph.xyz);
|
|
}
|
|
|
|
vec3 camera(vec2 U, vec2 r, vec3 ro, vec3 la, float fl) {
|
|
vec2 uv = (U - r*.5)/r.y;
|
|
vec3 fwd = normalize(la-ro),
|
|
rgt = normalize(vec3(fwd.z, 0., -fwd.x));
|
|
return normalize(fwd + fl*uv.x*rgt + fl*uv.y*cross(fwd, rgt));
|
|
}
|
|
|
|
float vMap(vec3 p) {
|
|
float hit = 0.0;
|
|
vec2 h2 = hash22(floor(p.xz*0.25));
|
|
if (p.z > 0.0) {
|
|
if (p.y < -10.0 && h2.x > 0.5) hit=1.0;
|
|
if (p.y > 10.0 && h2.y > 0.5) hit=1.0;
|
|
}
|
|
return hit;
|
|
}
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
[Code listing]
|
|
|
|
<script>markdeepOptions = {tocStyle:'long', definitionStyle:'long', linkAPIDefinitions: true};</script>
|
|
<link rel="stylesheet" href="slate.css">
|
|
<!-- Markdeep: --><style class="fallback">body{visibility:hidden;white-space:pre;font-family:monospace}</style><script src="markdeep.min.js"></script><script src="https://casual-effects.com/markdeep/latest/markdeep.min.js?"></script><script>window.alreadyProcessedMarkdeep||(document.body.style.visibil |