git-svn-id: svn://db.shs.com.ru/libs@51 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user