From 9ed05d9f8886219c602e5865b0d42d54cf5964eb Mon Sep 17 00:00:00 2001 From: Bogdan Nagirniak Date: Fri, 6 Oct 2023 23:51:41 +0300 Subject: [PATCH] Fixed border rendering for Hydra render engines (Hydra Storm). --- .../blender/render/hydra/viewport_engine.cc | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/source/blender/render/hydra/viewport_engine.cc b/source/blender/render/hydra/viewport_engine.cc index 3637ee9b707..39c022637c6 100644 --- a/source/blender/render/hydra/viewport_engine.cc +++ b/source/blender/render/hydra/viewport_engine.cc @@ -113,35 +113,32 @@ ViewSettings::ViewSettings(bContext *context) } else { if (view3d->flag2 & V3D_RENDER_BORDER) { - int x = x1, y = y1; - int dx = x2 - x1, dy = y2 - y1; - - x1 = int(x + view3d->render_border.xmin * dx); - x2 = int(x + view3d->render_border.xmax * dx); - y1 = int(y + view3d->render_border.ymin * dy); - y2 = int(y + view3d->render_border.ymax * dy); + x1 = view3d->render_border.xmin * screen_width; + x2 = view3d->render_border.xmax * screen_width; + y1 = view3d->render_border.ymin * screen_height; + y2 = view3d->render_border.ymax * screen_height; } } - border = pxr::GfVec4i(x1, y1, x2 - x1, y2 - y1); + border = pxr::GfVec4i(x1, y1, x2, y2); } int ViewSettings::width() { - return border[2]; + return border[2] - border[0]; } int ViewSettings::height() { - return border[3]; + return border[3] - border[1]; } pxr::GfCamera ViewSettings::gf_camera() { return camera_data.gf_camera(pxr::GfVec4f(float(border[0]) / screen_width, float(border[1]) / screen_height, - float(border[2]) / screen_width, - float(border[3]) / screen_height)); + float(width()) / screen_width, + float(height()) / screen_height)); } DrawTexture::DrawTexture() @@ -221,10 +218,7 @@ void ViewportEngine::render() pxr::GfCamera gf_camera = view_settings.gf_camera(); free_camera_delegate_->SetCamera(gf_camera); - pxr::GfVec4d viewport(view_settings.border[0], - view_settings.border[1], - view_settings.border[2], - view_settings.border[3]); + pxr::GfVec4d viewport(0.0, 0.0, view_settings.width(), view_settings.height()); render_task_delegate_->set_viewport(viewport); if (light_tasks_delegate_) { light_tasks_delegate_->set_viewport(viewport); @@ -245,15 +239,19 @@ void ViewportEngine::render() GPUShader *shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_IMAGE); GPU_shader_bind(shader); + pxr::GfVec4d draw_viewport(view_settings.border[0], + view_settings.border[1], + view_settings.border[2], + view_settings.border[3]); GPURenderTaskDelegate *gpu_task = dynamic_cast( render_task_delegate_.get()); if (gpu_task) { - draw_texture_.draw(shader, viewport, gpu_task->aov_texture(pxr::HdAovTokens->color)); + draw_texture_.draw(shader, draw_viewport, gpu_task->aov_texture(pxr::HdAovTokens->color)); } else { draw_texture_.write_data(view_settings.width(), view_settings.height(), nullptr); render_task_delegate_->read_aov(pxr::HdAovTokens->color, draw_texture_.texture()); - draw_texture_.draw(shader, viewport); + draw_texture_.draw(shader, draw_viewport); } GPU_shader_unbind(); -- 2.30.2