我实际上正在使用 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
?
使用带有多个采样器的着色器时,有没有办法提高性能?(我的纹理太大,无法将它们全部放在一个纹理中)。
非常感谢 !