161 lines
3.8 KiB
JavaScript
161 lines
3.8 KiB
JavaScript
'use strict';
|
|
|
|
"use strict";
|
|
const blendModeIds = {
|
|
normal: 0,
|
|
add: 1,
|
|
multiply: 2,
|
|
screen: 3,
|
|
overlay: 4,
|
|
erase: 5,
|
|
"normal-npm": 6,
|
|
"add-npm": 7,
|
|
"screen-npm": 8,
|
|
min: 9,
|
|
max: 10
|
|
};
|
|
const BLEND = 0;
|
|
const OFFSET = 1;
|
|
const CULLING = 2;
|
|
const DEPTH_TEST = 3;
|
|
const WINDING = 4;
|
|
const DEPTH_MASK = 5;
|
|
const _State = class _State {
|
|
constructor() {
|
|
this.data = 0;
|
|
this.blendMode = "normal";
|
|
this.polygonOffset = 0;
|
|
this.blend = true;
|
|
this.depthMask = true;
|
|
}
|
|
/**
|
|
* Activates blending of the computed fragment color values.
|
|
* @default true
|
|
*/
|
|
get blend() {
|
|
return !!(this.data & 1 << BLEND);
|
|
}
|
|
set blend(value) {
|
|
if (!!(this.data & 1 << BLEND) !== value) {
|
|
this.data ^= 1 << BLEND;
|
|
}
|
|
}
|
|
/**
|
|
* Activates adding an offset to depth values of polygon's fragments
|
|
* @default false
|
|
*/
|
|
get offsets() {
|
|
return !!(this.data & 1 << OFFSET);
|
|
}
|
|
set offsets(value) {
|
|
if (!!(this.data & 1 << OFFSET) !== value) {
|
|
this.data ^= 1 << OFFSET;
|
|
}
|
|
}
|
|
/** The culling settings for this state none - No culling back - Back face culling front - Front face culling */
|
|
set cullMode(value) {
|
|
if (value === "none") {
|
|
this.culling = false;
|
|
return;
|
|
}
|
|
this.culling = true;
|
|
this.clockwiseFrontFace = value === "front";
|
|
}
|
|
get cullMode() {
|
|
if (!this.culling) {
|
|
return "none";
|
|
}
|
|
return this.clockwiseFrontFace ? "front" : "back";
|
|
}
|
|
/**
|
|
* Activates culling of polygons.
|
|
* @default false
|
|
*/
|
|
get culling() {
|
|
return !!(this.data & 1 << CULLING);
|
|
}
|
|
set culling(value) {
|
|
if (!!(this.data & 1 << CULLING) !== value) {
|
|
this.data ^= 1 << CULLING;
|
|
}
|
|
}
|
|
/**
|
|
* Activates depth comparisons and updates to the depth buffer.
|
|
* @default false
|
|
*/
|
|
get depthTest() {
|
|
return !!(this.data & 1 << DEPTH_TEST);
|
|
}
|
|
set depthTest(value) {
|
|
if (!!(this.data & 1 << DEPTH_TEST) !== value) {
|
|
this.data ^= 1 << DEPTH_TEST;
|
|
}
|
|
}
|
|
/**
|
|
* Enables or disables writing to the depth buffer.
|
|
* @default true
|
|
*/
|
|
get depthMask() {
|
|
return !!(this.data & 1 << DEPTH_MASK);
|
|
}
|
|
set depthMask(value) {
|
|
if (!!(this.data & 1 << DEPTH_MASK) !== value) {
|
|
this.data ^= 1 << DEPTH_MASK;
|
|
}
|
|
}
|
|
/**
|
|
* Specifies whether or not front or back-facing polygons can be culled.
|
|
* @default false
|
|
*/
|
|
get clockwiseFrontFace() {
|
|
return !!(this.data & 1 << WINDING);
|
|
}
|
|
set clockwiseFrontFace(value) {
|
|
if (!!(this.data & 1 << WINDING) !== value) {
|
|
this.data ^= 1 << WINDING;
|
|
}
|
|
}
|
|
/**
|
|
* The blend mode to be applied when this state is set. Apply a value of `normal` to reset the blend mode.
|
|
* Setting this mode to anything other than NO_BLEND will automatically switch blending on.
|
|
* @default 'normal'
|
|
*/
|
|
get blendMode() {
|
|
return this._blendMode;
|
|
}
|
|
set blendMode(value) {
|
|
this.blend = value !== "none";
|
|
this._blendMode = value;
|
|
this._blendModeId = blendModeIds[value] || 0;
|
|
}
|
|
/**
|
|
* The polygon offset. Setting this property to anything other than 0 will automatically enable polygon offset fill.
|
|
* @default 0
|
|
*/
|
|
get polygonOffset() {
|
|
return this._polygonOffset;
|
|
}
|
|
set polygonOffset(value) {
|
|
this.offsets = !!value;
|
|
this._polygonOffset = value;
|
|
}
|
|
toString() {
|
|
return `[pixi.js/core:State blendMode=${this.blendMode} clockwiseFrontFace=${this.clockwiseFrontFace} culling=${this.culling} depthMask=${this.depthMask} polygonOffset=${this.polygonOffset}]`;
|
|
}
|
|
/**
|
|
* A quickly getting an instance of a State that is configured for 2d rendering.
|
|
* @returns a new State with values set for 2d rendering
|
|
*/
|
|
static for2d() {
|
|
const state = new _State();
|
|
state.depthTest = false;
|
|
state.blend = true;
|
|
return state;
|
|
}
|
|
};
|
|
_State.default2d = _State.for2d();
|
|
let State = _State;
|
|
|
|
exports.State = State;
|
|
//# sourceMappingURL=State.js.map
|