2013-04-27 65 views

回答

4

现代GPU上的所有东西都是使用着色器绘制的。

对于旧的直接渲染(即:glBegin/glVertex),这将转换为近似驱动程序中某处的缓冲区和着色器。这就是为什么使用GLSL“更快” - 因为它更接近金属,所以你没有经过转换层。

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


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

对于使SpriteBatch的着色器速度更快 - 你几乎没有什么可以做的。在特定情况下,您可以做一些事情来加快缓冲行为(例如:如果您的精灵在帧之间不发生变化) - 但这是一种先进的方式。如果您遇到SpriteBatch的性能问题,请确保您是using it properly in the first place。对于它的作用,SpriteBatch已经非常优化。

有关优化的更多信息,请参阅this answer


如果你想一个定制着色器传递到SpriteBatch(如:用于特殊效果)使用this超载Begin,并通过在适当的Effect