29 # define _WIN32_IE 0x0501
52 #if defined(WITH_GL_EGL)
58 #ifdef WITH_INPUT_NDOF
64 # define VK_MINUS 0xBD
67 # define VK_SEMICOLON 0xBA
70 # define VK_PERIOD 0xBE
73 # define VK_COMMA 0xBC
76 # define VK_QUOTE 0xDE
79 # define VK_BACK_QUOTE 0xC0
82 # define VK_SLASH 0xBF
85 # define VK_BACK_SLASH 0xDC
88 # define VK_EQUALS 0xBB
90 #ifndef VK_OPEN_BRACKET
91 # define VK_OPEN_BRACKET 0xDB
93 #ifndef VK_CLOSE_BRACKET
94 # define VK_CLOSE_BRACKET 0xDD
97 # define VK_GR_LESS 0xE2
100 #ifndef VK_MEDIA_NEXT_TRACK
101 # define VK_MEDIA_NEXT_TRACK 0xB0
103 #ifndef VK_MEDIA_PREV_TRACK
104 # define VK_MEDIA_PREV_TRACK 0xB1
106 #ifndef VK_MEDIA_STOP
107 # define VK_MEDIA_STOP 0xB2
109 #ifndef VK_MEDIA_PLAY_PAUSE
110 # define VK_MEDIA_PLAY_PAUSE 0xB3
114 #ifndef WM_DPICHANGED
115 # define WM_DPICHANGED 0x02E0
119 #ifndef WM_POINTERENTER
120 # define WM_POINTERENTER 0x0249
122 #ifndef WM_POINTERDOWN
123 # define WM_POINTERDOWN 0x0246
125 #ifndef WM_POINTERUPDATE
126 # define WM_POINTERUPDATE 0x0245
129 # define WM_POINTERUP 0x0247
131 #ifndef WM_POINTERLEAVE
132 # define WM_POINTERLEAVE 0x024A
144 #define BROKEN_PEEK_TOUCHPAD
148 #ifdef WITH_INPUT_NDOF
149 # define DEVICE_COUNT 2
151 # define DEVICE_COUNT 1
162 #ifdef WITH_INPUT_NDOF
171 GHOST_PRINTF(
"could not register for RawInput: %d\n", (
int)GetLastError());
176 #ifndef DPI_ENUMS_DECLARED
190 # define USER_DEFAULT_SCREEN_DPI 96
192 # define DPI_ENUMS_DECLARED
198 : m_hasPerformanceCounter(false), m_freq(0), m_start(0), m_lfstart(0)
208 HMODULE m_shcore = ::LoadLibrary(
"Shcore.dll");
213 if (fpSetProcessDpiAwareness) {
225 #ifdef WITH_INPUT_NDOF
240 __int64 delta = (perf_ticks -
m_start) * 1000;
260 ::QueryPerformanceCounter((LARGE_INTEGER *)&
count);
275 width = ::GetSystemMetrics(SM_CXSCREEN);
276 height = ::GetSystemMetrics(SM_CYSCREEN);
281 width = ::GetSystemMetrics(SM_CXVIRTUALSCREEN);
282 height = ::GetSystemMetrics(SM_CYVIRTUALSCREEN);
293 const bool exclusive,
294 const bool is_dialog,
318 GHOST_PRINT(
"GHOST_SystemWin32::createWindow(): window invalid\n");
337 HWND wnd = CreateWindowA(
"STATIC",
339 WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
346 GetModuleHandle(
NULL),
349 HDC mHDC = GetDC(wnd);
350 HDC prev_hdc = wglGetCurrentDC();
351 HGLRC prev_context = wglGetCurrentContext();
352 #if defined(WITH_GL_PROFILE_CORE)
353 for (
int minor = 5; minor >= 0; --minor) {
358 WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
361 (debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
364 if (
context->initializeDrawingContext()) {
376 WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
379 (debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
382 if (
context->initializeDrawingContext()) {
390 #elif defined(WITH_GL_PROFILE_COMPAT)
401 (debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
404 if (
context->initializeDrawingContext()) {
414 wglMakeCurrent(prev_hdc, prev_context);
439 HWND wnd = CreateWindowA(
"STATIC",
441 WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
448 GetModuleHandle(
NULL),
469 bool hasEventHandled =
false;
474 if (waitForEvent && !::PeekMessage(&msg,
NULL, 0, 0, PM_NOREMOVE)) {
484 else if (maxSleep >= 0.0) {
485 ::SetTimer(
NULL, 0, maxSleep,
NULL);
487 ::KillTimer(
NULL, 0);
493 hasEventHandled =
true;
497 while (::PeekMessageW(&msg,
NULL, 0, 0, PM_REMOVE) != 0) {
500 ::TranslateMessage(&msg);
501 ::DispatchMessageW(&msg);
502 hasEventHandled =
true;
511 }
while (waitForEvent && !hasEventHandled);
513 return hasEventHandled;
519 if (::GetCursorPos(&point)) {
529 if (!::GetActiveWindow())
536 bool down = HIBYTE(::GetKeyState(VK_LSHIFT)) != 0;
538 down = HIBYTE(::GetKeyState(VK_RSHIFT)) != 0;
541 down = HIBYTE(::GetKeyState(VK_LMENU)) != 0;
543 down = HIBYTE(::GetKeyState(VK_RMENU)) != 0;
546 down = HIBYTE(::GetKeyState(VK_LCONTROL)) != 0;
548 down = HIBYTE(::GetKeyState(VK_RCONTROL)) != 0;
551 bool lwindown = HIBYTE(::GetKeyState(VK_LWIN)) != 0;
552 bool rwindown = HIBYTE(::GetKeyState(VK_RWIN)) != 0;
553 if (lwindown || rwindown)
565 bool swapped = ::GetSystemMetrics(SM_SWAPBUTTON) == TRUE;
567 bool down = HIBYTE(::GetAsyncKeyState(VK_LBUTTON)) != 0;
570 down = HIBYTE(::GetAsyncKeyState(VK_MBUTTON)) != 0;
573 down = HIBYTE(::GetAsyncKeyState(VK_RBUTTON)) != 0;
581 InitCommonControls();
585 user32 = ::LoadLibraryA(
"user32.dll");
586 typedef BOOL(WINAPI * LPFNSETPROCESSDPIAWARE)();
587 LPFNSETPROCESSDPIAWARE SetProcessDPIAware = (LPFNSETPROCESSDPIAWARE)GetProcAddress(
588 user32,
"SetProcessDPIAware");
589 if (SetProcessDPIAware)
590 SetProcessDPIAware();
598 GHOST_PRINT(
"GHOST_SystemWin32::init: High Frequency Performance Timer available\n");
599 ::QueryPerformanceCounter((LARGE_INTEGER *)&
m_start);
602 GHOST_PRINT(
"GHOST_SystemWin32::init: High Frequency Performance Timer not available\n");
607 wc.style = CS_HREDRAW | CS_VREDRAW;
611 wc.hInstance = ::GetModuleHandle(0);
612 wc.hIcon = ::LoadIcon(wc.hInstance,
"APPICON");
615 ::LoadIcon(
NULL, IDI_APPLICATION);
617 wc.hCursor = ::LoadCursor(0, IDC_ARROW);
619 #ifdef INW32_COMPISITING
620 (HBRUSH)CreateSolidBrush
624 wc.lpszClassName =
L"GHOST_WindowClass";
627 if (::RegisterClassW(&wc) == 0) {
642 bool *r_is_repeated_modifier)
644 bool is_repeated_modifier =
false;
653 unsigned int msg = raw.data.keyboard.Message;
654 *r_keyDown = !(raw.data.keyboard.Flags & RI_KEY_BREAK) && msg != WM_KEYUP && msg != WM_SYSKEYUP;
656 key = this->
convertKey(raw.data.keyboard.VKey,
657 raw.data.keyboard.MakeCode,
658 (raw.data.keyboard.Flags & (RI_KEY_E1 | RI_KEY_E0)));
662 bool changed =
false;
700 modifiers.
set(modifier, *r_keyDown);
704 is_repeated_modifier =
true;
708 *r_is_repeated_modifier = is_repeated_modifier;
723 if (vKey == VK_OEM_8)
727 if (SUBLANGID(
m_langId) == SUBLANG_ENGLISH_UK && vKey == VK_OEM_8)
739 if ((vKey >=
'0') && (vKey <=
'9')) {
743 else if ((vKey >=
'A') && (vKey <=
'Z')) {
747 else if ((vKey >= VK_F1) && (vKey <= VK_F24)) {
872 if (scanCode == 0x36) {
875 else if (scanCode == 0x2a) {
958 std::vector<GHOST_PointerInfoWin32> pointerInfo;
964 if (!pointerInfo[0].isPrimary) {
975 pointerInfo[0].pixelLocation.x,
976 pointerInfo[0].pixelLocation.y,
977 pointerInfo[0].tabletData));
984 pointerInfo[0].pixelLocation.x,
985 pointerInfo[0].pixelLocation.y,
986 pointerInfo[0].tabletData));
990 pointerInfo[0].buttonMask,
991 pointerInfo[0].tabletData));
1001 pointerInfo[i].pixelLocation.x,
1002 pointerInfo[i].pixelLocation.y,
1003 pointerInfo[i].tabletData));
1010 pointerInfo[0].buttonMask,
1011 pointerInfo[0].tabletData));
1021 eventHandled =
true;
1022 system->
setCursorPosition(pointerInfo[0].pixelLocation.x, pointerInfo[0].pixelLocation.y);
1057 if (x_new != x_screen || y_new != y_screen) {
1061 window->
setCursorGrabAccum(x_accum + (x_screen - x_new), y_accum + (y_screen - y_new));
1088 int delta = GET_WHEEL_DELTA_WPARAM(wParam);
1090 if (acc * delta < 0) {
1095 int direction = (acc >= 0) ? 1 : -1;
1098 while (acc >= WHEEL_DELTA) {
1107 bool keyDown =
false;
1108 bool is_repeated_modifier =
false;
1116 if (!is_repeated_modifier) {
1117 char vk = raw.data.keyboard.VKey;
1118 char utf8_char[6] = {0};
1120 bool is_repeat =
false;
1135 wchar_t utf16[3] = {0};
1136 BYTE
state[256] = {0};
1138 GetKeyboardState((PBYTE)
state);
1139 bool ctrl_pressed =
state[VK_CONTROL] & 0x80;
1140 bool alt_pressed =
state[VK_MENU] & 0x80;
1143 if (ctrl_pressed && !alt_pressed) {
1144 utf8_char[0] =
'\0';
1148 else if (MapVirtualKeyW(vk, 2) != 0) {
1151 if ((
r = ToUnicodeEx(
1152 vk, raw.data.keyboard.MakeCode,
state, utf16, 2, 0, system->
m_keylayout))) {
1153 if ((
r > 0 &&
r < 3)) {
1158 utf8_char[0] =
'\0';
1164 utf8_char[0] =
'\0';
1168 ascii = utf8_char[0] & 0x80 ?
'?' : utf8_char[0];
1201 #ifdef WITH_INPUT_IME
1225 minmax->ptMinTrackSize.x = 320;
1226 minmax->ptMinTrackSize.y = 240;
1229 #ifdef WITH_INPUT_NDOF
1230 bool GHOST_SystemWin32::processNDOF(RAWINPUT
const &raw)
1232 bool eventSent =
false;
1235 static bool firstEvent =
true;
1237 RID_DEVICE_INFO info;
1238 unsigned infoSize =
sizeof(RID_DEVICE_INFO);
1239 info.cbSize = infoSize;
1241 GetRawInputDeviceInfo(raw.header.hDevice, RIDI_DEVICEINFO, &info, &infoSize);
1242 if (info.dwType == RIM_TYPEHID)
1243 m_ndofManager->setDevice(info.hid.dwVendorId, info.hid.dwProductId);
1245 GHOST_PRINT(
"<!> not a HID device... mouse/kb perhaps?\n");
1254 BYTE
const *
data = raw.data.hid.bRawData;
1256 BYTE packetType =
data[0];
1257 switch (packetType) {
1260 const short *axis = (
short *)(
data + 1);
1262 const int t[3] = {axis[0], -axis[2], axis[1]};
1263 m_ndofManager->updateTranslation(
t, now);
1265 if (raw.data.hid.dwSizeHid == 13) {
1267 const int r[3] = {-axis[3], axis[5], -axis[4]};
1268 m_ndofManager->updateRotation(
r, now);
1277 const short *axis = (
short *)(
data + 1);
1278 const int r[3] = {-axis[0], axis[2], -axis[1]};
1279 m_ndofManager->updateRotation(
r, now);
1285 memcpy(&button_bits,
data + 1,
sizeof(button_bits));
1286 m_ndofManager->updateButtons(button_bits, now);
1297 bool eventHandled =
false;
1299 LRESULT lResult = 0;
1301 #ifdef WITH_INPUT_IME
1304 GHOST_ASSERT(system,
"GHOST_SystemWin32::s_wndProc(): system not initialized");
1308 if (msg == WM_NCCREATE) {
1311 HMODULE m_user32 = ::LoadLibrary(
"User32.dll");
1315 "EnableNonClientDpiScaling");
1316 if (fpEnableNonClientDpiScaling) {
1317 fpEnableNonClientDpiScaling(hwnd);
1326 case WM_INPUTLANGCHANGE: {
1328 #ifdef WITH_INPUT_IME
1329 window->getImeInput()->SetInputLanguage();
1338 RAWINPUT *raw_ptr = &raw;
1339 UINT rawSize =
sizeof(RAWINPUT);
1341 GetRawInputData((HRAWINPUT)lParam, RID_INPUT, raw_ptr, &rawSize,
sizeof(RAWINPUTHEADER));
1343 switch (raw.header.dwType) {
1344 case RIM_TYPEKEYBOARD:
1347 GHOST_PRINT(
"GHOST_SystemWin32::wndProc: key event ");
1352 #ifdef WITH_INPUT_NDOF
1354 if (system->processNDOF(raw)) {
1355 eventHandled =
true;
1362 #ifdef WITH_INPUT_IME
1366 case WM_IME_SETCONTEXT: {
1367 GHOST_ImeWin32 *ime = window->getImeInput();
1368 ime->SetInputLanguage();
1369 ime->CreateImeWindow(hwnd);
1370 ime->CleanupComposition(hwnd);
1371 ime->CheckFirst(hwnd);
1374 case WM_IME_STARTCOMPOSITION: {
1375 GHOST_ImeWin32 *ime = window->getImeInput();
1376 eventHandled =
true;
1379 ime->CreateImeWindow(hwnd);
1380 ime->ResetComposition(hwnd);
1384 case WM_IME_COMPOSITION: {
1385 GHOST_ImeWin32 *ime = window->getImeInput();
1386 eventHandled =
true;
1387 ime->UpdateImeWindow(hwnd);
1388 ime->UpdateInfo(hwnd);
1389 if (ime->eventImeData.result_len) {
1396 case WM_IME_ENDCOMPOSITION: {
1397 GHOST_ImeWin32 *ime = window->getImeInput();
1398 eventHandled =
true;
1401 ime->ResetComposition(hwnd);
1402 ime->DestroyImeWindow(hwnd);
1430 case WM_SYSDEADCHAR:
1453 switch (wParam & 0xFFF0) {
1455 eventHandled =
true;
1458 ::ShowWindow(hwnd, SW_RESTORE);
1460 eventHandled =
true;
1487 case WM_LBUTTONDOWN:
1490 case WM_MBUTTONDOWN:
1493 case WM_RBUTTONDOWN:
1496 case WM_XBUTTONDOWN:
1497 if ((
short)HIWORD(wParam) == XBUTTON1) {
1500 else if ((
short)HIWORD(wParam) == XBUTTON2) {
1514 if ((
short)HIWORD(wParam) == XBUTTON1) {
1517 else if ((
short)HIWORD(wParam) == XBUTTON2) {
1524 case WM_MOUSEWHEEL: {
1534 POINT mouse_pos = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};
1535 HWND mouse_hwnd = ChildWindowFromPoint(HWND_DESKTOP, mouse_pos);
1540 eventHandled =
true;
1541 #ifdef BROKEN_PEEK_TOUCHPAD
1542 PostMessage(hwnd, WM_USER, 0, 0);
1553 if (LOWORD(lParam) == HTCLIENT) {
1568 case WM_NCMOUSEMOVE:
1587 if (IsIconic(hwnd)) {
1588 ShowWindow(hwnd, SW_RESTORE);
1610 if (LOWORD(wParam) == WA_INACTIVE)
1613 lResult = ::DefWindowProc(hwnd, msg, wParam, lParam);
1616 case WM_ENTERSIZEMOVE:
1626 case WM_EXITSIZEMOVE:
1638 ::ValidateRect(hwnd,
NULL);
1641 eventHandled =
true;
1644 case WM_GETMINMAXINFO:
1671 case WM_CAPTURECHANGED:
1703 RECT *
const suggestedWindowRect = (RECT *)lParam;
1708 eventHandled =
true;
1713 suggestedWindowRect->left,
1714 suggestedWindowRect->top,
1715 suggestedWindowRect->right - suggestedWindowRect->left,
1716 suggestedWindowRect->bottom - suggestedWindowRect->top,
1717 SWP_NOZORDER | SWP_NOACTIVATE);
1723 case WM_WINDOWPOSCHANGED:
1760 if (!wParam && hwnd == ::GetActiveWindow())
1765 case WM_WINDOWPOSCHANGING:
1780 case WM_ACTIVATEAPP:
1801 GHOST_PRINT(
"GHOST_SystemWin32::wndProc: GHOST window event before creation\n");
1813 GHOST_PRINT(
"GHOST_SystemWin32::wndProc: event without window\n");
1818 eventHandled =
true;
1822 lResult = ::DefWindowProcW(hwnd, msg, wParam, lParam);
1831 if (IsClipboardFormatAvailable(CF_UNICODETEXT) && OpenClipboard(
NULL)) {
1833 HANDLE hData = GetClipboardData(CF_UNICODETEXT);
1834 if (hData ==
NULL) {
1838 buffer = (
wchar_t *)GlobalLock(hData);
1848 GlobalUnlock(hData);
1853 else if (IsClipboardFormatAvailable(CF_TEXT) && OpenClipboard(
NULL)) {
1856 HANDLE hData = GetClipboardData(CF_TEXT);
1857 if (hData ==
NULL) {
1861 buffer = (
char *)GlobalLock(hData);
1868 temp_buff = (
char *)malloc(
len + 1);
1870 temp_buff[
len] =
'\0';
1874 GlobalUnlock(hData);
1890 if (OpenClipboard(
NULL)) {
1898 clipbuffer = LocalAlloc(LMEM_FIXED,
sizeof(
wchar_t) *
len);
1899 data = (
wchar_t *)GlobalLock(clipbuffer);
1903 LocalUnlock(clipbuffer);
1904 SetClipboardData(CF_UNICODETEXT, clipbuffer);
1918 const char *message,
1919 const char *help_label,
1920 const char *continue_label,
1929 int nButtonPressed = 0;
1930 TASKDIALOGCONFIG config = {0};
1931 const TASKDIALOG_BUTTON buttons[] = {{IDOK, help_label_16}, {IDCONTINUE, continue_label_16}};
1933 config.cbSize =
sizeof(config);
1934 config.hInstance = 0;
1935 config.dwCommonButtons = 0;
1939 TD_INFORMATION_ICON);
1940 config.pszWindowTitle =
L"Blender";
1941 config.pszMainInstruction = title_16;
1942 config.pszContent = message_16;
1943 config.pButtons = (link) ? buttons : buttons + 1;
1944 config.cButtons = (link) ? 2 : 1;
1946 TaskDialogIndirect(&config, &nButtonPressed,
NULL,
NULL);
1947 switch (nButtonPressed) {
1949 ShellExecute(
NULL,
"open", link,
NULL,
NULL, SW_SHOWNORMAL);
1957 free((
void *)title_16);
1958 free((
void *)message_16);
1959 free((
void *)help_label_16);
1960 free((
void *)continue_label_16);
1970 PROCESSENTRY32 pe32 = {0};
1971 DWORD ppid = 0, pid = GetCurrentProcessId();
1972 snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
1973 if (snapshot == INVALID_HANDLE_VALUE) {
1976 pe32.dwSize =
sizeof(pe32);
1977 if (!Process32First(snapshot, &pe32)) {
1978 CloseHandle(snapshot);
1982 if (pe32.th32ProcessID == pid) {
1983 ppid = pe32.th32ParentProcessID;
1986 }
while (Process32Next(snapshot, &pe32));
1987 CloseHandle(snapshot);
1994 HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE, pid);
1996 GetModuleFileNameEx(handle, 0,
buffer, max_len);
1999 CloseHandle(handle);
2005 HWND hwnd = GetConsoleWindow();
2008 DWORD pid = (DWORD)-1;
2010 char parent_name[MAX_PATH];
2011 bool start_from_launcher =
false;
2013 GetWindowThreadProcessId(hwnd, &pid);
2015 char *filename = strrchr(parent_name,
'\\');
2016 if (filename !=
NULL) {
2017 start_from_launcher = strstr(filename,
"blender.exe") !=
NULL;
2022 if (pid != (start_from_launcher ? ppid : GetCurrentProcessId()))
2031 HWND wnd = GetConsoleWindow();
2037 ShowWindow(wnd, SW_HIDE);
2043 ShowWindow(wnd, SW_HIDE);
2047 ShowWindow(wnd, SW_SHOW);
2049 DeleteMenu(GetSystemMenu(wnd,
FALSE), SC_CLOSE, MF_BYCOMMAND);
2057 DeleteMenu(GetSystemMenu(wnd,
FALSE), SC_CLOSE, MF_BYCOMMAND);
void BLI_kdtree_nd_() free(KDTree *tree)
#define GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY
#define GHOST_PRINTF(x,...)
#define GHOST_ASSERT(x, info)
@ PROCESS_SYSTEM_DPI_AWARE
@ PROCESS_PER_MONITOR_DPI_AWARE
static void initRawInput()
#define VK_MEDIA_NEXT_TRACK
HRESULT(API * GHOST_WIN32_SetProcessDpiAwareness)(PROCESS_DPI_AWARENESS)
BOOL(API * GHOST_WIN32_EnableNonClientDpiScaling)(HWND)
static bool isStartedFromCommandPrompt()
#define VK_MEDIA_PLAY_PAUSE
#define VK_MEDIA_PREV_TRACK
static DWORD GetParentProcessID(void)
static bool getProcessName(int pid, char *buffer, int max_len)
@ GHOST_kStandardCursorDefault
unsigned int GHOST_TUns32
unsigned long long GHOST_TUns64
@ GHOST_kEventWindowClose
@ GHOST_kEventImeComposition
@ GHOST_kEventButtonUp
Mouse button event.
@ GHOST_kEventWindowActivate
@ GHOST_kEventWindowUpdate
@ GHOST_kEventWindowDeactivate
@ GHOST_kEventButtonDown
Mouse move event.
@ GHOST_kEventKeyDown
Trackpad event.
@ GHOST_kEventImeCompositionStart
@ GHOST_kEventImeCompositionEnd
@ GHOST_kEventWindowDPIHintChanged
@ GHOST_glAlphaBackground
@ GHOST_kKeyNumpadAsterisk
GHOST_TDrawingContextType
@ GHOST_kButtonMaskButton4
@ GHOST_kButtonMaskButton5
@ GHOST_kButtonMaskMiddle
@ GHOST_kModifierKeyRightControl
@ GHOST_kModifierKeyLeftControl
@ GHOST_kModifierKeyRightAlt
@ GHOST_kModifierKeyRightShift
@ GHOST_kModifierKeyLeftAlt
@ GHOST_kModifierKeyLeftShift
unsigned char GHOST_TUns8
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble top
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
virtual GHOST_TSuccess initialize(void)
virtual GHOST_TSuccess getNumDisplays(GHOST_TUns8 &numDisplays) const
GHOST_TUns32 getNumEvents()
void removeTypeEvents(GHOST_TEventType type, GHOST_IWindow *window=NULL)
static GHOST_ISystem * getSystem()
GHOST_TUns64 tickCountToMillis(__int64 ticks) const
GHOST_TKey hardKey(RAWINPUT const &raw, bool *r_keyDown, bool *r_is_repeated_modifier)
static void processWheelEvent(GHOST_WindowWin32 *window, WPARAM wParam, LPARAM lParam)
GHOST_TUns64 getMilliSeconds() const
GHOST_IContext * createOffscreenContext(GHOST_GLSettings glSettings)
unsigned short m_keycode_last_repeat_key
GHOST_TUns8 * getClipboard(bool selection) const
GHOST_TKey processSpecialKey(short vKey, short scanCode) const
static GHOST_EventButton * processButtonEvent(GHOST_TEventType type, GHOST_WindowWin32 *window, GHOST_TButtonMask mask)
GHOST_TKey convertKey(short vKey, short ScanCode, short extend) const
int toggleConsole(int action)
void getMainDisplayDimensions(GHOST_TUns32 &width, GHOST_TUns32 &height) const
void getAllDisplayDimensions(GHOST_TUns32 &width, GHOST_TUns32 &height) const
GHOST_TUns8 getNumDisplays() const
static GHOST_ContextD3D * createOffscreenContextD3D()
bool processEvents(bool waitForEvent)
static GHOST_TSuccess disposeContextD3D(GHOST_ContextD3D *context)
GHOST_TSuccess getButtons(GHOST_Buttons &buttons) const
void retrieveModifierKeys(GHOST_ModifierKeys &keys) const
static GHOST_EventKey * processKeyEvent(GHOST_WindowWin32 *window, RAWINPUT const &raw)
GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys &keys) const
static void processMinMaxInfo(MINMAXINFO *minmax)
void storeModifierKeys(const GHOST_ModifierKeys &keys)
GHOST_TSuccess setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y)
static GHOST_Event * processWindowEvent(GHOST_TEventType type, GHOST_WindowWin32 *window)
GHOST_TSuccess getCursorPosition(GHOST_TInt32 &x, GHOST_TInt32 &y) const
GHOST_IWindow * createWindow(const char *title, GHOST_TInt32 left, GHOST_TInt32 top, GHOST_TUns32 width, GHOST_TUns32 height, GHOST_TWindowState state, GHOST_TDrawingContextType type, GHOST_GLSettings glSettings, const bool exclusive=false, const bool is_dialog=false, const GHOST_IWindow *parentWindow=0)
static GHOST_EventCursor * processCursorEvent(GHOST_WindowWin32 *window)
void handleKeyboardChange(void)
static void processPointerEvent(UINT type, GHOST_WindowWin32 *window, WPARAM wParam, LPARAM lParam, bool &eventhandled)
GHOST_TSuccess disposeContext(GHOST_IContext *context)
void putClipboard(GHOST_TInt8 *buffer, bool selection) const
GHOST_TUns64 performanceCounterToMillis(__int64 perf_ticks) const
GHOST_TSuccess showMessageBox(const char *title, const char *message, const char *help_label, const char *continue_label, const char *link, GHOST_DialogOptions dialog_options) const
static LRESULT WINAPI s_wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, GHOST_WindowWin32 *window, int mouseX, int mouseY, void *data)
bool m_hasPerformanceCounter
GHOST_EventManager * getEventManager() const
GHOST_WindowManager * getWindowManager() const
virtual GHOST_TSuccess exit()
virtual GHOST_TSuccess init()
GHOST_TimerManager * getTimerManager() const
GHOST_WindowManager * m_windowManager
GHOST_TSuccess pushEvent(GHOST_IEvent *event)
GHOST_DisplayManager * m_displayManager
GHOST_EventManager * m_eventManager
GHOST_TUns64 nextFireTime()
bool fireTimers(GHOST_TUns64 time)
GHOST_TSuccess addWindow(GHOST_IWindow *window)
GHOST_TSuccess setActiveWindow(GHOST_IWindow *window)
void processWin32TabletActivateEvent(WORD state)
void processWin32TabletInitEvent()
void loadCursor(bool visible, GHOST_TStandardCursor cursorShape) const
GHOST_TSuccess getPointerInfo(std::vector< GHOST_PointerInfoWin32 > &outPointerInfo, WPARAM wParam, LPARAM lParam)
const GHOST_TabletData & getTabletData()
void bringTabletContextToFront()
void processWin32TabletEvent(WPARAM wParam, LPARAM lParam)
void updateMouseCapture(GHOST_MouseCaptureEventWin32 event)
GHOST_TSuccess setState(GHOST_TWindowState state)
void getClientBounds(GHOST_Rect &bounds) const
GHOST_TWindowState getState() const
bool useTabletAPI(GHOST_TTabletAPI api) const
GHOST_TSuccess getCursorGrabBounds(GHOST_Rect &bounds)
bool getCursorVisibility() const
GHOST_TAxisFlag getCursorGrabAxis() const
void setCursorGrabAccum(GHOST_TInt32 x, GHOST_TInt32 y)
void getCursorGrabAccum(GHOST_TInt32 &x, GHOST_TInt32 &y) const
GHOST_TStandardCursor getCursorShape() const
bool getCursorGrabModeIsWarp() const
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
static const VertexNature POINT
Vector< CPUDevice > devices
list of all CPUDevices. for every hardware thread an instance of CPUDevice is created
struct SELECTID_Context context
bool get(GHOST_TModifierKeyMask mask) const
void set(GHOST_TModifierKeyMask mask, bool down)
wchar_t * alloc_utf16_from_8(const char *in8, size_t add)
int conv_utf_8_to_16(const char *in8, wchar_t *out16, size_t size16)
char * alloc_utf_8_from_16(const wchar_t *in16, size_t add)
int conv_utf_16_to_8(const wchar_t *in16, char *out8, size_t size8)
size_t count_utf_16_from_8(const char *string8)
__forceinline const avxi abs(const avxi &a)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)