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