edd7b1feb926a41f991378a81cbb6bdae49fdbcf
[gltest.git] / glwindow.h
1 #ifndef GL_WINDOW_H
2 #define GL_WINDOW_H
3
4 #include <X11/Xlib.h>
5
6 /** Abstracts the GL binding API away */
7 class GLBackend {
8 public:
9         /** Create a GL window class, but does not do anything */
10         GLBackend() {}
11         /** Fre all resources */
12         virtual ~GLBackend() {}
13         
14         /** Initialize GL backend, choose visual configuration and return the ID */
15         virtual VisualID initialize(Display *display) = 0;
16         
17         /** create a GL context for the given window */
18         virtual void createContext(Window window) = 0;
19         
20         /** Swap back and front buffers */
21         virtual void swapBuffers() const = 0;
22         
23         /** Set the swap interval */
24         virtual void setSwapInterval(int i) const = 0;
25 };
26
27 /** A window to render GL stuff in */
28 class GLWindow {
29 public:
30         GLWindow(Display *display, GLBackend *backend) //!< Create the window class, but do not open it. Taks ownership of the backend and the X connection.
31          : display(display), backend(backend), window(0) {}
32         virtual ~GLWindow();
33
34         void open(unsigned int width, unsigned int height) { if (!window) create(width, height); }
35         void close();
36         void setFullscreen(bool fullscreen);
37         bool getFullscreen(void) { return fullscreen; }
38         
39         int getWidth() { return width; }
40         int getHeight() { return height; }
41
42         void exec();
43
44 protected:
45         const GLBackend * getBackend() { return backend; }
46
47         virtual void initGL() = 0;
48         virtual void resizeGL(unsigned int width, unsigned int height) = 0;
49         virtual void renderGL() = 0;
50         virtual void handleKeyPress(KeySym key) = 0;
51          
52 private:
53         void create(unsigned int width, unsigned int height);
54
55         Display *display;
56         GLBackend *backend;
57         Window window;
58         int width, height;
59         bool fullscreen;
60 };
61
62 #endif