diff --git a/src/GafferCycles/IECoreCyclesPreview/CameraAlgo.cpp b/src/GafferCycles/IECoreCyclesPreview/CameraAlgo.cpp index 4b0fe24b701..5497c4ea4e5 100644 --- a/src/GafferCycles/IECoreCyclesPreview/CameraAlgo.cpp +++ b/src/GafferCycles/IECoreCyclesPreview/CameraAlgo.cpp @@ -103,7 +103,18 @@ ccl::Camera *convertCommon( const IECoreScene::Camera *camera, const std::string const Imath::V2f &clippingPlanes = camera->getClippingPlanes(); ccam->nearclip = clippingPlanes.x; ccam->farclip = clippingPlanes.y; - + + // Crop window + if ( camera->hasCropWindow() ) + { + const Imath::Box2f &cropWindow = camera->getCropWindow(); + ccam->border.left = cropWindow.min.x; + ccam->border.right = cropWindow.max.x; + ccam->border.top = cropWindow.max.y; + ccam->border.bottom = cropWindow.min.y; + ccam->border.clamp(); + } + // Shutter TODO: Need to see if this is correct or not, cycles also has a shutter curve... const Imath::V2f &shutter = camera->getShutter(); if ((shutter.x > 0.0) && (shutter.y > 0.0)) diff --git a/src/GafferCycles/IECoreCyclesPreview/Renderer.cpp b/src/GafferCycles/IECoreCyclesPreview/Renderer.cpp index d986cafb55d..b73ac5e941d 100644 --- a/src/GafferCycles/IECoreCyclesPreview/Renderer.cpp +++ b/src/GafferCycles/IECoreCyclesPreview/Renderer.cpp @@ -389,8 +389,8 @@ class CyclesOutput : public IECore::RefCounted V2i( camera->width - 1, camera->height - 1 ) ); Box2i dataWindow( - V2i( 0, 0 ), - V2i( camera->width - 1, camera->height - 1 ) + V2i( (int)(camera->border.left * (float)camera->width), (int)(camera->border.bottom * (float)camera->height) ), + V2i( (int)(camera->border.right * (float)camera->width) - 1, (int)(camera->border.top * (float)camera->height - 1 ) ) ); vector channelNames; @@ -514,8 +514,8 @@ class RenderCallback : public IECore::RefCounted V2i( camera->width - 1, camera->height - 1 ) ); Box2i dataWindow( - V2i( 0, 0 ), - V2i( camera->width - 1, camera->height - 1 ) + V2i( (int)(camera->border.left * (float)camera->width), (int)(camera->border.bottom * (float)camera->height) ), + V2i( (int)(camera->border.right * (float)camera->width) - 1, (int)(camera->border.top * (float)camera->height - 1 ) ) ); //CompoundDataPtr parameters = new CompoundData(); @@ -633,8 +633,8 @@ class RenderCallback : public IECore::RefCounted IECore::msg( IECore::Msg::Warning, "CyclesRenderer::CyclesOutput", "No interactive outputs to render to." ); return; } - const int x = rtile.x - m_session->tile_manager.params.full_x; - const int y = rtile.y - m_session->tile_manager.params.full_y; + const int x = rtile.x; + const int y = rtile.y; const int w = rtile.w; const int h = rtile.h;