diff --git a/qglview/glframebuffer.cpp b/qglview/glframebuffer.cpp index 57004a4..75aad35 100644 --- a/qglview/glframebuffer.cpp +++ b/qglview/glframebuffer.cpp @@ -116,8 +116,9 @@ void GLFramebuffer::release() { void GLFramebuffer::setWriteBuffer(int index) { //QVector buffers; buffers << GL_COLOR_ATTACHMENT0 + index; - glDrawBuffer(GL_COLOR_ATTACHMENT0 + index); - //glDrawBuffers(buffers.size(), buffers.constData()); + GLenum e = GL_COLOR_ATTACHMENT0 + index; + glDrawBuffer(e); + //glDrawBuffers(1, &e); } diff --git a/qglview/glshaders.cpp b/qglview/glshaders.cpp index fb7ef85..61c7bcd 100644 --- a/qglview/glshaders.cpp +++ b/qglview/glshaders.cpp @@ -116,7 +116,7 @@ QString loadShaderFile(QOpenGLShaderProgram * prog, QOpenGLShader::ShaderType ty all.insert(ip + 1, qgl_uniform); } prog->addShaderFromSourceCode(type, all); -// qDebug() << "********" << all; + //qDebug() << "********" << all; return all; } diff --git a/qglview/gltypes.cpp b/qglview/gltypes.cpp index 59441d1..d52acf2 100644 --- a/qglview/gltypes.cpp +++ b/qglview/gltypes.cpp @@ -53,41 +53,51 @@ QString findFile(const QString & file, const QStringList & pathes) { } -void quadProgPoint(QOpenGLFunctions * glFuncs, QOpenGLShaderProgram * prog, QVector4D * corner_dirs, - GLfloat x, GLfloat y, GLfloat tx, GLfloat ty, int locv, int loct, int locc, int index) { - if (prog) { - if (corner_dirs) - prog->setAttributeValue(locc, corner_dirs[index]); - glFuncs->glVertexAttrib2f(loct, tx, ty); - glFuncs->glVertexAttrib2f(locv, x, y); - } else { - glTexCoord2f(tx, ty); - glVertex2f(x, y); - } -} - void glDrawQuad(QOpenGLShaderProgram * prog, QVector4D * corner_dirs, GLfloat x, GLfloat y, GLfloat w, GLfloat h) { glResetAllTransforms(); glSetPolygonMode(GL_FILL); + glDisable(GL_LIGHTING); + glEnable(GL_TEXTURE_2D); int loc = prog ? prog->attributeLocation("qgl_Color") : -1, locv = prog ? prog->attributeLocation("qgl_Vertex") : -1, loct = prog ? prog->attributeLocation("qgl_Texture") : -1, locc = prog ? prog->attributeLocation("view_corner") : -1; + //if (prog) {qDebug() << locv << loct << locc;} + QOpenGLFunctions * glFuncs = QOpenGLContext::currentContext()->functions(); if (prog) { + static const GLfloat cols [] = {1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f}; + static const GLfloat verts[] = {x, y, x+w, y, x, y+h, x+w, y+h}; + static const GLfloat texs [] = {0.f, 0.f, 1.f, 0.f, 0.f, 1.f, 1.f, 1.f}; + GLfloat vcs[] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f}; + if (corner_dirs) { + vcs[0] = corner_dirs[0].x(); vcs[1] = corner_dirs[0].y(); vcs[2] = corner_dirs[0].z(); + vcs[3] = corner_dirs[1].x(); vcs[4] = corner_dirs[1].y(); vcs[5] = corner_dirs[1].z(); + vcs[6] = corner_dirs[2].x(); vcs[7] = corner_dirs[2].y(); vcs[8] = corner_dirs[2].z(); + vcs[9] = corner_dirs[3].x(); vcs[10] = corner_dirs[3].y(); vcs[11] = corner_dirs[3].z(); + } + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glFuncs->glBindBuffer(GL_ARRAY_BUFFER, 0); + glFuncs->glEnableVertexAttribArray(loc); + glFuncs->glVertexAttribPointer(loc, 3, GL_FLOAT, 0, 0, cols); + glFuncs->glEnableVertexAttribArray(locv); + glFuncs->glVertexAttribPointer(locv, 2, GL_FLOAT, 0, 0, verts); + glFuncs->glEnableVertexAttribArray(loct); + glFuncs->glVertexAttribPointer(loct, 2, GL_FLOAT, 0, 0, texs); + glFuncs->glEnableVertexAttribArray(locc); + glFuncs->glVertexAttribPointer(locc, 3, GL_FLOAT, 0, 0, vcs); + glFuncs->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + } else { + glBegin(GL_TRIANGLE_STRIP); + glColor4f(1.f, 1.f, 1.f, 1.f); + glTexCoord2f(0.f, 0.f); glVertex2f(x, y); + glTexCoord2f(1.f, 0.f); glVertex2f(x+w, y); + glTexCoord2f(0.f, 1.f); glVertex2f(x, y+h); + glTexCoord2f(1.f, 1.f); glVertex2f(x+w, y+h); + glEnd(); } - //if (prog) - //qDebug() << loc << locv << loct << locc; - glBegin(GL_QUADS); - QOpenGLFunctions *glFuncs = QOpenGLContext::currentContext()->functions(); - if (prog) { - glFuncs->glVertexAttrib3f(loc, 1.f, 1.f, 1.f); - } - glColor3f(1.f, 1.f, 1.f); - quadProgPoint(glFuncs, prog, corner_dirs, x , y , 0.f, 0.f, locv, loct, locc, 0); - quadProgPoint(glFuncs, prog, corner_dirs, x+w, y , 1.f, 0.f, locv, loct, locc, 1); - quadProgPoint(glFuncs, prog, corner_dirs, x+w, y+h, 1.f, 1.f, locv, loct, locc, 2); - quadProgPoint(glFuncs, prog, corner_dirs, x , y+h, 0.f, 1.f, locv, loct, locc, 3); - glEnd(); } diff --git a/qglview/qglview.cpp b/qglview/qglview.cpp index 088de1c..4577c3f 100644 --- a/qglview/qglview.cpp +++ b/qglview/qglview.cpp @@ -31,6 +31,7 @@ QGLView::QGLView(): OpenGLWindow(), fbo_selection(3) { // setScene(new QGraphicsScene()); // setInteractive(true); setIcon(QIcon("://icons/qglview.png")); + deleting_ = false; timer = 0; need_init_ = is_first_draw = true; objects_.is_root = true; @@ -106,6 +107,7 @@ QGLView::~QGLView() { stop(); if (shader_select) delete shader_select; if (shader_halo) delete shader_halo; + deleting_ = true; } @@ -344,12 +346,14 @@ void QGLView::render() { renderer_->renderScene(); } emit glPainting(); + glUseProgram(0); if (selectionHalo_ || hoverHalo_) { glReleaseTextures(); - glUseProgram(0); glBindFramebuffer(GL_FRAMEBUFFER, 0); + + //glClearFramebuffer(Qt::black, false); + glActiveTexture(GL_TEXTURE0); - glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glDisable(GL_TEXTURE_CUBE_MAP); glDisable(GL_LIGHTING); @@ -363,13 +367,20 @@ void QGLView::render() { if (hoverHalo_ && hov_obj) { glBindTexture(GL_TEXTURE_2D, fbo_selection.colorTexture(1)); //qDebug() << "draw hover"; + //glBindTexture(GL_TEXTURE_2D, textures_manager->loadTexture("batt_pn.jpg")); glDrawQuad(); } } - glUseProgram(0); glResetAllTransforms(); glBindFramebuffer(GL_FRAMEBUFFER, 0); + glUseProgram(0); + + //glDisable(GL_BLEND); + //glDisable(GL_LIGHTING); + //glActiveTexture(GL_TEXTURE0); + //glBindTexture(GL_TEXTURE_2D, textures_manager->loadTexture("batt_pn.jpg")); + //glDrawQuad(); emit glEndPaint(); @@ -457,20 +468,21 @@ void QGLView::renderHalo(const GLObjectBase * obj, const uint iid, const QColor if (!shader_halo) return; if (!shader_halo->isLinked()) return; if (obj) { - shader_halo->bind(); - shader_halo->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, fbo_selection.colorTexture()); + shader_halo->bind(); + shader_halo->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4()); shader_halo->setUniformValue("t0", 0); shader_halo->setUniformValue("dt", QVector2D(1.f / width(), 1.f / height())); shader_halo->setUniformValue("selected", QVector4D(float((iid >> 24) & 0xFF) / 255.f, - float((iid >> 16) & 0xFF) / 255.f, - float((iid >> 8) & 0xFF) / 255.f, - float(iid & 0xFF) / 255.f)); + float((iid >> 16) & 0xFF) / 255.f, + float((iid >> 8) & 0xFF) / 255.f, + float( iid & 0xFF) / 255.f)); shader_halo->setUniformValue("color", color); shader_halo->setUniformValue("fill", GLfloat(fill)); //qDebug() << "render halo" << iid << shader_halo->log() << shader_halo->programId(); glDisableDepth(); + //glClearFramebuffer(color); glDrawQuad(shader_halo); glDepthMask(GL_TRUE); //glFlush(); @@ -545,9 +557,11 @@ void QGLView::collectLights() { void QGLView::objectDeleted(GLObjectBase * o) { + if (deleting_) return; //qDebug() << "del" << o; if (sel_obj == o) selectObject(nullptr); if (hov_obj == o) hov_obj = nullptr; + collectLights(); } @@ -590,8 +604,8 @@ void QGLView::checkCaps() { void QGLView::reloadThisShaders() { if (!shaders_supported) return; - loadShaders(shader_select, "selection", "://shaders"); - loadShaders(shader_halo, "selection_halo", "://shaders"); + loadShaders(shader_select, "selection", "shaders"); + loadShaders(shader_halo, "selection_halo", "shaders"); //loadShaders(shader_rope, "rope", "://shaders"); } @@ -789,6 +803,7 @@ QByteArray QGLView::saveCamera() { void QGLView::restoreCamera(const QByteArray &ba) { if (ba.isEmpty()) return; + qDebug() << "restoreCamera" << ba.size(); ChunkStream cs(ba); QVector3D pos, aim, ang; while (!cs.atEnd()) { diff --git a/qglview/qglview.h b/qglview/qglview.h index 0e3eed5..03c9bdc 100644 --- a/qglview/qglview.h +++ b/qglview/qglview.h @@ -238,7 +238,7 @@ private: QSize prev_size; float lineWidth_; float fogDensity_, fogStart_, fogEnd_, fps_, fps_tm, hoverHaloFill_, selectionHaloFill_, m_motionBlurFactor; - int timer, fps_cnt, sh_id_loc; + int timer, fps_cnt, sh_id_loc, deleting_; bool is_first_draw, is_init, fogEnabled_, lightEnabled_, grabMouse_, mouse_first, mouseRotate_, mouseSelect_, customMouseMove_; bool shaders_supported, changed_, cameraOrbit_, need_init_; bool hoverHalo_, selectionHalo_, shaders_bind, selecting_; diff --git a/qglview/qglview_test/qglview_window.cpp b/qglview/qglview_test/qglview_window.cpp index 401a37f..fb06b91 100644 --- a/qglview/qglview_test/qglview_window.cpp +++ b/qglview/qglview_test/qglview_window.cpp @@ -34,6 +34,10 @@ QGLViewWindow::QGLViewWindow(QWidget * parent): QMainWindow(parent), Ui::QGLView icon_geo = QIcon(":/icons/type-geo.png"); icon_camera = QIcon(":/icons/type-camera.png"); icon_light = QIcon(":/icons/type-light.png"); + QAction * a = new QAction(QIcon(":/icons/edit-delete.png"), "Remove"); + connect(a, SIGNAL(triggered()), this, SLOT(removeObjects())); + treeObjects->addAction(a); + spinViewLineWidth->setValue(lineThickness()*2); sel_obj = nullptr; view->view()->camera()->setAim(QVector3D()); @@ -311,6 +315,16 @@ void QGLViewWindow::on_treeObjects_itemClicked(QTreeWidgetItem * ti, int) { } +void QGLViewWindow::removeObjects() { + QList sil = treeObjects->selectedItems(); + foreach (QTreeWidgetItem * i, sil) { + GLObjectBase * o = (GLObjectBase*)(i->data(0, Qt::UserRole).toULongLong()); + delete o; + } + qDeleteAll(sil); +} + + void QGLViewWindow::objectsTreeChanged() { treeObjects->clear(); makeObjetTree(&(view->view()->rootObject()), treeObjects->invisibleRootItem()); diff --git a/qglview/qglview_test/qglview_window.h b/qglview/qglview_test/qglview_window.h index 2486417..1736665 100644 --- a/qglview/qglview_test/qglview_window.h +++ b/qglview/qglview_test/qglview_window.h @@ -124,6 +124,7 @@ private slots: void on_treeObjects_itemClicked(QTreeWidgetItem * ti, int); + void removeObjects(); void objectsTreeChanged(); void materialChanged(); void selectionChanged(GLObjectBase * cur, GLObjectBase *); diff --git a/qglview/qglview_test/qglview_window.ui b/qglview/qglview_test/qglview_window.ui index ba6799b..50735a9 100644 --- a/qglview/qglview_test/qglview_window.ui +++ b/qglview/qglview_test/qglview_window.ui @@ -7,14 +7,14 @@ 0 0 1125 - 1056 + 1032 QGLView converter - + @@ -421,513 +421,560 @@ - - - Shadows + + + QFrame::NoFrame - + true - - - QFormLayout::AllNonFixedFieldsGrow + + + + 0 + 0 + 294 + 737 + - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Shadowmap size - - - - - - - 16.000000000000000 - - - 2048.000000000000000 - - - 512.000000000000000 - - - 0 - - - 16.000000000000000 - - - 512.000000000000000 - - - true - - - - - - - Soft - - - true - - - - - - - - - - Bloom - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Factror - - - - - - - 0.000000000000000 - - - 100.000000000000000 - - - 1.000000000000000 - - - 1 - - - 0.100000000000000 - - - 1.000000000000000 - - - false - - - - - - - 1.000000000000000 - - - 128.000000000000000 - - - 8.000000000000000 - - - 0 - - - 1.000000000000000 - - - 4.000000000000000 - - - false - - - - - - - Radius - - - - - - - Threshold - - - - - - - 0.000000000000000 - - - 1.000000000000000 - - - 0.900000000000000 - - - 2 - - - 0.050000000000000 - - - 0.100000000000000 - - - false - - - - - - - - - - Motion blur - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Factror - - - - - - - Steps - - - - - - - 0.000000000000000 - - - 10000.000000000000000 - - - 1.000000000000000 - - - 1 - - - 0.100000000000000 - - - 1.000000000000000 - - - false - - - - - - - 1.000000000000000 - - - 128.000000000000000 - - - 8.000000000000000 - - - 0 - - - 1.000000000000000 - - - 4.000000000000000 - - - false - - - - - - - - - - Eye accomodation - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Time - - - - - - - Max speed - - - - - - - 0.000000000000000 - - - 256.000000000000000 - - - 32.000000000000000 - - - true - - - - - - - 0.010000000000000 - - - 1.000000000000000 - - - 0.100000000000000 - - - 3 - - - 0.100000000000000 - - - 1.000000000000000 - - - true - - - - - - - - - - Depth of field - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Diaphragm - - - - - - - Max speed - - - - - - - 0.100000000000000 - - - 1024.000000000000000 - - - 8.000000000000000 - - - true - - - - - - - 0.010000000000000 - - - 10.000000000000000 - - - 0.100000000000000 - - - 2 - - - 0.100000000000000 - - - 1.000000000000000 - - - true - - - - - - - Focus - - - - - - - 0.100000000000000 - - - 1000.000000000000000 - - - 1.000000000000000 - - - true - - - 999999.000000000000000 - - - - - - - Auto focus - - - - - - - - - - Reflections - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Blur - - - - - - - - - - SSAO - - - true - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Time - - - - - - - 0.000000000000000 - - - 16.000000000000000 - - - 5.000000000000000 - - - 0 - - - 1.000000000000000 - - - 4.000000000000000 - - - false - - - - + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Shadows + + + true + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Shadowmap size + + + + + + + 16.000000000000000 + + + 2048.000000000000000 + + + 512.000000000000000 + + + 0 + + + 16.000000000000000 + + + 512.000000000000000 + + + true + + + + + + + Soft + + + true + + + + + + + + + + Bloom + + + true + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Factror + + + + + + + 0.000000000000000 + + + 100.000000000000000 + + + 1.000000000000000 + + + 1 + + + 0.100000000000000 + + + 1.000000000000000 + + + false + + + + + + + 1.000000000000000 + + + 128.000000000000000 + + + 8.000000000000000 + + + 0 + + + 1.000000000000000 + + + 4.000000000000000 + + + false + + + + + + + Radius + + + + + + + Threshold + + + + + + + 0.000000000000000 + + + 1.000000000000000 + + + 0.900000000000000 + + + 2 + + + 0.050000000000000 + + + 0.100000000000000 + + + false + + + + + + + + + + Motion blur + + + true + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Factror + + + + + + + Steps + + + + + + + 0.000000000000000 + + + 10000.000000000000000 + + + 1.000000000000000 + + + 1 + + + 0.100000000000000 + + + 1.000000000000000 + + + false + + + + + + + 1.000000000000000 + + + 128.000000000000000 + + + 8.000000000000000 + + + 0 + + + 1.000000000000000 + + + 4.000000000000000 + + + false + + + + + + + + + + Eye accomodation + + + true + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Time + + + + + + + Max speed + + + + + + + 0.000000000000000 + + + 256.000000000000000 + + + 32.000000000000000 + + + true + + + + + + + 0.010000000000000 + + + 1.000000000000000 + + + 0.100000000000000 + + + 3 + + + 0.100000000000000 + + + 1.000000000000000 + + + true + + + + + + + + + + Depth of field + + + true + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Diaphragm + + + + + + + Max speed + + + + + + + 0.100000000000000 + + + 1024.000000000000000 + + + 8.000000000000000 + + + true + + + + + + + 0.010000000000000 + + + 10.000000000000000 + + + 0.100000000000000 + + + 2 + + + 0.100000000000000 + + + 1.000000000000000 + + + true + + + + + + + Focus + + + + + + + 0.100000000000000 + + + 1000.000000000000000 + + + 1.000000000000000 + + + true + + + 999999.000000000000000 + + + + + + + Auto focus + + + + + + + + + + Reflections + + + true + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Blur + + + + + + + + + + SSAO + + + true + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Time + + + + + + + 0.000000000000000 + + + 16.000000000000000 + + + 5.000000000000000 + + + 0 + + + 1.000000000000000 + + + 4.000000000000000 + + + false + + + + + + + + + + Qt::Vertical + + + + 20 + 1 + + + + + + @@ -999,20 +1046,54 @@ - - - - - - Qt::Vertical + + + QFrame::NoFrame - - - 20 - 1 - + + true - + + + + 0 + 0 + 333 + 853 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + Qt::Vertical + + + + 20 + 834 + + + + + + + @@ -1038,40 +1119,49 @@ - - - - 0 - 0 - + + + Qt::Horizontal - - - - - - Objects - - - - - - QAbstractItemView::NoEditTriggers - - - QAbstractItemView::ScrollPerPixel - - - true - - - - Name + + + + 0 + 0 + + + + + + Objects + + + + + + Qt::ActionsContextMenu - - - - + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::ExtendedSelection + + + QAbstractItemView::ScrollPerPixel + + + true + + + + Name + + + + + + @@ -1098,7 +1188,7 @@ 0 0 1125 - 21 + 24 @@ -1204,7 +1294,7 @@ GLWidget QWidget -
glwidget.h
+
glwidget.h
1
diff --git a/qglview/renderer_deferred_shading.cpp b/qglview/renderer_deferred_shading.cpp index bb094fd..a6988a6 100644 --- a/qglview/renderer_deferred_shading.cpp +++ b/qglview/renderer_deferred_shading.cpp @@ -80,10 +80,10 @@ void RendererDeferredShading::renderScene() { QMatrix4x4 vc_proji; vc_proji.perspective(90., 1., view.camera()->depthStart(), view.camera()->depthEnd()); vc_proji = vc_proji.inverted(); - corner_dirs[0] = (mproji * QVector4D( 1, 1, 0, 1)); - corner_dirs[1] = (mproji * QVector4D(-1, 1, 0, 1)); - corner_dirs[2] = (mproji * QVector4D(-1, -1, 0, 1)); - corner_dirs[3] = (mproji * QVector4D( 1, -1, 0, 1)); + corner_dirs[0] = (mproji * QVector4D(-1, -1, 0, 1)); + corner_dirs[1] = (mproji * QVector4D( 1, -1, 0, 1)); + corner_dirs[2] = (mproji * QVector4D(-1, 1, 0, 1)); + corner_dirs[3] = (mproji * QVector4D( 1, 1, 0, 1)); //qDebug() << corner_dirs[0] << corner_dirs[1] << corner_dirs[2] << corner_dirs[3]; fbo_g.bind(); int buffs[] = {0, 1, 2, 3, 4}; @@ -545,7 +545,7 @@ void RendererDeferredShading::reloadShaders() { for (int i = 0; i < shaders.size(); ++i) { QOpenGLShaderProgram * p(*(shaders[i].second)); if (!p) p = new QOpenGLShaderProgram(view.context()); - loadShaders(p, shaders[i].first, "://shaders"); + loadShaders(p, shaders[i].first, "shaders"); *(shaders[i].second) = p; } } diff --git a/qglview/renderer_simple.cpp b/qglview/renderer_simple.cpp index d73eff7..67e5b58 100644 --- a/qglview/renderer_simple.cpp +++ b/qglview/renderer_simple.cpp @@ -49,16 +49,17 @@ void RendererSimple::resizeFBO(int w, int h) { void RendererSimple::renderScene() { int passes = (view.lightsCount() - 1) / 8 + 1; //QMatrix4x4 pm = getGLMatrix(GL_PROJECTION_MATRIX), mvm = getGLMatrix(GL_MODELVIEW_MATRIX), pmvm = pm * mvm, lpm, lmvm, lpmvm; - glSetCapEnabled(GL_MULTISAMPLE, view.isFeatureEnabled(QGLView::qglMSAA)); + //glSetCapEnabled(GL_MULTISAMPLE, view.isFeatureEnabled(QGLView::qglMSAA)); if (passes < 1) passes = 1; //glEnable(GL_FOG); - if (view.isFeatureEnabled(QGLView::qglFXAA)) fbo.bind(); + //if (view.isFeatureEnabled(QGLView::qglFXAA)) fbo.bind(); //glEnable(GL_TEXTURE_2D); - if (passes > 1) { + if (passes > 1 || view.isFeatureEnabled(QGLView::qglFXAA)) { fbo.bind(); fbo.setWriteBuffer(0); glClearFramebuffer(); - } + } else + glSetCapEnabled(GL_MULTISAMPLE, view.isFeatureEnabled(QGLView::qglMSAA)); glEnable(GL_RESCALE_NORMAL); for (int l = 0; l < passes; ++l) { if (passes > 1) fbo.setWriteBuffer(1); diff --git a/qglview/shaders/bloom_pass_0.vert b/qglview/shaders/bloom_pass_0.vert index 6bc001e..964e691 100644 --- a/qglview/shaders/bloom_pass_0.vert +++ b/qglview/shaders/bloom_pass_0.vert @@ -2,5 +2,5 @@ void main(void) { qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); + gl_Position = vec4(qgl_Vertex,1); } diff --git a/qglview/shaders/bloom_pass_1.vert b/qglview/shaders/bloom_pass_1.vert index 6bc001e..964e691 100644 --- a/qglview/shaders/bloom_pass_1.vert +++ b/qglview/shaders/bloom_pass_1.vert @@ -2,5 +2,5 @@ void main(void) { qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); + gl_Position = vec4(qgl_Vertex,1); } diff --git a/qglview/shaders/dof.vert b/qglview/shaders/dof.vert index 6bc001e..964e691 100644 --- a/qglview/shaders/dof.vert +++ b/qglview/shaders/dof.vert @@ -2,5 +2,5 @@ void main(void) { qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); + gl_Position = vec4(qgl_Vertex,1); } diff --git a/qglview/shaders/dsl_pass_1.frag b/qglview/shaders/dsl_pass_1.frag index e2aaf74..e50e7f0 100644 --- a/qglview/shaders/dsl_pass_1.frag +++ b/qglview/shaders/dsl_pass_1.frag @@ -120,7 +120,7 @@ void main(void) { pos.w = 1; pos.xyz = view_dir * z; - pos.z = -pos.z; + //pos.z = -pos.z; //pos.z = posz; //pos.xyz += n * height; @@ -142,8 +142,8 @@ void main(void) { // calcLight(0, n, v, v2); qgl_FragData[0] = vec4(max(vec3(0), li * dc + si * v2.rgb + v3.rgb + texelFetch(t_pp, tc, 0).rgb), v0.w); - //qgl_FragData[0].rgb = vec3(-z); - //qgl_FragData[0].rgb = li + vec3(texelFetch(t_pp, tc, 0).xyz); + //qgl_FragData[0].rgb = vec3(length(view_pos.xyz - qgl_Light[1].position.xyz)/3); + //qgl_FragData[0].rgb = vec3(view_pos.xyz); //shd = shd - shp.w; /*vec3 fp = pos.xyz;// * lpos.w; diff --git a/qglview/shaders/dsl_pass_1.vert b/qglview/shaders/dsl_pass_1.vert index 30d914a..cd199ac 100644 --- a/qglview/shaders/dsl_pass_1.vert +++ b/qglview/shaders/dsl_pass_1.vert @@ -5,10 +5,12 @@ out vec3 view_dir; out vec4 view_pos; void main(void) { - view_dir = view_corner / view_corner.z; + //view_dir = vec3(0.8); view_pos = vec4(qgl_ModelViewMatrix * vec4(qgl_Vertex.xy, 1, 1)); view_pos /= view_pos.w; + view_dir = vec3(view_corner.xyz);// / view_corner.z; qgl_FragTexture = qgl_Texture; qgl_FragColor = qgl_Color; gl_Position = qgl_ftransform(); + //gl_Position = vec4(qgl_Vertex,1); } diff --git a/qglview/shaders/motion_blur.vert b/qglview/shaders/motion_blur.vert index 6bc001e..964e691 100644 --- a/qglview/shaders/motion_blur.vert +++ b/qglview/shaders/motion_blur.vert @@ -2,5 +2,5 @@ void main(void) { qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); + gl_Position = vec4(qgl_Vertex,1); } diff --git a/qglview/shaders/selection_halo.frag b/qglview/shaders/selection_halo.frag index d95f2e3..7ba43cc 100644 --- a/qglview/shaders/selection_halo.frag +++ b/qglview/shaders/selection_halo.frag @@ -16,5 +16,6 @@ void main(void) { float vm = step(1e-3, (d0 * 25.) * (d1 * 25.) * (d2 * 255.) * (d3 * 255.)); float v = mix(vs - vm, vs - vm - vm + 1, fill); //qgl_FragData[0] = vec4(1,0,0,0.5);//vec4(color.rgb, v * color.a); - qgl_FragData[0] = vec4(color.bgr, v * color.a); + gl_FragColor = v*vec4(color.bgr, v * color.a); + //qgl_FragData[0] = vec4(1); } diff --git a/qglview/shaders/selection_halo.vert b/qglview/shaders/selection_halo.vert index 6bc001e..779a882 100644 --- a/qglview/shaders/selection_halo.vert +++ b/qglview/shaders/selection_halo.vert @@ -2,5 +2,6 @@ void main(void) { qgl_FragTexture = qgl_Texture; + qgl_FragColor = qgl_Color; gl_Position = qgl_ftransform(); } diff --git a/qglview/shaders/ssr.vert b/qglview/shaders/ssr.vert index 0e2d5fe..5f1b671 100644 --- a/qglview/shaders/ssr.vert +++ b/qglview/shaders/ssr.vert @@ -6,5 +6,5 @@ out vec3 view_dir; void main(void) { view_dir = view_corner / view_corner.z; qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); + gl_Position = vec4(qgl_Vertex,1); } diff --git a/qglview/shaders/ssr_blur.vert b/qglview/shaders/ssr_blur.vert index 6bc001e..964e691 100644 --- a/qglview/shaders/ssr_blur.vert +++ b/qglview/shaders/ssr_blur.vert @@ -2,5 +2,5 @@ void main(void) { qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); + gl_Position = vec4(qgl_Vertex,1); } diff --git a/qglview/shaders/ssr_merge.vert b/qglview/shaders/ssr_merge.vert index 6bc001e..964e691 100644 --- a/qglview/shaders/ssr_merge.vert +++ b/qglview/shaders/ssr_merge.vert @@ -2,5 +2,5 @@ void main(void) { qgl_FragTexture = qgl_Texture; - gl_Position = qgl_ftransform(); + gl_Position = vec4(qgl_Vertex,1); }