Просмотр исходного кода

Buffer viewer should override texture filter settings; fixes filtered shadow maps and edge bleeding

rdb 9 лет назад
Родитель
Сommit
67998eaec2
1 измененных файлов с 12 добавлено и 3 удалено
  1. 12 3
      direct/src/showbase/BufferViewer.py

+ 12 - 3
direct/src/showbase/BufferViewer.py

@@ -278,6 +278,15 @@ class BufferViewer(DirectObject):
         self.analyzeTextureSet(self.exclude, exclude)
         self.analyzeTextureSet(self.exclude, exclude)
         self.analyzeTextureSet(self.include, include)
         self.analyzeTextureSet(self.include, include)
 
 
+        # Use a custom sampler when applying the textures.  This fixes
+        # wrap issues and prevents depth compare on shadow maps.
+        sampler = SamplerState()
+        sampler.setWrapU(SamplerState.WM_clamp)
+        sampler.setWrapV(SamplerState.WM_clamp)
+        sampler.setWrapW(SamplerState.WM_clamp)
+        sampler.setMinfilter(SamplerState.FT_linear)
+        sampler.setMagfilter(SamplerState.FT_nearest)
+
         # Generate a list of cards and the corresponding windows.
         # Generate a list of cards and the corresponding windows.
         cards = []
         cards = []
         wins = []
         wins = []
@@ -290,7 +299,7 @@ class BufferViewer(DirectObject):
                         for face in range(6):
                         for face in range(6):
                             self.cardmaker.setUvRangeCube(face)
                             self.cardmaker.setUvRangeCube(face)
                             card = NodePath(self.cardmaker.generate())
                             card = NodePath(self.cardmaker.generate())
-                            card.setTexture(tex)
+                            card.setTexture(tex, sampler)
                             cards.append(card)
                             cards.append(card)
                     elif (tex.getTextureType() == Texture.TT2dTextureArray):
                     elif (tex.getTextureType() == Texture.TT2dTextureArray):
                         for layer in range(tex.getZSize()):
                         for layer in range(tex.getZSize()):
@@ -301,11 +310,11 @@ class BufferViewer(DirectObject):
                             # the fixed-function pipeline, so we need to
                             # the fixed-function pipeline, so we need to
                             # enable the shader generator to view them.
                             # enable the shader generator to view them.
                             card.setShaderAuto()
                             card.setShaderAuto()
-                            card.setTexture(tex)
+                            card.setTexture(tex, sampler)
                             cards.append(card)
                             cards.append(card)
                     else:
                     else:
                         card = win.getTextureCard()
                         card = win.getTextureCard()
-                        card.setTexture(tex)
+                        card.setTexture(tex, sampler)
                         cards.append(card)
                         cards.append(card)
                     wins.append(win)
                     wins.append(win)
                     exclude[tex] = 1
                     exclude[tex] = 1