htmol
Version:
NEXT-GENERATION MOLECULAR DYNAMICS WEB VISUALIZATION
98 lines (76 loc) • 3.6 kB
JavaScript
/*
This file is part of HTMoL:
Copyright (C) 2014 Dr. Mauricio Carrillo-Tripp
http://tripplab.com
Developers:
v1.0 Leonardo Alvarez-Rivera, Francisco Javier Becerra-Toledo, Adan Vega-Ramirez
v2.0 Javier Garcia-Vieyra
v3.0 Omar Israel Lara-Ramirez, Eduardo González-Zavala, Emmanuel Quijas-Valades, Julio Cesar González-Vázquez
v3.5 Leonardo Alvarez-Rivera
*/
function getShader(gl, id) {
var shaderScript = document.getElementById(id);
if (!shaderScript) {
return null;
}
var str = "";
var k = shaderScript.firstChild;
while (k) {
if (k.nodeType == 3) {
str += k.textContent;
}
k = k.nextSibling;
}
var shader;
if (shaderScript.type == "x-shader/x-fragment") {
shader = gl.createShader(gl.FRAGMENT_SHADER);
} else if (shaderScript.type == "x-shader/x-vertex") {
shader = gl.createShader(gl.VERTEX_SHADER);
} else {
return null;
}
gl.shaderSource(shader, str);
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
alert(gl.getShaderInfoLog(shader));
return null;
}
return shader;
}
function createProgram(fragmentShaderID, vertexShaderID) {
var fragmentShader = getShader(gl, fragmentShaderID);
var vertexShader = getShader(gl, vertexShaderID);
program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
alert("No se pudieron inicializar los shaders");
}
program.vertexPositionAttribute = gl.getAttribLocation(program, "aVertexPosition");
gl.enableVertexAttribArray(program.vertexPositionAttribute);
program.vertexNormalAttribute = gl.getAttribLocation(program, "aVertexNormal");
gl.enableVertexAttribArray(program.vertexNormalAttribute);
program.textureCoordAttribute = gl.getAttribLocation(program, "aVertexColor");
gl.enableVertexAttribArray(program.textureCoordAttribute);
program.ColorDif = gl.getAttribLocation(program, "aVertexColorDif");
gl.enableVertexAttribArray(program.ColorDif);
program.Opcion = gl.getAttribLocation(program, "aVertexOption");
gl.enableVertexAttribArray(program.Opcion);
program.pMatrixUniform = gl.getUniformLocation(program, "uPMatrix");
program.mvMatrixUniform = gl.getUniformLocation(program, "uMVMatrix");
program.nMatrixUniform = gl.getUniformLocation(program, "uNMatrix");
program.samplerUniform = gl.getUniformLocation(program, "uSampler");
program.useTexturesUniform = gl.getUniformLocation(program, "uUseTextures");
program.useLightingUniform = gl.getUniformLocation(program, "uUseLighting");
program.ambientColorUniform = gl.getUniformLocation(program, "uAmbientColor");
program.pointLightingLocationUniform = gl.getUniformLocation(program, "uPointLightingLocation");
program.pointLightingColorUniform = gl.getUniformLocation(program, "uPointLightingColor");
return program;
}
var currentProgram;
var perVertexProgram;
var perFragmentProgram;
function initShaders() {
perFragmentProgram = createProgram("shader-fs", "shader-vs");
}