// // mxToolKit (c) 1999 by Mete Ciragan // // file: mxGlWindow.cpp // implementation: Win32 API // last modified: Apr 21 1999, Mete Ciragan // copyright: The programs and associated files contained in this // distribution were developed by Mete Ciragan. The programs // are not in the public domain, but they are freely // distributable without licensing fees. These programs are // provided without guarantee or warrantee expressed or // implied. // #include <mx/mxGlWindow.h> #include <windows.h> //#include <ostream.h> static int g_formatMode = mxGlWindow::FormatDouble; static int g_formatColorBits = 24; static int g_formatDepthBits = 16; class mxGlWindow_i { public: HDC hdc; HGLRC hglrc; }; mxGlWindow::mxGlWindow (mxWindow *parent, int x, int y, int w, int h, const char *label, int style) : mxWindow (parent, x, y, w, h, label, style) { PIXELFORMATDESCRIPTOR pfd = { sizeof (PIXELFORMATDESCRIPTOR), // size of this pfd 1, // version number PFD_DRAW_TO_WINDOW | // support window PFD_SUPPORT_OPENGL | // support OpenGL PFD_DOUBLEBUFFER, // double buffered PFD_TYPE_RGBA, // RGBA type 24, // 24-bit color depth 0, 0, 0, 0, 0, 0, // color bits ignored 0, // no alpha buffer 0, // shift bit ignored 0, // no accumulation buffer 0, 0, 0, 0, // accum bits ignored 16, // 32-bit z-buffer 0, // no stencil buffer 0, // no auxiliary buffer PFD_MAIN_PLANE, // main layer 0, // reserved 0, 0, 0 // layer masks ignored }; d_this = new mxGlWindow_i; pfd.cColorBits = g_formatColorBits; pfd.cDepthBits = g_formatDepthBits; bool error = false; if ((d_this->hdc = GetDC ((HWND) getHandle ())) == NULL) { error = true; goto done; } int pfm; if ((pfm = ChoosePixelFormat (d_this->hdc, &pfd)) == 0) { error = true; goto done; } if (SetPixelFormat (d_this->hdc, pfm, &pfd) == FALSE) { error = true; goto done; } DescribePixelFormat (d_this->hdc, pfm, sizeof (pfd), &pfd); if ((d_this->hglrc = wglCreateContext (d_this->hdc)) == 0) { error = true; goto done; } if (!wglMakeCurrent (d_this->hdc, d_this->hglrc)) { error = true; goto done; } setType (MX_GLWINDOW); setDrawFunc (0); done: if (error) delete this; } mxGlWindow::~mxGlWindow () { if (d_this->hglrc) { wglMakeCurrent (NULL, NULL); //wglDeleteContext (d_this->hglrc); } if (d_this->hdc) ReleaseDC ((HWND) getHandle (), d_this->hdc); delete d_this; } int mxGlWindow::handleEvent (mxEvent *event) { return 0; } void mxGlWindow::redraw () { makeCurrent (); if (d_drawFunc) d_drawFunc (); else draw (); swapBuffers (); } void mxGlWindow::draw () { } int mxGlWindow::makeCurrent () { if (wglMakeCurrent (d_this->hdc, d_this->hglrc)) return 1; return 0; } int mxGlWindow::swapBuffers () { if (SwapBuffers (d_this->hdc)) return 1; return 0; } void mxGlWindow::setDrawFunc (void (*func) (void)) { d_drawFunc = func; } void mxGlWindow::setFormat (int mode, int colorBits, int depthBits) { g_formatMode = mode; g_formatColorBits = colorBits; g_formatDepthBits = depthBits; }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 5821 | Knut Wikstrom |
Added Valve Source code. This is NOT to be commited to other than new code from Valve. |