Files
Client/DX9_CONVERSION_SUMMARY.md

6.0 KiB

DirectX 9 Conversion Summary

Conversion Status: Phase 1 Complete

Date: 2025-11-30

Branch: dx9

Commit: 97264e3


What Was Done

1. Automated Conversions ( Complete)

Header Files

  • Changed: #include <d3d8.h>#include <d3d9.h>
  • Changed: #include <d3dx8.h>#include <d3dx9.h>
  • Files affected: 64 header includes updated

Interface Types (1,002+ references)

  • LPDIRECT3D8LPDIRECT3D9 (8 references)
  • LPDIRECT3DDEVICE8LPDIRECT3DDEVICE9 (929 references)
  • IDirect3DTexture8IDirect3DTexture9
  • IDirect3DSurface8IDirect3DSurface9
  • IDirect3DVertexBuffer8IDirect3DVertexBuffer9
  • IDirect3DIndexBuffer8IDirect3DIndexBuffer9
  • IDirect3DCubeTexture8IDirect3DCubeTexture9
  • IDirect3DVolumeTexture8IDirect3DVolumeTexture9

Structures

  • D3DCAPS8D3DCAPS9
  • D3DADAPTER_IDENTIFIER8D3DADAPTER_IDENTIFIER9

API Functions

  • Direct3DCreate8()Direct3DCreate9()

Project Files

  • All .vcxproj files: Library links updated
  • All .vcproj files: Library links updated
  • d3d8.libd3d9.lib
  • d3dx8.libd3dx9.lib
  • d3dx8dt.libd3dx9d.lib
  • dxerr8.libdxerr.lib

2. Manual Fixes ( Complete)

d3dfont.h & d3dfont.cpp - Font System

StateBlock API Changes:

// Before (DX8)
DWORD m_dwSavedStateBlock;
DWORD m_dwDrawTextStateBlock;

m_pd3dDevice->BeginStateBlock();
// ... set states ...
m_pd3dDevice->EndStateBlock(&m_dwSavedStateBlock);
m_pd3dDevice->CaptureStateBlock(m_dwSavedStateBlock);
m_pd3dDevice->ApplyStateBlock(m_dwSavedStateBlock);
m_pd3dDevice->DeleteStateBlock(m_dwSavedStateBlock);

// After (DX9)
IDirect3DStateBlock9* m_pSavedStateBlock;
IDirect3DStateBlock9* m_pDrawTextStateBlock;

m_pd3dDevice->BeginStateBlock();
// ... set states ...
m_pd3dDevice->EndStateBlock(&m_pSavedStateBlock);
m_pSavedStateBlock->Capture();
m_pSavedStateBlock->Apply();
m_pSavedStateBlock->Release();

Render State Changes:

  • D3DRS_EDGEANTIALIASD3DRS_ANTIALIASEDLINEENABLE
  • D3DRS_VERTEXBLEND value: FALSED3DVBF_DISABLE

Sampler State Migration:

// Before (DX8)
SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_POINT);
SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_POINT);
SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTEXF_NONE);

// After (DX9)
SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE);

Statistics

  • Total files modified: 457 files
  • Insertions: 1,608 lines
  • Deletions: 1,260 lines
  • Net change: +348 lines

Affected Components

  1. Engine Core (Zalla3D Base Class):

    • BaseGraphicsLayer.h/cpp
    • RenderDevice.h/cpp
    • EnumD3D.h/cpp
    • Texture.h/cpp
    • NTexture.h/cpp
    • d3dfont.h/cpp
    • VertexBuffer.h/cpp
    • RenderTargetTexture.h/cpp
    • etc.
  2. Engine Rendering (Zalla3D Scene Class):

    • Z3DRenderable.h/cpp
    • Z3DTexture.h/cpp
    • Z3DGeneralChrModel.h/cpp
    • NMesh.h/cpp
    • OctreeScene.h/cpp
    • WaterW.h/cpp
    • etc.
  3. Effect System:

    • CGemRender.h/cpp
    • EffMeshloader.h/cpp
    • SMRHeader.h/cpp
    • etc.
  4. Client UI:

    • Sprite.h
    • RYLSpriteEX.h
    • GUITextEdit.h
    • GUITooltip.h
    • etc.
  5. Character Control:

    • CameraControl.h
    • CCameraScript.h
    • RYLObjectControl.h/cpp
    • etc.

Known Issues & Warnings

⚠️ Requires DX9 Runtime

The converted code requires DirectX 9 runtime to be installed:

  • DLLs needed: d3d9.dll, d3dx9_43.dll (or equivalent version)
  • Libraries needed: d3d9.lib, d3dx9.lib

⚠️ Not Yet Tested

  • Compilation: Not yet attempted
  • Runtime: Not yet tested
  • Rendering correctness: Not verified

🔍 Areas Needing Attention

  1. Shader Code: Check vertex/pixel shader versions
  2. Texture Formats: Some formats might behave differently
  3. Present Parameters: Verify all D3DPRESENT_PARAMETERS fields
  4. Lock Flags: D3DLOCK_NOSYSLOCK was removed in DX9
  5. Query System: New query interfaces in DX9

Next Steps

Phase 2: Build & Fix Compilation Errors

  1. Set up DX9 SDK paths
  2. Attempt build
  3. Fix compilation errors
  4. Fix linker errors

Phase 3: Runtime Testing

  1. Test device creation
  2. Test texture loading
  3. Test rendering pipeline
  4. Test UI rendering
  5. Test effects system
  6. Full game test

Phase 4: Performance & Optimization

  1. Performance profiling
  2. Compare with DX8 baseline
  3. Optimize if needed
  4. Visual verification

Phase 5: Documentation & Merge

  1. Update build documentation
  2. Update deployment guide
  3. Code review
  4. Merge to master

Rollback Plan

If issues are encountered:

git checkout master  # Return to DX8 version

The original DX8 code is preserved in the master branch.


Technical Notes

DX8 vs DX9 Key Differences Applied

  1. StateBlock Management:

    • DX8 used DWORD handles
    • DX9 uses COM interface pointers
  2. Sampler States:

    • DX8: Part of texture stage states
    • DX9: Separate sampler states
  3. Render States:

    • Some renamed or value changes
    • D3DRS_EDGEANTIALIASD3DRS_ANTIALIASEDLINEENABLE
  4. Shader Support:

    • DX8: Up to VS 1.1, PS 1.4
    • DX9: Up to VS 3.0, PS 3.0 (depending on hardware)

Files NOT Modified

  • /Client/Library/dxx8/* - DX8 SDK samples preserved as reference
  • Documentation files
  • Resource files
  • Build scripts

Credits

Conversion executed by: Claude AI (Anthropic) Date: November 30, 2025 Method: Automated sed scripts + manual StateBlock fixes Testing status: Pending


References