polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
106 lines (94 loc) • 3.75 kB
text/typescript
import {TypedNode} from '../_Base';
import {Texture} from 'three/src/textures/Texture';
import {NodeParamsConfig} from '../utils/params/ParamsConfig';
import {NodeContext} from '../../poly/NodeContext';
import {PolyScene} from '../../scene/PolyScene';
import {FlagsControllerBO} from '../utils/FlagsController';
import {DataTexture} from 'three/src/textures/DataTexture';
import {LuminanceFormat, HalfFloatType} from 'three/src/constants';
const INPUT_COP_NAME = 'input texture';
const DEFAULT_INPUT_NAMES = [INPUT_COP_NAME, INPUT_COP_NAME, INPUT_COP_NAME, INPUT_COP_NAME];
var size = 32;
var data = new Uint16Array(size);
for (var i = 0; i < size; i++) {
data[i] = 0x70e2; // Half float 10000
}
const EMPTY_DATA_TEXTURE = new DataTexture(data, size, 1, LuminanceFormat, HalfFloatType);
export class TypedCopNode<K extends NodeParamsConfig> extends TypedNode<NodeContext.COP, K> {
public readonly flags: FlagsControllerBO = new FlagsControllerBO(this);
// private _typed_array = new Uint8ClampedArray(512 * 512 * 4);
// protected _texture: Texture = new DataTexture(this._typed_array, 512, 512, RGBFormat);
// get texture() {
// return this._data_texture;
// }
static nodeContext(): NodeContext {
return NodeContext.COP;
}
static displayedInputNames(): string[] {
return DEFAULT_INPUT_NAMES;
}
constructor(scene: PolyScene) {
super(scene, 'BaseCopNode');
}
initializeBaseNode() {
// this.flags.add_bypass();
// this.flags.add_display();
// if (this.flags.display) {
// this.flags.display.set(false);
// }
this.io.outputs.set_has_one_output();
// this.container_controller.init(CONTAINER_CLASS);
}
set_texture(texture: Texture) {
// this._copy_texture(texture);
texture.name = this.fullPath();
this.setContainer(texture);
}
clear_texture() {
this.setContainer(EMPTY_DATA_TEXTURE);
}
// private _copy_texture(texture: Texture) {
// console.log('_copy_texture', texture);
// if (texture instanceof DataTexture) {
// this._data_texture.image = texture.image;
// } else {
// const canvas = document.createElement('canvas');
// // document.body.appendChild(canvas);
// const width = texture.image.width;
// const height = texture.image.height;
// canvas.width = width;
// canvas.height = height;
// const context = canvas.getContext('2d') as CanvasRenderingContext2D;
// context.drawImage(texture.image, 0, 0);
// const image_data = context.getImageData(0, 0, width, height);
// console.log(this._typed_array.length, image_data.data.length, image_data);
// this._data_texture.image = image_data;
// }
// this._data_texture.format = texture.format;
// // this._data_texture.mapping = texture.mapping;
// // this._data_texture.wrapS = texture.wrapS;
// // this._data_texture.wrapT = texture.wrapT;
// // this._data_texture.minFilter = texture.minFilter;
// // this._data_texture.magFilter = texture.magFilter;
// this._data_texture.needsUpdate = true;
// console.log('updated data tex', this._data_texture);
// // if (!this._texture || this._texture.uuid != texture.uuid) {
// // if (!this._texture) {
// // console.log('assign');
// // this._texture = texture.clone();
// // // this._texture.name = this.fullPath();
// // } else {
// // console.log('copy');
// // const keys = Object.keys(texture) as Array<keyof Texture>;
// // const protected_keys = ['uuid', 'name', 'node'];
// // for (let key of keys) {
// // if (!protected_keys.includes(key)) {
// // this._texture[key] = texture[key] as never; // but why is 'never' needed?!
// // }
// // }
// // }
// // }
// }
}
export type BaseCopNodeType = TypedCopNode<any>;
export class BaseCopNodeClass extends TypedCopNode<any> {}