77范文网 - 专业文章范例文档资料分享平台

设定Direct 3D应用程序中的DirectDraw(5)

来源:网络收集 时间:2019-03-28 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

//-------------------------------------------------------------------

class CD3DFramework7 { //程序框架类别的内部变量 HWND //窗口对象 BOOL

m_bIsFullscreen;

m_hWnd;

//全屏幕

BOOL

m_bIsStereo;

//立体检视模式 DWORD m_dwRenderWidth; //绘制目标物的尺寸

DWORD m_dwRenderHeight; //

RECT

m_rcScreenRect; //窗口的屏幕矩形区域

LPDIRECTDRAW7 m_pDD;

//DirectDraw物件 LPDIRECTDRAWSURFACE7 m_pddsFrontBuffer; //主绘图页 LPDIRECTDRAWSURFACE7 m_pddsBackBuffer;

//后缓冲区绘图

页 LPDIRECTDRAWSURFACE7 m_pddsBackBufferLeft; //立体模式使用 DWORD

m_dwDeviceMemType;

DDPIXELFORMAT

m_ddpfBackBufferPixelFormat;

//程序框架类别的内部函式

HRESULT CreateFullscreenBuffers(DDSURFACEDESC2*); HRESULT CreateWindowedBuffers(); HRESULT CreateDirectDraw(GUID*,DWORD);

HRESULT CreateEnvironment

(GUID*,GUID*,DDSURFACEDESC2*,DWORD); public: // DirectX物件的存取函式 LPDIRECTDRAW7 GetDirectDraw()

{return m_pDD;}

//

};

LPDIRECTDRAWSURFACE7 GetFrontBuffer() {return m_pddsFrontBuffer;}

LPDIRECTDRAWSURFACE7 GetBackBuffer() {return m_pddsBackBuffer;}

LPDIRECTDRAWSURFACE7 GetRenderSurface() {return m_pddsBackBuffer;}

LPDIRECTDRAWSURFACE7 GetRenderSurfaceLeft() {return m_pddsBackBufferLeft;} //绘制目标物的尺寸 DWORD DWORD

GetRenderWidth() GetRenderHeight()

{return m_dwRenderWidth;} {return m_dwRenderHeight;} //有助于绘制的函式

HRESULT RestoreSurfaces(); HRESULT ShowFrame();

HRESULT FlipToGDISurface(BOOL bDrawFrame =FALSE); //管理屏幕和检视端口范围的函式 BOOL BOOL VOID //建立程序框架

HRESULT Initialize(HWND hWnd,GUID*pDriverGUID, GUID*pDeviceGUID,DDSURFACEDESC2*pddsd, DWORD dwFlags);

HRESULT DestroyObjects();

CD3DFramework7(); ~CD3DFramework7();

IsFullscreen() IsStereo()

{return m_bIsFullscreen;} {return m_bIsStereo;}

Move(INT x,INT y);

在呼叫D3DEnum_EnumerateDevices和D3DEnum_SelectDefaultDevice后,

CD3DApplication::Create会呼叫CD3DApplication::Initialize3DEnvironment。这个成员函

式会初始化程序框架并且设定为全屏幕或窗口模式。 CD3DApplication::Initialize3DEnvironment函式的定义如下:

//-------------------------------------------------------------------

//名称:Initialize3DEnvironment //说明:将范例程序框架初始化,然后呼叫 // // // ---

