adjustments
This commit is contained in:
65
src/Shader.ts
Normal file
65
src/Shader.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
/** Get shader source by HTML-Element<id> */
|
||||
export function getShader(gl: WebGL2RenderingContext, id: string): WebGLShader | null {
|
||||
const script: any = document.getElementById(id);
|
||||
if (!script) {
|
||||
console.error(`Couldn't get shader source from HTML for id: ${id}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
let shader: WebGLShader | null;
|
||||
if (script.type == "x-shader/x-fragment") {
|
||||
shader = gl.createShader(gl.FRAGMENT_SHADER);
|
||||
} else if (script.type == "x-shader/x-vertex") {
|
||||
shader = gl.createShader(gl.VERTEX_SHADER);
|
||||
} else {
|
||||
console.error(`Script type is wrong for id: ${id}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (shader == null) {
|
||||
console.error("Cannot create Shaders!");
|
||||
return null;
|
||||
}
|
||||
|
||||
gl.shaderSource(shader, script.text);
|
||||
gl.compileShader(shader);
|
||||
|
||||
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
||||
console.error(`Shader compilation failed for ${id}:`, gl.getShaderInfoLog(shader));
|
||||
return null;
|
||||
}
|
||||
|
||||
return shader;
|
||||
}
|
||||
|
||||
export function createProgram(
|
||||
gl: WebGL2RenderingContext,
|
||||
vertexShaderId: string,
|
||||
fragmentShaderId: string,
|
||||
programName: string
|
||||
): WebGLProgram | null {
|
||||
const vertexShader = getShader(gl, vertexShaderId);
|
||||
const fragmentShader = getShader(gl, fragmentShaderId);
|
||||
|
||||
if (vertexShader == null || fragmentShader == null) {
|
||||
console.error(`Didn't find ${programName} shader sources!`);
|
||||
return null;
|
||||
}
|
||||
|
||||
const program = gl.createProgram();
|
||||
if (program == null) {
|
||||
console.error(`${programName} program not created!`);
|
||||
return null;
|
||||
}
|
||||
|
||||
gl.attachShader(program, vertexShader);
|
||||
gl.attachShader(program, fragmentShader);
|
||||
gl.linkProgram(program);
|
||||
|
||||
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
||||
console.error(`Could not initialize ${programName} shaders:`, gl.getProgramInfoLog(program));
|
||||
return null;
|
||||
}
|
||||
|
||||
return program;
|
||||
}
|
||||
Reference in New Issue
Block a user