Доступ к контексту WebGL

Автор: Евгений Рыжков Дата публикации: 18.02.2013

WebGL контекст - это обработчик (точнее объект JavaScript), через который можно получить доступ ко всем функциям WebGL и атрибутам. Они представляют собой приложения WebGL в программный интерфейс (API).

Сейчас мы создадим функцию JavaScript, которая будем проверять, можем ли мы получить WebGL контекст на канве или нет. В отличие от других библиотек JavaScript, которые должны быть загружены и включены в работу проекта, WebGL уже находится в Вашем браузере. Другими словами, если вы используете современный браузер, с поддержкой WebGL, то ничего дополнительного вам устанавливать или подключать не нужно.

	var gl = null;
	
	function getGLContext(){
		var canvas = document.getElementById("canvas-element-id");
		if (canvas == null){
			alert("there is no canvas on this page");
			return;
		}
					
       		try {
              		// Попробуем взять стандартный контекст. Если это не удается, берем экспериментальный.
              		gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
                } 
       		catch(e) {}
       		
		if (gl == null){
			alert("WebGL не поддерживается");
		}
		else{
			alert("Ура! Вы получили WebGL контекст");
		}
	}

Нам нужно вызвать функцию при срабатывании события onload. Демо пример

Из этого примера мы научились создавать WebGL контекст, теперь поиграем с некоторыми атрибутами контекста.

Задача - написать скрипт, который бы по нажатию клавиш, к пример "1" и "2" менял цвет нашей области для рисования, а по нажатию клавиши "3", получали атрибуты выбранного цвета

	var gl = null;
		var c_width = 0;
		var c_height = 0;
		
		window.onkeydown = checkKey;
		
		function checkKey(ev){
		  switch(ev.keyCode){
			case 49:{ // 1
				// Устанавливаем цвет для закрашивания фона
				gl.clearColor(0.3,0.7,0.2,1.0);
				clear(gl);
				break;
			}
			case 50:{ // 2
				// Устанавливаем цвет для закрашивания фона
				gl.clearColor(0.3,0.2,0.7,1.0);
				clear(gl);
				break;
			}
			case 51:{ // 3
				// Получаем параметры установленного цвета
				var color = gl.getParameter(gl.COLOR_CLEAR_VALUE);
				
				alert('clearColor = (' + Math.round(color[0]*10)/10 + ',' +Math.round(color[1]*10)/10+','+Math.round(color[2]*10)/10+')');
				window.focus();
				break;
			}
		  }
		}
		
		function getGLContext(){
			var canvas = document.getElementById("canvas-element-id");
			if (canvas == null){
				alert("there is no canvas on this page");
				return;
			}
				
            var ctx = null;
            
                try {
                    // Попробуем взять стандартный контекст. Если это не удается, берем экспериментальный.
                    ctx = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
                } 
                catch(e) {}
			if (ctx == null){
				alert("WebGL is not available");
			}
			else{
				return ctx;
			}
		}
		
		function clear(ctx){
			// Закрашиваем область установленным цветом
			ctx.clear(ctx.COLOR_BUFFER_BIT);

			// Определяем рабочую область
			ctx.viewport(0,0,c_width, c_height);
		}
		
		function initWebGL(){
			gl = getGLContext();
			
		}

Нам нужно вызвать функцию при срабатывании события onload. Демо пример