glws::Visual * & visual = visuals[profile];
if (!visual) {
visual = glws::createVisual(retrace::doubleBuffer, profile);
+ if (!visual) {
+ std::cerr << "error: failed to create OpenGL visual\n";
+ exit(1);
+ }
}
return visual;
}
}
-glws::Drawable *
-createDrawable(glws::Profile profile) {
- glws::Drawable *draw = glws::createDrawable(getVisual(profile));
+static glws::Drawable *
+createDrawableHelper(glws::Profile profile, int width = 32, int height = 32, bool pbuffer = false) {
+ glws::Visual *visual = getVisual(profile);
+ glws::Drawable *draw = glws::createDrawable(visual, width, height, pbuffer);
if (!draw) {
std::cerr << "error: failed to create OpenGL drawable\n";
exit(1);
- return NULL;
}
return draw;
}
+glws::Drawable *
+createDrawable(glws::Profile profile) {
+ return createDrawableHelper(profile);
+}
+
+
glws::Drawable *
createDrawable(void) {
- return glretrace::createDrawable(getDefaultProfile());
+ return createDrawable(getDefaultProfile());
+}
+
+
+glws::Drawable *
+createPbuffer(int width, int height) {
+ return createDrawableHelper(getDefaultProfile(), width, height, true);
}
Context *
createContext(Context *shareContext, glws::Profile profile) {
+ glws::Visual *visual = getVisual(profile);
glws::Context *shareWsContext = shareContext ? shareContext->wsContext : NULL;
- glws::Context *ctx = glws::createContext(getVisual(profile), shareWsContext, profile, retrace::debug);
+ glws::Context *ctx = glws::createContext(visual, shareWsContext, profile, retrace::debug);
if (!ctx) {
std::cerr << "error: failed to create OpenGL context\n";
exit(1);
glws::Drawable *currentDrawable = currentContext->drawable;
assert(currentDrawable);
+ if (currentDrawable->pbuffer) {
+ return;
+ }
+
if (currentDrawable->visible &&
width <= currentDrawable->width &&
height <= currentDrawable->height) {