0

我实际上正在使用 C# 和 xna 制作一个小 3D 游戏。由于有些事情变得相当缓慢,我开始优化这些事情。

我有一个使用多个纹理/采样器的像素着色器:

texture MountainTexture;
texture GrassTexture;
texture IceTexture;
texture SandTexture;
sampler moutain = sampler_state {
   texture = (MountainTexture);
   MinFilter = Linear;
   MagFilter = Linear;
   MipFilter = Linear;
   AddressU = Wrap;
   AddressV = Wrap;
};
sampler ice = sampler_state {
   texture = (IceTexture);
   ...
};
sampler grass = sampler_state {
   texture = (GrassTexture);
   ...
};
sampler sand = sampler_state {
   texture = (SandTexture);
   ...
};

像素着色器函数对渲染的每个像素使用这些采样器中的一个或两个。我注意到,当我让着色器对每个像素只使用这些采样器中的一个时,帧速率提高了 ~ x2 因子。

所以我想知道: - 当我在同一个着色器中的多个采样器上使用 tex2D 时,GPU 到底是什么?为什么这么慢?Shader.Parameters["myTexture"].SetValue(myTexture)- 使用和传递纹理有什么区别GraphicsDevices.Texture[10] = myTexture

使用带有多个采样器的着色器时,有没有办法提高性能?(我的纹理太大,无法将它们全部放在一个纹理中)。

非常感谢 !

4

1 回答 1

0

“(我的纹理太大,无法将它们全部放在一个纹理中)”

我会说你发现了你的问题。巨大的纹理。

我是否可以建议使用某种着色器,例如http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html中的 uvDetective 来找出您的纹理真正需要的尺寸。我怀疑你把所有可能的旋钮都调到了 11。不要那样做。游戏而已。

于 2013-10-22T06:09:57.790 回答