我正在尝试加速全屏纹理的绘制,该纹理会改变每一帧。在我的系统上,使用 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 http://www.libsdl.org/tmp/SDL-1.3.zip
Thanks!