Qt_DX
#ifndef MY_FRAME__HH__
#define MY_FRAME__HH__
#include <QtGui/QWidget> struct IDirect3D9;
struct IDirect3DDevice9; class QD3DWidget : public QWidget
{
Q_OBJECT public:
QD3DWidget( QWidget* pParent = NULL); ~QD3DWidget(); QSizePolicy sizePolicy() const { return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); }
QPaintEngine *paintEngine() const { return NULL; } protected:
void Setup(); void Close(); void paintEvent( QPaintEvent* pEvent); private:
IDirect3D9* mD3D;
IDirect3DDevice9* mDevice;
};
#endif
#include <QMessageBox>
#define WIN32_LEAN_AND_MEAN
#include <d3d9.h>
#include <d3dx9.h>
#include "MyFrame.h"
#pragma comment(lib, "d3dx9d.lib")
#pragma comment(lib, "d3d9.lib")
QD3DWidget::QD3DWidget( QWidget* pParent)
: QWidget( pParent)
{ mD3D = NULL;
mDevice = NULL; setMinimumSize( , );
setAttribute( Qt::WA_OpaquePaintEvent, true);
setAttribute( Qt::WA_PaintOnScreen, true); Setup();
} QD3DWidget::~QD3DWidget()
{
Close();
} void QD3DWidget::Setup()
{
HWND windowHandle = winId(); mD3D = Direct3DCreate9( D3D_SDK_VERSION);
if( NULL == mD3D)
QMessageBox::critical(this,
"ERROR",
"Failed to create D3D object",
QMessageBox::Ok); D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = windowHandle; HRESULT hr = mD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
windowHandle,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&mDevice); if( FAILED( hr))
QMessageBox::critical(this,
"ERROR",
"Failed to create D3D device",
QMessageBox::Ok);
} void QD3DWidget::Close()
{
if( mDevice)
mDevice->Release();
if( mD3D)
mD3D->Release();
} void QD3DWidget::paintEvent( QPaintEvent* pEvent)
{
HRESULT hr = mDevice->Clear(, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(, , ), 1.0f, );
if( FAILED( hr))
QMessageBox::critical(this,
"ERROR",
"Failed to clear backbuffer.",
QMessageBox::Ok); mDevice->BeginScene(); mDevice->EndScene(); hr = mDevice->Present(NULL, NULL, NULL, NULL);
if( FAILED( hr))
QMessageBox::critical(this,
"ERROR",
"Failed to Present().",
QMessageBox::Ok); update();
}
Qt_DX的更多相关文章
随机推荐
- C#:继承多态的方法实现数的简单加减乘除运算
// 定义一个抽象的父类 abstract class Figure { //声明抽象方法: //父类中的所有家里人可以用的方法必须都应用到子类中 ...
- webpack + vue最佳实践
webpack + vue最佳实践 我的原文地址:http://www.xiaoniuzai.cn/2016/10/04/webpack%20+%20vue%E6%9C%80%E4%BD%B3%E5% ...
- BIEE应用存储过程并从前台传参
1. RPD操作 1.1修改连接池属性 在连接脚本添加SQL,这里选择在查询前执行 新建SQL脚本
- thinkphp5.0 自动加载
自动加载 概述 ThinkPHP5.0真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载. 自动加载的实现由think\Loader类库完成,自动加载规范符 ...
- 《HTML5权威指南》
<HTML5权威指南> HTML元素: html字符实体 html全局属性 html base标签 用元数据元素说明文档 标记文字(第八章) 标记文字.组织内容.文档分节 表格元素 表单元 ...
- hdu 3410 Passing the Message(单调队列)
题目链接:hdu 3410 Passing the Message 题意: 说那么多,其实就是对于每个a[i],让你找他的从左边(右边)开始找a[j]<a[i]并且a[j]=max(a[j])( ...
- Elasticsearch常用插件(三)
elasticsearch-head 一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es. 项目地址:https://github.co ...
- Egret 学习之 入口函数 及开始编写程序(三)
1,Egret的程序入口: C和java是以一个main函数作为入口,但egret类似于ActionScript 是以一个文档类作为入口,确切的说是以这个文档类的构造函数作为入口: 2,文档类的构造函 ...
- centos6.8安装superctl 后台管理工具
下载安装python yum install python-setuptools 从官网下载supervisor包 https://pypi.python.org/pypi/supervisor 解压 ...
- 动态Order by
),) set @order='' ' select * from T_Table order by then ID end desc, then CreateTime end desc