Babylon.js 9.35.0, WebGL 컨텍스트 손실 뒤 텍스처 연결 수정

컨텍스트 복원 후에도 빈 화면이 남던 원인
한국시간 2026년 11월 7일 공개된 Babylon.js 9.35.0은 WebGL 컨텍스트가 손실된 동안 컴파일을 마친 이펙트의 샘플러 목록이 사라지는 문제를 수정했습니다. 처음 장면을 정상적으로 그렸더라도 복원 뒤 결과가 달라질 수 있는 경로입니다.
PR #19033에 따르면 기존 코드는 uniform 위치가 null인 샘플러를 목록에서 제거했습니다. 그런데 컨텍스트 손실 중에는 조회 결과가 모두 null이 됩니다. 이 상태에서 목록을 비워 버리면 복원 후 재컴파일도 빈 목록으로 진행되어 텍스처 단위를 올바르게 배정하지 못했습니다.
타입이 다른 샘플러가 한 위치에 묶였습니다
정수 샘플러와 부동소수점 샘플러를 함께 사용하는 재현 장면에서는 둘 다 같은 텍스처 단위를 가리키게 됩니다. 작성자는 GL_INVALID_OPERATION 오류가 반복되며 페이지를 다시 읽기 전까지 화면이 비어 있는 결과를 보고했습니다.
수정은 컨텍스트 손실 중에는 null 위치를 이유로 샘플러를 제거하지 않도록 합니다. 복원이 끝난 실제 프로그램에서는 원래대로 사용하지 않는 샘플러를 정리합니다. 즉 샘플러 정리를 전부 없애는 것이 아니라 판단할 수 없는 시점의 제거를 막는 변경입니다.
복구 시험은 컴파일 시점도 맞춰야 합니다
작성자는 Windows의 Chrome과 WebGL2에서 WEBGL_lose_context를 이용해 변경 전후를 비교했습니다. 수정 후 샘플러 이름이 유지되고 오류 없이 예상한 픽셀을 얻었다고 설명합니다. 이는 PR의 재현 결과이며, 이 글에서 직접 브라우저를 실행해 확인한 것은 아닙니다.
프로젝트에서는 이미 준비된 재질만 복원하는 경우와 손실 중 준비되는 이펙트를 구분해 보세요. 단색 물체가 정상이라는 사실만으로 여러 타입의 텍스처 연결까지 확인됐다고 볼 수 없습니다. 콘솔 오류, 샘플러 목록, 복원 후 화면을 함께 기록하면 조건을 좁힐 수 있습니다.
자원 해제 수정은 다른 수명 문제입니다
같은 릴리스의 PR #19121은 ProceduralTexture, HDRIrradianceFiltering, DynamicTexture의 GPU 자원 해제를 보완합니다. 텍스처 래퍼의 프레임버퍼나 네이티브 캔버스 자원이 가비지 수집까지 남는 경로를 다룹니다. 화면 복원 성공과 장면을 닫을 때 자원이 정리되는지는 별개의 확인 항목입니다.
작성자는 Babylon Native 검증에서 프레임버퍼 풀이 고갈되던 상황이 수정됐다고 보고합니다. 이 수치를 일반 브라우저 전체의 메모리 사용량으로 해석해서는 안 됩니다. 반복해서 장면을 생성·해제하며 엔진이 추적하는 자원과 실제 로그를 함께 살펴보는 편이 좋습니다.
업데이트 검토에서는 한 번 열린 화면보다 손실·복원·종료의 흐름을 나누어 확인해 보세요. 이 글은 원문에 근거한 원인 정리와 점검 제안이며, 모든 컨텍스트 손실이나 텍스처 누수가 해결됐다는 주장으로 확대하지 않았습니다.
미로


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