23 #include <shellscalingapi.h>
27 #ifndef GET_POINTERID_WPARAM
28 # define GET_POINTERID_WPARAM(wParam) (LOWORD(wParam))
31 const wchar_t *GHOST_WindowWin32::s_windowClassName =
L"GHOST_WindowClass";
32 const int GHOST_WindowWin32::s_maxTitleLength = 128;
36 __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
47 bool wantStereoVisual,
53 m_mousePresent(false),
54 m_inLiveResize(false),
60 m_hasMouseCaptured(false),
61 m_hasGrabMouse(false),
64 m_wantAlphaBackground(alphaBackground),
69 m_user32(::LoadLibrary(
"user32.dll")),
70 m_parentWindowHwnd(parentwindow ? parentwindow->m_hWnd : HWND_DESKTOP),
71 m_directManipulationHelper(
NULL),
72 m_debug_context(is_debug)
74 DWORD style = parentwindow ?
75 WS_POPUPWINDOW | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SIZEBOX :
83 DWORD extended_style = parentwindow ? WS_EX_APPWINDOW : 0;
96 m_hWnd = ::CreateWindowExW(extended_style,
102 win_rect.right - win_rect.left,
103 win_rect.bottom - win_rect.top,
106 ::GetModuleHandle(0),
110 if (m_hWnd ==
NULL) {
115 m_hDC = ::GetDC(m_hWnd);
118 const char *title =
"Blender - Unsupported Graphics Card Configuration";
120 "A graphics card and driver with support for OpenGL 3.3 or higher is "
121 "required.\n\nInstalling the latest driver for your graphics card might resolve the "
123 if (GetSystemMetrics(SM_CMONITORS) > 1) {
125 "A graphics card and driver with support for OpenGL 3.3 or higher is "
126 "required.\n\nPlugging all monitors into your primary graphics card might resolve "
127 "this issue. Installing the latest driver for your graphics card could also help.";
129 MessageBox(m_hWnd, text, title, MB_OK | MB_ICONERROR);
130 ::ReleaseDC(m_hWnd, m_hDC);
131 ::DestroyWindow(m_hWnd);
139 RegisterTouchWindow(m_hWnd, 0);
143 ::RegisterDragDrop(m_hWnd, m_dropTarget);
146 ::SetWindowLongPtr(m_hWnd, GWLP_USERDATA, (LONG_PTR)
this);
150 ::SetWindowPos(m_hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
163 nCmdShow = SW_SHOWMAXIMIZED;
166 nCmdShow = (m_system->
m_windowFocus) ? SW_SHOWMINIMIZED : SW_SHOWMINNOACTIVE;
170 nCmdShow = (m_system->
m_windowFocus) ? SW_SHOWNORMAL : SW_SHOWNOACTIVATE;
176 ::ShowWindow(m_hWnd, nCmdShow);
178 #ifdef WIN32_COMPOSITING
179 if (alphaBackground && parentwindowhwnd == 0) {
184 DWM_BLURBEHIND bb = {0};
187 bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
189 bb.hRgnBlur = CreateRectRgn(0, 0, -1, -1);
192 hr = DwmEnableBlurBehindWindow(m_hWnd, &bb);
193 DeleteObject(bb.hRgnBlur);
198 ::UpdateWindow(m_hWnd);
215 if (!m_directManipulationHelper) {
219 m_directManipulationHelper->
update();
226 if (!m_directManipulationHelper) {
231 POINTER_INPUT_TYPE pointerType;
232 if (GetPointerType(pointerId, &pointerType) && pointerType == PT_TOUCHPAD) {
239 if (!m_directManipulationHelper) {
257 FreeLibrary(m_user32);
261 if (m_customCursor) {
262 DestroyCursor(m_customCursor);
263 m_customCursor =
NULL;
267 ::ReleaseDC(m_hWnd, m_hDC);
276 if (iter_winwin->m_parentWindowHwnd == m_hWnd) {
277 ::SetWindowLongPtr(iter_winwin->m_hWnd, GWLP_HWNDPARENT,
NULL);
278 iter_winwin->m_parentWindowHwnd = 0;
284 RevokeDragDrop(m_hWnd);
289 ::SetWindowLongPtr(m_hWnd, GWLP_USERDATA,
NULL);
290 ::DestroyWindow(m_hWnd);
294 delete m_directManipulationHelper;
295 m_directManipulationHelper =
NULL;
303 HMONITOR hmonitor = MonitorFromRect(win_rect, MONITOR_DEFAULTTONEAREST);
304 MONITORINFOEX monitor;
305 monitor.cbSize =
sizeof(MONITORINFOEX);
307 GetMonitorInfo(hmonitor, &monitor);
310 LONG
width =
min(monitor.rcWork.right - monitor.rcWork.left, win_rect->right - win_rect->left);
311 LONG
height =
min(monitor.rcWork.bottom - monitor.rcWork.top, win_rect->bottom - win_rect->top);
312 win_rect->left =
min(
max(monitor.rcWork.left, win_rect->left), monitor.rcWork.right -
width);
313 win_rect->right = win_rect->left +
width;
314 win_rect->top =
min(
max(monitor.rcWork.top, win_rect->top), monitor.rcWork.bottom -
height);
315 win_rect->bottom = win_rect->top +
height;
321 m_user32,
"AdjustWindowRectExForDpi");
326 if (fpAdjustWindowRectExForDpi) {
328 GetDpiForMonitor(hmonitor, MDT_EFFECTIVE_DPI, &dpiX, &dpiY);
329 fpAdjustWindowRectExForDpi(win_rect, dwStyle & ~WS_OVERLAPPED,
FALSE, dwExStyle, dpiX);
332 AdjustWindowRectEx(win_rect, dwStyle & ~WS_OVERLAPPED,
FALSE, dwExStyle);
336 win_rect->top =
max(monitor.rcWork.top, win_rect->top);
352 ::SetWindowTextW(m_hWnd, (
wchar_t *)title_16);
358 std::wstring wtitle(::GetWindowTextLengthW(m_hWnd) + 1,
L'\0');
359 ::GetWindowTextW(m_hWnd, &wtitle[0], wtitle.capacity());
370 ::GetWindowRect(m_hWnd, &rect);
381 if (!IsIconic(m_hWnd)) {
382 ::GetClientRect(m_hWnd, &rect);
386 ::ClientToScreen(m_hWnd, &coord);
391 coord.x = rect.right;
392 coord.y = rect.bottom;
393 ::ClientToScreen(m_hWnd, &coord);
415 success = ::SetWindowPos(m_hWnd, HWND_TOP, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOZORDER) ?
434 success = ::SetWindowPos(m_hWnd, HWND_TOP, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOZORDER) ?
453 success = ::SetWindowPos(m_hWnd, HWND_TOP, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOZORDER) ?
465 if (::IsIconic(m_hWnd)) {
468 else if (::IsZoomed(m_hWnd)) {
469 LONG_PTR
result = ::GetWindowLongPtr(m_hWnd, GWL_STYLE);
481 ::ScreenToClient(m_hWnd, &
point);
492 ::ClientToScreen(m_hWnd, &
point);
500 LONG_PTR style = GetWindowLongPtr(m_hWnd, GWL_STYLE) | WS_CAPTION;
502 wp.length =
sizeof(WINDOWPLACEMENT);
503 ::GetWindowPlacement(m_hWnd, &wp);
507 wp.showCmd = SW_MINIMIZE;
510 wp.showCmd = SW_SHOWMAXIMIZED;
514 m_normal_state = curstate;
516 wp.showCmd = SW_SHOWMAXIMIZED;
517 wp.ptMaxPosition.x = 0;
518 wp.ptMaxPosition.y = 0;
519 style &= ~(WS_CAPTION | WS_MAXIMIZE);
525 wp.showCmd = SW_SHOWMAXIMIZED;
529 wp.showCmd = SW_SHOWNORMAL;
533 ::SetWindowLongPtr(m_hWnd, GWL_STYLE, style);
535 ::SetWindowPos(m_hWnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
541 HWND hWndInsertAfter, hWndToRaise;
544 hWndInsertAfter = HWND_BOTTOM;
545 hWndToRaise = ::GetWindow(m_hWnd, GW_HWNDNEXT);
551 hWndInsertAfter = HWND_TOP;
555 if (::SetWindowPos(m_hWnd, hWndInsertAfter, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE) ==
FALSE) {
560 ::SetWindowPos(hWndToRaise, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE) ==
FALSE) {
583 #if defined(WITH_GL_PROFILE_CORE)
588 for (
int minor = 5; minor >= 0; --minor) {
590 m_wantAlphaBackground,
593 WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
596 (m_debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
599 if (
context->initializeDrawingContext()) {
607 m_wantAlphaBackground,
610 WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
613 (m_debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
623 #elif defined(WITH_GL_PROFILE_COMPAT)
628 m_wantAlphaBackground,
634 (m_debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
637 if (
context->initializeDrawingContext()) {
647 else if (
type == GHOST_kDrawingContextTypeD3D) {
651 if (
context->initializeDrawingContext()) {
666 if (m_hasMouseCaptured) {
667 m_hasGrabMouse =
false;
668 m_nPressedButtons = 0;
669 m_hasMouseCaptured =
false;
685 if (m_nPressedButtons)
689 m_hasGrabMouse =
true;
692 m_hasGrabMouse =
false;
696 if (!m_nPressedButtons && !m_hasGrabMouse && m_hasMouseCaptured) {
698 m_hasMouseCaptured =
false;
700 else if ((m_nPressedButtons || m_hasGrabMouse) && !m_hasMouseCaptured) {
701 ::SetCapture(m_hWnd);
702 m_hasMouseCaptured =
true;
709 HANDLE cursor =
NULL;
710 HMODULE
module = ::GetModuleHandle(0);
711 uint32_t flags = LR_SHARED | LR_DEFAULTSIZE;
716 if (m_customCursor) {
717 return m_customCursor;
723 cursor = ::LoadImage(
module,
"arrowright_cursor", IMAGE_CURSOR, cx, cy, flags);
726 cursor = ::LoadImage(
module,
"arrowleft_cursor", IMAGE_CURSOR, cx, cy, flags);
729 cursor = ::LoadImage(
module,
"arrowup_cursor", IMAGE_CURSOR, cx, cy, flags);
732 cursor = ::LoadImage(
module,
"arrowdown_cursor", IMAGE_CURSOR, cx, cy, flags);
735 cursor = ::LoadImage(
module,
"splitv_cursor", IMAGE_CURSOR, cx, cy, flags);
738 cursor = ::LoadImage(
module,
"splith_cursor", IMAGE_CURSOR, cx, cy, flags);
741 cursor = ::LoadImage(
module,
"knife_cursor", IMAGE_CURSOR, cx, cy, flags);
744 cursor = ::LoadImage(
module,
"eyedropper_cursor", IMAGE_CURSOR, cx, cy, flags);
747 cursor = ::LoadImage(
module,
"zoomin_cursor", IMAGE_CURSOR, cx, cy, flags);
750 cursor = ::LoadImage(
module,
"zoomout_cursor", IMAGE_CURSOR, cx, cy, flags);
753 cursor = ::LoadImage(
module,
"handopen_cursor", IMAGE_CURSOR, cx, cy, flags);
756 cursor = ::LoadImage(
module,
"scrollnsew_cursor", IMAGE_CURSOR, cx, cy, flags);
759 cursor = ::LoadImage(
module,
"scrollns_cursor", IMAGE_CURSOR, cx, cy, flags);
762 cursor = ::LoadImage(
module,
"scrollew_cursor", IMAGE_CURSOR, cx, cy, flags);
765 cursor = ::LoadImage(
NULL, IDC_HELP, IMAGE_CURSOR, cx, cy, flags);
768 cursor = ::LoadImage(
NULL, IDC_WAIT, IMAGE_CURSOR, cx, cy, flags);
771 cursor = ::LoadImage(
NULL, IDC_IBEAM, IMAGE_CURSOR, cx, cy, flags);
774 cursor = ::LoadImage(
module,
"cross_cursor", IMAGE_CURSOR, cx, cy, flags);
777 cursor = ::LoadImage(
module,
"crossA_cursor", IMAGE_CURSOR, cx, cy, flags);
780 cursor = ::LoadImage(
module,
"crossB_cursor", IMAGE_CURSOR, cx, cy, flags);
783 cursor = ::LoadImage(
module,
"crossC_cursor", IMAGE_CURSOR, cx, cy, flags);
787 cursor = ::LoadImage(
module,
"movens_cursor", IMAGE_CURSOR, cx, cy, flags);
791 cursor = ::LoadImage(
module,
"moveew_cursor", IMAGE_CURSOR, cx, cy, flags);
794 cursor = ::LoadImage(
NULL, IDC_UPARROW, IMAGE_CURSOR, cx, cy, flags);
797 cursor = ::LoadImage(
NULL, IDC_SIZENWSE, IMAGE_CURSOR, cx, cy, flags);
800 cursor = ::LoadImage(
NULL, IDC_SIZENESW, IMAGE_CURSOR, cx, cy, flags);
803 cursor = ::LoadImage(
NULL, IDC_SIZENWSE, IMAGE_CURSOR, cx, cy, flags);
806 cursor = ::LoadImage(
NULL, IDC_SIZENESW, IMAGE_CURSOR, cx, cy, flags);
809 cursor = ::LoadImage(
module,
"pencil_cursor", IMAGE_CURSOR, cx, cy, flags);
812 cursor = ::LoadImage(
module,
"eraser_cursor", IMAGE_CURSOR, cx, cy, flags);
816 cursor = ::LoadImage(
module,
"forbidden_cursor", IMAGE_CURSOR, cx, cy, flags);
825 if (cursor ==
NULL) {
826 cursor = ::LoadImage(
NULL, IDC_ARROW, IMAGE_CURSOR, cx, cy, flags);
829 return (HCURSOR)cursor;
835 while (::ShowCursor(
FALSE) >= 0)
839 while (::ShowCursor(TRUE) < 0)
844 if (cursor ==
NULL) {
850 GHOST_TSuccess GHOST_WindowWin32::setWindowCursorVisibility(
bool visible)
852 if (::GetForegroundWindow() == m_hWnd) {
867 setWindowCursorVisibility(
false);
874 setWindowCursorVisibility(
true);
897 if (::GetForegroundWindow() == m_hWnd) {
910 std::vector<GHOST_PointerInfoWin32> &outPointerInfo, WPARAM wParam, LPARAM lParam)
913 int32_t isPrimary = IS_POINTER_PRIMARY_WPARAM(wParam);
917 if (!(GetPointerPenInfoHistory(pointerId, &outCount,
NULL))) {
921 std::vector<POINTER_PEN_INFO> pointerPenInfo(outCount);
922 outPointerInfo.resize(outCount);
924 if (!(GetPointerPenInfoHistory(pointerId, &outCount, pointerPenInfo.data()))) {
928 for (
uint32_t i = 0; i < outCount; i++) {
929 POINTER_INFO pointerApiInfo = pointerPenInfo[i].pointerInfo;
931 outPointerInfo[i].pointerId = pointerId;
932 outPointerInfo[i].isPrimary = isPrimary;
934 switch (pointerApiInfo.ButtonChangeType) {
935 case POINTER_CHANGE_FIRSTBUTTON_DOWN:
936 case POINTER_CHANGE_FIRSTBUTTON_UP:
939 case POINTER_CHANGE_SECONDBUTTON_DOWN:
940 case POINTER_CHANGE_SECONDBUTTON_UP:
943 case POINTER_CHANGE_THIRDBUTTON_DOWN:
944 case POINTER_CHANGE_THIRDBUTTON_UP:
947 case POINTER_CHANGE_FOURTHBUTTON_DOWN:
948 case POINTER_CHANGE_FOURTHBUTTON_UP:
951 case POINTER_CHANGE_FIFTHBUTTON_DOWN:
952 case POINTER_CHANGE_FIFTHBUTTON_UP:
959 outPointerInfo[i].pixelLocation = pointerApiInfo.ptPixelLocation;
961 outPointerInfo[i].tabletData.Pressure = 1.0f;
962 outPointerInfo[i].tabletData.Xtilt = 0.0f;
963 outPointerInfo[i].tabletData.Ytilt = 0.0f;
966 if (pointerPenInfo[i].penMask & PEN_MASK_PRESSURE) {
967 outPointerInfo[i].tabletData.Pressure = pointerPenInfo[i].pressure / 1024.0f;
970 if (pointerPenInfo[i].penFlags & PEN_FLAG_ERASER) {
974 if (pointerPenInfo[i].penMask & PEN_MASK_TILT_X) {
975 outPointerInfo[i].tabletData.Xtilt = fmin(
fabs(pointerPenInfo[i].tiltX / 90.0f), 1.0f);
978 if (pointerPenInfo[i].penMask & PEN_MASK_TILT_Y) {
979 outPointerInfo[i].tabletData.Ytilt = fmin(
fabs(pointerPenInfo[i].tiltY / 90.0f), 1.0f);
983 if (!outPointerInfo.empty()) {
984 m_lastPointerTabletData = outPointerInfo.back().tabletData;
1055 return m_lastPointerTabletData;
1062 DWORD pcbData =
sizeof(lightMode);
1063 if (RegGetValueW(HKEY_CURRENT_USER,
1064 L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize\\",
1065 L"AppsUseLightTheme",
1069 &pcbData) == ERROR_SUCCESS) {
1070 BOOL DarkMode = !lightMode;
1074 DwmSetWindowAttribute(this->m_hWnd, 20, &DarkMode,
sizeof(DarkMode));
1080 if (m_directManipulationHelper) {
1088 GHOST_WIN32_GetDpiForWindow fpGetDpiForWindow = (GHOST_WIN32_GetDpiForWindow)::GetProcAddress(
1089 m_user32,
"GetDpiForWindow");
1091 if (fpGetDpiForWindow) {
1092 return fpGetDpiForWindow(this->m_hWnd);
1096 return USER_DEFAULT_SCREEN_DPI;
1102 ch = ((ch >> 1) & 0x55) | ((ch << 1) & 0xAA);
1103 ch = ((ch >> 2) & 0x33) | ((ch << 2) & 0xCC);
1104 ch = ((ch >> 4) & 0x0F) | ((ch << 4) & 0xF0);
1112 shrt = ((shrt >> 1) & 0x5555) | ((shrt << 1) & 0xAAAA);
1113 shrt = ((shrt >> 2) & 0x3333) | ((shrt << 2) & 0xCCCC);
1114 shrt = ((shrt >> 4) & 0x0F0F) | ((shrt << 4) & 0xF0F0);
1115 shrt = ((shrt >> 8) & 0x00FF) | ((shrt << 8) & 0xFF00);
1121 uint8_t *bitmap,
uint8_t *
mask,
int sizeX,
int sizeY,
int hotX,
int hotY,
bool canInvertColor)
1132 if (m_customCursor) {
1133 DestroyCursor(m_customCursor);
1134 m_customCursor =
NULL;
1137 memset(&andData, 0xFF,
sizeof(andData));
1138 memset(&xorData, 0,
sizeof(xorData));
1140 for (
y = 0;
y < sizeY;
y++) {
1143 for (
x = cols - 1;
x >= 0;
x--) {
1149 xorData[
y] = fullBitRow & fullMaskRow;
1150 andData[
y] = ~fullMaskRow;
1153 m_customCursor = ::CreateCursor(::GetModuleHandle(0), hotX, hotY, 32, 32, andData, xorData);
1154 if (!m_customCursor) {
1158 if (::GetForegroundWindow() == m_hWnd) {
1168 if (m_Bar && S_OK == m_Bar->
SetProgressValue(m_hWnd, 10000 * progress, 10000))
1182 #ifdef WITH_INPUT_IME
1185 m_imeInput.BeginIME(m_hWnd,
GHOST_Rect(
x,
y - h,
x,
y), completed);
1188 void GHOST_WindowWin32::endIME()
1190 m_imeInput.EndIME(m_hWnd);
void BLI_kdtree_nd_() free(KDTree *tree)
#define GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY
const GUID CLSID_TaskbarList
@ GHOST_kWindowStateMinimized
@ GHOST_kWindowStateMaximized
@ GHOST_kWindowStateNormal
@ GHOST_kWindowStateFullScreen
@ GHOST_kStandardCursorBottomLeftCorner
@ GHOST_kStandardCursorZoomIn
@ GHOST_kStandardCursorVerticalSplit
@ GHOST_kStandardCursorHelp
@ GHOST_kStandardCursorWait
@ GHOST_kStandardCursorHorizontalSplit
@ GHOST_kStandardCursorTopSide
@ GHOST_kStandardCursorStop
@ GHOST_kStandardCursorCrosshair
@ GHOST_kStandardCursorCustom
@ GHOST_kStandardCursorNSEWScroll
@ GHOST_kStandardCursorLeftRight
@ GHOST_kStandardCursorPencil
@ GHOST_kStandardCursorNSScroll
@ GHOST_kStandardCursorCrosshairA
@ GHOST_kStandardCursorUpDown
@ GHOST_kStandardCursorUpArrow
@ GHOST_kStandardCursorBottomSide
@ GHOST_kStandardCursorTopLeftCorner
@ GHOST_kStandardCursorEyedropper
@ GHOST_kStandardCursorKnife
@ GHOST_kStandardCursorMove
@ GHOST_kStandardCursorCrosshairB
@ GHOST_kStandardCursorBottomRightCorner
@ GHOST_kStandardCursorDownArrow
@ GHOST_kStandardCursorEraser
@ GHOST_kStandardCursorDefault
@ GHOST_kStandardCursorEWScroll
@ GHOST_kStandardCursorRightArrow
@ GHOST_kStandardCursorTopRightCorner
@ GHOST_kStandardCursorDestroy
@ GHOST_kStandardCursorCrosshairC
@ GHOST_kStandardCursorZoomOut
@ GHOST_kStandardCursorLeftSide
@ GHOST_kStandardCursorText
@ GHOST_kStandardCursorLeftArrow
static const GHOST_TabletData GHOST_TABLET_DATA_NONE
@ GHOST_kTabletModeEraser
@ GHOST_kTabletModeStylus
GHOST_TDrawingContextType
@ GHOST_kDrawingContextTypeOpenGL
@ GHOST_kWindowOrderBottom
@ GHOST_kButtonMaskButton4
@ GHOST_kButtonMaskButton5
@ GHOST_kButtonMaskMiddle
@ GHOST_kTabletWinPointer
static uint16_t uns16ReverseBits(uint16_t shrt)
#define GET_POINTERID_WPARAM(wParam)
static uint8_t uns8ReverseBits(uint8_t ch)
__declspec(dllexport) DWORD NvOptimusEnablement=0x00000001
BOOL(API * GHOST_WIN32_AdjustWindowRectExForDpi)(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle, UINT dpi)
GHOST_MouseCaptureEventWin32
typedef UINT(API *GHOST_WIN32_GetDpiForWindow)(HWND)
#define WINTAB_PRINTF(x,...)
_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 type
_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 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 order
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
void setDPI(uint16_t dpi)
void onPointerHitTest(UINT32 pointerId)
static GHOST_DirectManipulationHelper * create(HWND hWnd, uint16_t dpi)
GHOST_TTrackpadInfo getTrackpadInfo()
ULONG __stdcall Release(void)
static GHOST_ISystem * getSystem()
virtual bool isInside(int32_t x, int32_t y) const
virtual int32_t getHeight() const
virtual int32_t getWidth() const
GHOST_TSuccess setCursorPosition(int32_t x, int32_t y)
GHOST_TSuccess getCursorPosition(int32_t &x, int32_t &y) const
uint64_t performanceCounterToMillis(__int64 perf_ticks) const
GHOST_WindowManager * getWindowManager() const
GHOST_TTabletAPI getTabletAPI(void)
const std::vector< GHOST_IWindow * > & getWindows() const
GHOST_TSuccess invalidate()
void resetPointerPenInfo()
GHOST_TSuccess setOrder(GHOST_TWindowOrder order)
uint16_t getDPIHint() override
GHOST_TTrackpadInfo getTrackpadInfo()
void updateDirectManipulation()
GHOST_TSuccess setProgressBar(float progress)
void setTitle(const char *title)
std::string getTitle() const
GHOST_TSuccess setClientSize(uint32_t width, uint32_t height)
void loadCursor(bool visible, GHOST_TStandardCursor cursorShape) const
bool usingTabletAPI(GHOST_TTabletAPI api) const
GHOST_TSuccess getPointerInfo(std::vector< GHOST_PointerInfoWin32 > &outPointerInfo, WPARAM wParam, LPARAM lParam)
GHOST_TSuccess setClientHeight(uint32_t height)
void loadWintab(bool enable)
GHOST_TabletData getTabletData()
GHOST_Wintab * getWintab() const
HCURSOR getStandardCursor(GHOST_TStandardCursor shape) const
void updateMouseCapture(GHOST_MouseCaptureEventWin32 event)
GHOST_TSuccess setClientWidth(uint32_t width)
GHOST_TSuccess setState(GHOST_TWindowState state)
void getWindowBounds(GHOST_Rect &bounds) const
void getClientBounds(GHOST_Rect &bounds) const
void onPointerHitTest(WPARAM wParam)
GHOST_WindowWin32(GHOST_SystemWin32 *system, const char *title, int32_t left, int32_t top, uint32_t width, uint32_t height, GHOST_TWindowState state, GHOST_TDrawingContextType type=GHOST_kDrawingContextTypeNone, bool wantStereoVisual=false, bool alphaBackground=false, GHOST_WindowWin32 *parentWindow=0, bool is_debug=false, bool dialog=false)
void clientToScreen(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const
GHOST_TSuccess endProgressBar()
GHOST_TWindowState getState() const
void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const
void adjustWindowRectForClosestMonitor(LPRECT win_rect, DWORD dwStyle, DWORD dwExStyle)
GHOST_Rect m_cursorGrabBounds
bool getCursorVisibility() const
void setCursorGrabAccum(int32_t x, int32_t y)
GHOST_TGrabCursorMode m_cursorGrab
int32_t m_cursorGrabInitPos[2]
GHOST_TSuccess setDrawingContextType(GHOST_TDrawingContextType type)
GHOST_TSuccess releaseNativeHandles()
virtual bool getValid() const
GHOST_TStandardCursor getCursorShape() const
GHOST_TabletData getLastTabletData()
static GHOST_Wintab * loadWintab(HWND hwnd)
virtual HRESULT STDMETHODCALLTYPE SetProgressState(HWND hwnd, TBPFLAG tbpFlags)=0
virtual HRESULT STDMETHODCALLTYPE SetProgressValue(HWND hwnd, ULONGLONG ullCompleted, ULONGLONG ullTotal)=0
ccl_device_inline float2 fabs(const float2 &a)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
static const VertexNature POINT
static struct PyModuleDef module
size_t count_utf_8_from_16(const wchar_t *string16)
wchar_t * alloc_utf16_from_8(const char *in8, size_t add)
int conv_utf_16_to_8(const wchar_t *in16, char *out8, size_t size8)