textureDisplayManager.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { IDisplayManager } from './displayManager';
  2. import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
  3. import { TextureBlock } from 'babylonjs/Materials/Node/Blocks/Dual/textureBlock';
  4. import { RefractionBlock } from 'babylonjs/Materials/Node/Blocks/PBR/refractionBlock';
  5. import { ReflectionTextureBlock } from 'babylonjs/Materials/Node/Blocks/Dual/reflectionTextureBlock';
  6. import { TextureLineComponent } from '../../sharedComponents/textureLineComponent';
  7. export class TextureDisplayManager implements IDisplayManager {
  8. private _previewCanvas: HTMLCanvasElement;
  9. private _previewImage: HTMLImageElement;
  10. public getHeaderClass(block: NodeMaterialBlock) {
  11. return "";
  12. }
  13. public shouldDisplayPortLabels(block: NodeMaterialBlock): boolean {
  14. return true;
  15. }
  16. public getHeaderText(block: NodeMaterialBlock): string {
  17. return block.name;
  18. }
  19. public getBackgroundColor(block: NodeMaterialBlock): string {
  20. return "#323232";
  21. }
  22. public updatePreviewContent(block: NodeMaterialBlock, contentArea: HTMLDivElement): void {
  23. const textureBlock = block as TextureBlock | ReflectionTextureBlock | RefractionBlock;
  24. if (!this._previewCanvas) {
  25. contentArea.classList.add("texture-block");
  26. if (block instanceof TextureBlock) {
  27. contentArea.classList.add("regular-texture-block");
  28. }
  29. this._previewCanvas = contentArea.ownerDocument!.createElement("canvas");
  30. this._previewImage = contentArea.ownerDocument!.createElement("img");
  31. contentArea.appendChild(this._previewImage);
  32. this._previewImage.classList.add("empty");
  33. }
  34. if (textureBlock.texture) {
  35. TextureLineComponent.UpdatePreview(this._previewCanvas, textureBlock.texture, 140, {
  36. face: 0,
  37. displayRed: true,
  38. displayAlpha: true,
  39. displayBlue: true,
  40. displayGreen: true
  41. }, () => {
  42. this._previewImage.src = this._previewCanvas.toDataURL("image/png");
  43. this._previewImage.classList.remove("empty");
  44. });
  45. } else {
  46. this._previewImage.classList.add("empty");
  47. }
  48. }
  49. }