4 /* gltest - small OpenGL tearing test program
5 * Copyright (C) 2012-2013 Ralf Jung <post@ralfj.de>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24 /** Abstracts the GL binding API away */
27 /** Create a GL window class, but does not do anything */
29 /** Fre all resources */
30 virtual ~GLBackend() {}
32 /** Initialize GL backend, choose visual configuration and return the ID */
33 virtual VisualID initialize(Display *display) = 0;
35 /** create a GL context for the given window */
36 virtual void createContext(Window window) = 0;
38 /** Swap back and front buffers */
39 virtual void swapBuffers() const = 0;
41 /** Set the swap interval */
42 virtual void setSwapInterval(int i) const = 0;
45 /** A window to render GL stuff in */
48 GLWindow(Display *display, GLBackend *backend) //!< Create the window class, but do not open it. Taks ownership of the backend and the X connection.
49 : display(display), backend(backend), window(0) {}
52 void open(unsigned int width, unsigned int height) { if (!window) create(width, height); }
54 void setFullscreen(bool fullscreen);
55 bool getFullscreen(void) { return fullscreen; }
57 int getWidth() { return width; }
58 int getHeight() { return height; }
63 const GLBackend * getBackend() { return backend; }
65 virtual void initGL() = 0;
66 virtual void resizeGL(unsigned int width, unsigned int height) = 0;
67 virtual void renderGL() = 0;
68 virtual void handleKeyPress(KeySym key) = 0;
71 void create(unsigned int width, unsigned int height);