DeleteVertexShader dx8.1到dx9的转换



我目前正在尝试将游戏转换为使用dx9而不是dx8。我想说我离完成它很近了,但我有一些错误,我不知道如何处理atm。

  1. DeleteVertexShaderDeletePixelShader在directx 9中不再存在。我该怎么处理这些?到目前为止,我在dx9中找不到与它们等价的东西。旧代码示例:

D3D_CHECKERROR(hr); hr = _pGfx->gl_pd3dDevice->DeletePixelShader(ulHandle);

  1. 渲染状态D3DRS_PATCHSEGMENTS不再存在,它用于绘制面片时每条边的线段数。我需要用什么东西代替它吗?我也找不到类似的东西。代码示例:

    HRESULT hr = _pGfx->gl_pd3dDevice->SetRenderState( D3DRS_PATCHSEGMENTS, *((DWORD*)&fSegments));

这两个问题是我在atm方面遇到的最困难的问题,所以如果有任何帮助,我们将不胜感激。

提前感谢!

  1. 在Direct3D 9中,顶点着色器和像素着色器将COM接口返回到着色器对象。因此,只要IUnknown引用计数为0,它就会被删除。请参阅Microsoft文档:使用COM.编程DirectX

  2. "n-patch"one_answers"rect/tri-patch"功能从未得到广泛支持或使用。Direct3D 9确实支持这些使用高阶基本体的传统功能(Direct3D 9(,但前提是硬件报告通过D3DDEVCAPS_NPATCHES/D3DDEVCAPS_RTPATCHES支持。

您也可以看看传统D3DX9中的一些n批支持,但您可能只需要为现代卡重写此代码。

请参阅Microsoft文档:转换为Direct3D 9。

一定要阅读这篇博客文章。

最新更新