glws::Drawable *currentDrawable = NULL;
-glws::Context *currentContext = NULL;
+Context *currentContext = NULL;
static glws::Visual *
}
-glws::Context *
-createContext(glws::Context *shareContext, glws::Profile profile) {
- glws::Context *ctx = glws::createContext(getVisual(profile), shareContext, profile, retrace::debug);
+Context *
+createContext(Context *shareContext, glws::Profile profile) {
+ glws::Context *shareWsContext = shareContext ? shareContext->wsContext : NULL;
+ glws::Context *ctx = glws::createContext(getVisual(profile), shareWsContext, profile, retrace::debug);
if (!ctx) {
std::cerr << "error: failed to create OpenGL context\n";
exit(1);
return NULL;
}
- return ctx;
+ return new Context(ctx);
}
-glws::Context *
-createContext(glws::Context *shareContext) {
+Context *
+createContext(Context *shareContext) {
return createContext(shareContext, getDefaultProfile());
}
bool
-makeCurrent(trace::Call &call, glws::Drawable *drawable, glws::Context *context)
+makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context)
{
if (drawable == currentDrawable && context == currentContext) {
return true;
flushQueries();
- bool success = glws::makeCurrent(drawable, context);
+ bool success = glws::makeCurrent(drawable, context ? context->wsContext : NULL);
if (!success) {
std::cerr << "error: failed to make current OpenGL context and drawable\n";
if (drawable && context) {
currentDrawable = drawable;
currentContext = context;
+
+ if (!context->used) {
+ initContext();
+ context->used = true;
+ }
} else {
currentDrawable = NULL;
currentContext = NULL;
}
+int
+parseAttrib(const trace::Value *attribs, int param, int default_ = 0) {
+ const trace::Array *attribs_ = dynamic_cast<const trace::Array *>(attribs);
+
+ if (attribs_) {
+ for (size_t i = 0; i + 1 < attribs_->values.size(); i += 2) {
+ int param_i = attribs_->values[i]->toSInt();
+ if (param_i == 0) {
+ break;
+ }
+
+ if (param_i == param) {
+ int value = attribs_->values[i + 1]->toSInt();
+ return value;
+ }
+ }
+ }
+
+ return default_;
+}
+
+
} /* namespace glretrace */