简单封装 Delphi 的 DirectX类
- var
- CreatorRenderer : TCreatorRenderer;
- Form1: TForm1;
窗体代码:
- {$R *.dfm}
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- // 创建
- CreatorRenderer := TCreatorRenderer.Create();
- CreatorRenderer.CreateDevice(self.Handle,self.Width,Self.Height ,true);
- // 开启定时器
- Timer1.Enabled := True;
- end;
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- CreatorRenderer.Free;
- end;
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- CreatorRenderer.BeginRender();
- CreatorRenderer.EndRender();
- end;
// 下面是封装的渲染器类
- // 渲染器类
- // warrially
- unit xCreatorRenderer;
- interface
- uses Direct3D9, D3DX9, Windows;
- type
- TCreatorRenderer = class(TObject)
- private
- // D3D基本参数
- m_d3dpp : D3DPRESENT_PARAMETERS;
- private class var
- m_pDevice : IDirect3DDevice9; //设备
- m_pSprite : ID3DXSprite; //精灵
- public
- constructor Create;
- destructor Destroy; override;
- public
- // 创建设备 (容器句柄, 宽, 高, 是否窗口化)
- function CreateDevice(hWnd:HWND ; nWidth : Integer ; nHeight : Integer ; bWindowed : Boolean):Boolean;
- // 开始渲染
- procedure BeginRender();
- // 结束渲染
- procedure EndRender();
- // 开始精灵渲染
- procedure BeginRenderSprite();
- // 结束精灵渲染
- procedure EndRenderSprite();
- // 获取设备指针
- class function GetDevice():IDirect3DDevice9;
- // 获取精灵指针
- class function GetSprite():ID3DXSprite;
- end;
- implementation
- { TCreatorRenderer }
- // 开始渲染
- procedure TCreatorRenderer.BeginRender;
- begin
- m_pDevice.Clear(0, nil, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER, 0, 1.0, 0);
- m_pDevice.BeginScene();
- end;
- procedure TCreatorRenderer.BeginRenderSprite;
- begin
- m_pSprite._Begin(D3DXSPRITE_ALPHABLEND);
- end;
- constructor TCreatorRenderer.Create;
- begin
- end;
- function TCreatorRenderer.CreateDevice(hWnd: HWND; nWidth, nHeight: Integer;
- bWindowed: Boolean): Boolean;
- var
- pD3d9 : IDirect3D9;
- myhResult : HResult ;
- begin
- pD3d9 := Direct3DCreate9(D3D_SDK_VERSION);
- if (pD3d9 = nil) then
- begin
- OutputDebugString('Direct3D create failed.');
- Result := False;
- Exit;
- end;
- m_d3dpp.BackBufferWidth := nWidth;
- m_d3dpp.BackBufferHeight := nHeight;
- m_d3dpp.BackBufferFormat := D3DFMT_A8R8G8B8;
- m_d3dpp.BackBufferCount := 1;
- m_d3dpp.MultiSampleType := D3DMULTISAMPLE_NONMASKABLE;
- m_d3dpp.MultiSampleQuality := 0;
- m_d3dpp.SwapEffect := D3DSWAPEFFECT_DISCARD;
- m_d3dpp.hDeviceWindow := hWnd;
- m_d3dpp.Windowed := bWindowed;
- m_d3dpp.EnableAutoDepthStencil := true;
- m_d3dpp.AutoDepthStencilFormat := D3DFMT_D24S8;
- m_d3dpp.Flags := 0;
- m_d3dpp.FullScreen_RefreshRateInHz := D3DPRESENT_RATE_DEFAULT;
- m_d3dpp.PresentationInterval := D3DPRESENT_INTERVAL_IMMEDIATE;
- myhResult := pD3d9.CreateDevice( D3DADAPTER_DEFAULT,
- D3DDEVTYPE_HAL,
- hWnd,
- D3DCREATE_HARDWARE_VERTEXPROCESSING,
- @m_d3dpp,
- m_pDevice);
- if (FAILED(myhResult)) then
- begin
- OutputDebugString('D3D device create failed.');
- Result := false;
- Exit;
- end;
- myhResult := D3DXCreateSprite(m_pDevice, m_pSprite);
- if (FAILED(myhResult)) then
- begin
- OutputDebugString('D3D sprite create failed.');
- Result := false;
- Exit;
- end;
- OutputDebugString('Renderer create succeed.');
- Result := True;
- end;
- destructor TCreatorRenderer.Destroy;
- begin
- inherited;
- end;
- procedure TCreatorRenderer.EndRender;
- begin
- m_pDevice.EndScene();
- m_pDevice.Present(nil, nil, 0, nil);
- end;
- procedure TCreatorRenderer.EndRenderSprite;
- begin
- m_pSprite._End();
- end;
- class function TCreatorRenderer.GetDevice: IDirect3DDevice9;
- begin
- Result := m_pDevice;
- end;
- class function TCreatorRenderer.GetSprite: ID3DXSprite;
- begin
- Result := m_pSprite;
- end;
- end.
http://blog.csdn.net/warrially/article/details/7938672
简单封装 Delphi 的 DirectX类的更多相关文章
- DBUtils-对JDBC简单封装的开源工具类库
DBUtils 是对JDBC简单封装的开源工具类 详细介绍地址: https://baike.baidu.com/item/Dbutils/10655914?fr=aladdin 在使用DBUtil ...
- .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类
引言 由公司需要使用dapper 同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions 并配套 生成实体类小工具的方 ...
- swift开发之--简单封装Alamofire请求类以及简单使用SnapKit
以前在swift3的时候,写过类似的,那个时候还没有很成熟的网络请求类库,在这里,还是衷心感谢大神们的付出! 具体效果如下,先上图: 点击按钮的时候,请求数据,数据结构如下: { ; reason = ...
- web自动化框架—BasePage 类的简单封装
优秀的框架都有属于自己的思想,在搭建web自动化测试框架时,我们通常都遵循 PO(Page Object)思想. 简单理解就是我们会把每个页面看成一个对象,一切皆对象,面向对象编码,这样会让我们更好的 ...
- 关于Spring-JDBC测试类的简单封装
关于Spring-JDBC测试类的简单封装 1.简单封装 /** * Created with IntelliJ IDEA. * * @Author: Suhai * @Date: 2022/04/0 ...
- 转:学习笔记: Delphi之线程类TThread
学习笔记: Delphi之线程类TThread - 5207 - 博客园http://www.cnblogs.com/5207/p/4426074.html 新的公司接手的第一份工作就是一个多线程计算 ...
- 学习笔记: Delphi之线程类TThread
新的公司接手的第一份工作就是一个多线程计算的小系统.也幸亏最近对线程有了一些学习,这次一接手就起到了作用.但是在实际的开发过程中还是发现了许多的问题,比如挂起与终止的概念都没有弄明白,导致浪费许多的时 ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
随机推荐
- 【BZOJ 1017】 [JSOI2008]魔兽地图DotR
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1017 [题意] [题解] 设f[i][j][k] 表示第i个节点以下的总花费为j, 然 ...
- fatal error: expat.h: No such file or directory
在CentOS7最小安装版下,编译安装apr-util时报错: fatal error: expat.h: No such file or directory 解决办法:yum install exp ...
- unix shell(壳)的简单实现
用户程序通过调用操作系统提供的系统调用(system call)API 来获得操作系统提供的各种服务.但使用 API 需要手动编写程序.对于不编程序.且需要与操作系统进行交互的用户,又如何使用操作系统 ...
- React Native细节记录
1.环境搭建部分 安装完node后建议设置npm镜像以加速后面的过程(或使用***工具).注意:不要使用cnpm!cnpm安装的模块路径比较奇怪,packager不能正常识别! npm config ...
- 浅谈java枚举类
一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...
- Scala & IntelliJ IDEA环境搭建升级版:在JAVA中调用Scala的helloworld
--------------------- 前言 --------------------- 项目关系,希望用Spark GraphX做数据分析及图像展示,但前提是得会spark:spark是基于sc ...
- 电讯“情趣me”为什么命途多舛?
古人有句话叫做战争"鼓作气,再而衰,三而竭",意思是打仗必须"一气呵成".才干发挥最大实力,取得最好的战绩.所谓商场如战场,经商也是如此,近期,中国电信 ...
- Exception: java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams
RelativeLayout title_bg = (RelativeLayout)FTU_Bluetooth.this.findViewById(R.id.titlebar); LinearLayo ...
- 2-2 Consul注册注销流程
铺垫,创建健康检查方法,Consul服务器隔一段时间请求一下webapi里的一个方法,如果这个方法没有问题,则证明这个webapi还在正常工作,这个webapi提供的服务就存在.如果方法没有返回,或者 ...
- caffe 的架构设计及其依赖包的解析
Caffe | Deep Learning Framework Web Classification Demos caffe(全称,Convolution Architecture For Featu ...