Skip to content

Commit

Permalink
Avoid globally scoped functions
Browse files Browse the repository at this point in the history
  • Loading branch information
cskeppstedt committed Nov 26, 2013
1 parent 649234e commit 105657b
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 66 deletions.
8 changes: 5 additions & 3 deletions src/scripts/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,10 @@ $(function () {
State.Audio = new Audio();

State.Canvas = document.getElementById("screen");
initGL();
initProgram();

Utils.initGL();
Utils.initProgram();

Buffers.init();
Game.Init();
Game.Tick();
Expand Down Expand Up @@ -67,4 +69,4 @@ $(function () {
}
});
}
});
});
130 changes: 67 additions & 63 deletions src/scripts/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,86 +5,90 @@

/// <reference path="models.js" />

// Initializes the GL context on the canvas and stores the context
// in State.GlCtx.
function initGL() {
try {
State.GlCtx = State.Canvas.getContext("experimental-webgl");
State.GlCtx.viewportWidth = State.Canvas.width;
State.GlCtx.viewportHeight = State.Canvas.height;
State.GlCtx.enable(State.GlCtx.DEPTH_TEST);
} catch (e) { }

if (!State.GlCtx) {
alert("Could not initialise WebGL, sorry :-(");
return 0;
}
}
window.Utils = {
// Initializes the GL context on the canvas and stores the context
// in State.GlCtx.
initGL: function () {
try {
State.GlCtx = State.Canvas.getContext("experimental-webgl");
State.GlCtx.viewportWidth = State.Canvas.width;
State.GlCtx.viewportHeight = State.Canvas.height;
State.GlCtx.enable(State.GlCtx.DEPTH_TEST);
} catch (e) { }

if (!State.GlCtx) {
alert("Could not initialise WebGL, sorry :-(");
return 0;
}
},



// Given the value of the id attribute of the shader script, this
// function loads the source, compiles it and returns the
// compiled shader.
function getShader(id) {
var gl = State.GlCtx;
var shaderScript = document.getElementById(id);
if (!shaderScript) {
return null;
}
getShader: function (id) {
var gl = State.GlCtx;
var shaderScript = document.getElementById(id);
if (!shaderScript) {
return null;
}

var str = "";
var k = shaderScript.firstChild;
while (k) {
if (k.nodeType == 3) {
str += k.textContent;
var str = "";
var k = shaderScript.firstChild;
while (k) {
if (k.nodeType == 3) {
str += k.textContent;
}
k = k.nextSibling;
}
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;
}
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);
gl.shaderSource(shader, str);
gl.compileShader(shader);

if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
alert(gl.getShaderInfoLog(shader));
return null;
}
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
alert(gl.getShaderInfoLog(shader));
return null;
}

return shader;
}
return shader;
},

// Initializes the shader program and stores it in State.Prog.
// It loads the shaders and links the program.
function initProgram() {
var gl = State.GlCtx;
initProgram: function() {
var gl = State.GlCtx;

var fragmentShader = getShader("shader-fs");
var vertexShader = getShader("shader-vs");
var fragmentShader = Utils.getShader("shader-fs");
var vertexShader = Utils.getShader("shader-vs");

State.Prog = gl.createProgram();
gl.attachShader(State.Prog, vertexShader);
gl.attachShader(State.Prog, fragmentShader);
gl.linkProgram(State.Prog);
State.Prog = gl.createProgram();
gl.attachShader(State.Prog, vertexShader);
gl.attachShader(State.Prog, fragmentShader);
gl.linkProgram(State.Prog);

if (!gl.getProgramParameter(State.Prog, gl.LINK_STATUS)) {
alert("Could not initialise shaders");
}
if (!gl.getProgramParameter(State.Prog, gl.LINK_STATUS)) {
alert("Could not initialise shaders");
}

gl.useProgram(State.Prog);
gl.useProgram(State.Prog);

State.Prog.vertexPositionAttribute = gl.getAttribLocation(State.Prog, "aVertexPosition");
gl.enableVertexAttribArray(State.Prog.vertexPositionAttribute);
State.Prog.vertexPositionAttribute = gl.getAttribLocation(State.Prog, "aVertexPosition");
gl.enableVertexAttribArray(State.Prog.vertexPositionAttribute);

State.Prog.vertexColorAttribute = gl.getAttribLocation(State.Prog, "aVertexColor");
gl.enableVertexAttribArray(State.Prog.vertexColorAttribute);
State.Prog.vertexColorAttribute = gl.getAttribLocation(State.Prog, "aVertexColor");
gl.enableVertexAttribArray(State.Prog.vertexColorAttribute);

State.Prog.pMatrixUniform = gl.getUniformLocation(State.Prog, "uPMatrix");
State.Prog.mvMatrixUniform = gl.getUniformLocation(State.Prog, "uMVMatrix");
}
State.Prog.pMatrixUniform = gl.getUniformLocation(State.Prog, "uPMatrix");
State.Prog.mvMatrixUniform = gl.getUniformLocation(State.Prog, "uMVMatrix");
}
};

0 comments on commit 105657b

Please sign in to comment.