git-svn-id: svn://db.shs.com.ru/libs@593 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
#include "qglview.h"
|
#include "qglview.h"
|
||||||
|
|
||||||
const char qgl_vertex_head[] =
|
const char qgl_vertex_head[] =
|
||||||
"in vec3 _qgl_Vertex;\n"
|
//"in vec3 _qgl_Vertex;\n"
|
||||||
"in vec3 qgl_Normal;\n"
|
"in vec3 qgl_Normal;\n"
|
||||||
"in vec3 qgl_Tangent;\n"
|
"in vec3 qgl_Tangent;\n"
|
||||||
"in vec3 qgl_Bitangent;\n"
|
"in vec3 qgl_Bitangent;\n"
|
||||||
@@ -28,8 +28,9 @@ const char qgl_vertex_head[] =
|
|||||||
"in vec4 qgl_Color;\n"
|
"in vec4 qgl_Color;\n"
|
||||||
"out vec2 qgl_FragTexture;\n"
|
"out vec2 qgl_FragTexture;\n"
|
||||||
"out vec4 qgl_FragColor;\n"
|
"out vec4 qgl_FragColor;\n"
|
||||||
"vec4 qgl_Vertex = vec4(_qgl_Vertex, 1.);\n"
|
//"vec4 qgl_Vertex = vec4(_qgl_Vertex, 1);\n"
|
||||||
"vec4 qgl_ftransform() {return qgl_ModelViewProjectionMatrix * qgl_Vertex;}\n";
|
"in vec3 qgl_Vertex;\n"
|
||||||
|
"vec4 qgl_ftransform() {return qgl_ModelViewProjectionMatrix * vec4(qgl_Vertex, 1);}\n";
|
||||||
|
|
||||||
const char qgl_fragment_head[] =
|
const char qgl_fragment_head[] =
|
||||||
"in vec2 qgl_FragTexture;\n"
|
"in vec2 qgl_FragTexture;\n"
|
||||||
|
|||||||
@@ -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) {
|
void glDrawQuad(QOpenGLShaderProgram * prog, QVector4D * corner_dirs, GLfloat x, GLfloat y, GLfloat w, GLfloat h) {
|
||||||
glResetAllTransforms();
|
glResetAllTransforms();
|
||||||
glSetPolygonMode(GL_FILL);
|
glSetPolygonMode(GL_FILL);
|
||||||
int loc = prog ? prog->attributeLocation("qgl_Color") : 0,
|
int loc = prog ? prog->attributeLocation("qgl_Color") : -1,
|
||||||
locv = prog ? prog->attributeLocation("qgl_Vertex") : 0,
|
locv = prog ? prog->attributeLocation("qgl_Vertex") : -1,
|
||||||
loct = prog ? prog->attributeLocation("qgl_Texture") : 0,
|
loct = prog ? prog->attributeLocation("qgl_Texture") : -1,
|
||||||
locc = prog ? prog->attributeLocation("view_corner") : 0;
|
locc = prog ? prog->attributeLocation("view_corner") : -1;
|
||||||
|
if (prog) {
|
||||||
|
}
|
||||||
|
//if (prog)
|
||||||
|
//qDebug() << loc << locv << loct << locc;
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
QOpenGLFunctions *glFuncs = QOpenGLContext::currentContext()->functions();
|
QOpenGLFunctions *glFuncs = QOpenGLContext::currentContext()->functions();
|
||||||
if (prog) {
|
if (prog) {
|
||||||
glFuncs->glVertexAttrib3f(loc, 1.f, 1.f, 1.f);
|
glFuncs->glVertexAttrib3f(loc, 1.f, 1.f, 1.f);
|
||||||
}
|
}
|
||||||
glColor3f(1.f, 1.f, 1.f);
|
glColor3f(1.f, 1.f, 1.f);
|
||||||
if (prog) {
|
quadProgPoint(glFuncs, prog, corner_dirs, x , y , 0.f, 0.f, locv, loct, locc, 0);
|
||||||
if (corner_dirs)
|
quadProgPoint(glFuncs, prog, corner_dirs, x+w, y , 1.f, 0.f, locv, loct, locc, 1);
|
||||||
prog->setAttributeValue(locc, corner_dirs[0]);
|
quadProgPoint(glFuncs, prog, corner_dirs, x+w, y+h, 1.f, 1.f, locv, loct, locc, 2);
|
||||||
glFuncs->glVertexAttrib2f(loct, 0.f, 0.f);
|
quadProgPoint(glFuncs, prog, corner_dirs, x , y+h, 0.f, 1.f, locv, loct, locc, 3);
|
||||||
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);
|
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ void GLVBO::draw(GLenum type, QOpenGLShaderProgram * prog, bool simplest) {
|
|||||||
glDisableClientState(GL_NORMAL_ARRAY);
|
glDisableClientState(GL_NORMAL_ARRAY);
|
||||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
glDisableClientState(GL_COLOR_ARRAY);
|
glDisableClientState(GL_COLOR_ARRAY);
|
||||||
int loc = prog->attributeLocation("_qgl_Vertex");
|
int loc = prog->attributeLocation("qgl_Vertex");
|
||||||
glEnableVertexAttribArray(loc);
|
glEnableVertexAttribArray(loc);
|
||||||
glVertexAttribPointer(loc, 3, GL_FLOAT, 0, 0, 0);
|
glVertexAttribPointer(loc, 3, GL_FLOAT, 0, 0, 0);
|
||||||
locs << loc;
|
locs << loc;
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ QGLViewWindow::QGLViewWindow(QWidget * parent): QMainWindow(parent), Ui::QGLView
|
|||||||
view->view()->setHoverHaloFillAlpha(0.);
|
view->view()->setHoverHaloFillAlpha(0.);
|
||||||
view->view()->setSelectionHaloFillAlpha(0.);
|
view->view()->setSelectionHaloFillAlpha(0.);
|
||||||
view->view()->setBackColor(Qt::lightGray);
|
view->view()->setBackColor(Qt::lightGray);
|
||||||
view->view()->setDepthStart(0.001);
|
view->view()->setDepthStart(0.1);
|
||||||
view->view()->setDepthEnd(100000.);
|
view->view()->setDepthEnd(100000.);
|
||||||
|
|
||||||
spinFOV->setValue(view->view()->FOV());
|
spinFOV->setValue(view->view()->FOV());
|
||||||
|
|||||||
@@ -63,37 +63,19 @@ void RendererSimple::renderScene() {
|
|||||||
for (int l = 0; l < passes; ++l) {
|
for (int l = 0; l < passes; ++l) {
|
||||||
if (passes > 1) fbo.setWriteBuffer(1);
|
if (passes > 1) fbo.setWriteBuffer(1);
|
||||||
if (l == 0) {
|
if (l == 0) {
|
||||||
glClearFramebuffer(view.backColor());
|
|
||||||
glEnableDepth();
|
glEnableDepth();
|
||||||
|
glClearFramebuffer(view.backColor());
|
||||||
} else {
|
} else {
|
||||||
glClearFramebuffer(Qt::black, false);
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
glDepthFunc(GL_EQUAL);
|
glDepthFunc(GL_EQUAL);
|
||||||
|
glClearFramebuffer(Qt::black, false);
|
||||||
}
|
}
|
||||||
//view.camera().apply(view.aspect);
|
//view.camera().apply(view.aspect);
|
||||||
rp.cam_offset_matrix = view.camera()->offsetMatrix();
|
rp.cam_offset_matrix = view.camera()->offsetMatrix();
|
||||||
rp.prepare();
|
rp.prepare();
|
||||||
setupLights(l, 8);
|
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, nullptr, true, view.isLightEnabled(), view.isFogEnabled());
|
||||||
|
|
||||||
|
|
||||||
//renderObjects(GLObjectBase::Solid, l, 0, true, true, view.isFogEnabled());
|
|
||||||
renderObjects(GLObjectBase::Transparent, l, nullptr, true, true, view.isFogEnabled());
|
renderObjects(GLObjectBase::Transparent, l, nullptr, true, true, view.isFogEnabled());
|
||||||
if (passes > 1) {
|
if (passes > 1) {
|
||||||
glSetLightEnabled(false);
|
glSetLightEnabled(false);
|
||||||
@@ -108,7 +90,6 @@ void RendererSimple::renderScene() {
|
|||||||
}
|
}
|
||||||
if (view.isFeatureEnabled(QGLView::qglFXAA) || passes > 1) {
|
if (view.isFeatureEnabled(QGLView::qglFXAA) || passes > 1) {
|
||||||
fbo.release();
|
fbo.release();
|
||||||
//glClearFramebuffer();
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, fbo.colorTexture());
|
glBindTexture(GL_TEXTURE_2D, fbo.colorTexture());
|
||||||
glSetLightEnabled(false);
|
glSetLightEnabled(false);
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ void main(void) {
|
|||||||
qgl_FragTexture = qgl_Texture;
|
qgl_FragTexture = qgl_Texture;
|
||||||
qgl_FragColor = qgl_Color;
|
qgl_FragColor = qgl_Color;
|
||||||
//tp /= tp.w;
|
//tp /= tp.w;
|
||||||
ppos = prev_ModelViewProjectioMatrix * qgl_Vertex;
|
ppos = prev_ModelViewProjectioMatrix * vec4(qgl_Vertex.xyz, 1);
|
||||||
//pos.w = pos.w;
|
//pos.w = pos.w;
|
||||||
//speed = tp - ppos;
|
//speed = tp - ppos;
|
||||||
//speed /= (abs(speed) + 1.);
|
//speed /= (abs(speed) + 1.);
|
||||||
|
|||||||
Reference in New Issue
Block a user