问题是2D特定的。
我不断更新纹理,这是我的一个图层的渲染目标。更新是纹理的整个重绘,通过绘制精灵和输出文本来执行。操作频繁执行,消耗了大量的CPU,当然,我已经优化了重绘次数以保持不变。
有没有办法在Direct3D中缓冲这些操作?因为目前我必须重复构建一个sprite / text操作链。让我们假设任何游戏都在进行世界更新 - 他们如何克服这种繁琐的工作?也许通过创建更多图层?
对我来说最好的事情是创建一个可修改的绘制链对象,但我在Direct3D中找不到这样的东西。
答案 0 :(得分:1)
您可能会考虑一些常规方法:
就实际缓冲而言,驱动程序将在适当的时间和地点为您处理。状态块可以通过在一次调用中提供所有模式来实现缓冲(我忘记它是好还是坏,尽管我相信它们可能是有益的)。减少致电:
if (sprite.Visible && Active(sprite) && OnScreen(sprite))
{
states[sprite.Type]->Apply();
device->BindTexture(sprite.Texture);
device->SetVertexShaderF(sprite.PositionSize);
device->Draw(quad);
}
很可能有助于CPU使用。