|
8 | 8 | #include "flutter/fml/logging.h" |
9 | 9 | #include "flutter/fml/trace_event.h" |
10 | 10 | #include "impeller/base/backend_cast.h" |
| 11 | +#include "impeller/geometry/rect.h" |
11 | 12 | #include "impeller/renderer/backend/metal/device_buffer_mtl.h" |
12 | 13 | #include "impeller/renderer/backend/metal/formats_mtl.h" |
13 | 14 | #include "impeller/renderer/backend/metal/pipeline_mtl.h" |
@@ -429,45 +430,28 @@ static bool Bind(PassBindingsCache& pass, |
429 | 430 | : MTLWindingCounterClockwise]; |
430 | 431 | [encoder setCullMode:ToMTLCullMode(command.cull_mode)]; |
431 | 432 | [encoder setStencilReferenceValue:command.stencil_reference]; |
432 | | - if (command.viewport.has_value()) { |
433 | | - auto v = command.viewport.value(); |
434 | | - MTLViewport viewport = { |
435 | | - .originX = v.rect.origin.x, |
436 | | - .originY = v.rect.origin.y, |
437 | | - .width = v.rect.size.width, |
438 | | - .height = v.rect.size.height, |
439 | | - .znear = v.depth_range.z_near, |
440 | | - .zfar = v.depth_range.z_far, |
441 | | - }; |
442 | | - [encoder setViewport:viewport]; |
443 | | - } else { |
444 | | - MTLViewport viewport = { |
445 | | - .originX = 0.0, |
446 | | - .originY = 0.0, |
447 | | - .width = static_cast<double>(GetRenderTargetSize().width), |
448 | | - .height = static_cast<double>(GetRenderTargetSize().height), |
449 | | - .znear = 0.0, |
450 | | - .zfar = 1.0, |
451 | | - }; |
452 | | - [encoder setViewport:viewport]; |
453 | | - } |
454 | | - if (command.scissor.has_value()) { |
455 | | - auto s = command.scissor.value(); |
456 | | - MTLScissorRect scissor = { |
457 | | - .x = static_cast<NSUInteger>(s.origin.x), |
458 | | - .y = static_cast<NSUInteger>(s.origin.y), |
459 | | - .width = static_cast<NSUInteger>(s.size.width), |
460 | | - .height = static_cast<NSUInteger>(s.size.height), |
461 | | - }; |
462 | | - [encoder setScissorRect:scissor]; |
463 | | - } else { |
464 | | - MTLScissorRect scissor = { |
465 | | - .x = 0, |
466 | | - .y = 0, |
467 | | - .width = static_cast<NSUInteger>(GetRenderTargetSize().width), |
468 | | - .height = static_cast<NSUInteger>(GetRenderTargetSize().height)}; |
469 | | - [encoder setScissorRect:scissor]; |
470 | | - } |
| 433 | + |
| 434 | + auto v = command.viewport.value_or<Viewport>( |
| 435 | + {.rect = Rect::MakeSize(Size(GetRenderTargetSize()))}); |
| 436 | + MTLViewport viewport = { |
| 437 | + .originX = v.rect.origin.x, |
| 438 | + .originY = v.rect.origin.y, |
| 439 | + .width = v.rect.size.width, |
| 440 | + .height = v.rect.size.height, |
| 441 | + .znear = v.depth_range.z_near, |
| 442 | + .zfar = v.depth_range.z_far, |
| 443 | + }; |
| 444 | + [encoder setViewport:viewport]; |
| 445 | + |
| 446 | + auto s = command.scissor.value_or(IRect::MakeSize(GetRenderTargetSize())); |
| 447 | + MTLScissorRect scissor = { |
| 448 | + .x = static_cast<NSUInteger>(s.origin.x), |
| 449 | + .y = static_cast<NSUInteger>(s.origin.y), |
| 450 | + .width = static_cast<NSUInteger>(s.size.width), |
| 451 | + .height = static_cast<NSUInteger>(s.size.height), |
| 452 | + }; |
| 453 | + [encoder setScissorRect:scissor]; |
| 454 | + |
471 | 455 | if (!bind_stage_resources(command.vertex_bindings, ShaderStage::kVertex)) { |
472 | 456 | return false; |
473 | 457 | } |
|
0 commit comments