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

窗体代码:

  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;

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

  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

简单封装 Delphi 的 DirectX类的更多相关文章

  1. DBUtils-对JDBC简单封装的开源工具类库

    DBUtils 是对JDBC简单封装的开源工具类 详细介绍地址:  https://baike.baidu.com/item/Dbutils/10655914?fr=aladdin 在使用DBUtil ...

  2. .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类

    引言 由公司需要使用dapper  同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions  并配套 生成实体类小工具的方 ...

  3. swift开发之--简单封装Alamofire请求类以及简单使用SnapKit

    以前在swift3的时候,写过类似的,那个时候还没有很成熟的网络请求类库,在这里,还是衷心感谢大神们的付出! 具体效果如下,先上图: 点击按钮的时候,请求数据,数据结构如下: { ; reason = ...

  4. web自动化框架—BasePage 类的简单封装

    优秀的框架都有属于自己的思想,在搭建web自动化测试框架时,我们通常都遵循 PO(Page Object)思想. 简单理解就是我们会把每个页面看成一个对象,一切皆对象,面向对象编码,这样会让我们更好的 ...

  5. 关于Spring-JDBC测试类的简单封装

    关于Spring-JDBC测试类的简单封装 1.简单封装 /** * Created with IntelliJ IDEA. * * @Author: Suhai * @Date: 2022/04/0 ...

  6. 转:学习笔记: Delphi之线程类TThread

    学习笔记: Delphi之线程类TThread - 5207 - 博客园http://www.cnblogs.com/5207/p/4426074.html 新的公司接手的第一份工作就是一个多线程计算 ...

  7. 学习笔记: Delphi之线程类TThread

    新的公司接手的第一份工作就是一个多线程计算的小系统.也幸亏最近对线程有了一些学习,这次一接手就起到了作用.但是在实际的开发过程中还是发现了许多的问题,比如挂起与终止的概念都没有弄明白,导致浪费许多的时 ...

  8. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  9. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...

随机推荐

  1. Java数组课后习题

    package javafirst; import java.util.Arrays; class Show{ public void showArray(int[] arr){ for(int i ...

  2. sql server中的TimeStamp时间戳与UniqueIdentifier数据类型

    TimeStamp SQL Server timestamp 数据类型与时间和日期无关.SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序.实现 timest ...

  3. hadoop 3.x 回收站

    使用回收站最主要是为了给误删文件的你留条后路 打开core-site.xml添加以下配置 <!--回收站保存文件时间--> <property> <name>fs. ...

  4. rac下一个/tmp/bootstrap权限问题

    原创作品,离 "深蓝blog" 博客,欢迎转载,请务必注明转载如下源,否则追究其版权责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/ar ...

  5. Dll注入技术之消息钩子

    转自:黑客反病毒 DLL注入技术之消息钩子注入 消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个 ...

  6. 收集 天创恒达高清采集卡TC-5A0N7

    版权声明:本文博客琅邪工作室原创文章,博客,未经同意不得转载.

  7. leetcode先刷_Valid Sudoku

    我没有看到这个问题,这使其在现货需求数独,害怕一直没敢做.后来我发现原来的标题就是这么简单.推断现在只有数字全不符合的就可以了棋盘上的形势的要求. 是不是正确的三个周期..人是不能满意地看到每一行.每 ...

  8. 【33.33%】【codeforces 681D】Gifts by the List

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. docker入门2:基础操作(1)

    -- 列出所有的容器 docker ps -a  (没有-a就是只列出启动的) -- 开启/关闭/移除容器 docker start|stop|rm CONTAINER_ID|CONTAINER_NA ...

  10. WPF动态创建Image的显示问题

    原文:WPF动态创建Image的显示问题 最近学习WPF,看到一篇教程讲解如何动态创建Image控件,自己练手时候无论如何也显示不出图片.刚开始以为是图片的路径有问题,可后来将图片的路径设为相对路径或 ...