На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> QGLWidget + QGraphicsView = error , QOpenGLContext::swapBuffers() called with non-exposed window, behavior is undefined
    Добрый день. Такой вопрос. Есть класс, унаследованный от QGLWidget. В нем активно используются шейдеры. Хочу его теперь добавить на сцену.
    Только получаю следующую ошибку.
    ExpandedWrap disabled
      QOpenGLContext::swapBuffers() called with non-exposed window, behavior is undefined

    Понятно, что дело не в бобине, но допетрить не могу. Код примерно следующий
    ExpandedWrap disabled
          QGraphicsView *view = new QGraphicsView;
          QGraphicsScene* scene = new QGraphicsScene;
          view->setScene(scene);
          view->show();
          MyGlWidget w;
          scene->addWidget(&w);


    Добавлено
    да, виджет без шейдеров встраивается на ура.
    Сообщение отредактировано: kotmatroskin55 -
      Чем отключаются включаются шейдеры?
      ExpandedWrap disabled
        MyGlWidget w;

      и выглядит подозрительно
        Цитата rodion @
        Чем отключаются включаются шейдеры?

        они не включаются и отключаются, они просто есть. В частности
        ExpandedWrap disabled
          void SnowGlWidget::initializeGL() {
           
                  QGLShader vShader(QGLShader::Vertex);
                  if (!vShader.compileSourceCode(
                          "attribute vec3 vertexPosition;\n"
                          "attribute vec3 vertexNormal;\n"
                          "attribute vec2 vertexUV_a;\n"
                          "varying vec2 vertexUV;\n"
                          "varying vec3 lightIntensity;\n"
                          "uniform vec3 lightPosition;\n"
                          "uniform vec3 lightKd;\n"
                          "uniform vec3 lightLd;\n"
                          "uniform mat4 modelViewMatrix;\n"
                          "uniform mat3 normalMatrix;\n"
                          "uniform mat4 projectionMatrix;\n"
                          "uniform mat4 modelViewProjMatrix;\n"
                          "attribute highp vec4 vertexAttr;\n"
                          "uniform mediump mat4 matrix;\n"
                          "attribute lowp vec4 colorAttr;\n"
                          "varying lowp vec4 color;\n"
                          "void main()\n"
                          "{\n"
                          "color = colorAttr;\n"
                          "gl_Position = modelViewProjMatrix * vec4(vertexPosition, 1.0);\n"
                          "}\n"
                  )) {
                      return;
                  }
          //        vShader.compileSourceFile(":/Shaders/mvshader.glsl");
           
                  QGLShader fShader(QGLShader::Fragment);
                  if (!fShader.compileSourceCode(
                          "varying lowp vec4 color;\n"
                          "void main()\n"
                          "{\n"
                          " gl_FragColor = color;\n"
                          "}\n"
           
                  )) {
                      return;
           
                  }
           
                  if (!m_program.addShader(&vShader)) {
                      return;
                  }
                  if (!m_program.addShader(&fShader)) {
                      return;
                  }
                  if (!m_program.link()) {
           
                      qWarning("Error: unable to link a shader program.");
           
                      return;
                  }
                  if (!m_program.bind()) {
                      qWarning("Error: unable to bind a shader program.");
                      return;
                  }
                  m_vertexAttr = m_program.attributeLocation("vertexAttr");
                  m_colorAttr = m_program.attributeLocation("colorAttr");
                  m_matrixUniform = m_program.uniformLocation("matrix");
           
                  m_track = new SnowTrack(&m_program, m_vertexAttr, m_colorAttr, m_points, 1, true);
           
                  m_perspective.aspectRatio = height() > 0.0f ? float(width()) / float(height()) : 1.0f;
           
                  glClearColor(0.0f, 0.0f, 0.2f, .0f);
                  glEnable(GL_DEPTH_TEST);
                  glEnable(GL_CULL_FACE);
           
              }

        код примерно такой, без шейдеров код просто рисует набор примитивов, но мне этот вариант не подходит.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0202 ]   [ 17 queries used ]   [ Generated: 16.04.24, 08:03 GMT ]