19
hello patrice thanks for your code example. but I have questions about some equates
%ZI_GLDC, %ZI_GLRC,%Extend_cbWndExtra, and $GLImageClassName
and ZI_GetProperty() function and ZI_SetProperty() function
do you have a running openGL 32-bit example for me for testing with needed equates and functions?
%ZI_GLDC = ?
%ZI_GLRC = ?
%Extend_cbWndExtra = ?
ZI_SetProperty() function ?
ZI_GetProperty() function ?
ZI_SetProperty(hWnd, %ZI_GLDC, glDC)
ZI_SetProperty(hWnd, %ZI_GLRC, glRC)
what is $GLImageClassName = ? ' "WGL_OpenGL" ???
FUNCTION ZI_GetProperty(BYVAL a AS DWORD, BYVAL b AS DWORD) EXPORT AS DWORD
END FUNCTION
FUNCTION ZI_SetProperty(BYVAL a AS DWORD, BYVAL b AS DWORD,BYVAL c AS DWORD) EXPORT AS DWORD
END FUNCTION
FUNCTION InitMultisample(BYVAL a AS DWORD, BYVAL b AS LONG) EXPORT AS DWORD
END FUNCTION
' update
FUNCTION WGL_CreateWindow ALIAS "WGL_CreateWindow" (BYVAL dwExStyle AS DWORD, _
BYVAL dwStyle AS DWORD, _
BYVAL x AS LONG, BYVAL y AS LONG, _
BYVAL nWidth AS LONG, BYVAL nHeight AS LONG, _
BYVAL hWndParent AS DWORD, _
BYVAL CtrlID AS DWORD) EXPORT AS DWORD
LOCAL IsInitialized, wcStyle, glDC, glRC AS LONG
LOCAL hWnd, hTemp AS DWORD
LOCAL wc AS WndClassEx
LOCAL zClass AS ASCIIZ * 16
LOCAL GLImageClassName AS WSTRINGZ*180 ' $GLImageClassName
'$GLImageClassName="WGL_OpenGL" ' ???
LOCAL zInstance AS DWORD
LOCAL gn_arbMultisampleFormat AS LONG
zClass = "GL_CHARTCTRL"
' Create a temporary window for initializing OpenGL context
hTemp = CreateWindowEx(dwExStyle, "", "", dwStyle, _ '$GLImageClassName ......... ???
0, 0, 0, 0, hWndParent, CtrlID, zInstance, BYVAL 0)
IF hTemp THEN
' Get device context and rendering context properties from the temporary window
glDC = ZI_GetProperty(hTemp, %ZI_GLDC)
glRC = ZI_GetProperty(hTemp, %ZI_GLRC)
LOCAL pfd AS PIXELFORMATDESCRIPTOR
' Set up the PIXELFORMATDESCRIPTOR structure
pfd.nSize = SIZEOF(pfd)
pfd.nVersion = 1
pfd.dwFlags = %PFD_DRAW_TO_WINDOW OR %PFD_SUPPORT_OPENGL OR %PFD_DOUBLEBUFFER OR %PFD_SUPPORT_GDI
pfd.iPixelType = 0 ' PFD_TYPE_RGBA
pfd.cColorBits = 32
pfd.cRedBits = 0
pfd.cRedShift = 0
pfd.cGreenBits = 0
pfd.cGreenShift = 0
pfd.cBlueBits = 0
pfd.cBlueShift = 0
pfd.cAlphaBits = 1
pfd.cAlphaShift = 0
pfd.cAccumBits = 0
pfd.cAccumRedBits = 0
pfd.cAccumGreenBits = 0
pfd.cAccumBlueBits = 0
pfd.cAccumAlphaBits = 0
pfd.cDepthBits = 24 ' Depth buffer
pfd.cStencilBits = 0
pfd.cAuxBuffers = 0
pfd.iLayerType = 0 ' %PFD_MAIN_PLANE
pfd.bReserved = 0
pfd.dwLayerMask = 0
pfd.dwVisibleMask = 0
pfd.dwDamageMask = 0
' Initialize multisampling
InitMultisample(glDC, VARPTR(pfd)) ' ???
IF gn_arbMultisampleFormat THEN
' Set up the window class for the OpenGL control
wcStyle = %CS_HREDRAW OR %CS_VREDRAW OR %CS_DBLCLKS OR %CS_OWNDC
wc.cbSize = SIZEOF(wc)
IsInitialized = GetClassInfoEx(zInstance, zClass, wc)
IF IsInitialized = 0 THEN
wc.cbSize = SIZEOF(wc)
wc.style = wcStyle
wc.lpfnWndProc = CODEPTR(GL_WindowProc)
wc.cbClsExtra = 0
wc.cbWndExtra = %Extend_cbWndExtra * 4
wc.hInstance = zInstance
wc.hIcon = %NULL
wc.hCursor = LoadCursor(%NULL, BYVAL %IDC_ARROW)
wc.hbrBackground = %NULL ' Don't paint the class window background
wc.lpszMenuName = %NULL
wc.lpszClassName = VARPTR(zClass)
wc.hIconSm = %NULL
IF RegisterClassEx(wc) THEN IsInitialized = %TRUE
END IF
IF IsInitialized THEN
' Create the OpenGL control window
hWnd = CreateWindowEx(dwExStyle, _
zClass, _ ' Make it an OpenGL control
"", _ ' Currently not used
dwStyle, _ ' window style
x, _ ' initial x position
y, _ ' initial y position
nWidth, _ ' Calculate Window Width
nHeight, _ ' Calculate Window Height
hWndParent, _ ' parent window handle
CtrlID, _ ' ControlID
zInstance, _ ' program instance handle
BYVAL 0) ' creation parameters
IF hWnd THEN
' Get device context and set pixel format
glDC = GetDC(hWnd)
IF SetPixelFormat(glDC, gn_arbMultisampleFormat, pfd) THEN
' Destroy the temporary window and create the OpenGL context
DestroyWindow(hTemp)
glRC = wglCreateContext(glDC)
wglMakeCurrent(glDC, glRC)
ZI_SetProperty(hWnd, %ZI_GLDC, glDC)
ZI_SetProperty(hWnd, %ZI_GLRC, glRC)
ELSE
' Fallback: use the temporary window
DestroyWindow(hWnd)
MoveWindow(hTemp, x, y, nWidth, nHeight, 0)
hWnd = hTemp
END IF
END IF
END IF
ELSE
' Fallback: use the temporary window
MoveWindow(hTemp, x, y, nWidth, nHeight, 0)
hWnd = hTemp
END IF
END IF
FUNCTION = hWnd
END FUNCTION