WebGPUUtils.js 1.6 KB

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