@@ -429,28 +429,28 @@ static bool Bind(PassBindingsCache& pass,
429429 : MTLWindingCounterClockwise ];
430430 [encoder setCullMode: ToMTLCullMode (command.cull_mode)];
431431 [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- }
444- if (command. scissor . has_value ()) {
445- auto s = command.scissor .value ( );
446- MTLScissorRect scissor = {
447- .x = static_cast <NSUInteger >(s.origin .x ),
448- .y = static_cast <NSUInteger >(s.origin .y ),
449- .width = static_cast <NSUInteger >(s.size .width ),
450- .height = static_cast <NSUInteger >(s.size .height ),
451- };
452- [encoder setScissorRect: scissor];
453- }
432+
433+ auto v = command.viewport .value_or <Viewport>(
434+ {. rect = Rect::MakeSize ( Size ( GetRenderTargetSize ()))});
435+ MTLViewport viewport = {
436+ . originX = v.rect .origin .x ,
437+ . originY = v.rect .origin . y ,
438+ . width = v.rect .size .width ,
439+ . height = v.rect . size . height ,
440+ . znear = v.depth_range .z_near ,
441+ . zfar = v. depth_range . z_far ,
442+ } ;
443+ [encoder setViewport: viewport];
444+
445+ auto s = command.scissor .value_or ( IRect::MakeSize ( GetRenderTargetSize ()) );
446+ MTLScissorRect scissor = {
447+ .x = static_cast <NSUInteger >(s.origin .x ),
448+ .y = static_cast <NSUInteger >(s.origin .y ),
449+ .width = static_cast <NSUInteger >(s.size .width ),
450+ .height = static_cast <NSUInteger >(s.size .height ),
451+ };
452+ [encoder setScissorRect: scissor];
453+
454454 if (!bind_stage_resources (command.vertex_bindings , ShaderStage::kVertex )) {
455455 return false ;
456456 }
0 commit comments