Added a bunch of WebGL functions related to shader uniforms to gl_functions.js
This commit is contained in:
@@ -7,12 +7,13 @@ export var glObjects = {
|
||||
vaos: [ null ],
|
||||
shaders: [ null ],
|
||||
programs: [ null ],
|
||||
uniformLocations: [ null ],
|
||||
};
|
||||
|
||||
// +--------------------------------------------------------------+
|
||||
// | Helpers |
|
||||
// +--------------------------------------------------------------+
|
||||
export function verifyGlBufferId(bufferId, allowZero)
|
||||
function verifyGlBufferId(bufferId, allowZero)
|
||||
{
|
||||
if (typeof(bufferId) != "number") { return "BufferId is not a number!"; }
|
||||
if (bufferId == 0) { return allowZero ? null : "BufferId is 0!"; }
|
||||
@@ -21,7 +22,7 @@ export function verifyGlBufferId(bufferId, allowZero)
|
||||
if (glObjects.buffers[bufferId] == null) { return "BufferId is for a destroyed vertBuffer!"; }
|
||||
return null;
|
||||
}
|
||||
export function verifyGlVaoId(vaoId, allowZero)
|
||||
function verifyGlVaoId(vaoId, allowZero)
|
||||
{
|
||||
if (typeof(vaoId) != "number") { return "VaoId is not a number!"; }
|
||||
if (vaoId == 0) { return allowZero ? null : "VaoId is 0!"; }
|
||||
@@ -30,7 +31,7 @@ export function verifyGlVaoId(vaoId, allowZero)
|
||||
if (glObjects.vaos[vaoId] == null) { return "VaoId is for a destroyed array!"; }
|
||||
return null;
|
||||
}
|
||||
export function verifyGlShaderId(shaderId, allowZero)
|
||||
function verifyGlShaderId(shaderId, allowZero)
|
||||
{
|
||||
if (typeof(shaderId) != "number") { return "ShaderId is not a number!"; }
|
||||
if (shaderId == 0) { return allowZero ? null : "ShaderId is 0!"; }
|
||||
@@ -39,7 +40,7 @@ export function verifyGlShaderId(shaderId, allowZero)
|
||||
if (glObjects.shaders[shaderId] == null) { return "ShaderId is for a destroyed shader!"; }
|
||||
return null;
|
||||
}
|
||||
export function verifyGlProgramId(programId, allowZero)
|
||||
function verifyGlProgramId(programId, allowZero)
|
||||
{
|
||||
if (typeof(programId) != "number") { return "ProgramId is not a number!"; }
|
||||
if (programId == 0) { return allowZero ? null : "ProgramId is 0!"; }
|
||||
@@ -48,7 +49,16 @@ export function verifyGlProgramId(programId, allowZero)
|
||||
if (glObjects.programs[programId] == null) { return "ProgramId is for a destroyed program!"; }
|
||||
return null;
|
||||
}
|
||||
export function verifyParameter(verifyResult, functionName, parameterName, parameterValue)
|
||||
function verifyGlUniformLocationId(locationId, allowZero)
|
||||
{
|
||||
if (typeof(locationId) != "number") { return "LocationId is not a number!"; }
|
||||
if (locationId == 0) { return allowZero ? null : "LocationId is 0!"; }
|
||||
if (glObjects == null || glObjects.uniformLocations == null) { return "Locations array has not been initialized yet!"; }
|
||||
if (locationId >= glObjects.uniformLocations.length) { return "LocationId is too high!"; }
|
||||
if (glObjects.uniformLocations[locationId] == null) { return "LocationId is for a destroyed program!"; }
|
||||
return null;
|
||||
}
|
||||
function verifyParameter(verifyResult, functionName, parameterName, parameterValue)
|
||||
{
|
||||
if (verifyResult == null) { return true; }
|
||||
console.error("Invalid argument \"" + parameterName + "\" passed to " + functionName + ": " + verifyResult);
|
||||
@@ -208,6 +218,147 @@ export function jsGlDrawArrays(geometryType, startIndex, count)
|
||||
appGlobals.glContext.drawArrays(geometryType, startIndex, count);
|
||||
}
|
||||
|
||||
export function jsGlGetUniformLocation(programId, nameLength, namePntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlProgramId(programId, false), "gl.getUniformLocation", "programId", programId)) { return false; }
|
||||
let program = glObjects.programs[programId];
|
||||
let nameStr = wasmPntrAndLengthToJsString(namePntr, nameLength);
|
||||
let newLocation = appGlobals.glContext.getUniformLocation(program, nameStr);
|
||||
let newLocationId = glObjects.uniformLocations.length;
|
||||
glObjects.uniformLocations.push(newLocation);
|
||||
return newLocationId;
|
||||
}
|
||||
|
||||
export function jsGlUniform1f(locationId, value)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform1f", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
appGlobals.glContext.uniform1f(location, value);
|
||||
}
|
||||
export function jsGlUniform2f(locationId, value0, value1)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform2f", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
appGlobals.glContext.uniform2f(location, value0, value1);
|
||||
}
|
||||
export function jsGlUniform3f(locationId, value0, value1, value2)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform3f", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
appGlobals.glContext.uniform3f(location, value0, value1, value2);
|
||||
}
|
||||
export function jsGlUniform4f(locationId, value0, value1, value2, value3)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform4f", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
appGlobals.glContext.uniform4f(location, value0, value1, value2, value3);
|
||||
}
|
||||
|
||||
export function jsGlUniform1fv(locationId, valuesCount, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform1fv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Float32Array(appGlobals.memDataView.buffer, valuesPntr, valuesCount);
|
||||
appGlobals.glContext.uniform1fv(location, valuesArray);
|
||||
}
|
||||
export function jsGlUniform2fv(locationId, valuesCount, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform2fv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Float32Array(appGlobals.memDataView.buffer, valuesPntr, valuesCount*2);
|
||||
appGlobals.glContext.uniform2fv(location, valuesArray);
|
||||
}
|
||||
export function jsGlUniform3fv(locationId, valuesCount, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform3fv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Float32Array(appGlobals.memDataView.buffer, valuesPntr, valuesCount*3);
|
||||
appGlobals.glContext.uniform3fv(location, valuesArray);
|
||||
}
|
||||
export function jsGlUniform4fv(locationId, valuesCount, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform4fv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Float32Array(appGlobals.memDataView.buffer, valuesPntr, valuesCount*4);
|
||||
appGlobals.glContext.uniform4fv(location, valuesArray);
|
||||
}
|
||||
|
||||
export function jsGlUniform1i(locationId, value)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform1i", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
appGlobals.glContext.uniform1i(location, value);
|
||||
}
|
||||
export function jsGlUniform2i(locationId, value0, value1)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform2i", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
appGlobals.glContext.uniform2i(location, value0, value1);
|
||||
}
|
||||
export function jsGlUniform3i(locationId, value0, value1, value2)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform3i", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
appGlobals.glContext.uniform3i(location, value0, value1, value2);
|
||||
}
|
||||
export function jsGlUniform4i(locationId, value0, value1, value2, value3)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform4i", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
appGlobals.glContext.uniform4i(location, value0, value1, value2, value3);
|
||||
}
|
||||
|
||||
export function jsGlUniform1iv(locationId, valuesCount, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform1iv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Int32Array(appGlobals.memDataView.buffer, valuesPntr, valuesCount);
|
||||
appGlobals.glContext.uniform1iv(location, valuesArray);
|
||||
}
|
||||
export function jsGlUniform2iv(locationId, valuesCount, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform2iv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Int32Array(appGlobals.memDataView.buffer, valuesPntr, valuesCount*2);
|
||||
appGlobals.glContext.uniform2iv(location, valuesArray);
|
||||
}
|
||||
export function jsGlUniform3iv(locationId, valuesCount, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform3iv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Int32Array(appGlobals.memDataView.buffer, valuesPntr, valuesCount*3);
|
||||
appGlobals.glContext.uniform3iv(location, valuesArray);
|
||||
}
|
||||
export function jsGlUniform4iv(locationId, valuesCount, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniform4iv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Int32Array(appGlobals.memDataView.buffer, valuesPntr, valuesCount*4);
|
||||
appGlobals.glContext.uniform4iv(location, valuesArray);
|
||||
}
|
||||
|
||||
export function jsGlUniformMatrix2fv(locationId, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniformMatrix2fv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Float32Array(appGlobals.memDataView.buffer, valuesPntr, 2*2);
|
||||
appGlobals.glContext.uniformMatrix2fv(location, false, valuesArray);
|
||||
}
|
||||
export function jsGlUniformMatrix3fv(locationId, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniformMatrix3fv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Float32Array(appGlobals.memDataView.buffer, valuesPntr, 3*3);
|
||||
appGlobals.glContext.uniformMatrix3fv(location, false, valuesArray);
|
||||
}
|
||||
export function jsGlUniformMatrix4fv(locationId, valuesPntr)
|
||||
{
|
||||
if (!verifyParameter(verifyGlUniformLocationId(locationId, false), "gl.uniformMatrix4fv", "locationId", locationId)) { return false; }
|
||||
let location = glObjects.uniformLocations[locationId];
|
||||
let valuesArray = new Float32Array(appGlobals.memDataView.buffer, valuesPntr, 4*4);
|
||||
appGlobals.glContext.uniformMatrix4fv(location, false, valuesArray);
|
||||
}
|
||||
|
||||
export let jsGlFunctions = {
|
||||
jsGlCreateBuffer: jsGlCreateBuffer,
|
||||
jsGlBindBuffer: jsGlBindBuffer,
|
||||
@@ -230,6 +381,26 @@ export let jsGlFunctions = {
|
||||
jsGlClearColor: jsGlClearColor,
|
||||
jsGlClear: jsGlClear,
|
||||
jsGlDrawArrays: jsGlDrawArrays,
|
||||
jsGlGetUniformLocation: jsGlGetUniformLocation,
|
||||
jsGlUniform1f: jsGlUniform1f,
|
||||
jsGlUniform2f: jsGlUniform2f,
|
||||
jsGlUniform3f: jsGlUniform3f,
|
||||
jsGlUniform4f: jsGlUniform4f,
|
||||
jsGlUniform1fv: jsGlUniform1fv,
|
||||
jsGlUniform2fv: jsGlUniform2fv,
|
||||
jsGlUniform3fv: jsGlUniform3fv,
|
||||
jsGlUniform4fv: jsGlUniform4fv,
|
||||
jsGlUniform1i: jsGlUniform1i,
|
||||
jsGlUniform2i: jsGlUniform2i,
|
||||
jsGlUniform3i: jsGlUniform3i,
|
||||
jsGlUniform4i: jsGlUniform4i,
|
||||
jsGlUniform1iv: jsGlUniform1iv,
|
||||
jsGlUniform2iv: jsGlUniform2iv,
|
||||
jsGlUniform3iv: jsGlUniform3iv,
|
||||
jsGlUniform4iv: jsGlUniform4iv,
|
||||
jsGlUniformMatrix2fv: jsGlUniformMatrix2fv,
|
||||
jsGlUniformMatrix3fv: jsGlUniformMatrix3fv,
|
||||
jsGlUniformMatrix4fv: jsGlUniformMatrix4fv,
|
||||
};
|
||||
|
||||
//TODO: string getShaderInfoLog(shaderId)
|
||||
|
||||
Reference in New Issue
Block a user