git-svn-id: svn://db.shs.com.ru/libs@51 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2015-11-30 14:45:48 +00:00
parent 8f3506b4a0
commit fc0b593329
15 changed files with 294 additions and 284 deletions

View File

@@ -157,7 +157,7 @@ void RendererDeferredShading::renderScene() {
glActiveTextureChannel(0);
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri));
if (view.isAccomodationEnabled()) {
if (view.isFeatureEnabled(QGLView::qglEyeAccomodationEnabled)) {
fbo_hsmall.bind();
fbo_hsmall.setWriteBuffer(0);
shader_small->bind();
@@ -176,8 +176,8 @@ void RendererDeferredShading::renderScene() {
if (max[2] < hcontent[i].z) max[2] = hcontent[i].z;
}
GLfloat mluma = (0.299 * max[0]) + (0.587 * max[1]) + (0.114 * max[2]);
double nexp = mluma / 16., dexp = nexp - exposure_, mestep = exposure_ * view.accomodationMaxSpeed();
dexp /= view.accomodationTime();
double nexp = mluma / 16., dexp = nexp - exposure_, mestep = exposure_ * view.feature(QGLView::qglEyeAccomodationMaxSpeed).toDouble();
dexp /= view.feature(QGLView::qglEyeAccomodationTime).toDouble();
if (dexp > 0. && dexp > mestep/4) dexp = mestep/4;
if (dexp < 0. && dexp < -mestep) dexp = -mestep;
exposure_ += dexp;
@@ -198,7 +198,7 @@ void RendererDeferredShading::renderScene() {
piSwap<int>(wi, ri);
}
if (view.isMotionBlurEnabled()) {
if (view.isFeatureEnabled(QGLView::qglMotionBlurEnabled)) {
fbo_out.setWriteBuffer(wi);
glActiveTextureChannel(1);
glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(4));
@@ -207,15 +207,15 @@ void RendererDeferredShading::renderScene() {
shader_motion_blur->setUniformValue("dt", QVector2D(1. / fbo_out.width(), 1. / fbo_out.height()));
shader_motion_blur->setUniformValue("t0", 0);
shader_motion_blur->setUniformValue("ts", 1);
shader_motion_blur->setUniformValue("factor", GLfloat(view.motionBlurFactor()));
shader_motion_blur->setUniformValue("steps", view.motionBlurSteps());
shader_motion_blur->setUniformValue("factor", GLfloat(view.feature(QGLView::qglMotionBlurFactor).toDouble()));
shader_motion_blur->setUniformValue("steps", view.feature(QGLView::qglMotionBlurSteps).toInt());
glDrawQuad(shader_motion_blur);
glActiveTextureChannel(0);
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(wi));
piSwap<int>(wi, ri);
}
if (view.isBloomEnabled()) {
if (view.isFeatureEnabled(QGLView::qglBloomEnabled)) {
fbo_out.setWriteBuffer(2);
fbo_out.setReadBuffer(ri);
glBlitFramebuffer(0, 0, fbo_out.width(), fbo_out.height(), 0, 0, fbo_out.width(), fbo_out.height(), GL_COLOR_BUFFER_BIT, GL_NEAREST);
@@ -223,7 +223,8 @@ void RendererDeferredShading::renderScene() {
fbo_out.setWriteBuffer(wi);
shader_bloom_0->bind();
shader_bloom_0->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4());
shader_bloom_0->setUniformValue("factor", GLfloat(view.bloomFactor()));
shader_bloom_0->setUniformValue("factor", GLfloat(view.feature(QGLView::qglBloomFactor).toDouble()));
shader_bloom_0->setUniformValue("threshold", GLfloat(view.feature(QGLView::qglBloomThreshold).toDouble()));
shader_bloom_0->setUniformValue("t0", 0);
glDrawQuad(shader_bloom_0);
glActiveTextureChannel(0);
@@ -231,13 +232,16 @@ void RendererDeferredShading::renderScene() {
shader_bloom_1->bind();
shader_bloom_1->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4());
shader_bloom_1->setUniformValue("dt", QVector2D(1. / fbo_out.width(), 1. / fbo_out.height()));
shader_bloom_1->setUniformValue("t0", 0);
int radius = view.bloomRadius();
int radius = view.feature(QGLView::qglBloomRadius).toInt();
int passes = qMax<int>(int(ceil(log2(radius))), 1);
int crad = 1;
for (int p = 0; p < passes; ++p) {
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri));
fbo_out.setWriteBuffer(wi);
if (p == passes - 1)
crad = piMax(1, radius - crad);
shader_bloom_1->setUniformValue("radius", crad);
glDrawQuad(shader_bloom_1);
piSwap<int>(wi, ri);
@@ -262,7 +266,7 @@ void RendererDeferredShading::renderScene() {
glReleaseShaders();
fbo_out.release();
if (view.isFXAAEnabled()) {
if (view.isFeatureEnabled(QGLView::qglFXAA)) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
shader_fxaa->bind();
@@ -272,7 +276,7 @@ void RendererDeferredShading::renderScene() {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}
glDrawQuad();
if (view.isFXAAEnabled())
if (view.isFeatureEnabled(QGLView::qglFXAA))
shader_fxaa->release();
prev_proj = mproj;
prev_view = mview;