Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.244.44] |
|
Сообщ.
#1
,
|
|
|
Добрый день. Такой вопрос. Есть класс, унаследованный от QGLWidget. В нем активно используются шейдеры. Хочу его теперь добавить на сцену.
Только получаю следующую ошибку. QOpenGLContext::swapBuffers() called with non-exposed window, behavior is undefined Понятно, что дело не в бобине, но допетрить не могу. Код примерно следующий QGraphicsView *view = new QGraphicsView; QGraphicsScene* scene = new QGraphicsScene; view->setScene(scene); view->show(); MyGlWidget w; scene->addWidget(&w); Добавлено да, виджет без шейдеров встраивается на ура. |
Сообщ.
#2
,
|
|
|
Чем отключаются включаются шейдеры?
MyGlWidget w; и выглядит подозрительно |
Сообщ.
#3
,
|
|
|
Цитата rodion @ Чем отключаются включаются шейдеры? они не включаются и отключаются, они просто есть. В частности 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); } код примерно такой, без шейдеров код просто рисует набор примитивов, но мне этот вариант не подходит. |