0

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

4

1 回答 1

4

现代 GPU 上的一切都是使用着色器绘制的。

对于旧的即时风格渲染(即:glBegin/ glVertex),它将被转换为近似于驱动程序中某处的缓冲区和着色器的东西。这就是为什么使用 GLSL “更快”的原因——因为它更接近金属,你不需要经过转换层。

对于像 XNA 这样的现代 API,一切都已经围绕“缓冲区和着色器”构建。


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

你真的不能做太多的事情来让SpriteBatch's 的着色器更快——它几乎没有任何作用。在特定情况下,您可以做一些事情来加快缓冲行为(例如:如果您的精灵在帧之间没有变化) - 但这是一种高级。如果您在使用 时遇到性能问题SpriteBatch,请确保首先正确使用它。对于它的作用,SpriteBatch已经进行了非常好的优化。

有关优化的更多信息,请参阅此答案


如果您想将自定义着色器传递给SpriteBatch(例如:用于特殊效果),请使用重载Begin并传入适当的Effect.

于 2013-04-28T07:58:18.920 回答