简单封装 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 ...
随机推荐
- NOIP模拟 path - 按二进制位分组
题目原文: 企鹅豆豆即将要去考长跑了,但是作为一只企鹅,长跑自然比不过鸵鸟和鸡.为了公平起见,教练告诉豆豆,他可以从 K 个指定地点中选择两个不同的地点分别作为起点和终点来考试.考试地图是一个由 N ...
- python列表分页
列表分页 上章的结束,若在实际开发过程中,会发现一个问题,那就首页或关注分享,是一下子按时间顺序全部显示出来,这在实际项目中不可能出现的,想想实际中的产品是如何做的? 一般来说,无非是两种,一种是 ...
- 192M内存的VPS,安装Centos 6 minimal x86,无法安装node.js
尝试了各种方法,始终安装不了node.偶然一次,安装了64位的Centos 6 minimal,竟然可以安装Node官网给出的命令安装node了,一切顺利.
- 【心情】NOIP2014记忆
无意中又翻到这张表格. 现在看起来真的感慨万分. 如果当时把link多想想,也许就能拿满分了. 如果当时的bird看出来那个傻逼背包模型就好了. 如果equation当时我想到大质数取模就好了; 如果 ...
- 【34.40%】【codeforces 711D】Directed Roads
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- vue: 关于多路由公用模板,导致组件内数组缓存问题
当多个路由复用同一个模板,此时在这几个路由间切换,模板并不会重新挂载.针对这个情况,我们需要在当前逻辑内对路由做监听,在发生变化时更新对应属性,已满足需求. 但是,在实现的过程中会遇到如下情况: 如图 ...
- NFS Server搭建实践
NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统能够彼此分享个 ...
- [C++] 反编译器
各种开源的decompiler都不太好用,眼下最好的反编译器是IDA pro. 尽管是收费的,只是破解版非常好找. 我试过5.5版本号的,还不错. 我把windows notepad进行了反编译,多少 ...
- Bjarne Stroustrup语录2(一些C++使用注意点)
一.致读者 1. 在编程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体表示.让程序的结构尽可能地直接反映这些思想: ★.如果你能把“它”看成一个独立的概念,就把它做成一个类. ...
- Win10局域网内无法共享的解决方法分享(开启Server和ComputerBrowser服务,其它文章也不错)
局域网共享是办公环境下经常使用的,而有些用户反应在升级到win10系统后,网络总是无法共享,给用户带来了很大的困扰,如果你也遇上这样的情况,并通过一些方法无较后,不妨尝试下小编提供的方法. 如果在Wi ...