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. [GeekBand] 设计模式之观察者模式学习笔记

    本文参考文献::GeekBand课堂内容,授课老师:李建忠 :网络资料: http://blog.csdn.net/hguisu/article/details/7556625 本文仅作为自己的学习笔 ...

  2. METHODS OF AND APPARATUS FOR USING TEXTURES IN GRAPHICS PROCESSING SYSTEMS

    BACKGROUND The technology described herein relates to methods of and apparatus for using and handlin ...

  3. ASP.NET中二进制流生成图片

    public partial class SystemManage_ModulePicture : System.Web.UI.Page { protected void Page_Load(obje ...

  4. HDU1078 FatMouse and Cheese 【内存搜索】

    FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  5. java server wrapper 和 maven assembly 插件

    Java Service Wrapper工具YAJSW 简介信息 YAJSW是一个开源的Java服务包装(Java Service Wrapper)工具.YAJSW允许您把任何应用程序安装为windo ...

  6. negative binomial(Pascal) distribution —— 负二项式分布(帕斯卡分布)

    1. 定义 假设一串独立的伯努利实验(0-1,成功失败,伯努利实验),每次实验(trial)成功和失败的概率分别是 p 和 1−p.实验将会一直重复下去,直到实验失败了 r 次.定义全部实验中成功的次 ...

  7. [C/C++]_[VS2010使用源代码UTF8中国字符串转码ANSI问题]

    场景: 1.思想vs设置源文件UTF8编码,的代码串中国出现在它必须是utf8编码.不幸的是没有,假设源代码出现在中国字符串,在内存公交码ANSI编码. Unicode(UTF8) 代码页(65001 ...

  8. 假设做一个循环滚动UIScrollView

    先上效果图: 首先初始化: - (void)viewDidLoad { //加入最后一张图 用于循环 int length = 4; NSMutableArray *tempArray = [NSMu ...

  9. 编码(encode)问题

    1. UTF-8 与 GBK UTF-8: 允许含 BOM,但通常不含 BOM 用以解决国际上字符的一种多字节编码, 英文:8 bits(1 byte) 中文:24 bits(3 bytes) UTF ...

  10. 零元学Expression Design 4 - Chapter 6 教你如何在5分钟内做出文字立体感效果

    原文:零元学Expression Design 4 - Chapter 6 教你如何在5分钟内做出文字立体感效果 又来一篇五分钟做设计啦~ 本篇将教大家如何运用Design内建工具Blend Path ...