Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. 2 QOpenGLWidget shared context
QtWS25 Last Chance

2 QOpenGLWidget shared context

Scheduled Pinned Locked Moved General and Desktop
1 Posts 1 Posters 821 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    glararan
    wrote on last edited by
    #1

    Hi,

    I would like to solve problem that I still deal with.. thats render 2 QOpenGLWidgets at same time in different top level windows with shared shader programs etc.

    My first attempt was to use one context, wasnt working.

    The question: Is it even possible currently with QOpenGLWidget? Or I have to go to older QGLWidget? Or use something else?

    testAttribute for Qt::AA_ShareOpenGLContexts returns true so there is not problem with sharing
    even QOpenGLContext::areSharing returns true. So there is something I missing or I dont know. Not using threads.

    If you need anything more to debug this problem tell me.

    Debug output:
    @MapExplorer true true
    true
    QOpenGLShaderProgram::bind: program is not valid in the current context.
    MapExlorer paintGL ends
    MapExplorer true true
    true
    QOpenGLShaderProgram::bind: program is not valid in the current context.
    MapExlorer paintGL ends
    QOpenGLFramebufferObject::bind() called from incompatible context
    QOpenGLShaderProgram::bind: program is not valid in the current context.
    QOpenGLShaderProgram::bind: program is not valid in the current context.
    QOpenGLShaderProgram::bind: program is not valid in the current context.
    QOpenGLFramebufferObject::bind() called from incompatible context
    QOpenGLFramebufferObject::bind() called from incompatible context@

    MapView initializeGL:
    @void MapView::initializeGL()
    {
    this->makeCurrent();

    initializeOpenGLFunctions();
    
    // Initialize World
    world->initialize(this->context(), size(), worldCoords);
    
    // Initialize camera shader
    camera->initialize();
    
    // Enable depth testing
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
    
    glDepthFunc(GL_LEQUAL); // just testing new depth func
    
    glClearColor(0.65f, 0.77f, 1.0f, 1.0f);
    

    }@

    MapView paintGL:
    @void MapView::paintGL()
    {
    this->makeCurrent();

    glDrawBuffer(GL_FRONT);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    world->draw(...);
    

    }@

    MapExplorer initializeGL:
    @void MapExplorer::initializeGL()
    {
    this->makeCurrent();

    QOpenGLContext* _context = _mapView->context();
    _context->setShareContext(this->context());
    _context->create();
    
    this->context()->create();
    this->makeCurrent();
    
    initializeOpenGLFunctions();
    
    // Enable depth testing
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
    
    glDepthFunc(GL_LEQUAL); // just testing new depth func
    
    glClearColor(0.65f, 0.77f, 1.0f, 1.0f);
    

    }@

    MapExplorer paintGL:
    @void MapExplorer::paintGL()
    {
    this->makeCurrent();

    qDebug() << "MapExplorer" << QOpenGLContext::areSharing(this->context(), _mapView->context()) << (QOpenGLContext::currentContext() == this->context());
    
    QOpenGLShaderProgram* shader = world->getTerrainShader();
    qDebug() << shader->create();
    shader->bind(); // debug error "QOpenGLShaderProgram::bind: program is not valid in the current context."
    
    // We need the viewport size to calculate tessellation levels and the geometry shader also needs the viewport matrix
    shader->setUniformValue("viewportSize",   viewportSize);
    shader->setUniformValue("viewportMatrix", viewportMatrix);
    
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    qDebug() << "MapExlorer paintGL ends";
    
    //world->drawExplorerView(...);
    

    }@

    Thanks.

    Regards, glararan.

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved