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. NOIP模拟 string - ac自动机

    题目大意: 给n个字符串(100位以内),和一个长串s(100000位以内),求n个字符串在s中出现的次数.然后给出m次修改,每次修改s中的一个字符,对于每次修改,输出更新后的答案(修改会保存). 题 ...

  2. 【codeforces 777D】Cloud of Hashtags

    [题目链接]:http://codeforces.com/contest/777/problem/D [题意] 让你通过删除字符串的末尾字符的方式; 使得所给的字符串以字典序升序排序; 不能交换字符串 ...

  3. Sqlplus的一般操作

    Sqlplus一些必要操作指令 1, 登陆sys 用户,需要加上 as sysdba Connect sys as sysdba; Input your password; Connected; 2, ...

  4. CodeBlocks 配色方案设置

    最终效果(官方sublime修改版) 官方配色 codeblocks是一个功能很强大编程软件,我们在安装codeblocks后软件默认的是白底黑字界面,这种界面在长时间写代码时会对眼睛造成很大伤害,增 ...

  5. 【records】10.9-10.16

    .

  6. 跟我学CMD实战系列之二 ——数据压缩备份

    需求:每天下班时,将本地硬盘上的projects目录压缩为rar文件,文件名中必须含有当天日期信息,例如projects_20070902.rar. 分析:1. 压缩可以调用WinRAR的命令行版本r ...

  7. 微软 2018 年第一笔收购:文件存储公司 Avere Systems

    微软 2018 年第一笔收购:文件存储公司 Avere Systems 2018 年 1 月 4 日, 9:47 上午 · Picturepan2 微软今天宣布收购文件存储公司 Avere Syste ...

  8. sql 连接查询

    什么是连接查询呢 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据. 目的:实现多个表查询操作. 分类 首先划分一下,连接分为三种:内连接.外连接.交叉连接 内连接(INNER JOIN): ...

  9. 树莓派挂载移动硬盘开启samba

    本文参考 [https://blog.csdn.net/u010906068/article/details/38455363],原文部分步骤在我的树莓派上,可能是版本不同吧,进行了修改后部署成功 一 ...

  10. ADO.NET - 批量更新或添加数据

    方法一:使用SqlBulkCopy实现批量更新或添加数据. SqlBulkCopy类一般只能用来将数据批量插入打数据库中,如果数据表中设置了主键,出现重复数据的话会报错,如果没有设置主键,那么将会添加 ...