• 简单封装 Delphi 的 DirectX类


    [delphi] view plain copy
     
    1. var  
    2.   CreatorRenderer  : TCreatorRenderer;  
    3.   Form1: TForm1;  

    窗体代码:

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


     

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

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

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

  • 相关阅读:
    树上问题
    Windows Server 2012 安装dll到GAC
    一妹子开车发现车不动,男友听完她电话崩溃了
    各浏览器对 window.open() 的窗口特征 sFeatures 参数支持程度存在差异
    FullCalendar日历插件说明文档
    Request url 各种属性值
    Your Job Is Not to Write Code
    Nice way for strip_tags a like
    sqlserver 三种恢复模式
    ASP.NET路由
  • 原文地址:https://www.cnblogs.com/findumars/p/6359760.html
Copyright © 2020-2023  润新知