使用hlsl着色器进行2D绘图是否值得

时间:2013-04-27 19:17:39

标签: xna 2d shader hlsl

我想知道使用着色器在xna中绘制2D纹理是否值得。我问,因为使用openGL,如果使用GLSL,速度会快得多。

1 个答案:

答案 0 :(得分:4)

使用着色器绘制现代GPU上的所有内容。

对于旧的立即样式渲染(即:glBegin / glVertex),它将被转换为在驱动程序中某处接近缓冲区和着色器的内容。这就是为什么使用GLSL“更快” - 因为它更接近金属,你不会通过转换层。

对于像XNA这样的现代API,所有内容都围绕“缓冲区和着色器”构建。


在XNA中,SpriteBatch提供了自己的着色器。着色器的源代码是available here。着色器本身非常简单:顶点着色器是单个矩阵乘法,用于将顶点转换为正确的栅格位置。像素着色器只是从精灵的纹理中采样。

使SpriteBatch的着色器速度更快,你真的无能为力 - 它几乎没有任何东西。在特定情况下,您可以采取一些措施使缓冲行为更快(例如:如果您的精灵在帧之间没有变化) - 但这有点先进。如果您遇到SpriteBatch的效果问题,请确保您是using it properly in the first place。尽管如此,SpriteBatch已经得到了极好的优化。

有关优化的详情,请参阅this answer


如果您想将自定义着色器传递到SpriteBatch(例如:为了产生特殊效果),请使用Begin的{​​{3}}重载并传入适当的Effect