Sfoglia il codice sorgente

Fix sampler description when no mipmap filtering

Popov72 4 anni fa
parent
commit
0a7fdc2d93
1 ha cambiato i file con 13 aggiunte e 3 eliminazioni
  1. 13 3
      src/Engines/webgpuEngine.ts

+ 13 - 3
src/Engines/webgpuEngine.ts

@@ -1042,14 +1042,17 @@ export class WebGPUEngine extends Engine {
     private _getSamplerFilterDescriptor(internalTexture: InternalTexture): {
         magFilter: GPUFilterMode,
         minFilter: GPUFilterMode,
-        mipmapFilter: GPUFilterMode
+        mipmapFilter: GPUFilterMode,
+        lodMinClamp?: number,
+        lodMaxClamp?: number,
     } {
-        let magFilter: GPUFilterMode, minFilter: GPUFilterMode, mipmapFilter: GPUFilterMode;
+        let magFilter: GPUFilterMode, minFilter: GPUFilterMode, mipmapFilter: GPUFilterMode, lodMinClamp: number | undefined, lodMaxClamp: number | undefined;
         switch (internalTexture.samplingMode) {
             case Engine.TEXTURE_NEAREST_SAMPLINGMODE:
                 magFilter = WebGPUConstants.FilterMode.Nearest;
                 minFilter = WebGPUConstants.FilterMode.Nearest;
                 mipmapFilter = WebGPUConstants.FilterMode.Nearest;
+                lodMinClamp = lodMaxClamp = 0;
                 break;
             case Engine.TEXTURE_BILINEAR_SAMPLINGMODE:
                 magFilter = WebGPUConstants.FilterMode.Linear;
@@ -1093,11 +1096,13 @@ export class WebGPUEngine extends Engine {
                 magFilter = WebGPUConstants.FilterMode.Nearest;
                 minFilter = WebGPUConstants.FilterMode.Linear;
                 mipmapFilter = WebGPUConstants.FilterMode.Nearest;
+                lodMinClamp = lodMaxClamp = 0;
                 break;
             case Engine.TEXTURE_NEAREST_NEAREST:
                 magFilter = WebGPUConstants.FilterMode.Nearest;
                 minFilter = WebGPUConstants.FilterMode.Nearest;
                 mipmapFilter = WebGPUConstants.FilterMode.Nearest;
+                lodMinClamp = lodMaxClamp = 0;
                 break;
             case Engine.TEXTURE_LINEAR_NEAREST_MIPNEAREST:
                 magFilter = WebGPUConstants.FilterMode.Linear;
@@ -1113,11 +1118,13 @@ export class WebGPUEngine extends Engine {
                 magFilter = WebGPUConstants.FilterMode.Linear;
                 minFilter = WebGPUConstants.FilterMode.Linear;
                 mipmapFilter = WebGPUConstants.FilterMode.Nearest;
+                lodMinClamp = lodMaxClamp = 0;
                 break;
             case Engine.TEXTURE_LINEAR_NEAREST:
                 magFilter = WebGPUConstants.FilterMode.Linear;
                 minFilter = WebGPUConstants.FilterMode.Nearest;
                 mipmapFilter = WebGPUConstants.FilterMode.Nearest;
+                lodMinClamp = lodMaxClamp = 0;
                 break;
             default:
                 magFilter = WebGPUConstants.FilterMode.Nearest;
@@ -1129,7 +1136,9 @@ export class WebGPUEngine extends Engine {
         return {
             magFilter,
             minFilter,
-            mipmapFilter
+            mipmapFilter,
+            lodMinClamp,
+            lodMaxClamp,
         };
     }
 
@@ -1363,6 +1372,7 @@ export class WebGPUEngine extends Engine {
             ...this._getSamplerFilterDescriptor(internalTexture),
             ...this._getSamplerWrappingDescriptor(internalTexture),
             compare: internalTexture._comparisonFunction ? this._getCompareFunction(internalTexture._comparisonFunction) : undefined,
+            // TODO WEBGPU maxAnisotropy: ??,
         };
     }