@awayjs/renderer
Version:
Renderer for AwayJS
57 lines (56 loc) • 3.26 kB
JavaScript
import { ShaderRegisterElement } from '@awayjs/stage';
/**
* ...
*/
var AnimationRegisterData = /** @class */ (function () {
function AnimationRegisterData() {
this.indexDictionary = new Object();
}
AnimationRegisterData.prototype.reset = function (registerCache, sharedRegisters, needVelocity) {
this.rotationRegisters = new Array();
this.positionAttribute = sharedRegisters.animatableAttributes[0];
this.scaleAndRotateTarget = sharedRegisters.animationTargetRegisters[0];
for (var i = 1; i < sharedRegisters.animationTargetRegisters.length; i++)
this.rotationRegisters.push(sharedRegisters.animationTargetRegisters[i]);
//allot const register
this.vertexZeroConst = registerCache.getFreeVertexConstant();
this.vertexZeroConst = new ShaderRegisterElement(this.vertexZeroConst.regName, this.vertexZeroConst.index, 0);
this.vertexOneConst = new ShaderRegisterElement(this.vertexZeroConst.regName, this.vertexZeroConst.index, 1);
this.vertexTwoConst = new ShaderRegisterElement(this.vertexZeroConst.regName, this.vertexZeroConst.index, 2);
//allot temp register
this.positionTarget = registerCache.getFreeVertexVectorTemp();
registerCache.addVertexTempUsages(this.positionTarget, 1);
this.positionTarget = new ShaderRegisterElement(this.positionTarget.regName, this.positionTarget.index);
if (needVelocity) {
this.velocityTarget = registerCache.getFreeVertexVectorTemp();
registerCache.addVertexTempUsages(this.velocityTarget, 1);
this.velocityTarget = new ShaderRegisterElement(this.velocityTarget.regName, this.velocityTarget.index);
this.vertexTime = new ShaderRegisterElement(this.velocityTarget.regName, this.velocityTarget.index, 3);
this.vertexLife = new ShaderRegisterElement(this.positionTarget.regName, this.positionTarget.index, 3);
}
else {
var tempTime = registerCache.getFreeVertexVectorTemp();
registerCache.addVertexTempUsages(tempTime, 1);
this.vertexTime = new ShaderRegisterElement(tempTime.regName, tempTime.index, 0);
this.vertexLife = new ShaderRegisterElement(tempTime.regName, tempTime.index, 1);
}
};
AnimationRegisterData.prototype.setUVSourceAndTarget = function (sharedRegisters) {
this.uvVar = sharedRegisters.animatedUV;
this.uvAttribute = sharedRegisters.uvInput;
//uv action is processed after normal actions,so use offsetTarget as uvTarget
this.uvTarget = new ShaderRegisterElement(this.positionTarget.regName, this.positionTarget.index);
};
AnimationRegisterData.prototype.setRegisterIndex = function (node, parameterIndex, registerIndex) {
//8 should be enough for any node.
var t = this.indexDictionary[node.id];
if (t == null)
t = this.indexDictionary[node.id] = new Array(8);
t[parameterIndex] = registerIndex;
};
AnimationRegisterData.prototype.getRegisterIndex = function (node, parameterIndex) {
return this.indexDictionary[node.id][parameterIndex];
};
return AnimationRegisterData;
}());
export { AnimationRegisterData };