67 lines
1.2 KiB
C
67 lines
1.2 KiB
C
|
#pragma once
|
||
|
|
||
|
#include <stdexcept>
|
||
|
#include <X11/X.h>
|
||
|
#include <X11/Xlib.h>
|
||
|
#include <X11/Xutil.h>
|
||
|
#include <epoxy/gl.h>
|
||
|
#include <epoxy/glx.h>
|
||
|
|
||
|
namespace endofthejedi {
|
||
|
|
||
|
class GLWindow {
|
||
|
private:
|
||
|
Display* m_display;
|
||
|
Window m_rootwnd;
|
||
|
GLint m_attributes[23] =
|
||
|
{
|
||
|
GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
|
||
|
GLX_RENDER_TYPE, GLX_RGBA_BIT,
|
||
|
GLX_X_VISUAL_TYPE, GLX_TRUE_COLOR,
|
||
|
GLX_RED_SIZE, 8,
|
||
|
GLX_GREEN_SIZE, 8,
|
||
|
GLX_BLUE_SIZE, 8,
|
||
|
GLX_ALPHA_SIZE, 8,
|
||
|
GLX_DEPTH_SIZE, 24,
|
||
|
GLX_STENCIL_SIZE, 8,
|
||
|
GLX_DOUBLEBUFFER, True,
|
||
|
None
|
||
|
};
|
||
|
|
||
|
XVisualInfo* m_visualinfo;
|
||
|
Colormap m_colormap;
|
||
|
XSetWindowAttributes m_swa;
|
||
|
Window m_window;
|
||
|
GLXContext m_glcontext;
|
||
|
XWindowAttributes m_gwa;
|
||
|
Atom m_atomWmDeleteWindow;
|
||
|
|
||
|
unsigned int m_width;
|
||
|
unsigned int m_height;
|
||
|
bool m_running = false;
|
||
|
|
||
|
protected:
|
||
|
virtual void handle(XEvent event);
|
||
|
virtual void init();
|
||
|
virtual void render(double time);
|
||
|
virtual void resize();
|
||
|
|
||
|
public:
|
||
|
GLWindow(unsigned int width, unsigned int height);
|
||
|
~GLWindow();
|
||
|
|
||
|
void loop();
|
||
|
void stop();
|
||
|
void swap();
|
||
|
|
||
|
unsigned int getheight() const {
|
||
|
return m_height;
|
||
|
}
|
||
|
|
||
|
unsigned int getwidth() const {
|
||
|
return m_width;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
}
|