void *QGLContext::chooseVisual() { static int bufDepths[] = { 8, 4, 2, 1 }; // Try 16, 12 also? //todo: if pixmap, also make sure that vi->depth == pixmap->depth void* vis = 0; int i = 0; bool fail = FALSE; QGLFormat fmt = format(); bool tryDouble = !fmt.doubleBuffer(); // Some GL impl's only have double bool triedDouble = FALSE; while( !fail && !( vis = tryVisual( fmt, bufDepths[i] ) ) ) { if ( !fmt.rgba() && bufDepths[i] > 1 ) { i++; continue; } if ( tryDouble ) { fmt.setDoubleBuffer( TRUE ); tryDouble = FALSE; triedDouble = TRUE; continue; } else if ( triedDouble ) { fmt.setDoubleBuffer( FALSE ); triedDouble = FALSE; } if ( fmt.stereo() ) { fmt.setStereo( FALSE ); continue; } if ( fmt.accum() ) { fmt.setAccum( FALSE ); continue; } if ( fmt.stencil() ) { fmt.setStencil( FALSE ); continue; } if ( fmt.alpha() ) { fmt.setAlpha( FALSE ); continue; } if ( fmt.depth() ) { fmt.setDepth( FALSE ); continue; } if ( fmt.doubleBuffer() ) { fmt.setDoubleBuffer( FALSE ); continue; } fail = TRUE; } glFormat = fmt; return vis; }
MidasGL::MidasGL(QGLFormat inFormat, QWidget * parent, const char * name) : QGLWidget(inFormat, parent) { // get format, make sure it is RGB, and compare buffering with requested if (!format().rgba()) midas_error("Midas error:", "No RGB GL format was available", 1); if (format().doubleBuffer() && !inFormat.doubleBuffer()) dia_puts("Midas warning: Double buffering is being used even " "though\n single buffering was requested\n"); if (!format().doubleBuffer() && inFormat.doubleBuffer()) dia_puts("Midas warning: Single buffering is being used even " "though\n double buffering was requested\n"); mMousePressed = false; }
/*! \since 4.8 Returns a platform window format for the OpenGL format specified by \a format. */ QPlatformWindowFormat QGLFormat::toPlatformWindowFormat(const QGLFormat &format) { QPlatformWindowFormat retFormat; retFormat.setAccum(format.accum()); if (format.accumBufferSize() >= 0) retFormat.setAccumBufferSize(format.accumBufferSize()); retFormat.setAlpha(format.alpha()); if (format.alphaBufferSize() >= 0) retFormat.setAlphaBufferSize(format.alphaBufferSize()); if (format.blueBufferSize() >= 0) retFormat.setBlueBufferSize(format.blueBufferSize()); retFormat.setDepth(format.depth()); if (format.depthBufferSize() >= 0) retFormat.setDepthBufferSize(format.depthBufferSize()); retFormat.setDirectRendering(format.directRendering()); retFormat.setDoubleBuffer(format.doubleBuffer()); if (format.greenBufferSize() >= 0) retFormat.setGreenBufferSize(format.greenBufferSize()); if (format.redBufferSize() >= 0) retFormat.setRedBufferSize(format.redBufferSize()); retFormat.setRgba(format.rgba()); retFormat.setSampleBuffers(format.sampleBuffers()); if (format.samples() >= 0) retFormat.setSamples(format.samples()); retFormat.setStencil(format.stencil()); if (format.stencilBufferSize() >= 0) retFormat.setStencilBufferSize(format.stencilBufferSize()); retFormat.setStereo(format.stereo()); retFormat.setSwapInterval(format.swapInterval()); return retFormat; }
GLFormat::GLFormat(const QGLFormat & format) : m_majorVersion(format.majorVersion()) , m_minorVersion(format.minorVersion()) , m_redBufferSize (format.redBufferSize()) , m_greenBufferSize(format.greenBufferSize()) , m_blueBufferSize (format.blueBufferSize()) , m_alphaBufferSize(format.alpha() ? format.alphaBufferSize() : 0) , m_depthBufferSize (format.depth() ? format.depthBufferSize() : 0) , m_stencilBufferSize(format.stencil() ? format.stencilBufferSize() : 0) , m_doubleBuffer(format.doubleBuffer()) , m_stereo(format.stereo()) , m_sampleBuffers(format.sampleBuffers()) , m_samples(format.samples()) , m_swapInterval(format.swapInterval()) { switch(format.profile()) { default: case QGLFormat::NoProfile: m_profile = NoProfile; break; case QGLFormat::CoreProfile: m_profile = CoreProfile; break; case QGLFormat::CompatibilityProfile: m_profile = CompatibilityProfile; break; }; }
inline void GL3DShaderWidget::checkOpenGLPixelFormat(const QGLFormat &fmt) { QGLFormat lRealFormat = format(); if(fmt.depth() && !lRealFormat.depth()) printf("OpenGL Buffer Warning: depth buffer requested but NOT granted.\n"); if(fmt.alpha() && !lRealFormat.alpha()) printf("OpenGL Buffer Warning: alpha buffer requested but not granted.\n"); if(!fmt.doubleBuffer() && lRealFormat.doubleBuffer()) printf("OpenGL Buffer Warning: single buffer requested but NOT granted.\n"); if(fmt.doubleBuffer() && !lRealFormat.doubleBuffer()) printf("OpenGL Buffer Warning: double buffer requested but NOT granted.\n"); if(fmt.stereo() && !lRealFormat.stereo()) printf("OpenGL Buffer Warning: stereo buffer requested but NOT granted.\n"); if(!fmt.rgba() && lRealFormat.rgba()) printf("OpenGL Buffer Warning: indexed color mode requested but NOT granted.\n"); if(fmt.rgba() && !lRealFormat.rgba()) printf("OpenGL Buffer Warning: RGBA color mode requested but NOT granted.\n"); if(fmt.sampleBuffers() && !lRealFormat.sampleBuffers()) printf("OpenGL Buffer Warning: multisample buffers requested but NOT granted.\n"); if(fmt.accum() && !lRealFormat.accum()) printf("OpenGL Buffer Warning: accumulation buffer requested but not granted.\n"); if(fmt.stencil() && !lRealFormat.stencil()) printf("OpenGL Buffer Warning: stencil buffer requested but not granted.\n"); fflush(stdout); }
static void qt_format_to_attrib_list(const QGLFormat &f, int attribs[]) { int i = 0; attribs[i++] = GLX_RENDER_TYPE; attribs[i++] = GLX_RGBA_BIT; attribs[i++] = GLX_DRAWABLE_TYPE; attribs[i++] = GLX_PBUFFER_BIT; attribs[i++] = GLX_RED_SIZE; attribs[i++] = f.redBufferSize() == -1 ? 1 : f.redBufferSize(); attribs[i++] = GLX_GREEN_SIZE; attribs[i++] = f.greenBufferSize() == -1 ? 1 : f.greenBufferSize(); attribs[i++] = GLX_BLUE_SIZE; attribs[i++] = f.blueBufferSize() == -1 ? 1 : f.blueBufferSize(); if (f.doubleBuffer()) { attribs[i++] = GLX_DOUBLEBUFFER; attribs[i++] = true; } if (f.depth()) { attribs[i++] = GLX_DEPTH_SIZE; attribs[i++] = f.depthBufferSize() == -1 ? 1 : f.depthBufferSize(); } if (f.stereo()) { attribs[i++] = GLX_STEREO; attribs[i++] = true; } if (f.stencil()) { attribs[i++] = GLX_STENCIL_SIZE; attribs[i++] = f.stencilBufferSize() == -1 ? 1 : f.stencilBufferSize(); } if (f.alpha()) { attribs[i++] = GLX_ALPHA_SIZE; attribs[i++] = f.alphaBufferSize() == -1 ? 1 : f.alphaBufferSize(); } if (f.accum()) { attribs[i++] = GLX_ACCUM_RED_SIZE; attribs[i++] = f.accumBufferSize() == -1 ? 1 : f.accumBufferSize(); attribs[i++] = GLX_ACCUM_GREEN_SIZE; attribs[i++] = f.accumBufferSize() == -1 ? 1 : f.accumBufferSize(); attribs[i++] = GLX_ACCUM_BLUE_SIZE; attribs[i++] = f.accumBufferSize() == -1 ? 1 : f.accumBufferSize(); if (f.alpha()) { attribs[i++] = GLX_ACCUM_ALPHA_SIZE; attribs[i++] = f.accumBufferSize() == -1 ? 1 : f.accumBufferSize(); } } if (f.sampleBuffers()) { attribs[i++] = GLX_SAMPLE_BUFFERS_ARB; attribs[i++] = 1; attribs[i++] = GLX_SAMPLES_ARB; attribs[i++] = f.samples() == -1 ? 4 : f.samples(); } attribs[i] = XNone; }
void GraphicsWindowQt::qglFormat2traits( const QGLFormat& format, osg::GraphicsContext::Traits* traits ) { traits->red = format.redBufferSize(); traits->green = format.greenBufferSize(); traits->blue = format.blueBufferSize(); traits->alpha = format.alpha() ? format.alphaBufferSize() : 0; traits->depth = format.depth() ? format.depthBufferSize() : 0; traits->stencil = format.stencil() ? format.stencilBufferSize() : 0; traits->sampleBuffers = format.sampleBuffers() ? 1 : 0; traits->samples = format.samples(); traits->quadBufferStereo = format.stereo(); traits->doubleBuffer = format.doubleBuffer(); traits->vsync = format.swapInterval() >= 1; }
string glinfo:: pretty_format(const QGLFormat& f) { QGLFormat::OpenGLVersionFlags flag = f.openGLVersionFlags(); stringstream s; s << "accum=" << f.accum() << endl << "accumBufferSize=" << f.accumBufferSize() << endl << "alpha=" << f.alpha() << endl << "alphaBufferSize=" << f.alphaBufferSize() << endl << "blueBufferSize=" << f.blueBufferSize() << endl << "depth=" << f.depth() << endl << "depthBufferSize=" << f.depthBufferSize() << endl << "directRendering=" << f.directRendering() << endl << "doubleBuffer=" << f.doubleBuffer() << endl << "greenBufferSize=" << f.greenBufferSize() << endl << "hasOverlay=" << f.hasOverlay() << endl << "redBufferSize=" << f.redBufferSize() << endl << "rgba=" << f.rgba() << endl << "sampleBuffers=" << f.sampleBuffers() << endl << "samples=" << f.samples() << endl << "stencil=" << f.stencil() << endl << "stencilBufferSize=" << f.stencilBufferSize() << endl << "stereo=" << f.stereo() << endl << "swapInterval=" << f.swapInterval() << endl << "" << endl << "hasOpenGL=" << f.hasOpenGL() << endl << "hasOpenGLOverlays=" << f.hasOpenGLOverlays() << endl << "OpenGL_Version_None=" << (QGLFormat::OpenGL_Version_None == flag) << endl << "OpenGL_Version_1_1=" << (QGLFormat::OpenGL_Version_1_1 & flag) << endl << "OpenGL_Version_1_2=" << (QGLFormat::OpenGL_Version_1_2 & flag) << endl << "OpenGL_Version_1_3=" << (QGLFormat::OpenGL_Version_1_3 & flag) << endl << "OpenGL_Version_1_4=" << (QGLFormat::OpenGL_Version_1_4 & flag) << endl << "OpenGL_Version_1_5=" << (QGLFormat::OpenGL_Version_1_5 & flag) << endl << "OpenGL_Version_2_0=" << (QGLFormat::OpenGL_Version_2_0 & flag) << endl << "OpenGL_Version_2_1=" << (QGLFormat::OpenGL_Version_2_1 & flag) << endl << "OpenGL_Version_3_0=" << (QGLFormat::OpenGL_Version_3_0 & flag) << endl << "OpenGL_ES_CommonLite_Version_1_0=" << (QGLFormat::OpenGL_ES_CommonLite_Version_1_0 & flag) << endl << "OpenGL_ES_Common_Version_1_0=" << (QGLFormat::OpenGL_ES_Common_Version_1_0 & flag) << endl << "OpenGL_ES_CommonLite_Version_1_1=" << (QGLFormat::OpenGL_ES_CommonLite_Version_1_1 & flag) << endl << "OpenGL_ES_Common_Version_1_1=" << (QGLFormat::OpenGL_ES_Common_Version_1_1 & flag) << endl << "OpenGL_ES_Version_2_0=" << (QGLFormat::OpenGL_ES_Version_2_0 & flag) << endl; return s.str(); }
TwoDFrame::TwoDFrame( QWidget * parent, Qt::WFlags f ) : QFrame(parent, f) { setFocusPolicy(Qt::StrongFocus); // Create our OpenGL widget. QGLFormat fmt; fmt.setAlpha(true); fmt.setRgba(true); fmt.setDoubleBuffer(true); fmt.setDirectRendering(true); glTwoDWindow = new GLTwoDWindow(fmt, this, "gltwoDwindow", this); if (!(fmt.directRendering() && fmt.rgba() && fmt.alpha() && fmt.doubleBuffer())){ Params::BailOut("Unable to obtain required OpenGL rendering format",__FILE__,__LINE__); } QHBoxLayout* flayout = new QHBoxLayout( this); flayout->addWidget( glTwoDWindow, 1 ); twoDParams = 0; isDataWindow = true; }
/*! Returns a window format for the OpenGL format specified by \a format. */ QSurfaceFormat QGLFormat::toSurfaceFormat(const QGLFormat &format) { QSurfaceFormat retFormat; if (format.alpha()) retFormat.setAlphaBufferSize(format.alphaBufferSize() == -1 ? 1 : format.alphaBufferSize()); if (format.blueBufferSize() >= 0) retFormat.setBlueBufferSize(format.blueBufferSize()); if (format.greenBufferSize() >= 0) retFormat.setGreenBufferSize(format.greenBufferSize()); if (format.redBufferSize() >= 0) retFormat.setRedBufferSize(format.redBufferSize()); if (format.depth()) retFormat.setDepthBufferSize(format.depthBufferSize() == -1 ? 1 : format.depthBufferSize()); retFormat.setSwapBehavior(format.doubleBuffer() ? QSurfaceFormat::DoubleBuffer : QSurfaceFormat::DefaultSwapBehavior); if (format.sampleBuffers()) retFormat.setSamples(format.samples() == -1 ? 4 : format.samples()); if (format.stencil()) retFormat.setStencilBufferSize(format.stencilBufferSize() == -1 ? 1 : format.stencilBufferSize()); retFormat.setStereo(format.stereo()); return retFormat; }
// static void SharedGLContext::setWidget(const QGLWidget* pWidget) { s_pSharedGLWidget = pWidget; qDebug() << "Set root GL Context widget valid:" << pWidget << (pWidget && pWidget->isValid()); const QGLContext* pContext = pWidget->context(); qDebug() << "Created root GL Context valid:" << pContext << (pContext && pContext->isValid()); if (pWidget) { QGLFormat format = pWidget->format(); qDebug() << "Root GL Context format:"; qDebug() << "Double Buffering:" << format.doubleBuffer(); qDebug() << "Swap interval:" << format.swapInterval(); qDebug() << "Depth buffer:" << format.depth(); qDebug() << "Direct rendering:" << format.directRendering(); qDebug() << "Has overlay:" << format.hasOverlay(); qDebug() << "RGBA:" << format.rgba(); qDebug() << "Sample buffers:" << format.sampleBuffers(); qDebug() << "Samples:" << format.samples(); qDebug() << "Stencil buffers:" << format.stencil(); qDebug() << "Stereo:" << format.stereo(); } }
/*! Returns a window format for the OpenGL format specified by \a format. */ QSurfaceFormat QGLFormat::toSurfaceFormat(const QGLFormat &format) { QSurfaceFormat retFormat; if (format.alpha()) retFormat.setAlphaBufferSize(format.alphaBufferSize() == -1 ? 1 : format.alphaBufferSize()); if (format.blueBufferSize() >= 0) retFormat.setBlueBufferSize(format.blueBufferSize()); if (format.greenBufferSize() >= 0) retFormat.setGreenBufferSize(format.greenBufferSize()); if (format.redBufferSize() >= 0) retFormat.setRedBufferSize(format.redBufferSize()); if (format.depth()) retFormat.setDepthBufferSize(format.depthBufferSize() == -1 ? 1 : format.depthBufferSize()); retFormat.setSwapBehavior(format.doubleBuffer() ? QSurfaceFormat::DoubleBuffer : QSurfaceFormat::DefaultSwapBehavior); if (format.sampleBuffers()) retFormat.setSamples(format.samples() == -1 ? 4 : format.samples()); if (format.stencil()) retFormat.setStencilBufferSize(format.stencilBufferSize() == -1 ? 1 : format.stencilBufferSize()); retFormat.setStereo(format.stereo()); retFormat.setMajorVersion(format.majorVersion()); retFormat.setMinorVersion(format.minorVersion()); retFormat.setProfile(static_cast<QSurfaceFormat::OpenGLContextProfile>(format.profile())); return retFormat; }
/* See qgl.cpp for qdoc comment. */ void *QGLContext::chooseVisual() { Q_D(QGLContext); static const int bufDepths[] = { 8, 4, 2, 1 }; // Try 16, 12 also? //todo: if pixmap, also make sure that vi->depth == pixmap->depth void* vis = 0; int i = 0; bool fail = false; QGLFormat fmt = format(); bool tryDouble = !fmt.doubleBuffer(); // Some GL impl's only have double bool triedDouble = false; bool triedSample = false; if (fmt.sampleBuffers()) fmt.setSampleBuffers(QGLExtensions::glExtensions & QGLExtensions::SampleBuffers); while(!fail && !(vis = tryVisual(fmt, bufDepths[i]))) { if (!fmt.rgba() && bufDepths[i] > 1) { i++; continue; } if (tryDouble) { fmt.setDoubleBuffer(true); tryDouble = false; triedDouble = true; continue; } else if (triedDouble) { fmt.setDoubleBuffer(false); triedDouble = false; } if (!triedSample && fmt.sampleBuffers()) { fmt.setSampleBuffers(false); triedSample = true; continue; } if (fmt.stereo()) { fmt.setStereo(false); continue; } if (fmt.accum()) { fmt.setAccum(false); continue; } if (fmt.stencil()) { fmt.setStencil(false); continue; } if (fmt.alpha()) { fmt.setAlpha(false); continue; } if (fmt.depth()) { fmt.setDepth(false); continue; } if (fmt.doubleBuffer()) { fmt.setDoubleBuffer(false); continue; } fail = true; } d->glFormat = fmt; return vis; }
AGLPixelFormat QGLContextPrivate::tryFormat(const QGLFormat &format) { GLint attribs[40], cnt = 0; bool device_is_pixmap = (paintDevice->devType() == QInternal::Pixmap); attribs[cnt++] = AGL_RGBA; attribs[cnt++] = AGL_BUFFER_SIZE; attribs[cnt++] = device_is_pixmap ? static_cast<QPixmap *>(paintDevice)->depth() : 32; attribs[cnt++] = AGL_LEVEL; attribs[cnt++] = format.plane(); if (format.redBufferSize() != -1) { attribs[cnt++] = AGL_RED_SIZE; attribs[cnt++] = format.redBufferSize(); } if (format.greenBufferSize() != -1) { attribs[cnt++] = AGL_GREEN_SIZE; attribs[cnt++] = format.greenBufferSize(); } if (format.blueBufferSize() != -1) { attribs[cnt++] = AGL_BLUE_SIZE; attribs[cnt++] = format.blueBufferSize(); } if (device_is_pixmap) { attribs[cnt++] = AGL_PIXEL_SIZE; attribs[cnt++] = static_cast<QPixmap *>(paintDevice)->depth(); attribs[cnt++] = AGL_OFFSCREEN; if(!format.alpha()) { attribs[cnt++] = AGL_ALPHA_SIZE; attribs[cnt++] = 8; } } else { if(format.doubleBuffer()) attribs[cnt++] = AGL_DOUBLEBUFFER; } if(glFormat.stereo()) attribs[cnt++] = AGL_STEREO; if(format.alpha()) { attribs[cnt++] = AGL_ALPHA_SIZE; attribs[cnt++] = format.alphaBufferSize() == -1 ? 8 : format.alphaBufferSize(); } if(format.stencil()) { attribs[cnt++] = AGL_STENCIL_SIZE; attribs[cnt++] = format.stencilBufferSize() == -1 ? 8 : format.stencilBufferSize(); } if(format.depth()) { attribs[cnt++] = AGL_DEPTH_SIZE; attribs[cnt++] = format.depthBufferSize() == -1 ? 32 : format.depthBufferSize(); } if(format.accum()) { attribs[cnt++] = AGL_ACCUM_RED_SIZE; attribs[cnt++] = format.accumBufferSize() == -1 ? 1 : format.accumBufferSize(); attribs[cnt++] = AGL_ACCUM_BLUE_SIZE; attribs[cnt++] = format.accumBufferSize() == -1 ? 1 : format.accumBufferSize(); attribs[cnt++] = AGL_ACCUM_GREEN_SIZE; attribs[cnt++] = format.accumBufferSize() == -1 ? 1 : format.accumBufferSize(); attribs[cnt++] = AGL_ACCUM_ALPHA_SIZE; attribs[cnt++] = format.accumBufferSize() == -1 ? 1 : format.accumBufferSize(); } if(format.sampleBuffers()) { attribs[cnt++] = AGL_SAMPLE_BUFFERS_ARB; attribs[cnt++] = 1; attribs[cnt++] = AGL_SAMPLES_ARB; attribs[cnt++] = format.samples() == -1 ? 4 : format.samples(); } attribs[cnt] = AGL_NONE; Q_ASSERT(cnt < 40); return aglChoosePixelFormat(0, 0, attribs); }