C# 具有多个纹理的像素着色器−;如何获得更好的性能?
我实际上在用C#和xna制作一个小3D游戏。由于一些事情变得相当缓慢,我开始优化这些事情 我有一个使用多个纹理/采样器的像素着色器:C# 具有多个纹理的像素着色器−;如何获得更好的性能?,c#,performance,xna,hlsl,C#,Performance,Xna,Hlsl,我实际上在用C#和xna制作一个小3D游戏。由于一些事情变得相当缓慢,我开始优化这些事情 我有一个使用多个纹理/采样器的像素着色器: texture MountainTexture; texture GrassTexture; texture IceTexture; texture SandTexture; sampler moutain = sampler_state { texture = (MountainTexture); MinFilter = Linear; Mag
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
之间有什么区别
在使用具有多个采样器的着色器时,是否有方法提高性能?(我的纹理太大,无法将它们全部放在一个纹理中)
多谢各位 (我的纹理太大,无法将它们全部放在一个纹理中)
我想说你发现了你的问题。巨大的纹理
我可以建议使用某种着色器,比如uvDetective from,以确定纹理真正需要的大小。我怀疑你把所有可能的旋钮都调到了11。不要那样做。这是一个游戏。在其他人用“”出现之前,我要做的是。我的场景以每秒30帧的速度运行,这真的很糟糕。我还没有把我想放的都放进去。所以我想我现在真的需要优化:)60->30fps听起来像是vsync开启了。你在关闭vsync的情况下试过了吗?(这当然不能解决问题,但可能会提供一个更有用的基准)我已经禁用了vsync。这确实是一个~x2因子。:)我认为这与耗时的状态更改有关,但我想了解它到底是如何工作的,以及何时发生状态更改。我搜索了很多,但没有找到任何有用的东西…你的纹理有mipmap吗?这通常会以相当好的因数加快采样速度。