#define _GLWS_HPP_
+#include <vector>
+
+
namespace glws {
+enum Profile {
+ PROFILE_COMPAT = 0,
+ PROFILE_CORE,
+ PROFILE_ES1,
+ PROFILE_ES2,
+ PROFILE_MAX
+};
+
+
+extern bool debug;
+
+
+bool
+checkExtension(const char *extName, const char *extString);
+
+
+template< class T >
+class Attributes {
+protected:
+ std::vector<T> attribs;
+
+public:
+ void add(T param) {
+ attribs.push_back(param);
+ }
+
+ void add(T pname, T pvalue) {
+ add(pname);
+ add(pvalue);
+ }
+
+ void end(T terminator = 0) {
+ add(terminator);
+ }
+
+ operator T * (void) {
+ return &attribs[0];
+ }
+
+ operator const T * (void) const {
+ return &attribs[0];
+ }
+};
+
+
class Visual
{
public:
{
public:
const Visual *visual;
- unsigned width;
- unsigned height;
-
- Drawable(const Visual *vis) :
- visual(vis)
+ int width;
+ int height;
+ bool visible;
+
+ Drawable(const Visual *vis, int w, int h) :
+ visual(vis),
+ width(w),
+ height(h),
+ visible(false)
{}
virtual ~Drawable() {}
virtual void
- resize(unsigned w, unsigned h) {
+ resize(int w, int h) {
width = w;
height = h;
}
+ virtual void
+ show(void) {
+ visible = true;
+ }
+
virtual void swapBuffers(void) = 0;
};
{
public:
const Visual *visual;
+ Profile profile;
- Context(const Visual *vis) :
- visual(vis)
+ Context(const Visual *vis, Profile prof) :
+ visual(vis),
+ profile(prof)
{}
virtual ~Context() {}
};
-class WindowSystem
-{
-public:
- Drawable *currentDrawable;
- Context *currentContext;
-
-
- inline WindowSystem() :
- currentDrawable(NULL),
- currentContext(NULL)
- {}
+void
+init(void);
- virtual ~WindowSystem() {}
+void
+cleanup(void);
- virtual Visual *
- createVisual(bool doubleBuffer=false) = 0;
-
- virtual Drawable *
- createDrawable(const Visual *visual) = 0;
+Visual *
+createVisual(bool doubleBuffer = false, Profile profile = PROFILE_COMPAT);
- virtual Context *
- createContext(const Visual *visual) = 0;
-
- virtual bool
- makeCurrent(Drawable *drawable, Context *context) = 0;
+Drawable *
+createDrawable(const Visual *visual, int width = 32, int height = 32);
- virtual bool
- processEvents(void) = 0;
-};
+Context *
+createContext(const Visual *visual, Context *shareContext = 0, Profile profile = PROFILE_COMPAT);
+bool
+makeCurrent(Drawable *drawable, Context *context);
-WindowSystem *createNativeWindowSystem(void);
+bool
+processEvents(void);
} /* namespace glws */