MonoGame 3.8.6.1, 화면을 지운 뒤 남는 잘라내기 상태 수정

Clear 뒤에 복원하는 상태가 문제였습니다
MonoGame 3.8.6.1은 한국시간 2026년 11월 4일 공개됐습니다. DesktopGL에서 Clear 이후 이전 scissor 상태가 남는 문제를 수정했으며, 공식 릴리스가 연결한 PR #9587에서 변경 이유와 회귀 테스트를 직접 확인했습니다.
Scissor는 렌더링이 허용되는 직사각형 영역을 제한하는 상태입니다. 중요한 점은 이번 문제가 단순히 ‘화면 지우기가 작은 영역에만 적용된다’는 설명으로 끝나지 않는다는 것입니다. 코드 수정은 보류 중인 렌더링 상태를 적용한 뒤에 scissor 활성 여부를 저장하도록 위치를 옮깁니다. 그래야 Clear가 끝난 뒤 개발자가 요청한 상태를 올바르게 복원합니다.
요청한 상태와 마지막 적용 상태가 달랐습니다
변경 전에는 마지막 적용 상태에서 scissor 여부를 먼저 읽었습니다. 게임이 scissor를 끄도록 요청했지만 아직 그리기를 하지 않았다면, 실제로 복원해야 할 요청 상태와 이전 상태가 달라질 수 있습니다. PR 설명은 이 순서를 바로잡기 위해 상태 적용 이후에 값을 캡처한다고 명시합니다.
Clear는 화면을 지우기 위해 일부 렌더링 상태를 임시로 바꾼 뒤 돌려놓습니다. 이때 무엇을 저장했는지가 중요합니다. ‘끄기’를 요청한 뒤 Clear를 호출했는데 이전의 ‘켜기’ 상태가 다시 남으면, 다음 그리기에서 예상하지 못한 잘림이 생길 수 있습니다. UI 마스크나 부분 화면 렌더링과 일반 장면을 오가는 프로젝트라면 살펴볼 지점입니다.
공식 테스트는 마지막 픽셀이 초록색인지 확인합니다
추가된 회귀 테스트는 크기가 0인 scissor 사각형으로 시작합니다. 먼저 scissor를 켠 상태로 그리기를 수행하고, 이후 끄기 상태만 설정한 채 별도 그리기 없이 빨간색 Clear를 호출합니다. 마지막으로 scissor를 끈 상태에서 라임색 사각형을 그린 뒤 좌상단 픽셀이 라임색인지 검사합니다.
이는 Clear 이후에도 scissor가 잘못 켜져 있으면 마지막 그리기가 막히도록 만든 테스트입니다. 단순히 Clear 직후 배경색만 비교하는 것보다 버그의 조건을 정확히 겨냥합니다. 이 글은 공개 테스트를 읽어 설명한 것이며, 테스트 실행 결과를 새로 얻었다고 주장하지 않습니다.
다른 백엔드 수정과 분리해 적용하세요
같은 릴리스에는 Mac 호스트의 Vulkan 테스트 수정, Vulkan의 프레임 도중 외부 리소스 해제 처리, Song.Dispose 경쟁 조건 수정도 포함됩니다. DesktopGL의 scissor 재현을 통과했다고 이 경로들까지 정상이라고 결론 내릴 수는 없습니다. 업그레이드 시 사용하는 백엔드를 기록하고, 실제 UI 클리핑 전환과 렌더 타깃 흐름을 별도 장면으로 확인하는 것이 좋습니다.
미로

댓글
이 글에 대한 생각을 남겨 주세요.