git-svn-id: svn://db.shs.com.ru/libs@54 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -34,7 +34,7 @@ fbo_g(5, true, GL_RGBA16F), fbo_out(3, false, GL_RGB16F), fbo_hsmall(1, false, G
|
||||
<< ShaderPair("shadow", &shader_shadow);
|
||||
for (int i = 0; i < shaders.size(); ++i)
|
||||
*(shaders[i].second) = 0;
|
||||
lights_per_pass = 2;
|
||||
lights_per_pass = 8;
|
||||
exposure_ = 1.;
|
||||
df = new QWidget();
|
||||
df->setLayout(new QBoxLayout(QBoxLayout::TopToBottom));
|
||||
@@ -64,7 +64,8 @@ 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;
|
||||
QMatrix4x4 mviewi = rp.view_matrix_i;
|
||||
QMatrix4x4 mviewproji = (mview * mproj).inverted();
|
||||
rp.prev_proj_matrix = prev_proj;
|
||||
rp.prev_view_matrix = prev_view;
|
||||
corner_dirs[0] = (QVector4D(-1, -1, 1, 1) * rp.viewproj_matrix).normalized();
|
||||
@@ -106,8 +107,8 @@ void RendererDeferredShading::renderScene() {
|
||||
//glReleaseShaders();
|
||||
fbo_g.release();
|
||||
|
||||
shader_shadow->bind();
|
||||
if (view.isFeatureEnabled(QGLView::qglShadowsEnabled)) {
|
||||
shader_shadow->bind();
|
||||
int sms = view.feature(QGLView::qglShadowsMapSize).toInt();
|
||||
glDisable(GL_TEXTURE_1D);
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
@@ -126,10 +127,10 @@ void RendererDeferredShading::renderScene() {
|
||||
if (l->light_type == Light::Omni) continue;
|
||||
l->shadow_map.resize(sms, sms);
|
||||
l->shadow_map.bind();
|
||||
l->shadow_map.setWriteBuffer(0);
|
||||
glClearFramebuffer();
|
||||
//glClear(GL_DEPTH_BUFFER_BIT);
|
||||
renderShadow(l, shader_shadow, mprojviewi);
|
||||
//l->shadow_map.setWriteBuffer(0);
|
||||
//glClearFramebuffer();
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
renderShadow(l, shader_shadow, mviewi);
|
||||
l->shadow_map.release();
|
||||
}
|
||||
}
|
||||
@@ -153,6 +154,8 @@ void RendererDeferredShading::renderScene() {
|
||||
shader_ds_1->setUniformValue("td", 5);
|
||||
shader_ds_1->setUniformValue("back_color", view.backColor());
|
||||
shader_ds_1->setUniformValue("mat_proji", mproji);
|
||||
shader_ds_1->setUniformValue("mat_viewi", mviewi);
|
||||
shader_ds_1->setUniformValue("mat_viewproji", mviewproji);
|
||||
shader_ds_1->setUniformValue("dt", QVector2D(1. / view.viewport()->width(), 1. / view.viewport()->height()));
|
||||
rp.setUniform(shader_ds_1);
|
||||
fbo_g.bindColorTextures();
|
||||
@@ -175,11 +178,7 @@ void RendererDeferredShading::renderScene() {
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri));
|
||||
fbo_out.setWriteBuffer(wi);
|
||||
setupDSLights(l, mview);
|
||||
//shader_ds_1->setUniformValue("lightsCount", cplc);
|
||||
glDrawQuad(shader_ds_1);
|
||||
//renderObjects(GLObjectBase::Solid, l, 0, true, true, view.isFogEnabled());
|
||||
//renderObjects(GLObjectBase::Transparent, l, 0, true, true, view.isFogEnabled());
|
||||
//glFinish();
|
||||
//break;
|
||||
}
|
||||
//fbo_out.release();
|
||||
@@ -365,7 +364,10 @@ 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.colorTexture());
|
||||
glBindTexture(GL_TEXTURE_2D, lv.back()->shadow_map.depthTexture());
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
|
||||
}
|
||||
amb_light.setName("null");
|
||||
for (int i = light_end; i < lmax; ++i)
|
||||
|
||||
Reference in New Issue
Block a user