polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
75 lines (74 loc) • 2.31 kB
JavaScript
import {BaseSopOperation} from "./_Base";
import {InputCloneMode as InputCloneMode2} from "../../../engine/poly/InputCloneMode";
import {Poly as Poly2} from "../../../engine/Poly";
import {MAG_FILTER_DEFAULT_VALUE, MIN_FILTER_DEFAULT_VALUE} from "../../../core/cop/ConstantFilter";
export class TexturePropertiesSopOperation extends BaseSopOperation {
static type() {
return "textureProperties";
}
async cook(input_contents, params) {
const core_group = input_contents[0];
const objects = [];
for (let object of core_group.objects()) {
if (params.applyToChildren) {
object.traverse((child) => {
objects.push(child);
});
} else {
objects.push(object);
}
}
const promises = objects.map((object) => this._update_object(object, params));
await Promise.all(promises);
return core_group;
}
async _update_object(object, params) {
const material = object.material;
if (material) {
await this._update_material(material, params);
}
}
async _update_material(material, params) {
let texture = material.map;
if (texture) {
await this._update_texture(texture, params);
}
}
async _update_texture(texture, params) {
if (params.tanisotropy) {
await this._update_anisotropy(texture, params);
}
if (params.tminFilter || params.tmagFilter) {
this._update_filter(texture, params);
}
}
async _update_anisotropy(texture, params) {
if (params.useRendererMaxAnisotropy) {
const renderer = await Poly2.renderersController.firstRenderer();
if (renderer) {
texture.anisotropy = renderer.capabilities.getMaxAnisotropy();
}
} else {
texture.anisotropy = params.anisotropy;
}
}
_update_filter(texture, params) {
if (params.tminFilter) {
texture.minFilter = params.minFilter;
}
if (params.tmagFilter) {
texture.magFilter = params.magFilter;
}
}
}
TexturePropertiesSopOperation.DEFAULT_PARAMS = {
applyToChildren: false,
tanisotropy: false,
useRendererMaxAnisotropy: false,
anisotropy: 1,
tminFilter: false,
minFilter: MIN_FILTER_DEFAULT_VALUE,
tmagFilter: false,
magFilter: MAG_FILTER_DEFAULT_VALUE
};
TexturePropertiesSopOperation.INPUT_CLONED_STATE = InputCloneMode2.FROM_NODE;