0420
2025년 4월 20일
카테고리 : 게임엔진, 그래픽스
스텐실 버퍼를 써서 2D 클리핑 기능을 구현함.

매 프레임마다:
// 주의!!
// -> 여기서 말하는 '마스킹, 마스크' 는
// 사실 본의미는 '가리는 거' 지만,
// 걍 영역이라고 생각하셈
enable(StencilTest)
clear_stencil(0);
clear_buffer(Stencil)
// N번째 마스킹
// -> 아무 조건 없이, 해당 픽셀의 스텐실값을 1 증가시킨다.
stencil_func(Always, 1, 0xFF)
stencil_op(Keep, Keep, IncreaseWrapped);
// 이때 마스크 렌더링을 진행한다!!!
// 일단 마스크 2개를 그려보자.
draw_something();
draw_something();
// 스크린 쿼드 그려서 N번째 마스킹 도중에 정리하기
// 만약 겹쳐진 부분이 있다면, 그 부분의 스텐실 값은 2였을 것임.
// 따라서 2보다 작은 부분은 걍 0으로 초기화.
stencil_func(Less, 2, 0xFF) // 2보다 작으면
stencil_op(Kepp, Kepp, Zero) // 0으로 만든다.
draw_screen_quad();
// 마스크 적용해서 오브젝트 그려보기
stencil_func(Equal, 2, 0xFF) // 스텐실이 2와 같은 경우에만 (=마스크 영역에만)
stencil_op(Keep, Keep, Keep) // 스텐실값은 건들지 말고
draw_something();
disable(StencilTest)