简单封装 Delphi 的 DirectX类

[delphi]view plaincopy

  1. var
  2. CreatorRenderer : TCreatorRenderer;
  3. Form1: TForm1;

窗体代码:

[delphi]view plaincopy

  1. {$R *.dfm}
  2. procedure TForm1.FormCreate(Sender: TObject);
  3. begin
  4. // 创建
  5. CreatorRenderer := TCreatorRenderer.Create();
  6. CreatorRenderer.CreateDevice(self.Handle,self.Width,Self.Height ,true);
  7. // 开启定时器
  8. Timer1.Enabled := True;
  9. end;
  10. procedure TForm1.FormDestroy(Sender: TObject);
  11. begin
  12. CreatorRenderer.Free;
  13. end;
  14. procedure TForm1.Timer1Timer(Sender: TObject);
  15. begin
  16. CreatorRenderer.BeginRender();
  17. CreatorRenderer.EndRender();
  18. end;

// 下面是封装的渲染器类

[delphi]view plaincopy

  1. // 渲染器类
  2. // warrially
  3. unit xCreatorRenderer;
  4. interface
  5. uses Direct3D9, D3DX9, Windows;
  6. type
  7. TCreatorRenderer = class(TObject)
  8. private
  9. // D3D基本参数
  10. m_d3dpp : D3DPRESENT_PARAMETERS;
  11. private class var
  12. m_pDevice : IDirect3DDevice9; //设备
  13. m_pSprite : ID3DXSprite; //精灵
  14. public
  15. constructor Create;
  16. destructor Destroy; override;
  17. public
  18. // 创建设备 (容器句柄, 宽, 高, 是否窗口化)
  19. function CreateDevice(hWnd:HWND ; nWidth : Integer ; nHeight : Integer ; bWindowed : Boolean):Boolean;
  20. // 开始渲染
  21. procedure BeginRender();
  22. // 结束渲染
  23. procedure EndRender();
  24. // 开始精灵渲染
  25. procedure BeginRenderSprite();
  26. // 结束精灵渲染
  27. procedure EndRenderSprite();
  28. // 获取设备指针
  29. class function GetDevice():IDirect3DDevice9;
  30. // 获取精灵指针
  31. class function GetSprite():ID3DXSprite;
  32. end;
  33. implementation
  34. { TCreatorRenderer }
  35. // 开始渲染
  36. procedure TCreatorRenderer.BeginRender;
  37. begin
  38. m_pDevice.Clear(0, nil, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER, 0, 1.0, 0);
  39. m_pDevice.BeginScene();
  40. end;
  41. procedure TCreatorRenderer.BeginRenderSprite;
  42. begin
  43. m_pSprite._Begin(D3DXSPRITE_ALPHABLEND);
  44. end;
  45. constructor TCreatorRenderer.Create;
  46. begin
  47. end;
  48. function TCreatorRenderer.CreateDevice(hWnd: HWND; nWidth, nHeight: Integer;
  49. bWindowed: Boolean): Boolean;
  50. var
  51. pD3d9 : IDirect3D9;
  52. myhResult : HResult ;
  53. begin
  54. pD3d9 := Direct3DCreate9(D3D_SDK_VERSION);
  55. if (pD3d9 = nil) then
  56. begin
  57. OutputDebugString('Direct3D create failed.');
  58. Result := False;
  59. Exit;
  60. end;
  61. m_d3dpp.BackBufferWidth := nWidth;
  62. m_d3dpp.BackBufferHeight := nHeight;
  63. m_d3dpp.BackBufferFormat := D3DFMT_A8R8G8B8;
  64. m_d3dpp.BackBufferCount := 1;
  65. m_d3dpp.MultiSampleType := D3DMULTISAMPLE_NONMASKABLE;
  66. m_d3dpp.MultiSampleQuality := 0;
  67. m_d3dpp.SwapEffect := D3DSWAPEFFECT_DISCARD;
  68. m_d3dpp.hDeviceWindow := hWnd;
  69. m_d3dpp.Windowed := bWindowed;
  70. m_d3dpp.EnableAutoDepthStencil := true;
  71. m_d3dpp.AutoDepthStencilFormat := D3DFMT_D24S8;
  72. m_d3dpp.Flags := 0;
  73. m_d3dpp.FullScreen_RefreshRateInHz := D3DPRESENT_RATE_DEFAULT;
  74. m_d3dpp.PresentationInterval := D3DPRESENT_INTERVAL_IMMEDIATE;
  75. myhResult := pD3d9.CreateDevice( D3DADAPTER_DEFAULT,
  76. D3DDEVTYPE_HAL,
  77. hWnd,
  78. D3DCREATE_HARDWARE_VERTEXPROCESSING,
  79. @m_d3dpp,
  80. m_pDevice);
  81. if (FAILED(myhResult)) then
  82. begin
  83. OutputDebugString('D3D device create failed.');
  84. Result := false;
  85. Exit;
  86. end;
  87. myhResult := D3DXCreateSprite(m_pDevice, m_pSprite);
  88. if (FAILED(myhResult)) then
  89. begin
  90. OutputDebugString('D3D sprite create failed.');
  91. Result := false;
  92. Exit;
  93. end;
  94. OutputDebugString('Renderer create succeed.');
  95. Result := True;
  96. end;
  97. destructor TCreatorRenderer.Destroy;
  98. begin
  99. inherited;
  100. end;
  101. procedure TCreatorRenderer.EndRender;
  102. begin
  103. m_pDevice.EndScene();
  104. m_pDevice.Present(nil, nil, 0, nil);
  105. end;
  106. procedure TCreatorRenderer.EndRenderSprite;
  107. begin
  108. m_pSprite._End();
  109. end;
  110. class function TCreatorRenderer.GetDevice: IDirect3DDevice9;
  111. begin
  112. Result := m_pDevice;
  113. end;
  114. class function TCreatorRenderer.GetSprite: ID3DXSprite;
  115. begin
  116. Result := m_pSprite;
  117. end;
  118. end.

http://blog.csdn.net/warrially/article/details/7938672