WebGPUUtils.js 1.5 KB

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