@lightningjs/renderer
Version:
Lightning 3 Renderer
136 lines • 5.21 kB
JavaScript
/*
* If not stated otherwise in this file or this component's LICENSE file the
* following copyright and licenses apply:
*
* Copyright 2023 Comcast Cable Communications Management, LLC.
*
* Licensed under the Apache License, Version 2.0 (the License);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export const colorToFloat32Array = (argb) => {
const col = getRgbaComponentsNormalized(argb);
/* eslint-disable @typescript-eslint/no-non-null-assertion -- getRgbaComponentsNormalized has a constant array size */
col[0] *= col[3];
col[1] *= col[3];
col[2] *= col[3];
/* eslint-enable */
return col;
};
const getRgbaComponentsNormalized = (argb) => {
const r = ((argb / 65536) | 0) % 256;
const g = ((argb / 256) | 0) % 256;
const b = argb % 256;
const a = (argb / 16777216) | 0;
return [r / 255, g / 255, b / 255, a / 255];
};
export const updateShaderEffectColor = (values) => {
if (values.programValue === undefined) {
values.programValue = new Float32Array(4);
}
const rgba = values.value;
const floatArray = values.programValue;
floatArray[0] = (rgba >>> 24) / 255;
floatArray[1] = ((rgba >>> 16) & 0xff) / 255;
floatArray[2] = ((rgba >>> 8) & 0xff) / 255;
floatArray[3] = (rgba & 0xff) / 255;
};
export const updateFloat32ArrayLength2 = (values) => {
const validatedValue = (values.validatedValue || values.value);
if (values.programValue instanceof Float32Array) {
const floatArray = values.programValue;
floatArray[0] = validatedValue[0];
floatArray[1] = validatedValue[1];
}
else {
values.programValue = new Float32Array(validatedValue);
}
};
export const updateFloat32ArrayLength4 = (values) => {
const validatedValue = (values.validatedValue || values.value);
if (values.programValue instanceof Float32Array) {
const floatArray = values.programValue;
floatArray[0] = validatedValue[0];
floatArray[1] = validatedValue[1];
floatArray[2] = validatedValue[2];
floatArray[3] = validatedValue[3];
}
else {
values.programValue = new Float32Array(validatedValue);
}
};
export const updateFloat32ArrayLengthN = (values) => {
const validatedValue = (values.validatedValue || values.value);
if (values.programValue instanceof Float32Array) {
const len = validatedValue.length;
const programValue = values.programValue;
for (let i = 0; i < len; i++) {
programValue[i] = validatedValue[i];
}
}
else {
values.programValue = new Float32Array(validatedValue);
}
};
export const validateArrayLength4 = (value) => {
const isArray = Array.isArray(value);
if (!isArray) {
return [value, value, value, value];
}
else if (isArray && value.length === 4) {
return value;
}
else if (isArray && value.length === 2) {
return [value[0], value[1], value[0], value[1]];
}
else if (isArray && value.length === 3) {
return [value[0], value[1], value[2], value[0]];
}
return [value[0], value[0], value[0], value[0]];
};
export const updateWebSafeRadius = (values, shaderProps) => {
if (values.programValue === undefined) {
values.programValue = new Float32Array(4);
}
const programValue = values.programValue;
const validatedValue = (values.validatedValue || values.value);
if (shaderProps === undefined && values.$dimensions === undefined) {
programValue[0] = validatedValue[0];
programValue[1] = validatedValue[1];
programValue[2] = validatedValue[2];
programValue[3] = validatedValue[3];
return;
}
let storedDimensions = values.$dimensions;
if (shaderProps !== undefined) {
const { $dimensions } = shaderProps;
if (storedDimensions !== undefined &&
(storedDimensions.width === $dimensions.width ||
storedDimensions.height === $dimensions.height)) {
return;
}
if (storedDimensions === undefined) {
storedDimensions = {
width: $dimensions?.width,
height: $dimensions?.height,
};
values.$dimensions = storedDimensions;
}
}
const { width, height } = storedDimensions;
const [r0, r1, r2, r3] = validatedValue;
const factor = Math.min(Math.min(Math.min(width / Math.max(width, r0 + r1), width / Math.max(width, r2 + r3)), Math.min(height / Math.max(height, r0 + r2), height / Math.max(height, r1 + r3))), 1);
programValue[0] = r0 * factor;
programValue[1] = r1 * factor;
programValue[2] = r2 * factor;
programValue[3] = r3 * factor;
};
//# sourceMappingURL=EffectUtils.js.map