HRESULT CD3DApplication::Initialize3DEnvironment() { {

m_pDD =m_pFramework->GetDirectDraw(); m_pD3D =m_pFramework->GetDirect3D(); m_pd3dDevice =m_pFramework->GetD3DDevice();

m_pddsRenderTarget =m_pFramework->GetRenderSurface(); m_pddsRenderTargetLeft =m_pFramework->GetRenderSurfaceLeftm_ddsdRenderTarget.dwSize =sizeof(m_ddsdRenderTarget); m_pddsRenderTarget->GetSurfaceDesc(&m_ddsdRenderTarget); //让程序执行其启始(startup)程序,以建立3D场景 //将Direct3D程序框架初始化

if(SUCCEEDED(hr =m_pFramework->Initialize(m_hWnd, &m_pDeviceInfo->ddsdFullscreenMode, dwFrameworkFlags))) HRESULT hr;

DWORD dwFrameworkFlags =0L; dwFrameworkFlags|= dwFrameworkFlags|= dwFrameworkFlags|=

(!m_pDeviceInfo->bWindowed ?D3DFW_FULLSCREEN :0L); (m_pDeviceInfo->bStereo ?D3DFW_STEREO :0L); (m_bAppUseZBuffer ?D3DFW_ZBUFFER :0L);

程序指定函式来初始化特定装置对象。 本程序架构中可以处理初始化过程中可能 发生的任何错误。

//----------------------------------------------------------------

m_pDeviceInfo->pDriverGUID, m_pDeviceInfo->pDeviceGUID,

();

}

if(SUCCEEDED(hr =InitDeviceObjects())) return S_OK; else { }

//假如您走到这,表示第一遍的初始化流程失败了。如果 //原先是用硬件装置的话,改试软件扫描装置再试一次。 //

if(m_pDeviceInfo->bHardware) { }

return hr;

//Try again with a software rasterizer. DisplayFrameworkError

D3DEnum_SelectDefaultDevice(&m_pDeviceInfo, D3DENUM_SOFTWAREONLY);

return Initialize3DEnvironment();

DeleteDeviceObjects(); }

m_pFramework->DestroyObjects();

(hr,MSGWARN_SWITCHEDTOSOFTWARE);

CD3DFramework7::Initialize成员函式会设定一些程序框架成员变量,并呼叫

CD3DFramework7::CreateEnvironment来建立游戏或应用程序所需的基本DirectX对象。

//-------------------------------------------------------------------

//名称:Initialize

//说明:建立程序框架的内部对象

//-------------------------------------------------------------------

HRESULT CD3DFramework7::Initialize(HWND hWnd,GUID*pDriverGUID, GUID*pDeviceGUID, DDSURFACEDESC2*pMode, DWORD dwFlags) {

HRESULT hr;

//检查参数。只有在窗口模式下,NULL模式才是有效的 if((NULL==hWnd)||(NULL==pDeviceGUID)||

}

(NULL==pMode &&(dwFlags&D3DFW_FULLSCREEN))) return E_INVALIDARG;

//建立窗口/全屏幕模式下的状态 m_hWnd =hWnd; m_bIsStereo =FALSE;

m_bIsFullscreen =(dwFlags &D3DFW_FULLSCREEN)?TRUE :FALSE; //提供立体模式检视(stereoscopic viewing)给能够 //支持的全屏幕模式

if((dwFlags &D3DFW_STEREO)&&(dwFlags

if(pMode->ddsCaps.dwCaps2

m_bIsStereo =TRUE;

&D3DFW_FULLSCREEN))

&DDSCAPS2_STEREOSURFACELEFT)

//建立D3D绘制环境 (绘图页、装置、检视端口等等)。

if(FAILED(hr =CreateEnvironment(pDriverGUID,pDeviceGUID, pMode,dwFlags))) { }

return S_OK;

DestroyObjects(); return hr;

CD3DFramework7::CreateEnvironment成员函式可以让您在程序框架中建立内部对象。它首先会选择您已挑定的显示内存型态。如果您是用HAL装置在执行,请选择视讯内存;否则的话,使用系统主存储器。视讯内存较快,但是如果系统上没有加速卡时您只得选择系统内存。

然后您可以呼叫程序来建立主要DirectDraw对象及全屏幕缓冲区(如果您在全屏幕模式)或是窗口缓冲区(如果您在窗口模式)。CreateEnvironment的完整版本也会建立Direct3D对象、Direct3D装置和深度缓冲区。

//-------------------------------------------------------------------

//名称:CreateEnvironment //说明:建立程序框架的内部对象

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库设定Direct 3D应用程序中的DirectDraw(5)在线全文阅读。

设定Direct 3D应用程序中的DirectDraw(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/554083.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: