这个问题是2D特定的。
我是一个不断更新的纹理,它是我的一个层的渲染目标。更新是整个纹理的重绘,通过绘制精灵和输出文本来执行。这个操作经常被执行,消耗了相当多的CPU,当然,我已经优化了重绘的次数来降低它。
有没有办法在Direct3D中缓冲这些操作?因为目前我必须重复构造一个sprite/text操作链。让我们假设任何执行世界更新的游戏-他们如何克服这种繁琐的工作?也许可以通过创建更多层来实现?
对我来说最好的办法就是创建一个可修改的绘制链对象,但我还没有在Direct3D中找到这样的东西。
发布于 2011-12-31 07:49:24
您可以研究以下几种常规方法:
至于实际的缓冲,驱动程序将在适当的时间和地点为您处理。状态块可以通过在单个调用中传递所有模式来影响缓冲(我忘记了它是好是坏,尽管我相信它们是有益的)。减少对以下各项的调用:
if (sprite.Visible && Active(sprite) && OnScreen(sprite))
{
states[sprite.Type]->Apply();
device->BindTexture(sprite.Texture);
device->SetVertexShaderF(sprite.PositionSize);
device->Draw(quad);
}很可能对CPU的使用有所帮助。
https://stackoverflow.com/questions/8685053
复制相似问题