desarija
desarija

Reputation: 1

DeleteVertexShader dx8.1 to dx9 conversion

i am currently trying to convert a game to use dx9 instead of dx8. I would say that i'm quite close to completing it, but I have a few errors that I don't exactly know how to deal with atm.

  1. DeleteVertexShader and DeletePixelShader do not exist anymore in directx 9. What do I do with those? I could not find any equivalent to them in dx9 so far. Old code example:

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

  1. Render state D3DRS_PATCHSEGMENTS does not exist anymore, it was used for the number of segments per edge when drawing patches. Do I need to replace it with something? I could not find any equivalent for this either. Code example:

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

These two issues are the ones I have the most struggles with atm, so any help would be appreciated.

Thanks in advance!

Upvotes: 0

Views: 380

Answers (1)

Chuck Walbourn
Chuck Walbourn

Reputation: 41057

  1. In Direct3D 9, vertex shader and pixel shaders return COM interfaces to the shader object. Therefore, it's deleted whenever the IUnknown reference count is 0. See Microsoft Docs: Programming DirectX with COM.

  2. The 'n-patch' and 'rect/tri-patch' features were never widely supported or used. Direct3D 9 does support these legacy features Using Higher-Order Primitives (Direct3D 9), but only if the hardware reports support via D3DDEVCAPS_NPATCHES / D3DDEVCAPS_RTPATCHES.

You can also take a look at some of the n-patch support in legacy D3DX9, but you probably just need to rewrite this code for modern cards.

See Microsoft Docs: Converting to Direct3D 9.

Be sure to read this blog post as well.

Upvotes: 1

Related Questions