Skip to content

Commit

Permalink
При ошибке компиляции шейдера больше не делается попытки его скомпили…
Browse files Browse the repository at this point in the history
…ровать (#95)

Error flag in shader program
  • Loading branch information
itanka9 committed Feb 25, 2021
1 parent 0fc9beb commit f9b8a05
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 18 deletions.
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "2gl",
"version": "0.8.0",
"version": "0.8.1-shader-errors.0",
"description": "WebGL library for 2GIS projects",
"repository": {
"type": "git",
Expand Down
3 changes: 3 additions & 0 deletions src/Shader.js
Expand Up @@ -62,6 +62,9 @@ class Shader {
const shader = this._shader = gl.createShader(glType);
gl.shaderSource(shader, this._code);
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
throw new Error(gl.getShaderInfoLog(shader));
}
}
}

Expand Down
56 changes: 39 additions & 17 deletions src/ShaderProgram.js
Expand Up @@ -31,6 +31,7 @@ class ShaderProgram {

this._linked = false;
this._located = false;
this._error = false;
}

/**
Expand All @@ -39,8 +40,14 @@ class ShaderProgram {
* @param {WebGLRenderingContext} gl
*/
enable(gl) {
if (this._error) {
return this;
}
this.link(gl);
this.locate(gl);
if (this._error) {
return this;
}

gl.useProgram(this._webglProgram);

Expand All @@ -55,6 +62,9 @@ class ShaderProgram {
* @param {Object} [attributes] Key-value объект содержащий значения атрибутов
*/
bind(gl, uniforms, attributes) {
if (this._error) {
return this;
}
if (uniforms) {
for (const name in uniforms) {
this.uniforms[name].bind(gl, uniforms[name]);
Expand All @@ -76,6 +86,10 @@ class ShaderProgram {
* @param {WebGLRenderingContext} gl
*/
disable(gl) {
if (this._error) {
return this;
}

for (const name in this.attributes) {
this.attributes[name].disable(gl);
}
Expand All @@ -90,28 +104,36 @@ class ShaderProgram {
* @param {WebGLRenderingContext} gl
*/
link(gl) {
if (this._linked) {
if (this._linked || this._error) {
return this;
}

this._webglProgram = gl.createProgram();

if (this._vertexShader) {
gl.attachShader(this._webglProgram, this._vertexShader.get(gl));
}

if (this._fragmentShader) {
gl.attachShader(this._webglProgram, this._fragmentShader.get(gl));
}
try {
this._webglProgram = gl.createProgram();

for (const name in this.attributes) {
this.attributes[name].bindLocation(gl, this._webglProgram);
if (this._vertexShader) {
gl.attachShader(this._webglProgram, this._vertexShader.get(gl));
}

if (this._fragmentShader) {
gl.attachShader(this._webglProgram, this._fragmentShader.get(gl));
}

for (const name in this.attributes) {
this.attributes[name].bindLocation(gl, this._webglProgram);
}

gl.linkProgram(this._webglProgram);
if (!gl.getProgramParameter(this._webglProgram, gl.LINK_STATUS)) {
throw new Error(gl.getProgramInfoLog(this._webglProgram));
}

this._linked = true;
} catch (error) {
this._error = true;
throw error;
}

gl.linkProgram(this._webglProgram);

this._linked = true;

return this;
}

Expand All @@ -122,7 +144,7 @@ class ShaderProgram {
* @param {WebGLRenderingContext} gl
*/
locate(gl) {
if (this._located) {
if (this._located || this._error) {
return this;
}

Expand Down

0 comments on commit f9b8a05

Please sign in to comment.