我实际上正在使用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
传递纹理有什么区别?
使用带有多个采样器的着色器时,有没有办法提高性能? (我的纹理太大,无法将它们全部放在一个纹理中)。
非常感谢!
答案 0 :(得分:0)
“(我的纹理太大了,无法将它们全部放在一个纹理中)”
我说你找到了问题所在。巨大的纹理。
我可能会建议使用像http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html中的uvDetective这样的着色器来确定纹理真正需要的大小。我怀疑你把所有可能的旋钮都变成了11.不要这样做。这是一场比赛。