mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-04 18:09:53 +03:00
1
This commit is contained in:
190
utils/mxtk/mxglwindow.cpp
Normal file
190
utils/mxtk/mxglwindow.cpp
Normal file
@@ -0,0 +1,190 @@
|
||||
//
|
||||
// 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 "mxtk/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;
|
||||
}
|
||||
Reference in New Issue
Block a user