246 lines
6.0 KiB
Markdown
246 lines
6.0 KiB
Markdown
# 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` → `IDirect3DTexture9`
|
|
- `IDirect3DSurface8` → `IDirect3DSurface9`
|
|
- `IDirect3DVertexBuffer8` → `IDirect3DVertexBuffer9`
|
|
- `IDirect3DIndexBuffer8` → `IDirect3DIndexBuffer9`
|
|
- `IDirect3DCubeTexture8` → `IDirect3DCubeTexture9`
|
|
- `IDirect3DVolumeTexture8` → `IDirect3DVolumeTexture9`
|
|
|
|
#### Structures
|
|
- `D3DCAPS8` → `D3DCAPS9`
|
|
- `D3DADAPTER_IDENTIFIER8` → `D3DADAPTER_IDENTIFIER9`
|
|
|
|
#### API Functions
|
|
- `Direct3DCreate8()` → `Direct3DCreate9()`
|
|
|
|
#### Project Files
|
|
- **All .vcxproj files**: Library links updated
|
|
- **All .vcproj files**: Library links updated
|
|
- `d3d8.lib` → `d3d9.lib`
|
|
- `d3dx8.lib` → `d3dx9.lib`
|
|
- `d3dx8dt.lib` → `d3dx9d.lib`
|
|
- `dxerr8.lib` → `dxerr.lib`
|
|
|
|
### 2. Manual Fixes (✅ Complete)
|
|
|
|
#### d3dfont.h & d3dfont.cpp - Font System
|
|
**StateBlock API Changes**:
|
|
```cpp
|
|
// 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_ANTIALIASEDLINEENABLE`
|
|
- `D3DRS_VERTEXBLEND` value: `FALSE` → `D3DVBF_DISABLE`
|
|
|
|
**Sampler State Migration**:
|
|
```cpp
|
|
// 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:
|
|
```bash
|
|
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_EDGEANTIALIAS` → `D3DRS_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
|
|
|
|
- [DirectX 9 SDK Documentation](https://docs.microsoft.com/en-us/windows/win32/direct3d9)
|
|
- [DX8 to DX9 Migration Guide](https://docs.microsoft.com/en-us/windows/win32/direct3d9/converting-to-directx-9)
|
|
- Migration Plan: `DX8_TO_DX9_MIGRATION_PLAN.md`
|
|
|