我正在尝试加速绘制每帧都会变化的全屏纹理。在我的系统上,使用GDI和BitBlt()可以获得大约1000 FPS的性能,但是我认为使用Direct3D和动态纹理可以提高性能。然而,我只得到了大约250 FPS。
我正在使用带有当前驱动程序的ATI HD 4870的Mac Pro。
我已经尝试过使用动态纹理来获得小幅增益(约15 FPS),并且尝试使用纹理链来避免管道停顿,但对性能没有影响。
我已经搜索了很多资料,关于如何使用动态纹理这方面的信息非常少。
我是否忽略了一些基本内容?
设备设置:
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); ... 写入纹理数据 texture->UnlockRect(0); device->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertices, sizeof(*vertices)); ...
您可以从http://www.libsdl.org/tmp/SDL-1.3.zip获取正在进行的工作代码。
谢谢!