UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

2 lines (1 loc) 3.73 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var r=require("../core/vendor.js"),e=require("../core/Base.js"),t={};function i(r){for(var e=r.split("\n"),t=0,i=e.length;t<i;t++)e[t]=t+1+": "+e[t];return e.join("\n")}function a(r,e,t){if(!r.getShaderParameter(e,r.COMPILE_STATUS))return[r.getShaderInfoLog(e),i(t)].join("\n")}var n=new r.default.Float32Array(16),o=e.default.extend({uniformSemantics:{},attributes:{}},(function(){this._locations={},this._textureSlot=0,this._program=null}),{bind:function(r){this._textureSlot=0,r.gl.useProgram(this._program)},hasUniform:function(r){var e=this._locations[r];return null!=e},useTextureSlot:function(r,e,t){e&&(r.gl.activeTexture(r.gl.TEXTURE0+t),e.isRenderable()?e.bind(r):e.unbind(r))},currentTextureSlot:function(){return this._textureSlot},resetTextureSlot:function(r){this._textureSlot=r||0},takeCurrentTextureSlot:function(r,e){var t=this._textureSlot;return this.useTextureSlot(r,e,t),this._textureSlot++,t},setUniform:function(e,t,i,a){var o=this._locations[i];if(null==o)return!1;switch(t){case"m4":if(!(a instanceof Float32Array)){for(var u=0;u<a.length;u++)n[u]=a[u];a=n}e.uniformMatrix4fv(o,!1,a);break;case"2i":e.uniform2i(o,a[0],a[1]);break;case"2f":e.uniform2f(o,a[0],a[1]);break;case"3i":e.uniform3i(o,a[0],a[1],a[2]);break;case"3f":e.uniform3f(o,a[0],a[1],a[2]);break;case"4i":e.uniform4i(o,a[0],a[1],a[2],a[3]);break;case"4f":e.uniform4f(o,a[0],a[1],a[2],a[3]);break;case"1i":e.uniform1i(o,a);break;case"1f":e.uniform1f(o,a);break;case"1fv":e.uniform1fv(o,a);break;case"1iv":e.uniform1iv(o,a);break;case"2iv":e.uniform2iv(o,a);break;case"2fv":e.uniform2fv(o,a);break;case"3iv":e.uniform3iv(o,a);break;case"3fv":e.uniform3fv(o,a);break;case"4iv":e.uniform4iv(o,a);break;case"4fv":e.uniform4fv(o,a);break;case"m2":case"m2v":e.uniformMatrix2fv(o,!1,a);break;case"m3":case"m3v":e.uniformMatrix3fv(o,!1,a);break;case"m4v":if(Array.isArray(a)&&Array.isArray(a[0])){var s=new r.default.Float32Array(16*a.length),f=0;for(u=0;u<a.length;u++)for(var c=a[u],l=0;l<16;l++)s[f++]=c[l];e.uniformMatrix4fv(o,!1,s)}else e.uniformMatrix4fv(o,!1,a)}return!0},setUniformOfSemantic:function(r,e,t){var i=this.uniformSemantics[e];return!!i&&this.setUniform(r,i.type,i.symbol,t)},enableAttributes:function(r,e,i){var a,n=r.gl,o=this._program,u=this._locations;(a=i?i.__enabledAttributeList:t[r.__uid__])||(a=i?i.__enabledAttributeList=[]:t[r.__uid__]=[]);for(var s=[],f=0;f<e.length;f++){var c=e[f];if(this.attributes[c]){var l=u[c];if(null==l){if(-1===(l=n.getAttribLocation(o,c))){s[f]=-1;continue}u[c]=l}s[f]=l,a[l]?a[l]=2:a[l]=1}else s[f]=-1}for(f=0;f<a.length;f++)switch(a[f]){case 1:n.enableVertexAttribArray(f),a[f]=3;break;case 2:a[f]=3;break;case 3:n.disableVertexAttribArray(f),a[f]=0}return s},getAttribLocation:function(r,e){var t=this._locations,i=t[e];return null==i&&(i=r.getAttribLocation(this._program,e),t[e]=i),i},buildProgram:function(r,e,t,i){var n=r.createShader(r.VERTEX_SHADER),o=r.createProgram();r.shaderSource(n,t),r.compileShader(n);var u=r.createShader(r.FRAGMENT_SHADER);r.shaderSource(u,i),r.compileShader(u);var s=a(r,n,t);if(s)return s;if(s=a(r,u,i))return s;if(r.attachShader(o,n),r.attachShader(o,u),e.attributeSemantics.POSITION)r.bindAttribLocation(o,0,e.attributeSemantics.POSITION.symbol);else{var f=Object.keys(this.attributes);r.bindAttribLocation(o,0,f[0])}if(r.linkProgram(o),r.deleteShader(n),r.deleteShader(u),this._program=o,this.vertexCode=t,this.fragmentCode=i,!r.getProgramParameter(o,r.LINK_STATUS))return"Could not link program\n"+r.getProgramInfoLog(o);for(var c=0;c<e.uniforms.length;c++){var l=e.uniforms[c];this._locations[l]=r.getUniformLocation(o,l)}}});exports.default=o;