UNPKG

@senspark/ee

Version:

utility library for cocos creator

71 lines (70 loc) 3.63 kB
"use strict"; // Example: // https://github.com/pandamicro/heartfelt/blob/master/assets/RainMaterial.js // https://github.com/pandamicro/heartfelt/blob/master/assets/RainShader.js var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); } return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var shader = { name: 'ee_hsv', defines: [], vert: "\nuniform mat4 viewProj;\n\nattribute vec3 a_position;\nattribute mediump vec2 a_uv0;\n// attribute lowp vec4 a_color;\n\nvarying mediump vec2 v_uv0;\n// varying lowp vec4 v_color;\n\nvoid main() {\n gl_Position = viewProj * vec4(a_position, 1);\n v_uv0 = a_uv0;\n // v_color = a_color;\n}\n", frag: "\nuniform sampler2D texture;\n\nvarying mediump vec2 v_uv0;\n// varying lowp vec4 v_color;\n\nuniform mat4 hsvMatrix;\nuniform vec4 customColor;\n\nvoid main() {\n vec4 pixelColor = texture2D(texture, v_uv0);\n\n // Store the original alpha.\n float alpha = pixelColor.w;\n\n // Reset alpha to 1.0.\n pixelColor.w = 1.0;\n\n vec4 fragColor = hsvMatrix * pixelColor;\n\n // Restore the original alpha.\n fragColor.w = alpha;\n gl_FragColor = fragColor; // * v_color;\n}\n" }; cc.game.once(cc.game.EVENT_ENGINE_INITED, function () { cc.log('register shader: %s', shader.name); var lib = cc.renderer._forward._programLib; if (lib._templates[shader.name] !== undefined) { delete lib._templates[shader.name]; } lib.define(shader.name, shader.vert, shader.frag, shader.defines); }); var gl = require("gl-matrix"); var renderEngine = cc.renderer.renderEngine; var renderer = renderEngine.renderer; var gfx = renderEngine.gfx; var HsvMaterial = /** @class */ (function (_super) { __extends(HsvMaterial, _super); function HsvMaterial() { var _this = _super.call(this, false) || this; var pass = new renderer.Pass('ee_hsv'); pass.setDepth(false, false); pass.setCullMode(gfx.CULL_NONE); pass.setBlend(gfx.BLEND_FUNC_ADD, gfx.BLEND_SRC_ALPHA, gfx.BLEND_ONE_MINUS_SRC_ALPHA, gfx.BLEND_FUNC_ADD, gfx.BLEND_SRC_ALPHA, gfx.BLEND_ONE_MINUS_SRC_ALPHA); var mainTech = new renderer.Technique(['transparent'], [ { name: 'texture', type: renderer.PARAM_TEXTURE_2D }, { name: 'hsvMatrix', type: renderer.PARAM_MAT4 }, ], [pass]); var effect = new renderer.Effect([mainTech], {}, []); _this._texture = null; _this._mainTech = mainTech; _this.effect = _this._effect = effect; // Set default hsv matrix. _this.setMatrix(gl.mat4.create()); return _this; } HsvMaterial.prototype.setTexture = function (texture) { if (this._texture === texture) { return; } this._texture = texture; this._effect.setProperty('texture', texture.getImpl()); this._texIds['texture'] = texture.getId(); }; HsvMaterial.prototype.setMatrix = function (matrix) { this._effect.setProperty('hsvMatrix', matrix); }; return HsvMaterial; }(renderEngine.Material)); exports.HsvMaterial = HsvMaterial;