@senspark/ee
Version:
utility library for cocos creator
71 lines (70 loc) • 3.63 kB
JavaScript
;
// 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;