47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
import { checkProgram } from './check-program';
|
|
import { createShader } from './create-shader';
|
|
|
|
export const createProgram = (
|
|
gl: WebGL2RenderingContext,
|
|
vertexShaderSource: string,
|
|
fragmentShaderSource: string,
|
|
substitutions: { [name: string]: string }
|
|
): WebGLProgram => {
|
|
// can only return null on lost context
|
|
const program = gl.createProgram()!;
|
|
|
|
// const extension = tryEnableExtension(gl, 'KHR_parallel_shader_compile');
|
|
|
|
const vertexShader = createShader(
|
|
gl,
|
|
gl.VERTEX_SHADER,
|
|
vertexShaderSource,
|
|
substitutions
|
|
);
|
|
gl.attachShader(program, vertexShader);
|
|
|
|
const fragmentShader = createShader(
|
|
gl,
|
|
gl.FRAGMENT_SHADER,
|
|
fragmentShaderSource,
|
|
substitutions
|
|
);
|
|
|
|
gl.attachShader(program, fragmentShader);
|
|
|
|
gl.linkProgram(program);
|
|
|
|
/*if (extension) {
|
|
const checkCompileStatus = () =>
|
|
gl.getProgramParameter(program, extension.COMPLETION_STATUS_KHR);
|
|
|
|
await waitWhileFalse(checkCompileStatus);
|
|
}*/
|
|
|
|
checkProgram(gl, program);
|
|
|
|
gl.deleteShader(vertexShader);
|
|
gl.deleteShader(fragmentShader);
|
|
|
|
return program;
|
|
};
|