当前位置 : 主页 > 网络安全 > 测试自动化 >

纹理 – 如何改善Direct3D流纹理性能?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在尝试加速全屏纹理的绘制,这会改变每一帧.在我的系统上,我可以使用GDI和BitBlt()获得大约1000 FPS,但我认为我可以通过使用Direct3D和动态纹理来提高性能.相反,我只能获得250 FPS左右
我正在尝试加速全屏纹理的绘制,这会改变每一帧.在我的系统上,我可以使用GDI和BitBlt()获得大约1000 FPS,但我认为我可以通过使用Direct3D和动态纹理来提高性能.相反,我只能获得250 FPS左右.

我正在使用带有当前驱动程序的ATI HD 4870在Mac Pro上运行.

我尝试过使用动态纹理,这给了我一个小的增益(~15FPS),我尝试使用纹理链来避免管道停滞,这没有任何影响.

我已经看了很多,而且这种方式使用动态纹理的信息非常少.

我错过了什么基本的东西?

设备设置:

pparams.BackBufferCount = 1;
pparams.SwapEffect = D3DSWAPEFFECT_DISCARD;
pparams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

纹理创建:

device->CreateTexture(width, height, 1, D3DUSAGE_DYNAMIC,
                      D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture, NULL);

纹理更新:

texture->LockRect(0, &locked, NULL, D3DLOCK_DISCARD);
... write texture data
texture->UnlockRect(0);
device->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertices, sizeof(*vertices));
...

您可以从中获取正在进行的工作代码
http://www.libsdl.org/tmp/SDL-1.3.zip

谢谢!

如果您不需要回读纹理,则可以使用(D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY)标志创建纹理.
网友评论