version 1.2.0
fixed framebuffer size feature
This commit is contained in:
@@ -98,6 +98,8 @@ Renderer::Renderer(QGLView * view_)
|
||||
shader_files[srShadowConePass] = "shadow.glsl";
|
||||
shader_files[srShadowOmniPass] = "shadow.glsl";
|
||||
|
||||
shader_files[srRescale] = "rescale.glsl";
|
||||
|
||||
shader_defines[srGeometrySolidPass] << "SOLID";
|
||||
shader_defines[srLightSpotPass] << "SPOT";
|
||||
shader_defines[srShadowOmniPass] << "OMNI";
|
||||
@@ -136,7 +138,7 @@ void Renderer::init(int width, int height) {
|
||||
depth_maps_cone.reinit();
|
||||
depth_maps_omni.reinit();
|
||||
resize(width, height);
|
||||
rend_mat.init(width, height);
|
||||
rend_mat.init(256, 256);
|
||||
rend_service.init(width, height);
|
||||
rend_selection.init(width, height);
|
||||
tone_proc.init();
|
||||
@@ -151,7 +153,7 @@ void Renderer::init(int width, int height) {
|
||||
|
||||
|
||||
void Renderer::resize(int width, int height) {
|
||||
rend_mat.resize(width, height);
|
||||
rend_mat.resize(256, 256);
|
||||
rend_service.resize(width, height);
|
||||
rend_selection.resize(width, height);
|
||||
fbo_ds.resize(width, height);
|
||||
@@ -244,6 +246,9 @@ void Renderer::initShaders() {
|
||||
prog->setUniformValue("tex_0", 0);
|
||||
prog->setUniformValue("tex_sum", 1);
|
||||
}
|
||||
if (bindShader(srRescale, &prog)) {
|
||||
prog->setUniformValue("tex_0", 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -351,8 +356,8 @@ void Renderer::renderLight(int first_wr_buff, bool clear_only) {
|
||||
glClearFramebuffer(back, false);
|
||||
back = QColor(0, 0, 0, 0);
|
||||
if (clear_only) continue;
|
||||
setUniformCamera(prog, cam);
|
||||
setUniformViewCorners(prog, cam);
|
||||
setUniformCamera(prog, cam, true, fbo_ds.size());
|
||||
setUniformViewCorners(prog, cam, fbo_ds.size());
|
||||
prog->setUniformValue("lights_start", lights_start[pass.second]);
|
||||
prog->setUniformValue("lights_count", (int)cur_lights[pass.second].size());
|
||||
prog->setUniformValue("fog_color", color2vector(view->fogColor()) / 2.);
|
||||
@@ -571,7 +576,7 @@ void Renderer::renderScene() {
|
||||
glEnableDepth();
|
||||
glClearFramebuffer();
|
||||
if (bindShader(srGeometrySolidPass, &prog)) {
|
||||
setUniformCamera(prog, cam);
|
||||
setUniformCamera(prog, cam, true, fbo_ds.size());
|
||||
textures_empty.bind(f, tarEmpty);
|
||||
textures_maps.bind(f, tarMaps);
|
||||
prog->setUniformValue("out_index_normal", dbrNormalZSolid);
|
||||
@@ -600,7 +605,7 @@ void Renderer::renderScene() {
|
||||
glClearFramebuffer(Qt::black, false);
|
||||
fbo_ds.setWriteBuffers();
|
||||
if (bindShader(srGeometryTransparentPass, &prog)) {
|
||||
setUniformCamera(prog, cam);
|
||||
setUniformCamera(prog, cam, true, fbo_ds.size());
|
||||
textures_empty.bind(f, tarEmpty);
|
||||
textures_maps.bind(f, tarMaps);
|
||||
prog->setUniformValue("out_index_normal", dbrNormalZ);
|
||||
@@ -672,6 +677,7 @@ void Renderer::renderScene() {
|
||||
}
|
||||
|
||||
fbo_out.release();
|
||||
glViewport(0, 0, view->pixelWidth(), view->pixelHeight());
|
||||
|
||||
/// apply hovers and selection frame
|
||||
if (edit_mode) {
|
||||
@@ -680,7 +686,14 @@ void Renderer::renderScene() {
|
||||
rend_service.renderService();
|
||||
} else {
|
||||
phase.begin("blit to screen");
|
||||
fbo_out.blit(cur_write_plane, 0, 0, fbo_out.rect(), QRect(QPoint(), view->pixelSize()));
|
||||
if (fbo_out.rect() == view->pixelRect()) {
|
||||
fbo_out.blit(cur_write_plane, 0, 0, fbo_out.rect(), view->pixelRect());
|
||||
} else {
|
||||
if (bindShader(srRescale, &prog)) {
|
||||
fbo_out.bindColorTexture(cur_write_plane, 0);
|
||||
renderQuad(prog, quad);
|
||||
}
|
||||
}
|
||||
}
|
||||
phase.end();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user