简单封装 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 ...
 
随机推荐
- [GeekBand] 设计模式之观察者模式学习笔记
			
本文参考文献::GeekBand课堂内容,授课老师:李建忠 :网络资料: http://blog.csdn.net/hguisu/article/details/7556625 本文仅作为自己的学习笔 ...
 - 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 ...
 - ASP.NET中二进制流生成图片
			
public partial class SystemManage_ModulePicture : System.Web.UI.Page { protected void Page_Load(obje ...
 - HDU1078 FatMouse and Cheese 【内存搜索】
			
FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
 - java server wrapper 和 maven assembly 插件
			
Java Service Wrapper工具YAJSW 简介信息 YAJSW是一个开源的Java服务包装(Java Service Wrapper)工具.YAJSW允许您把任何应用程序安装为windo ...
 - negative binomial(Pascal) distribution —— 负二项式分布(帕斯卡分布)
			
1. 定义 假设一串独立的伯努利实验(0-1,成功失败,伯努利实验),每次实验(trial)成功和失败的概率分别是 p 和 1−p.实验将会一直重复下去,直到实验失败了 r 次.定义全部实验中成功的次 ...
 - [C/C++]_[VS2010使用源代码UTF8中国字符串转码ANSI问题]
			
场景: 1.思想vs设置源文件UTF8编码,的代码串中国出现在它必须是utf8编码.不幸的是没有,假设源代码出现在中国字符串,在内存公交码ANSI编码. Unicode(UTF8) 代码页(65001 ...
 - 假设做一个循环滚动UIScrollView
			
先上效果图: 首先初始化: - (void)viewDidLoad { //加入最后一张图 用于循环 int length = 4; NSMutableArray *tempArray = [NSMu ...
 - 编码(encode)问题
			
1. UTF-8 与 GBK UTF-8: 允许含 BOM,但通常不含 BOM 用以解决国际上字符的一种多字节编码, 英文:8 bits(1 byte) 中文:24 bits(3 bytes) UTF ...
 - 零元学Expression Design 4 - Chapter 6 教你如何在5分钟内做出文字立体感效果
			
原文:零元学Expression Design 4 - Chapter 6 教你如何在5分钟内做出文字立体感效果 又来一篇五分钟做设计啦~ 本篇将教大家如何运用Design内建工具Blend Path ...