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

This commit is contained in:
2019-12-03 14:24:40 +00:00
parent c38678056d
commit b1e1ad4aea
8 changed files with 54 additions and 43 deletions

View File

@@ -46,7 +46,7 @@ Renderer::Renderer(QGLView * view_): RendererBase(view_),
shader_files[srServiceFrame] = "service_frame.glsl";
shader_files[srGeometryPass ] = "ds_geom.glsl";
shader_files[srLightOmniPass] = "ds_light.glsl"; shader_defines[srLightOmniPass] << "FIRST_PASS";
shader_files[srLightOmniPass] = "ds_light.glsl";
shader_files[srLightSpotPass] = "ds_light.glsl"; shader_defines[srLightSpotPass] << "SPOT";
shader_files[srFinalPass ] = "ds_final.glsl";
@@ -133,13 +133,15 @@ void Renderer::initShaders() {
initUniformBuffer(shaders.value(srLightSpotPass), &buffer_lights , bpLightParameters, "QGLLightParameterData");
initUniformBuffer(shaders.value(srLightSpotPass), &buffer_lights_pos, bpLightPositions , "QGLLightPositionData" );
ShaderRole roles[] = {srLightOmniPass, srLightSpotPass};
QOpenGLShaderProgram * prog = 0;
for (int p = 0; p < 2; ++p) {
QOpenGLShaderProgram * prog = 0;
if (!bindShader(roles[p], &prog)) continue;
for (int i = 0; i < 5; ++i)
prog->setUniformValue(QString("tex_%1").arg(i).toLatin1().constData(), i);
prog->setUniformValue("tex_d", 5);
prog->setUniformValue("tex_sum", 7);
}
if (bindShader(srFinalPass, &prog)) {
for (int i = 0; i < 5; ++i)
prog->setUniformValue(QString("tex_%1").arg(i).toLatin1().constData(), i);
}
}
@@ -259,21 +261,25 @@ void Renderer::renderScene() {
setUniformViewCorners(prog, cam);
prog->setUniformValue("lights_start", lights_start[pass.second]);
prog->setUniformValue("lights_count", ll[pass.second].size());
fbo_out.setWriteBuffer(wi);
fbo_out.bindColorTexture(ri, 7);
fbo_out.setWriteBuffer(1 + pass.second);
glClearFramebuffer(Qt::black, false);
renderQuad(prog, quad, cam);
piSwap(ri, wi);
}
}
if (bindShader(srFinalPass, &prog)) {
fbo_out.bindColorTexture(1, 0);
fbo_out.bindColorTexture(2, 1);
fbo_out.setWriteBuffer(0);
renderQuad(prog, quad);
}
fbo_out.release();
/// apply hovers and selection frame
if (edit_mode) {
rend_selection.drawSelection(fbo_out, ri);
rend_selection.drawSelection(fbo_out, 0);
rend_service.renderService();
} else {
fbo_out.blit(ri, 0, 0, fbo_out.rect(), QRect(QPoint(), view->size()));
fbo_out.blit(0, 0, 0, fbo_out.rect(), QRect(QPoint(), view->size()));
}
}