namespace glretrace {
-
-extern bool double_buffer;
+struct Context {
+ Context(glws::Context* context)
+ : wsContext(context),
+ drawable(0),
+ activeProgram(0),
+ used(false)
+ {
+ }
+
+ ~Context();
+
+ glws::Context* wsContext;
+
+ // Bound drawable
+ glws::Drawable *drawable;
+
+ GLuint activeProgram;
+ bool used;
+
+ // Context must be current
+ inline bool
+ hasExtension(const char *extension) const {
+ return wsContext->hasExtension(extension);
+ }
+};
+
+extern bool insideList;
extern bool insideGlBeginEnd;
-extern glws::Profile defaultProfile;
-extern glws::Visual *visual[glws::PROFILE_MAX];
-extern glws::Drawable *drawable;
-extern glws::Context *context;
+extern bool supportsARBShaderObjects;
+
+Context *
+getCurrentContext(void);
+
+
+int
+parseAttrib(const trace::Value *attribs, int param, int default_);
+
+
+glws::Drawable *
+createDrawable(glws::Profile profile);
-extern unsigned frame;
-extern long long startTime;
-extern bool wait;
+glws::Drawable *
+createDrawable(void);
-extern bool benchmark;
+glws::Drawable *
+createPbuffer(int width, int height);
+
+Context *
+createContext(Context *shareContext, glws::Profile profile);
+
+Context *
+createContext(Context *shareContext = 0);
+
+bool
+makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context);
-extern unsigned dump_state;
void
checkGlError(trace::Call &call);
extern const retrace::Entry egl_callbacks[];
void frame_complete(trace::Call &call);
+void initContext();
+
void updateDrawable(int width, int height);
+void flushQueries();
+void beginProfile(trace::Call &call, bool isDraw);
+void endProfile(trace::Call &call, bool isDraw);
+
} /* namespace glretrace */