textureDisplayManager.ts 2.4 KB

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