WebGPUUtils.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { LinearSRGBColorSpace, SRGBColorSpace, sRGBEncoding } from 'three';
  2. import { GPUPrimitiveTopology, GPUTextureFormat } from './constants.js';
  3. class WebGPUUtils {
  4. constructor( renderer ) {
  5. this.renderer = renderer;
  6. }
  7. getCurrentColorSpace() {
  8. const renderer = this.renderer;
  9. const renderTarget = renderer.getRenderTarget();
  10. if ( renderTarget !== null ) {
  11. return renderTarget.texture.encoding === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;
  12. }
  13. return renderer.outputColorSpace;
  14. }
  15. getCurrentColorFormat() {
  16. let format;
  17. const renderer = this.renderer;
  18. const renderTarget = renderer.getRenderTarget();
  19. if ( renderTarget !== null ) {
  20. const renderTargetProperties = renderer._properties.get( renderTarget );
  21. format = renderTargetProperties.colorTextureFormat;
  22. } else {
  23. format = GPUTextureFormat.BGRA8Unorm; // default context format
  24. }
  25. return format;
  26. }
  27. getCurrentDepthStencilFormat() {
  28. let format;
  29. const renderer = this.renderer;
  30. const renderTarget = renderer.getRenderTarget();
  31. if ( renderTarget !== null ) {
  32. const renderTargetProperties = renderer._properties.get( renderTarget );
  33. format = renderTargetProperties.depthTextureFormat;
  34. } else {
  35. format = GPUTextureFormat.Depth24PlusStencil8;
  36. }
  37. return format;
  38. }
  39. getPrimitiveTopology( object, material ) {
  40. if ( object.isPoints ) return GPUPrimitiveTopology.PointList;
  41. else if ( object.isLineSegments || ( object.isMesh && material.wireframe === true ) ) return GPUPrimitiveTopology.LineList;
  42. else if ( object.isLine ) return GPUPrimitiveTopology.LineStrip;
  43. else if ( object.isMesh ) return GPUPrimitiveTopology.TriangleList;
  44. }
  45. getSampleCount() {
  46. return this.renderer._parameters.sampleCount;
  47. }
  48. }
  49. export default WebGPUUtils;