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

This commit is contained in:
2015-11-30 21:45:46 +00:00
parent 36ba0a0ba7
commit 5ca76b651b
8 changed files with 42 additions and 17 deletions

View File

@@ -30,7 +30,8 @@ fbo_g(5, true, GL_RGBA16F), fbo_out(3, false, GL_RGB16F), fbo_hsmall(1, false, G
<< ShaderPair("bloom_pass_0", &shader_bloom_0)
<< ShaderPair("bloom_pass_1", &shader_bloom_1)
<< ShaderPair("fbo_add", &shader_fbo_add)
<< ShaderPair("motion_blur", &shader_motion_blur);
<< ShaderPair("motion_blur", &shader_motion_blur)
<< ShaderPair("shadow", &shader_shadow);
for (int i = 0; i < shaders.size(); ++i)
*(shaders[i].second) = 0;
lights_per_pass = 2;
@@ -63,6 +64,7 @@ void RendererDeferredShading::renderScene() {
QMatrix4x4 mproj = rp.proj_matrix;
QMatrix4x4 mproji = rp.proj_matrix_i;
QMatrix4x4 mview = rp.view_matrix;
QMatrix4x4 mprojviewi = rp.view_matrix_i * rp.proj_matrix_i;
rp.prev_proj_matrix = prev_proj;
rp.prev_view_matrix = prev_view;
corner_dirs[0] = (QVector4D(-1, -1, 1, 1) * rp.viewproj_matrix).normalized();
@@ -104,6 +106,7 @@ void RendererDeferredShading::renderScene() {
//glReleaseShaders();
fbo_g.release();
shader_shadow->bind();
if (view.isFeatureEnabled(QGLView::qglShadowsEnabled)) {
int sms = view.feature(QGLView::qglShadowsMapSize).toInt();
glDisable(GL_TEXTURE_1D);
@@ -123,8 +126,10 @@ void RendererDeferredShading::renderScene() {
if (l->light_type == Light::Omni) continue;
l->shadow_map.resize(sms, sms);
l->shadow_map.bind();
glClear(GL_DEPTH_BUFFER_BIT);
renderShadow(l);
l->shadow_map.setWriteBuffer(0);
glClearFramebuffer();
//glClear(GL_DEPTH_BUFFER_BIT);
renderShadow(l, shader_shadow, mprojviewi);
l->shadow_map.release();
}
}
@@ -360,7 +365,7 @@ void RendererDeferredShading::setupDSLights(int pass, const QMatrix4x4 & view_ma
for (int i = light_start; i < light_end; ++i) {
lv << view.lights()[i];
glActiveTextureChannel(shadow_start + i - light_start);
glBindTexture(GL_TEXTURE_2D, lv.back()->shadow_map.depthTexture());
glBindTexture(GL_TEXTURE_2D, lv.back()->shadow_map.colorTexture());
}
amb_light.setName("null");
for (int i = light_end; i < lmax; ++i)