diff --git a/qglview/glshaders.cpp b/qglview/glshaders.cpp index 151e77b..fb7ef85 100644 --- a/qglview/glshaders.cpp +++ b/qglview/glshaders.cpp @@ -20,7 +20,7 @@ #include "qglview.h" const char qgl_vertex_head[] = - "in vec3 _qgl_Vertex;\n" + //"in vec3 _qgl_Vertex;\n" "in vec3 qgl_Normal;\n" "in vec3 qgl_Tangent;\n" "in vec3 qgl_Bitangent;\n" @@ -28,8 +28,9 @@ const char qgl_vertex_head[] = "in vec4 qgl_Color;\n" "out vec2 qgl_FragTexture;\n" "out vec4 qgl_FragColor;\n" - "vec4 qgl_Vertex = vec4(_qgl_Vertex, 1.);\n" - "vec4 qgl_ftransform() {return qgl_ModelViewProjectionMatrix * qgl_Vertex;}\n"; + //"vec4 qgl_Vertex = vec4(_qgl_Vertex, 1);\n" + "in vec3 qgl_Vertex;\n" + "vec4 qgl_ftransform() {return qgl_ModelViewProjectionMatrix * vec4(qgl_Vertex, 1);}\n"; const char qgl_fragment_head[] = "in vec2 qgl_FragTexture;\n" diff --git a/qglview/gltypes.cpp b/qglview/gltypes.cpp index 98b2dcc..59441d1 100644 --- a/qglview/gltypes.cpp +++ b/qglview/gltypes.cpp @@ -53,51 +53,40 @@ 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); - int loc = prog ? prog->attributeLocation("qgl_Color") : 0, - locv = prog ? prog->attributeLocation("qgl_Vertex") : 0, - loct = prog ? prog->attributeLocation("qgl_Texture") : 0, - locc = prog ? prog->attributeLocation("view_corner") : 0; + 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) { + } + //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); - if (prog) { - if (corner_dirs) - prog->setAttributeValue(locc, corner_dirs[0]); - glFuncs->glVertexAttrib2f(loct, 0.f, 0.f); - glFuncs->glVertexAttrib2f(locv, x, y); - } - glTexCoord2f(0.f, 0.f); - glVertex2f(x, y); - if (prog) { - if (corner_dirs) - prog->setAttributeValue(locc, corner_dirs[1]); - glFuncs->glVertexAttrib2f(loct, 1.f, 0.f); - glFuncs->glVertexAttrib2f(locv, x + w, y); - } - glTexCoord2f(1.f, 0.f); - glVertex2f(x + w, y); - if (prog) { - if (corner_dirs) - prog->setAttributeValue(locc, corner_dirs[2]); - glFuncs->glVertexAttrib2f(loct, 1.f, 1.f); - glFuncs->glVertexAttrib2f(locv, x + w, y + h); - } - glTexCoord2f(1.f, 1.f); - glVertex2f(x + w, y + h); - if (prog) { - if (corner_dirs) - prog->setAttributeValue(locc, corner_dirs[3]); - glFuncs->glVertexAttrib2f(loct, 0.f, 1.f); - glFuncs->glVertexAttrib2f(locv, x, y + h); - } - glTexCoord2f(0.f, 1.f); - glVertex2f(x, y + h); + 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/glvbo.cpp b/qglview/glvbo.cpp index 83e031b..7be032c 100644 --- a/qglview/glvbo.cpp +++ b/qglview/glvbo.cpp @@ -152,7 +152,7 @@ void GLVBO::draw(GLenum type, QOpenGLShaderProgram * prog, bool simplest) { glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_COLOR_ARRAY); - int loc = prog->attributeLocation("_qgl_Vertex"); + int loc = prog->attributeLocation("qgl_Vertex"); glEnableVertexAttribArray(loc); glVertexAttribPointer(loc, 3, GL_FLOAT, 0, 0, 0); locs << loc; diff --git a/qglview/qglview_test/qglview_window.cpp b/qglview/qglview_test/qglview_window.cpp index b871b9b..401a37f 100644 --- a/qglview/qglview_test/qglview_window.cpp +++ b/qglview/qglview_test/qglview_window.cpp @@ -47,7 +47,7 @@ QGLViewWindow::QGLViewWindow(QWidget * parent): QMainWindow(parent), Ui::QGLView view->view()->setHoverHaloFillAlpha(0.); view->view()->setSelectionHaloFillAlpha(0.); view->view()->setBackColor(Qt::lightGray); - view->view()->setDepthStart(0.001); + view->view()->setDepthStart(0.1); view->view()->setDepthEnd(100000.); spinFOV->setValue(view->view()->FOV()); diff --git a/qglview/renderer_simple.cpp b/qglview/renderer_simple.cpp index 164af78..00f8645 100644 --- a/qglview/renderer_simple.cpp +++ b/qglview/renderer_simple.cpp @@ -63,37 +63,19 @@ void RendererSimple::renderScene() { for (int l = 0; l < passes; ++l) { if (passes > 1) fbo.setWriteBuffer(1); if (l == 0) { - glClearFramebuffer(view.backColor()); glEnableDepth(); + glClearFramebuffer(view.backColor()); } else { - glClearFramebuffer(Qt::black, false); glEnable(GL_DEPTH_TEST); glDepthMask(GL_FALSE); glDepthFunc(GL_EQUAL); + glClearFramebuffer(Qt::black, false); } //view.camera().apply(view.aspect); rp.cam_offset_matrix = view.camera()->offsetMatrix(); rp.prepare(); setupLights(l, 8); - - - /*fbo_c.bind(); - glClearFramebuffer(); - //shader->bind(); /// WARNING - renderObjects(GLObjectBase::Solid, l, 0, true, view.isLightEnabled(), view.isFogEnabled()); - //shader->release(); /// WARNING - if (QRect(QPoint(), fbo_c.size()).contains(mpos)) { - //qDebug() << mpos; - GLfloat data[4] = {0, 0, 0, 0}; - glReadPixels(mpos.x(), fbo_c.height() - mpos.y(), 1, 1, GL_RGBA, GL_FLOAT, data); - //qDebug() << QVector3D(data[0], data[1], data[2]); - } - fbo_c.release();*/ - //qDebug() << rp.viewproj_matrix << (getGLMatrix(GL_PROJECTION_MATRIX)*getGLMatrix(GL_MODELVIEW_MATRIX)); renderObjects(GLObjectBase::Solid, l, nullptr, true, view.isLightEnabled(), view.isFogEnabled()); - - - //renderObjects(GLObjectBase::Solid, l, 0, true, true, view.isFogEnabled()); renderObjects(GLObjectBase::Transparent, l, nullptr, true, true, view.isFogEnabled()); if (passes > 1) { glSetLightEnabled(false); @@ -108,7 +90,6 @@ void RendererSimple::renderScene() { } if (view.isFeatureEnabled(QGLView::qglFXAA) || passes > 1) { fbo.release(); - //glClearFramebuffer(); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, fbo.colorTexture()); glSetLightEnabled(false); diff --git a/qglview/shaders/dsl_pass_0.vert b/qglview/shaders/dsl_pass_0.vert index ab3f806..a0df32d 100644 --- a/qglview/shaders/dsl_pass_0.vert +++ b/qglview/shaders/dsl_pass_0.vert @@ -28,7 +28,7 @@ void main(void) { qgl_FragTexture = qgl_Texture; qgl_FragColor = qgl_Color; //tp /= tp.w; - ppos = prev_ModelViewProjectioMatrix * qgl_Vertex; + ppos = prev_ModelViewProjectioMatrix * vec4(qgl_Vertex.xyz, 1); //pos.w = pos.w; //speed = tp - ppos; //speed /= (abs(speed) + 1.);