6.0 KiB
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)
LPDIRECT3D8→LPDIRECT3D9(8 references)LPDIRECT3DDEVICE8→LPDIRECT3DDEVICE9(929 references)IDirect3DTexture8→IDirect3DTexture9IDirect3DSurface8→IDirect3DSurface9IDirect3DVertexBuffer8→IDirect3DVertexBuffer9IDirect3DIndexBuffer8→IDirect3DIndexBuffer9IDirect3DCubeTexture8→IDirect3DCubeTexture9IDirect3DVolumeTexture8→IDirect3DVolumeTexture9
Structures
D3DCAPS8→D3DCAPS9D3DADAPTER_IDENTIFIER8→D3DADAPTER_IDENTIFIER9
API Functions
Direct3DCreate8()→Direct3DCreate9()
Project Files
- All .vcxproj files: Library links updated
- All .vcproj files: Library links updated
d3d8.lib→d3d9.libd3dx8.lib→d3dx9.libd3dx8dt.lib→d3dx9d.libdxerr8.lib→dxerr.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_EDGEANTIALIAS→D3DRS_ANTIALIASEDLINEENABLED3DRS_VERTEXBLENDvalue:FALSE→D3DVBF_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
-
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.
-
Engine Rendering (Zalla3D Scene Class): ✅
- Z3DRenderable.h/cpp
- Z3DTexture.h/cpp
- Z3DGeneralChrModel.h/cpp
- NMesh.h/cpp
- OctreeScene.h/cpp
- WaterW.h/cpp
- etc.
-
Effect System: ✅
- CGemRender.h/cpp
- EffMeshloader.h/cpp
- SMRHeader.h/cpp
- etc.
-
Client UI: ✅
- Sprite.h
- RYLSpriteEX.h
- GUITextEdit.h
- GUITooltip.h
- etc.
-
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
- Shader Code: Check vertex/pixel shader versions
- Texture Formats: Some formats might behave differently
- Present Parameters: Verify all D3DPRESENT_PARAMETERS fields
- Lock Flags:
D3DLOCK_NOSYSLOCKwas removed in DX9 - Query System: New query interfaces in DX9
Next Steps
Phase 2: Build & Fix Compilation Errors
- ⏳ Set up DX9 SDK paths
- ⏳ Attempt build
- ⏳ Fix compilation errors
- ⏳ Fix linker errors
Phase 3: Runtime Testing
- ⏳ Test device creation
- ⏳ Test texture loading
- ⏳ Test rendering pipeline
- ⏳ Test UI rendering
- ⏳ Test effects system
- ⏳ Full game test
Phase 4: Performance & Optimization
- ⏳ Performance profiling
- ⏳ Compare with DX8 baseline
- ⏳ Optimize if needed
- ⏳ Visual verification
Phase 5: Documentation & Merge
- ⏳ Update build documentation
- ⏳ Update deployment guide
- ⏳ Code review
- ⏳ 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
-
StateBlock Management:
- DX8 used DWORD handles
- DX9 uses COM interface pointers
-
Sampler States:
- DX8: Part of texture stage states
- DX9: Separate sampler states
-
Render States:
- Some renamed or value changes
D3DRS_EDGEANTIALIAS→D3DRS_ANTIALIASEDLINEENABLE
-
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
- DirectX 9 SDK Documentation
- DX8 to DX9 Migration Guide
- Migration Plan:
DX8_TO_DX9_MIGRATION_PLAN.md