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. CF337D Book of Evil - 树型dp

    传送门 题目大意: 一棵树上有一个特殊点,特殊点可以影响距离小于等于d的点,现在告诉被影响的点,问特殊点可以在几个点上. 题目分析: 对题意进行转化:求到被影响点的最大距离小于等于d的点数目. 然后就 ...

  2. iOS RunLoop了解和使用

    RunLoop介绍和使用 上次讲了runtime,这次是runloop,虽然两者都是run开头的名词术语,但是在OC中,这两个东西压根没啥联系.这篇文章主要讲讲runloop的一些概念和用法.其中包含 ...

  3. General-Purpose Operating System Protection Profile

    1 Protection Profile Introduction   This document defines the security functionality expected to be ...

  4. jquery.uploadify上传图片,点击保存按钮无法使用解决方法

    用Chrome浏览器上传商品图片时,保存按钮无法点击,如下图 原因:Flash插件状态为禁止 或 询问(默认) 解决方法:将Flash插件状态改为允许,如下图

  5. ADO.NET- 中批量添加数据的几种实现方法比较

    在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...

  6. 10g RAC 采用service达到taf

    service由于oracle数据库中的一个关键概念,利用得当,可以轻松地管理数据库,提高数据库的工作效率. 经service.oracle可以实现server side  taf,简单化client ...

  7. jQuery多库共存处理$.noConflict()

    如果我们需要同时使用jQuery和其他JavaScript库,我们可以使用 $.noConflict()把$的控制权交给其他库.旧引用的$ 被保存在jQuery的初始化; noConflict() 简 ...

  8. 利用WPF的ListView进行大数据量异步加载

    原文:利用WPF的ListView进行大数据量异步加载 由于之前利用Winform的ListView进行大数据量加载的时候,诟病良多,所以今天试着用WPF的ListView来做了一下,结果没有让我失望 ...

  9. VS2015静态编译libcurl(C++ curl封装类)

    一.最新libcurl静态编译教程(curl-7.51版/curl-7.52版) 1.安装perl,在官网下载,安装好以后,测试perl -v是否成功 2.编译openssl(已编译好的下载地址) p ...

  10. duilib拖动控制功能的实现(源代码)

    转载请注明原始出处.谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41144283 duilib库中原本没有显示的对控件添加拖拽的功能.而实 ...