Fixed border rendering for Hydra render engines (Hydra Storm). #113376
|
@ -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<GPURenderTaskDelegate *>(
|
||||
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();
|
||||
|
|
Loading…
Reference in New Issue