새롭게 컴파일된 파이어폭스가 화면에 떠 있었다. 겉보기에는 일반 브라우저와 전혀 다를 바 없었지만, 블라디미르는 그 안에 자신이 심어놓은 새로운 심장이 뛰고 있음을 알고 있었다.
이제 모든 준비는 끝났다. 그는 마지막으로 이 모든 작업의 성패를 확인할 단 몇 줄의 코드를 담은 HTML 파일을 만들었다.
파일의 이름은 test.html
. 내용은 극도로 단순했다.
<!DOCTYPE html>
<html>
<head>
<title>Canvas 3D Test</title>
</head>
<body>
<canvas id="myCanvas" width="500" height="500"></canvas>
<script>
const canvas = document.getElementById('myCanvas');
const gl = canvas.getContext('experimental-canvas-3d');
if (gl) {
gl.clearColor(0.0, 0.0, 1.0, 1.0); // 파란색
gl.clear(gl.COLOR_BUFFER_BIT);
} else {
alert('Canvas 3D를 지원하지 않습니다.');
}
</script>
</body>
</html>
코드의 내용은 명확했다. 페이지가 열리면, myCanvas
라는 ID를 가진 캔버스 요소를 찾는다. 그리고 가장 중요한 부분, getContext('experimental-canvas-3d')
를 호출하여 3D 렌더링 컨텍스트를 요청한다.
만약 블라디미르가 게코 엔진에 심어놓은 코드가 제대로 작동한다면, gl
이라는 변수에는 C++ 세상과 연결된 특별한 객체가 담길 것이다. 만약 실패한다면 gl
은 null이 되고, 경고창이 뜰 터였다.
성공적으로 gl
객체를 얻어온다면, 다음 두 줄의 코드가 실행된다.
gl.clearColor(0.0, 0.0, 1.0, 1.0);
이것은 OpenGL에게 "이제부터 배경을 지울 색은 파란색으로 준비해줘"라고 알려주는 명령이다.
gl.clear(gl.COLOR_BUFFER_BIT);
"준비한 그 색으로 화면(컬러 버퍼)을 깨끗하게 지워"라는 실행 명령. gl.COLOR_BUFFER_BIT
는 미리 정의된 상수로, 색상 버퍼를 의미했다.
이 모든 과정이 성공한다면, 화면에는 가로세로 500픽셀 크기의 파란색 사각형이 나타나야 했다.
블라디미르는 마른침을 삼켰다. 수십 시간의 코딩, 수많은 고민과 디버깅의 결과가 이 단순한 파란색 사각형에 달려 있었다.
그는 test.html
파일을 자신이 직접 뜯어고친 파이어폭스 창으로 드래그 앤 드롭했다.
엔터.
순간, 그의 눈에 믿을 수 없는 광경이 펼쳐졌다.
브라우저 창의 한가운데, 정확히 가로세로 500픽셀 크기의 선명한 파란색 사각형이 나타났다. 경고창은 뜨지 않았다. 브라우저는 다운되지도 않았다.
그것은 단순한 파란색 사각형이 아니었다.
그것은 자바스크립트가 브라우저의 샌드박스를 넘어, 운영체제의 그래픽 라이브러리에 직접 말을 걸어 얻어낸 최초의 결과물이었다. 웹의 언어가 GPU의 영혼을 건드려 화면에 그려낸 첫 번째 흔적이었다. 플러그인의 힘을 빌리지 않은, 순수한 웹 기술로 이뤄낸 혁명의 시작이었다.
블라디미르는 의자 깊숙이 등을 기댔다. 심장이 세차게 뛰었다.
성공이었다.
물론 이것은 시작에 불과했다. 이제 겨우 화면을 특정 색으로 칠하는 데 성공했을 뿐이다. 앞으로 점을 찍고, 선을 긋고, 삼각형을 그리고, 텍스처를 입히고, 셰이더를 실행하는 수많은 관문이 남아 있었다.
하지만 가장 중요한 첫걸음을 뗀 것이다. 불가능하다고 여겨졌던 두 세계를 잇는 다리가, 비록 아직은 좁고 위태로워 보일지라도, 마침내 연결되었다는 것을 증명해냈다.
그날 밤 모질라의 사무실에 나타난 파란색 사각형. 그것은 훗날 웹의 역사가 기록할 가장 의미 있는 색깔 중 하나가 될 터였다.