cables_dev/cables/src/libs/cgl/texturemath/cgl_texturemath.js
- class ShaderTextureMath
- {
- constructor(cgl, name, options)
- {
- this._cgl = cgl;
- this._fb = null;
- this._mesh = CGL.MESHES.getSimpleRect(cgl, name + " shaderTexMath rect");
- this._prevViewPort = [0, 0, 0, 0];
- this._w = 0;
- this._h = 0;
-
- if (options.hasOwnProperty("texturePort")) this._texPort = options.texturePort;
- if (options.hasOwnProperty("width")) this._w = options.width;
- if (options.hasOwnProperty("height")) this._h = options.height;
- }
-
- dispose()
- {
- if (this._fb) this._fb.delete();
- this._fb = null;
- }
-
- _initFb(w, h)
- {
- if (this._fb) this._fb.delete();
- this._fb = null;
-
-
- if (this._cgl.glVersion >= 2)
- {
- this._fb = new CGL.Framebuffer2(this._cgl, w, h,
- {
- "isFloatingPointTexture": true,
- "multisampling": false,
- "wrap": CGL.Texture.WRAP_REPEAT,
- "filter": CGL.Texture.FILTER_NEAREST,
- "depth": true,
- "multisamplingSamples": 0,
- "clear": true
- });
- }
- else
- {
- this._fb = new CGL.Framebuffer(this._cgl, w, h,
- {
- "isFloatingPointTexture": true,
- "filter": CGL.Texture.FILTER_NEAREST,
- "wrap": CGL.Texture.WRAP_REPEAT
- });
- }
- }
-
- setSize(w, h)
- {
- this._w = w;
- this._h = h;
- }
-
- render(shader)
- {
- if (this._texPort && !this._texPort.get()) return;
-
- const vp = this._cgl.getViewPort();
-
- let w = this._w;
- let h = this._h;
- if (this._texPort && this._texPort.get())
- {
- w = this._texPort.get().width;
- h = this._texPort.get().height;
- }
- if (!this._fb || this._fb.getWidth() != w || this._fb.getHeight() != h) this._initFb(w, h);
-
- if (!shader)
- {
- return null;
- // outTex.set(null);
- }
- else
- {
- this._prevViewPort[0] = vp[0];
- this._prevViewPort[1] = vp[1];
- this._prevViewPort[2] = vp[2];
- this._prevViewPort[3] = vp[3];
-
- this._fb.renderStart(this._cgl);
-
- this._cgl.pushPMatrix();
- mat4.identity(this._cgl.pMatrix);
-
- this._cgl.pushViewMatrix();
- mat4.identity(this._cgl.vMatrix);
-
- this._cgl.pushModelMatrix();
- mat4.identity(this._cgl.mMatrix);
-
- this._cgl.pushShader(shader);
- if (shader.bindTextures) shader.bindTextures();
-
- if (this._texPort)
- this._cgl.setTexture(0, this._texPort.get().tex);
-
- this._cgl.pushBlend(false);
-
- this._mesh.render(shader);
-
- this._cgl.popBlend();
-
- this._cgl.popPMatrix();
- this._cgl.popModelMatrix();
- this._cgl.popViewMatrix();
- this._fb.renderEnd(this._cgl);
-
- this._cgl.popShader();
-
- this._cgl.gl.viewport(this._prevViewPort[0], this._prevViewPort[1], this._prevViewPort[2], this._prevViewPort[3]);
-
- return this._fb.getTextureColor();
- }
- }
- }
-
-
- export { ShaderTextureMath };