WebGL 1.0 명세서 비준 소식에 가장 먼저 움직인 것은 모질라였다. WebGL의 불씨를 처음 지폈던 블라디미르와 그의 동료들에게는 자부심과 함께 막중한 책임감이 주어졌다. 이제 그들은 자신들이 만든 청사진을 가장 먼저 현실로 증명해 보여야 했다.
그들의 전장은 파이어폭스 4의 개발 버전, 코드네임 ‘마인필드(Minefield)’였다.
블라디미르는 자신의 ‘Canvas 3D’ 프로토타입 시절의 코드를 대부분 버려야 했다. 지난 2년간 워킹 그룹의 논의를 거치며 API의 수많은 세부 사항들이 바뀌었기 때문이다. 함수 이름, 인자의 순서, 오류 처리 방식까지, 모든 것을 확정된 명세서에 맞춰 다시 구현해야 했다.
그와 스튜어트를 비롯한 모질라의 그래픽스팀은 파이어폭스의 심장, 게코 엔진의 코드를 다시 파고들었다. 그들의 목표는 명확했다. WebGL 1.0 명세서에 담긴 수백 개의 항목을 하나도 빠짐없이, 그리고 정확하게 구현하는 것.
그들은 크로노스 그룹이 제공하는 공식 적합성 테스트 스위트(Conformance Test Suite)와 씨름하기 시작했다. 이 테스트 스위트는 수천 개의 작은 테스트 케이스로 이루어져 있었다.
gl.createBuffer()
호출 후 null이 아닌 객체가 반환되는가?gl.uniformMatrix4fv()
에 16개가 아닌 15개의 배열 요소를 넘겼을 때INVALID_VALUE
오류를 정확히 발생시키는가?- 특정 형식의 텍스처를 업로드한 후,
gl.readPixels()
로 읽어온 픽셀 값이 원본과 정확히 일치하는가?
테스트를 실행하면, 수천 개의 항목 중 수백 개가 붉은색 ‘실패(Fail)’로 도배되었다. 그러면 엔지니어들은 실패한 테스트 케이스의 코드를 분석하고, 게코 엔진의 어느 부분에서 명세서와 다르게 동작했는지를 찾아내 밤새 코드를 수정했다. 그리고 다음 날 아침, 다시 테스트를 돌렸다. 붉은색 실패 항목이 몇 개 줄어들어 있으면 안도의 한숨을 쉬었고, 오히려 늘어나 있으면 절망적인 기분으로 다시 디버깅에 매달렸다.
그 과정에서 과거의 악몽, 그래픽 드라이버 버그들이 다시 발목을 잡았다. 특정 인텔 내장 그래픽 카드에서만 gl.clear()
함수가 제대로 동작하지 않는 문제가 발견되었다. 원인은 드라이버의 스텐실 버퍼 처리 버그였다. 모질라팀은 이 문제를 우회하기 위해, 스텐실 버퍼를 사용하지 않을 때에도 내부적으로는 다른 방식으로 초기화하는 코드를 추가해야만 했다.
시간은 흐르고, 붉은색 실패 항목은 조금씩, 하지만 꾸준히 녹색 ‘통과(Pass)’로 바뀌어 갔다.
마침내 2011년 초, 그들은 거의 모든 테스트를 통과하는 데 성공했다. 이제는 대중에게 선보일 ‘쇼케이스’가 필요했다. 모질라는 구글의 데이터 아트팀과 협력하여 WebGL의 가능성을 보여줄 인상적인 데모를 준비했다.
그리고 파이어폭스 4 베타 버전이 릴리즈되던 날, 모질라는 공식 블로그를 통해 전 세계에 선언했다.
“Firefox 4 Beta, WebGL을 기본으로 지원합니다.”
블로그 포스트에는 몇 개의 데모 링크가 포함되어 있었다. 그중 하나인 ‘Flight of the Navigator’는 수많은 개발자 커뮤니티를 충격에 빠뜨렸다.
사용자가 링크를 클릭하자, 별도의 플러그인 설치 안내창 같은 것은 뜨지 않았다. 잠시 후, 브라우저 창 전체가 3D 공간으로 변했다. 화려한 데이터 시각화가 지구본 위를 유성처럼 흘러 다녔고, 사용자들은 마우스를 움직여 이 지구본을 자유롭게 회전시키고 확대하며 탐험할 수 있었다. 모든 것이 놀랍도록 부드럽게, 브라우저 안에서 실시간으로 렌더링되고 있었다.
이것은 블라디미르가 처음 꿈꿨던 미래의 편린이었다.
파란 사각형에서 시작된 그의 아이디어가, 마침내 수많은 사용자가 직접 체험할 수 있는 구체적인 결과물로 나타난 것이다.
모질라의 파이어폭스는 WebGL이라는 새로운 시대의 문을 가장 먼저 열어젖힌 브라우저가 되었다. 그들의 성공적인 구현은 다른 브라우저 제조사들에게 강력한 자극제가 되었다. 이제 공은 구글의 크롬팀으로 넘어갔다. 경쟁의 불꽃이 다시 한번 타오르기 시작했다.