PIXELFORMATDESCRIPTOR pfd;
int iPixelFormat;
- WglDrawable(const Visual *vis) :
- Drawable(vis)
+ WglDrawable(const Visual *vis, int width, int height) :
+ Drawable(vis, width, height)
{
static bool first = TRUE;
RECT rect;
}
dwExStyle = 0;
- dwStyle = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE | WS_OVERLAPPEDWINDOW;
+ dwStyle = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW;
- int x = 0, y = 0, width = 256, height = 256;
+ int x = 0, y = 0;
rect.left = x;
rect.top = y;
hDC = GetDC(hWnd);
memset(&pfd, 0, sizeof pfd);
- pfd.cColorBits = 3;
+ pfd.cColorBits = 4;
pfd.cRedBits = 1;
pfd.cGreenBits = 1;
pfd.cBlueBits = 1;
+ pfd.cAlphaBits = 1;
pfd.cDepthBits = 1;
pfd.cStencilBits = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
}
void
- resize(unsigned w, unsigned h) {
+ resize(int w, int h) {
Drawable::resize(w, h);
RECT rClient, rWindow;
GetClientRect(hWnd, &rClient);
SetWindowPos(hWnd, NULL, rWindow.left, rWindow.top, w, h, SWP_NOMOVE);
}
+ void show(void) {
+ if (!visible) {
+ ShowWindow(hWnd, SW_SHOW);
+
+ Drawable::show();
+ }
+ }
+
void swapBuffers(void) {
SwapBuffers(hDC);
}
{
public:
HGLRC hglrc;
-
- WglContext(const Visual *vis) :
+ WglContext *shareContext;
+
+ WglContext(const Visual *vis, WglContext *share) :
Context(vis),
- hglrc(0)
+ hglrc(0),
+ shareContext(share)
{}
~WglContext() {
}
Drawable *
- createDrawable(const Visual *visual)
+ createDrawable(const Visual *visual, int width, int height)
{
- return new WglDrawable(visual);
+ return new WglDrawable(visual, width, height);
}
Context *
- createContext(const Visual *visual)
+ createContext(const Visual *visual, Context *shareContext)
{
- return new WglContext(visual);
+ return new WglContext(visual, dynamic_cast<WglContext *>(shareContext));
}
bool
if (!wglContext->hglrc) {
return false;
}
+ if (wglContext->shareContext) {
+ wglShareLists(wglContext->shareContext->hglrc,
+ wglContext->hglrc);
+ }
}
return wglMakeCurrent(wglDrawable->hDC, wglContext->hglrc);