]> git.tdb.fi Git - libs/gui.git/blobdiff - source/glcontext.cpp
Reorganize files to separate gbase and input
[libs/gui.git] / source / glcontext.cpp
diff --git a/source/glcontext.cpp b/source/glcontext.cpp
deleted file mode 100644 (file)
index a749c6c..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/* $Id$
-
-This file is part of libmspgbase
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
-#include <vector>
-#ifdef WIN32
-#include <windows.h>
-#endif
-#include <GL/gl.h>
-#include <msp/core/application.h>
-#include <msp/core/except.h>
-#include "display.h"
-#include "glcontext.h"
-#include "window.h"
-
-#include <iostream>
-using namespace std;
-
-namespace Msp {
-namespace Graphics {
-
-GLOptions::GLOptions():
-       alpha(false),
-       stencil(false),
-       doublebuffer(true),
-       multisample(0)
-{ }
-
-
-GLContext::GLContext(Window &wnd, const GLOptions &opts):
-       display(wnd.get_display()),
-       window(wnd)
-{
-#ifdef WIN32
-       HDC dc=GetDC(window.get_handle());
-
-       PIXELFORMATDESCRIPTOR pfd;
-       memset(&pfd, 0, sizeof(pfd));
-
-       pfd.nSize=sizeof(pfd);
-       pfd.nVersion=1;
-       pfd.dwFlags=PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
-       if(opts.doublebuffer)
-               pfd.dwFlags|=PFD_DOUBLEBUFFER;
-       pfd.iPixelType=PFD_TYPE_RGBA;
-       if(opts.alpha)
-               pfd.cAlphaBits=1;
-       pfd.cDepthBits=1;
-       if(opts.stencil)
-               pfd.cStencilBits=1;
-
-       int pf_index=ChoosePixelFormat(dc, &pfd);
-       if(!pf_index)
-               throw Exception("Couldn't find a suitable pixel format");
-       SetPixelFormat(dc, pf_index, &pfd);
-
-       context=wglCreateContext(dc);
-       wglMakeCurrent(dc, context);
-
-       ReleaseDC(window.get_handle(), dc);
-#else
-       std::vector<int> attribs;
-       
-       attribs.push_back(GLX_RGBA);
-       attribs.push_back(GLX_DEPTH_SIZE);
-       attribs.push_back(1);
-       
-       if(opts.alpha)
-       {
-               attribs.push_back(GLX_ALPHA_SIZE);
-               attribs.push_back(1);
-       }
-       
-       if(opts.stencil)
-       {
-               attribs.push_back(GLX_STENCIL_SIZE);
-               attribs.push_back(1);
-       }
-       
-       if(opts.doublebuffer)
-               attribs.push_back(GLX_DOUBLEBUFFER);
-       
-       if(opts.multisample>0)
-       {
-               attribs.push_back(GLX_SAMPLE_BUFFERS_ARB);
-               attribs.push_back(opts.multisample);
-       }
-       
-       attribs.push_back(0);
-
-       ::Display *dpy=display.get_display();
-
-       XVisualInfo *vi=glXChooseVisual(dpy, DefaultScreen(dpy), &attribs.front());
-       if(!vi)
-               throw Exception("Couldn't find a suitable GLX visual");
-       context=glXCreateContext(dpy, vi, 0, true);
-
-       XSetWindowAttributes attr;
-       attr.colormap=XCreateColormap(dpy, DefaultRootWindow(dpy), vi->visual, AllocNone);
-
-       subwnd=XCreateWindow(dpy, window.get_handle(), 0, 0, window.get_width(), window.get_height(), 0, vi->depth, InputOutput, vi->visual, CWColormap, &attr);
-       XMapWindow(display.get_display(), subwnd);
-
-       XFree(vi);
-
-       glXMakeCurrent(dpy, subwnd, context);
-
-       window.signal_resize.connect(sigc::mem_fun(this, &GLContext::window_resized));
-#endif
-}
-
-GLContext::~GLContext()
-{
-#ifdef WIN32
-       wglMakeCurrent(0, 0);
-       wglDeleteContext(context);
-#else
-       ::Display *dpy=display.get_display();
-
-       glXMakeCurrent(dpy, 0, 0);
-       glXDestroyContext(dpy, context);
-       XDestroyWindow(dpy, subwnd);
-#endif
-}
-
-void GLContext::swap_buffers()
-{
-#ifdef WIN32
-       HDC dc=GetDC(window.get_handle());
-       SwapBuffers(dc);
-       ReleaseDC(window.get_handle(), dc);
-#else
-       glXSwapBuffers(display.get_display(), subwnd);
-#endif
-}
-
-void GLContext::window_resized(unsigned w, unsigned h)
-{
-#ifndef WIN32
-       XMoveResizeWindow(display.get_display(), subwnd, 0, 0, w, h);
-#endif
-       glViewport(0, 0, w, h);
-}
-
-} // namespace Graphics
-} // namespace Msp