MCPcopy Create free account
hub / github.com/galacean/engine / _createProgram

Method _createProgram

packages/core/src/shader/ShaderProgram.ts:240–280  ·  view source on GitHub ↗

* Init and link program with shader.

(vertexSource: string, fragmentSource: string)

Source from the content-addressed store, hash-verified

238 * Init and link program with shader.
239 */
240 private _createProgram(vertexSource: string, fragmentSource: string): WebGLProgram | null {
241 const gl = this._gl;
242
243 // Create and compile shader
244 const vertexShader = this._createShader(gl.VERTEX_SHADER, vertexSource);
245 if (!vertexShader) {
246 return null;
247 }
248
249 const fragmentShader = this._createShader(gl.FRAGMENT_SHADER, fragmentSource);
250 if (!fragmentShader) {
251 return null;
252 }
253
254 // Create program and link shader
255 const program = gl.createProgram();
256 if (!program) {
257 return null;
258 }
259
260 gl.attachShader(program, vertexShader);
261 gl.attachShader(program, fragmentShader);
262 gl.linkProgram(program);
263 gl.validateProgram(program);
264
265 gl.deleteShader(vertexShader);
266 gl.deleteShader(fragmentShader);
267
268 if (Logger.isEnabled && !gl.getProgramParameter(program, gl.LINK_STATUS) && !gl.isContextLost()) {
269 Logger.error(
270 `Could not link WebGL program\n\n` +
271 `Shader error: ${gl.getError()}\n\n` +
272 `Validate status: ${gl.getProgramParameter(program, gl.VALIDATE_STATUS)}\n\n` +
273 `Program information log: ${gl.getProgramInfoLog(program)}`
274 );
275 gl.deleteProgram(program);
276 return null;
277 }
278
279 return program;
280 }
281
282 private _createShader(shaderType: number, shaderSource: string): WebGLShader | null {
283 const gl = this._gl;

Callers 1

constructorMethod · 0.95

Calls 2

_createShaderMethod · 0.95
isContextLostMethod · 0.80

Tested by

no test coverage detected